Advertisement
teplofizik

main.s (3)

Aug 6th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Test STM32F4-Assembler project
  2. ; http://teplofizik.diary.ru/p179418376.htm
  3.  
  4.     AREA    |.text|, CODE, READONLY
  5.  
  6.     GET led.inc    ; Драйвер светодиодов
  7.     GET button.inc ; Драйвер кнопки
  8.     GET system.inc ; Задержка
  9.  
  10. ; Объявления
  11. DELAY_COUNTER         EQU 0x000F4240 ; 1000000UL
  12.  
  13.             EXPORT __main
  14. __main      PROC
  15.            
  16.             ; Инициализация кнопок и светодиодов
  17.             BL LedInit
  18.             BL ButtonInit
  19.            
  20.             ; В регистр R4 запишем величину задержки
  21.             LDR R4, =DELAY_COUNTER
  22.            
  23.             ; Начнём с нулевого светодиода
  24.             ; R5 - номер текущего светодиода
  25.             MOV R5, #0
  26.          
  27. ; Главный цикл программы          
  28. __mainloop
  29.             ; Если кнопка нажата - светятся все светодиоды.
  30.             BL  ButtonGet
  31.            
  32.             CMP R0, #1
  33.             BEQ __button_1
  34.            
  35. __button_0
  36.             ; Кнопка не нажата
  37.             ; Прибавляем 1
  38.             ADD R5, R5, #1
  39.            
  40.             ; Проверяем: не более 3х
  41.             CMP R5, #4
  42.             BNE __button_end
  43.            
  44.             ; На новый круг, с 0
  45.             MOV R5, #0
  46.            
  47.             B __button_end
  48.  
  49. __button_1
  50.             ; Кнопка нажата
  51.             ; Проверяем: >= 0
  52.             SUBS R5, R5, #1
  53.             BPL __button_end
  54.  
  55.             ; Заём бита произошёл, -1.
  56.             ; На новый круг, с 3х
  57.             MOV R5, #3
  58.            
  59. ; Все проверки на более 3х или менее 0 можно заменить на более простую конструкцию:
  60. ; MOV R0, #3     ; Переместить маску 0x03
  61. ; AND R5, R5, R0 ; Оставить только младшие 2 бита
  62.      
  63. __button_end
  64.            
  65.             ; Зажжём светодиод N
  66.             MOV R0, R5
  67.             BL  LedOn
  68.            
  69.             ; Задержка
  70.             MOV R0, R4
  71.             BL  delay
  72.            
  73.             ; Погасим светодиод N
  74.             MOV R0, R5
  75.             BL  LedOff
  76.  
  77.             ; На очередной круг
  78.             B __mainloop
  79.  
  80.             ENDP
  81.  
  82.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement