Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * AssemblerApplication1.asm
- *
- * Created: 2019-01-29 10:32:51
- * Author: jespe653
- */
- .org $00
- rjmp START
- .org OC1Aaddr ;Timer 1
- jmp BCD
- .org OVF0addr ;Timer 0
- jmp MUX
- .def BOOLEAN = r20
- START:
- ldi r16,HIGH(RAMEND)
- out SPH,r16
- ldi r16,LOW(RAMEND)
- out SPL,r16
- RESET:
- ldi r16,HIGH(TIME)
- mov ZH,r16
- ldi r16,LOW(TIME)
- mov ZL,r16
- clr r16
- ldi r17,5
- RESETBYTES:
- st Z+,r16
- dec r17
- brne RESETBYTES
- DISPLAYCONFIG:
- ldi r16,$ff
- out DDRA,r16
- out DDRB,r16
- TIMER1:
- ldi r16,(1<<WGM12)|(1<<CS10)|(1<<CS11)
- out TCCR1B,r16
- ldi r16,$3d
- out OCR1AH,r16
- ldi r16,$08
- out OCR1AL,r16
- TIMER0:
- ldi r16,(0<<CS00)|(1<<CS01)|(0<<CS02)
- out TCCR0,r16
- ldi r16,(1<<TOIE0)|(1<<OCIE1A) ;FÖR BÅDE TIMER1 OCH TIMER0
- out TIMSK,r16
- sei ;ENABLE
- DONE:
- rjmp DONE
- BCD:
- ;Pusha sreg
- push r16
- in r16, SREG
- push r16
- ldi r16,HIGH(TIME)
- mov ZH,r16
- ldi r16,LOW(TIME)
- mov ZL,r16
- ldi r17,4 ;Loopar endast 4 siffror
- call BCDADD
- pop r16
- out SREG,r16
- pop r16
- reti
- BCDADD:
- clr BOOLEAN
- ld r16,Z
- inc r16
- cpi r16,10
- sbrc ZL,0 ; Ojämna siffror jämförs med 6, jämna med 10
- cpi r16,6
- brne CORRECT
- com BOOLEAN ; Om den "SLÅR ÖVER" invertera BOOLEAN SÅ VI GÅR TILL NÄSTA SIFFRA
- ldi r16,0 ; Eftersom den "SLÅR ÖVER" ska den nya siffran vara noll
- CORRECT:
- st Z+,r16
- dec r17 ; För Loop
- breq GOBACK ; Om vi är på sista siffran och den slår över ska vi gå tillbaka oavsett
- sbrc BOOLEAN,1 ; Om BOOLEAN inte är inverterad är vi klara och ska ej fylla på någon ny siffra
- rjmp BCDADD
- GOBACK:
- ret
- MUX:
- push r16
- in r16, SREG
- push r16
- ldi r16,HIGH(DISPLAY)
- mov ZH,r16
- ldi r16,LOW(DISPLAY)
- mov ZL,r16
- ;-----------------------------;
- ld r17,Z
- inc r17
- sbrc r17,2
- clr r17
- st Z,r17
- call SHOW
- ;-----------------------------;
- pop r16
- out SREG,r16
- pop r16
- reti
- SHOW:
- ldi r16,HIGH(TIME)
- mov ZH,r16
- ldi r16,LOW(TIME)
- mov ZL,r16
- add ZL,r17 ; ADDA PÅ SÅ VI HÄMTAR RÄTT SIFFRA TILL RÄTT PLATS
- ld r16,Z
- ldi ZH, HIGH(TAB * 2)
- ldi ZL, LOW(TAB * 2)
- add ZL,r16
- lpm r16,Z
- clr r18 ;AMOS LÖSNING
- out PORTA,r18
- out PORTB,r17 ;VÄLJ RÄTT DISPLAY ATT SKICKA UT SIFFRAN PÅ
- out PORTA,r16 ;SKICKA UT SIFFRAN
- ret
- TAB:
- .db $FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6
- .dseg
- TIME: .byte 4
- DISPLAY: .byte 1
- /*
- OC1A/(HZ/PRESCALER) = Sekunder
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement