
Как видим уже есть запись
void main() { } |
Это есть начальная функция. С которой начнется выполнение программы.
Для начала нам нужно указать какие выводы будут задействованы и как (на вход или выход), а так же какое значение будет первоначально на них находится.
Что бы программа выполнялась бесконечно долго (пока есть питание на МК), необходимо организовать цикл, в котором будет собственно сама программа для «бегущего огня». Приступим.
#define timepause 500 //заменяем timepause на 500 void main() { TRISB=0; //все выводы порта В на выход PORTB=0; //начальные значения на выводах порта 0 while(1) //организуем бесконеченый цикл { PORTB.F4 = 1; //На RB4 1 - LED1 горит Delay_ms (timepause); //Пауза на 500 мс PORTB.F4 = 0; //На RB4 0 - LED1 не горит PORTB.F5 = 1; //На RB5 1 - LED2 горит Delay_ms (timepause); //Пауза на 500 мс PORTB.F5 = 0; //На RB5 0 - LED2 не горит PORTB.F6 = 1; //На RB6 1 - LED3 горит Delay_ms (timepause); //Пауза на 500 мс PORTB.F6 = 0; //На RB6 0 - LED3 не горит PORTB.F7 = 1; //На RB7 1 - LED4 горит Delay_ms (timepause); //Пауза на 500 мс PORTB.F7 = 0; //На RB7 1 - LED4 не горит } } |
Можно заметить две новые команды #define и Delay_ms()
Delay_ms() – создает программную задержку в миллисекундах (указываются в дужках). Рабочая точка программы попадая на эту команду находится на ней ровно столько миллисикунд, сколько указано, после чего продолжает выполнение программы.
Команда #define подставляет вместо каждого первого значения, которое встречается в программе, второе.
#define значение_1 значение_2 |
В нашем случае использую ее для удобства. Достаточно поменять значение с 500 на 300 и она автоматом проставит эти значения в программе где встретится timepause – одним изменением изменяем 4 значения задержек включенных светодиодов.
При желании можно задействовать все выводы порта В (всего 8) и порта А (всего 5) и описать их в программе тем же способом, что и выше. Таким образом, на PIC16F84A можно будет собрать «бегущий огонь» состоящий из 13 независимых светодиода.
Так же любые вопросы можно обсудить на форуме.