Advertisement
Guest User

Untitled

a guest
May 10th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;
  2. ; Labb3.asm
  3. ;
  4. ; Created: 5/7/2017 9:11:54 AM
  5. ; Author : evo
  6. ;
  7.  
  8. ;.org $0000
  9. ;jmp COLD
  10. ;.org INT0addr
  11. ;jmp AVBROTT_0
  12. ;.org INT1addr
  13. ;jmp AVBROTT_1
  14.  
  15.  
  16.  
  17. START:
  18.     ldi r16,HIGH(RAMEND)
  19.     out SPH,r16
  20.     ldi r16,LOW(RAMEND)
  21.     out SPL,r16
  22.  
  23.     ; ??? Configure and enable interrupts
  24.     ; Configure. Here edge triggered
  25.     ldi r16,(1<<ISC01) | (0<<ISC00) | (1<<ISC11) | (0<<ISC10)
  26.     out MCUCR,r16
  27.  
  28.     ; Activate. Here INT1 and INT0
  29.     ldi r16,(1<<INT0) | (1<<INT1)
  30.     out GICR,r16
  31.  
  32.     ; Enable Interrupts Globally
  33.     sei
  34.  
  35.     ; Setup IO-ports
  36.     ldi r16, 0xFF
  37.     out DDRA, r16   ; Connect to segment-control.
  38.     out DDRB, r16   ; Connect to display number control (MUX).
  39.  
  40.  
  41.     ; Initialize screen-number-counters
  42.     ldi r30, 0x00           ; Counter 1 (number of single digit seconds)
  43.     ldi r29, 0x00           ; Counter 2 (number of 10-seconds) 
  44.     ldi r28, 0x00           ; Counter 3 (number of single digit minutes)
  45.     ldi r27, 0x00           ; Counter 4 (number of 10-minutes)
  46.  
  47.     ; Initialize display-value comparison registers
  48.     ldi r20, 0x0A ; = 10, value for first and third display
  49.     ldi r21, 0x06 ; = 6 , value for second display
  50.  
  51.  
  52. LOOP: ; Loop forever
  53.     jmp LOOP
  54.    
  55.  
  56. ; ; ??? ISR’s, Interrupt Service Routines ;
  57. AVBROTT_0: ; Increment time
  58.     push r16
  59.     in r16,SREG
  60.     push r16
  61.    
  62.     ; Increase r30
  63.     inc r30
  64.  
  65.     ; If r30 == 10, set r30 to 0 and run INC_TIME
  66.     cpse r30, r20
  67.     jmp SKIP    ; Instruction skipped if r30 == 10
  68.     call INC_TIME
  69.  
  70. SKIP:           ; (Kanske leder till buggar)
  71.     pop r16
  72.     out SREG,r16
  73.     pop r16
  74.     reti
  75.  
  76. INC_TIME:
  77.  
  78.     ; Increase r30. If r30 = 10,
  79.     ; increase higher number and set r30 to 0
  80.     inc r30
  81.     cp r30, r20
  82.     brne FIN
  83.     ldi r30, 0x00
  84.    
  85.     ; As above, but r29 == 6
  86.     inc r29
  87.     cp r29, r21
  88.     brne FIN
  89.     ldi r29, 0x00
  90.    
  91.     ; As above, but r28 == 10
  92.     inc r28
  93.     cp r28, r20  
  94.     brne FIN
  95.     ldi r28, 0x00
  96.  
  97.     ; If everything is cleared, increase r27 and return.
  98.     inc r27
  99.  
  100.     FIN:
  101.         ret
  102.  
  103.  
  104. AVBROTT_1: ; Display next screen (MUX)
  105.     push r16
  106.     in r16,SREG
  107.     push r16
  108.    
  109.     ; KAROL
  110.     ; Läs värde för nästa skärm från minne
  111.     ; Välj nästa skärm via PORTB (0->1->2->3->0->...)
  112.     ; Ändra PORTA till nästa värde
  113.  
  114.     pop r16
  115.     out SREG,r16
  116.     pop r16
  117.     reti
  118.  
  119. TABLE: ; Segment represenations for each number  
  120. .db 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67
  121.  
  122.     ; 0x3F          ; 0
  123.     ; 0x06          ; 1
  124.     ; 0x5B          ; 2
  125.     ; 0x4F          ; 3
  126.     ; 0x66          ; 4
  127.     ; 0x6D          ; 5
  128.     ; 0x7D          ; 6
  129.     ; 0x07          ; 7
  130.     ; 0x7F          ; 8
  131.     ; 0x67          ; 9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement