Advertisement
Guest User

avr assembly led

a guest
Dec 23rd, 2018
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .equ XTAL = 16000000 ;16 mHz
  2.  
  3. .equ BTN  = 2 ;Pinnumber of PORT_D
  4. .equ LED  = 3 ;Pinnumber of PORT_D
  5.  
  6. .def temp1 = r16
  7. .def temp2 = r17
  8.  
  9.     ;Init stackpointer
  10.     ldi temp1, HIGH(RAMEND)
  11.     out SPH,   temp1
  12.     ldi temp1, LOW(RAMEND)
  13.     out SPL,   temp1
  14.  
  15.     ;Set led pin to output
  16.     ldi temp1, (1 << LED)
  17.     out DDRD, temp1
  18.  
  19. loop:
  20.     in    temp1, PIND
  21.     sbrc  temp1, BTN ;Check if button is pressed
  22.     rcall led_toggle
  23.     rjmp  loop
  24.  
  25. led_toggle:
  26.     andi  temp1, (1 << LED)
  27.     ldi   temp2, (1 << LED)
  28.     eor   temp1, temp2 ;xor the led pin
  29.     out   PORTD, temp1
  30.     ldi   temp2, 0xFF
  31. led_toggle_0:
  32.     dec   temp2
  33.     rcall delay5ms
  34.     brne  led_toggle_0
  35.     ret
  36.  
  37. ; DELAY 50ยตs (variable)
  38. delay50us:
  39.     push temp1
  40.     ldi  temp1, (XTAL*50/4)/1000000 ;$C8
  41. delay50us_0:
  42.     dec  temp1
  43.     nop
  44.     brne delay50us_0
  45.     pop  temp1
  46.     ret
  47.  
  48. ; DELAY 5ms (variable)
  49. delay5ms:
  50.     push temp1
  51.     push temp2
  52.     ldi  temp1, (XTAL*5/603)/1000 ;$84
  53. delay5ms_0:
  54.     ldi  temp2, $C9
  55. delay5ms_1:
  56.     dec  temp2
  57.     brne delay5ms_1
  58.     dec  temp1
  59.     brne delay5ms_0
  60.     pop  temp2
  61.     pop  temp1
  62.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement