Пробовал только во флеш, все равно не работает... Ну вот например такая программка:
#include <avr/io.h> #include <avr/delay.h>
int main(void) { DDRB = 0; DDRD = 0xFF; int i; i = 0x1; PORTD = i; while(1) { i = i*2; if (i>255) i=0x1; PORTD = i; _delay_loop_2(1000); } }
или из книжки к STK500:
;программка должна при нажатии на кнопку высветить соответствующий светодиод .include "m16def.inc" .def Temp =r16 ; Регистр хранения временных данных .def Delay =r17 ; Переменная 1 для генерации задержки .def Delay2 =r18 ; Переменная 2 для генерации задержки ;***** Инициализация RESET: ser temp out DDRB, temp ; Настройка порта В (PORTB) на вывод ;**** Тестирование ввода/вывода LOOP: out PORTB,temp ; Обновление состояния светодиодов sbis PIND,0x00 ; Если PortD.0 = 0, inc temp ; то уменьшение на 1 двоичного кода, формируемого свечением светодиодов sbis PIND,0x01 ; Если PortD.1 = 0, dec Temp ; то увеличение на 1 двоичного кода, формируемого свечением светодиодов sbis PIND,0x02 ; Если PortD.2 = 0, ror Temp ; то циклический сдвиг состояния светодиодов на 1 вправо sbis PIND,0x03 ; Если PortD.3 = 0, rol Temp ; то циклический сдвиг состояния светодиодов на 1 влево sbis PIND,0x04 ; Если PortD.4 = 0, com Temp ; то инверсия состояния всех светодиодов sbis PIND,0x05 ; Если PortD.5 = 0, neg Temp ; то инверсия состояния и прибавление 1 sbis PIND,0x06 ; Если PortD.6 = 0, swap Temp ; то обмен тетрадами светодиодов ;**** Далее необходима задержка, чтобы сделать проделанные изменения видимыми DLY: dec Delay brne DLY dec Delay2 brne DLY rjmp LOOP ; Повторение цикла заново
|