;------------------------------------------------------------------------------- ; This code distributed under GPLv3 license agreement. ; Developed by trigotoram TH inc. ;------------------------------------------------------------------------------- .INCLUDE "m8535def.inc" .LIST ;listing file generate .equ Delay = 6 ; установка константы времени задержки .CSEG ; начало сегмента кода .ORG 0x0000 ; начальное значение для адресации ;--------------------------- Reset: ; -- инициализация стека -- LDI R16, Low(RAMEND) ; младший байт конечного адреса ОЗУ в R16 OUT SPL, R16 ; установка младшего байта указателя стека LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16 OUT SPH, R16 ; установка старшего байта указателя стека ; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод -- LDI R16, 0b11111000 ; поместим в регистр R16 число OUT DDRD, R16 ; загрузим значение из регистра R16 в порт DDRD ; -- основной цикл программы -- Start: SBI PORTD, PORTD3 ; подача на пин PD3 высокого уровня RCALL Wait ; вызываем подпрограмму задержки по времени CBI PORTD, PORTD3 ; подача на пин PD3 низкого уровня SBI PORTD, PORTD4 RCALL Wait CBI PORTD, PORTD4 SBI PORTD, PORTD5 RCALL Wait CBI PORTD, PORTD5 SBI PORTD, PORTD6 RCALL Wait CBI PORTD, PORTD6 SBI PORTD, PORTD7 RCALL Wait CBI PORTD, PORTD7 SBI PORTD, PORTD6 RCALL Wait CBI PORTD, PORTD6 SBI PORTD, PORTD5 RCALL Wait CBI PORTD, PORTD5 SBI PORTD, PORTD4 RCALL Wait CBI PORTD, PORTD4 SBI PORTD, PORTD3 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 .EXIT