Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; Labb3.asm
- ;
- ; Created: 5/7/2017 9:11:54 AM
- ; Author : evo
- ;
- ;.org $0000
- ;jmp COLD
- ;.org INT0addr
- ;jmp AVBROTT_0
- ;.org INT1addr
- ;jmp AVBROTT_1
- START:
- ldi r16,HIGH(RAMEND)
- out SPH,r16
- ldi r16,LOW(RAMEND)
- out SPL,r16
- ; ??? Configure and enable interrupts
- ; Configure. Here edge triggered
- ldi r16,(1<<ISC01) | (0<<ISC00) | (1<<ISC11) | (0<<ISC10)
- out MCUCR,r16
- ; Activate. Here INT1 and INT0
- ldi r16,(1<<INT0) | (1<<INT1)
- out GICR,r16
- ; Enable Interrupts Globally
- sei
- ; Setup IO-ports
- ldi r16, 0xFF
- out DDRA, r16 ; Connect to segment-control.
- out DDRB, r16 ; Connect to display number control (MUX).
- ; Initialize screen-number-counters
- ldi r30, 0x00 ; Counter 1 (number of single digit seconds)
- ldi r29, 0x00 ; Counter 2 (number of 10-seconds)
- ldi r28, 0x00 ; Counter 3 (number of single digit minutes)
- ldi r27, 0x00 ; Counter 4 (number of 10-minutes)
- ; Initialize display-value comparison registers
- ldi r20, 0x0A ; = 10, value for first and third display
- ldi r21, 0x06 ; = 6 , value for second display
- LOOP: ; Loop forever
- jmp LOOP
- ; ; ??? ISR’s, Interrupt Service Routines ;
- AVBROTT_0: ; Increment time
- push r16
- in r16,SREG
- push r16
- ; Increase r30
- inc r30
- ; If r30 == 10, set r30 to 0 and run INC_TIME
- cpse r30, r20
- jmp SKIP ; Instruction skipped if r30 == 10
- call INC_TIME
- SKIP: ; (Kanske leder till buggar)
- pop r16
- out SREG,r16
- pop r16
- reti
- INC_TIME:
- ; Increase r30. If r30 = 10,
- ; increase higher number and set r30 to 0
- inc r30
- cp r30, r20
- brne FIN
- ldi r30, 0x00
- ; As above, but r29 == 6
- inc r29
- cp r29, r21
- brne FIN
- ldi r29, 0x00
- ; As above, but r28 == 10
- inc r28
- cp r28, r20
- brne FIN
- ldi r28, 0x00
- ; If everything is cleared, increase r27 and return.
- inc r27
- FIN:
- ret
- AVBROTT_1: ; Display next screen (MUX)
- push r16
- in r16,SREG
- push r16
- ; KAROL
- ; Läs värde för nästa skärm från minne
- ; Välj nästa skärm via PORTB (0->1->2->3->0->...)
- ; Ändra PORTA till nästa värde
- pop r16
- out SREG,r16
- pop r16
- reti
- TABLE: ; Segment represenations for each number
- .db 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67
- ; 0x3F ; 0
- ; 0x06 ; 1
- ; 0x5B ; 2
- ; 0x4F ; 3
- ; 0x66 ; 4
- ; 0x6D ; 5
- ; 0x7D ; 6
- ; 0x07 ; 7
- ; 0x7F ; 8
- ; 0x67 ; 9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement