Цель работы: Изучить принципы работы с таймером прерывания в микроконтроллерах Microchip PICMicro.
Постановка задачи: Привести описание модулей таймеров выбранного типа микроконтроллера. Написать программу управления гирляндой на 8 светодиодов с использованием таймера и прерываний. Вход RC2 управляет направлением движения “бегущего огня”.
Ход работы:
Создаем новый проект для нужного микроконтроллера (PIC18F242). Пишем код программы (листинг представлен ниже). Далее отключаем оптимизацию (рисунок 1), добавляем в View — Watch PORTB типа Binary. Добавляем в Stimulus Controller пин RC2 как Toggle (рисунок 2). Компилируем и запускаем. Результат работы программы на рисунке 3.
Рисунок 1 – Отключение оптимизации компилятора
Рисунок 2 – Stimulus Controller
Рисунок 3 – Результат работы программы
Листинг программы
#include <pic18.h>
__CONFIG(2,WDTDIS);
void DelayMs(unsigned char cnt){
unsigned char i, _dcnt;
do {
i = 5;
do {
_dcnt = 124;
while(--_dcnt != 0) continue;
} while(--i);
} while(--cnt);
}
void main(){
short int counter = 0;
TRISB=0x00;
PORTB=0;
PORTA=0;
ADCON1=6;
while(1) {
DelayMs(300);
if (RC2){
switch(counter) {
case 0: PORTB=0b00000001; break;
case 1: PORTB=0b00000010; break;
case 2: PORTB=0b00000100; break;
case 3: PORTB=0b00001000; break;
case 4: PORTB=0b00010000; break;
case 5: PORTB=0b00100000; break;
case 6: PORTB=0b01000000; break;
case 7: PORTB=0b10000000; break;
}
if (counter != 7)
counter++;
else
counter = 0;
}
else {
switch(counter)
{ case 0: PORTB=0b10000000; break;
case 1: PORTB=0b01000000; break;
case 2: PORTB=0b00100000; break;
case 3: PORTB=0b00010000; break;
case 4: PORTB=0b00001000; break;
case 5: PORTB=0b00000100; break;
case 6: PORTB=0b00000010; break;
case 7: PORTB=0b00000001; break;
}
if (counter != 7)
counter++;
else
counter = 0;}
}
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.