Advertisement
perjespersson

LABB3 - TIMERS

Jan 27th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * AssemblerApplication1.asm
  3.  *
  4.  *  Created: 2019-01-29 10:32:51
  5.  *   Author: jespe653
  6.  */
  7.  
  8.  
  9.         .org    $00
  10.         rjmp    START
  11.         .org    OC1Aaddr        ;Timer 1
  12.         jmp     BCD
  13.         .org    OVF0addr        ;Timer 0
  14.         jmp     MUX
  15.  
  16.         .def BOOLEAN = r20
  17.  
  18. START:
  19.         ldi     r16,HIGH(RAMEND)
  20.         out     SPH,r16
  21.         ldi     r16,LOW(RAMEND)
  22.         out     SPL,r16
  23.  
  24. RESET:
  25.         ldi     r16,HIGH(TIME)
  26.         mov     ZH,r16
  27.         ldi     r16,LOW(TIME)
  28.         mov     ZL,r16
  29.         clr     r16
  30.         ldi     r17,5
  31. RESETBYTES:
  32.         st      Z+,r16
  33.         dec     r17
  34.         brne    RESETBYTES
  35.  
  36. DISPLAYCONFIG:
  37.         ldi     r16,$ff
  38.         out     DDRA,r16
  39.         out     DDRB,r16
  40.  
  41. TIMER1:
  42.         ldi     r16,(1<<WGM12)|(1<<CS10)|(1<<CS11)
  43.         out     TCCR1B,r16
  44.         ldi     r16,$3d
  45.         out     OCR1AH,r16
  46.         ldi     r16,$08
  47.         out     OCR1AL,r16
  48.  
  49.  
  50. TIMER0:
  51.         ldi     r16,(0<<CS00)|(1<<CS01)|(0<<CS02)
  52.         out     TCCR0,r16
  53.         ldi     r16,(1<<TOIE0)|(1<<OCIE1A)       ;FÖR BÅDE TIMER1 OCH TIMER0
  54.         out     TIMSK,r16
  55.         sei                                     ;ENABLE
  56.        
  57. DONE:
  58.         rjmp    DONE
  59.  
  60. BCD:
  61.         ;Pusha sreg
  62.         push    r16            
  63.         in      r16, SREG        
  64.         push    r16
  65.  
  66.         ldi     r16,HIGH(TIME)
  67.         mov     ZH,r16
  68.         ldi     r16,LOW(TIME)
  69.         mov     ZL,r16
  70.         ldi     r17,4               ;Loopar endast 4 siffror
  71.         call    BCDADD
  72.  
  73.         pop     r16            
  74.         out     SREG,r16      
  75.         pop     r16
  76.         reti
  77.  
  78. BCDADD:
  79.         clr     BOOLEAN
  80.         ld      r16,Z
  81.         inc     r16
  82.         cpi     r16,10
  83.         sbrc    ZL,0                ; Ojämna siffror jämförs med 6, jämna med 10
  84.         cpi     r16,6
  85.         brne    CORRECT
  86.         com     BOOLEAN             ; Om den "SLÅR ÖVER" invertera BOOLEAN SÅ VI GÅR TILL NÄSTA SIFFRA
  87.         ldi     r16,0               ; Eftersom den "SLÅR ÖVER" ska den nya siffran vara noll
  88.  
  89. CORRECT:
  90.         st      Z+,r16
  91.         dec     r17                 ; För Loop
  92.         breq    GOBACK              ; Om vi är på sista siffran och den slår över ska vi gå tillbaka oavsett
  93.         sbrc    BOOLEAN,1           ; Om BOOLEAN inte är inverterad är vi klara och ska ej fylla på någon ny siffra
  94.         rjmp    BCDADD
  95.  
  96. GOBACK:
  97.         ret
  98.  
  99. MUX:
  100.         push    r16            
  101.         in      r16, SREG        
  102.         push    r16
  103.         ldi     r16,HIGH(DISPLAY)
  104.         mov     ZH,r16
  105.         ldi     r16,LOW(DISPLAY)
  106.         mov     ZL,r16
  107.         ;-----------------------------;
  108.  
  109.         ld      r17,Z
  110.         inc     r17
  111.         sbrc    r17,2
  112.         clr     r17
  113.         st      Z,r17      
  114.         call    SHOW
  115.         ;-----------------------------;
  116.         pop     r16            
  117.         out     SREG,r16      
  118.         pop     r16
  119.         reti
  120.  
  121. SHOW:
  122.         ldi     r16,HIGH(TIME)
  123.         mov     ZH,r16
  124.         ldi     r16,LOW(TIME)
  125.         mov     ZL,r16
  126.         add     ZL,r17              ; ADDA PÅ SÅ VI HÄMTAR RÄTT SIFFRA TILL RÄTT PLATS
  127.         ld      r16,Z
  128.         ldi     ZH, HIGH(TAB * 2)
  129.         ldi     ZL, LOW(TAB * 2)
  130.         add     ZL,r16
  131.         lpm     r16,Z
  132.         clr     r18                 ;AMOS LÖSNING
  133.         out     PORTA,r18          
  134.         out     PORTB,r17           ;VÄLJ RÄTT DISPLAY ATT SKICKA UT SIFFRAN PÅ
  135.         out     PORTA,r16           ;SKICKA UT SIFFRAN
  136.        
  137.         ret
  138.  
  139. TAB:
  140.     .db $FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6
  141.  
  142. .dseg
  143. TIME: .byte 4
  144. DISPLAY: .byte 1
  145.  
  146.  
  147. /*
  148. OC1A/(HZ/PRESCALER) = Sekunder
  149. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement