Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; led blinking atmega8
- .INCLUDEPATH "/home/user/123/avra/" ; путь для подгрузки INC файлов
- .INCLUDE "m8def.inc" ; загрузка предопределений для ATmega8
- .LIST ; включить генерацию листинга
- .CSEG ; начало сегмента кода
- .ORG 0x0000 ; начальное значение для адресации
- ; -- инициализация стека --
- LDI R16, Low(RAMEND) ; младший байт конечного адреса ОЗУ в R16
- OUT SPL, R16 ; установка младшего байта указателя стека
- LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16
- OUT SPH, R16 ; установка старшего байта указателя стека
- .equ Delay = 5 ; установка константы времени задержки
- ; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод --
- LDI R16, 0b00000001 ; поместим в регистр R16 число 3 (0x3)
- OUT DDRD, R16 ; загрузим значение из регистра R16 в порт DDRD
- ; -- основной цикл программы --
- Start:
- SBI PORTD, PORTD0 ; подача на пин PD0 высокого уровня
- RCALL Wait ; вызываем подпрограмму задержки по времени
- CBI PORTD, PORTD0
- RCALL Wait
- RJMP Start ; возврат к метке Start, повторяем все в цикле
- ; -- подпрограмма задержки по времени --
- Wait:
- LDI R17, Delay ; загрузка константы для задержки в регистр R17
- WLoop0:
- LDI R18, 50 ; загружаем число 50 (0x32) в регистр R18
- WLoop1:
- LDI R19, 0xC8 ; загружаем число 200 (0xC8, $C8) в регистр R19
- WLoop2:
- DEC R19 ; уменьшаем значение в регистре R19 на 1
- BRNE WLoop2 ; возврат к WLoop2 если значение в R19 не равно 0
- DEC R18 ; уменьшаем значение в регистре R18 на 1
- BRNE WLoop1 ; возврат к WLoop1 если значение в R18 не равно 0
- DEC R17 ; уменьшаем значение в регистре R17 на 1
- BRNE WLoop0 ; возврат к WLoop0 если значение в R17 не равно 0
- RET ; возврат из подпрограммы Wait
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement