
- •Исследование устройств ввода-вывода дискретных сигналов в микропроцессорных системах на базе миКроконтроллера dsPic33fj32mc204 Цель работы
- •Подготовка к выполнению работы
- •Вопросы для самоконтроля
- •Приборы, оборудование и документация
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Требования к знаниям и умениям учащихся
- •Методические указания
- •1 Краткие теоретические сведения
- •2 Схема электрическая принципиальная к лабораторной работе
- •3 Алгоритм и листинг программы к заданию №1
- •4 Алгоритм и листинг программы к заданию №2
- •Реализация временных функций в микропроцессорных системах на базе миКроконтроллера семейства dsPic33f Цель работы
- •6.3 С помощью пункта меню «Programmer Select Programmer» выбрать программатор piCkit2.
- •6.4 Запрограммировать мк стенда нтц-31.000 созданной программой, используя пункт меню «Programmer Program».
- •7.3 С помощью пункта меню «Programmer Select Programmer» выбрать программатор piCkit2.
- •7.4 Запрограммировать мк стенда нтц-31.000 созданной программой, используя пункт меню «Programmer Program».
- •Содержание отчета
- •Контрольные вопросы
- •Требования к знаниям и умениям учащихся
- •Методические указания
- •1 Краткие теоретические сведения
- •1.1 Реализация временных функций
- •1.2 Метод программных циклов
- •1.3 Использование таймера/счётчика
- •1.4 Схема электрическая принципиальная к лабораторной работе
- •1. 5 Листинг программы для создания проекта lr20_1
- •1.6 Листинг программы для создания проекта lr20_2
- •1.7 Листинг программы для создания проекта lr20_3
1.4 Схема электрическая принципиальная к лабораторной работе
Для ввода дискретной информации в микроконтроллер широко применяются различные переключатели, кнопки и клавиатуры, либо иные дискретные датчики.
Дискретными выходами микроконтроллер управляет различными исполнительными устройствами, работающими по принципу включено/выключено.
На рисунке 20.17 приведена схема электрическая принципиальная к лабораторной работе.
Рисунок 20.17 – Схема электрическая принципиальная
В схеме два дискретных датчика оформлены в виде двух переключателей SA1 и SA2, подключенных к выводам RA2 и RA3 микроконтроллера.
Два дискретных выхода оформлены в виде двух светодиодов VD1 и VD2, подключенных к выводам RB15 и RB13 микроконтроллера соответственно.
1. 5 Листинг программы для создания проекта lr20_1
#include <P33FJ32MC204.h>
#define FOSC 7370000
#define FCY (FOSC / 2) // Настройка частоты выполнения
// инструкций
_FOSCSEL(FNOSC_FRC) // Настройка работы микроконтроллера
// от внутреннего тактового генератора
void main()
{
TRISBbits.TRISB15 = 0; // Выход VD1 (RB15)
while (1)
{
__delay32(FCY); // Организация временной задержки
LATBbits.LATB15 = 1;
__delay32(FCY);
LATBbits.LATB15 = 0;
}
}
1.6 Листинг программы для создания проекта lr20_2
#include <P33FJ32MC204.h>
_FOSCSEL(FNOSC_FRC) // Настройка работы микроконтроллера
// от внутреннего тактового генератора
// Инициализация таймера T1
void Init_Timer1()
{
T1CON = 0; // Сброс таймера
IFS0bits.T1IF = 0; // Сброс флага прерывания таймера
IEC0bits.T1IE = 1; // Разрешение прерывания от таймера
TMR1 = 0x0000; // Обнуление текущего значения таймера
PR1 = 0x0E65; // Задание периода таймера
T1CONbits.TON = 1; // Разрешение работы таймера и его
// Запуск
}
int _ms = 0;
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt()
// Прерывание таймера T1 по совпадению
{
_ms++;
IFS0bits.T1IF = 0; // Сброс флага прерывания таймера
TMR1 = 0; // Перезапуск таймера
}
void main()
{
Init_Timer1();
TRISBbits.TRISB15 = 0; // Выход VD1 (RB15)
while (1)
{
if (_ms < 1000)
{
LATBbits.LATB15 = 0;
}
else if (_ms < 2000)
{
LATBbits.LATB15 = 1;
}
else
{
_ms = 0;
}
}
}
1.7 Листинг программы для создания проекта lr20_3
#include <p33fj32mc204.h>
#define FOSC 7370000
#define FCY (FOSC/2)
_FOSC(OSCIOFNC_ON & POSCMD_NONE)//Отключение дополнительной
// функции порта RA2 – выход
// тактирующего сигнала
// внутреннего генератора
_FOSCSEL(FNOSC_FRC) // Настройка работы от
// внутреннего тактового
// генератора
void __delay32(unsigned long cycles);
int main()
{
TRISBbits.TRISB15 = 0; // Выход VD1
TRISBbits.TRISB13 = 0; // Выход VD2
TRISAbits.TRISA2 = 1; // Вход SA1
TRISAbits.TRISA3 = 1; // вход SA2
while (1)
{
if (PORTAbits.RA2 == 1 && PORTAbits.RA3 == 1)//Если тумблеры
//SA1 и SA2
//одновременно
//включены
{
__delay32(FCY);
LATBbits.LATB15 = 1;
LATBbits.LATB13 = 0;
__delay32(FCY);
LATBbits.LATB15 = 0;
LATBbits.LATB13 = 1;
}
else
{
LATBbits.LATB15 = 0;
LATBbits.LATB13 = 0;
}
}
}