Advertisement
Guest User

Untitled

a guest
Jun 4th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; led blinking atmega8
  2.  
  3. .INCLUDEPATH "/home/user/123/avra/" ; путь для подгрузки INC файлов
  4. .INCLUDE "m8def.inc"            ; загрузка предопределений для ATmega8
  5. .LIST                           ; включить генерацию листинга
  6.  
  7. .CSEG                           ; начало сегмента кода
  8. .ORG 0x0000                     ; начальное значение для адресации
  9.  
  10. ; -- инициализация стека --
  11. LDI R16, Low(RAMEND)  ; младший байт конечного адреса ОЗУ в R16
  12. OUT SPL, R16          ; установка младшего байта указателя стека
  13. LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16
  14. OUT SPH, R16          ; установка старшего байта указателя стека
  15.  
  16. .equ Delay = 5        ; установка константы времени задержки
  17.  
  18. ; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод --
  19. LDI R16, 0b00000001   ; поместим в регистр R16 число 3 (0x3)
  20. OUT DDRD, R16         ; загрузим значение из регистра R16 в порт DDRD
  21.  
  22. ; -- основной цикл программы --
  23. Start:
  24.     SBI PORTD, PORTD0 ; подача на пин PD0 высокого уровня
  25.    
  26.     RCALL Wait        ; вызываем подпрограмму задержки по времени
  27.    
  28.     CBI PORTD, PORTD0
  29.     RCALL Wait
  30.     RJMP Start        ; возврат к метке Start, повторяем все в цикле
  31.  
  32. ; -- подпрограмма задержки по времени --
  33. Wait:
  34.     LDI  R17, Delay   ; загрузка константы для задержки в регистр R17
  35. WLoop0:  
  36.     LDI  R18, 50      ; загружаем число 50 (0x32) в регистр R18
  37. WLoop1:  
  38.     LDI  R19, 0xC8    ; загружаем число 200 (0xC8, $C8) в регистр R19
  39. WLoop2:  
  40.     DEC  R19          ; уменьшаем значение в регистре R19 на 1
  41.     BRNE WLoop2       ; возврат к WLoop2 если значение в R19 не равно 0
  42.     DEC  R18          ; уменьшаем значение в регистре R18 на 1
  43.     BRNE WLoop1       ; возврат к WLoop1 если значение в R18 не равно 0
  44.     DEC  R17          ; уменьшаем значение в регистре R17 на 1
  45.     BRNE WLoop0       ; возврат к WLoop0 если значение в R17 не равно 0
  46. RET                   ; возврат из подпрограммы Wait
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement