Advertisement
Guest User

LAB 3 TASK 3

a guest
Oct 23rd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; 1DT301, Computer Technology I
  3. ; Date: 2015-09-03
  4. ; Author:
  5. ; Nikolaos Papadopoulos (np222fc)
  6. ;
  7. ; Lab number: 3
  8. ; Title: How to use interrupts
  9. ;
  10. ; Hardware: STK600, CPU ATmega2560
  11. ;
  12. ; Function: Switch – Ring counter / Johnson counter with interrupt
  13. ;
  14. ; Input ports: PORTD
  15. ;
  16. ; Output ports: PORTB
  17. ;
  18. ; Subroutines: Interrupt & delay as well as Shifts for the counters
  19. ; Included files: m2560def.inc
  20. ;
  21. ; Other information:
  22. ;
  23. ; Changes in program: (Description and date)
  24. ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  25. .include "m2560def.inc"
  26. .org 0x00
  27. rjmp start
  28.  
  29. .org INT0addr
  30. rjmp right
  31.  
  32. .org INT1addr
  33. rjmp normal
  34.  
  35. .org INT2addr
  36. rjmp left
  37.  
  38.  
  39. ;Points to what registers to use
  40. .org 0x72
  41. start:
  42. ;Basic initialization
  43. ldi r16, 0xFF
  44. out DDRB, r16
  45. out PORTB, r16
  46. ldi r16, 0x00
  47. out DDRD, R16
  48.  
  49. ;Initialize SP, Stack Pointer
  50. ldi r20, HIGH(RAMEND) ; R20 = high part of RAMEND address
  51. out SPH,R20 ; SPH = high part of RAMEND address
  52. ldi R20, low(RAMEND) ; R20 = low part of RAMEND address
  53. out SPL,R20 ; SPL = low part of RAMEND address
  54.  
  55. ;Initialization of interrupt
  56. ldi r26, 0b00101010
  57. STS EICRA, r26
  58.  
  59. ldi r26, 0b00000111 ;switch
  60. out EIMSK, r26
  61.  
  62. Sei
  63.  
  64. ldi r23,2 ;flag
  65.  
  66. Main:
  67. cpi r23, 0
  68. breq turnR_start
  69.  
  70. cpi r23, 1
  71. breq turnL_start
  72.  
  73. cpi r23, 2
  74. breq normal_light
  75. rjmp Main
  76.  
  77.  
  78. ;============== Normal light ================
  79. normal_light:
  80. ldi r17, 0b00111100
  81. out portb, r17
  82. rjmp Main
  83.  
  84. ;============== Turning right ================
  85. turnR:
  86. ldi r17, 0b00110111 ;and running normal ring counter
  87. ldi r18, 0b00111111
  88. ldi r19, 0b00100000
  89.  
  90. turnR_start:
  91. out PORTB, r17
  92. cp r17, r18
  93. breq turnR
  94.  
  95. lsr r17
  96. ADD r17, r19
  97. rcall delay
  98. rjmp Main
  99.  
  100. ;============== Turning left ================
  101. turnL:
  102. ldi r17, 0b11101100 ;and running normal ring counter
  103. ldi r18, 0b11111100
  104. ldi r19, 0b00000100
  105.  
  106. turnL_start:
  107. out PORTB, r17
  108. cp r17, r18
  109. breq turnL
  110.  
  111. lsl r17
  112. ADD r17, r19
  113. rcall delay
  114. rjmp Main
  115.  
  116.  
  117. ;=============== Interrupts ====================
  118. right:
  119. ldi r17, 0b00110111
  120. ldi r18, 0b00111111
  121. ldi r19, 0b00100000
  122. ldi r23, 0
  123. reti
  124.  
  125.  
  126.  
  127. normal:
  128. ldi r23,2
  129. reti
  130.  
  131. left:
  132. ldi r17, 0b11101100 ;and running normal ring counter
  133. ldi r18, 0b11111100
  134. ldi r19, 0b00000100
  135. ldi r23,1
  136. reti
  137.  
  138. ;================ DELAY =====================
  139. delay:
  140. ; Generated by delay loop calculator
  141. ; at http://www.bretmulvey.com/avrdelay.html
  142. ;
  143. ; Delay 500 000 cycles
  144. ; 500ms at 1 MHz
  145.  
  146. ldi r24, 4
  147. ldi r25, 138
  148. ldi r20, 86
  149. L1: dec r20
  150. brne L1
  151. dec r25
  152. brne L1
  153. dec r24
  154. brne L1
  155. rjmp PC+1
  156. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement