; ******************************************************** ; * ATtiny2313-Eieruhr, Version 1, 20.10.2006 * ; * (C)2006 by G.Schmidt http://www.avr-asm-tutorial.net * ; ******************************************************** ; .NOLIST .INCLUDE "tn2313def.inc" .LIST ; ; *************************************** ; Fuses-Voreinstellungen im ATtiny2313V ; *************************************** ; ; - Internen RC-Oszillator auf 4 MHz, CLKSEL3:0 = 0010, SUT1:0 = 10 ; - Interner Clockteiler auf 8, CKDIV8 = Enabled ; ; *************************************** ; Hardware - Schaltung ; *************************************** ; ; __________ ; / |_| | ; +3V O--|Res VCC|--O +3V ; | | ; L1K O--|PD0 PB7|--O L10A ; | | ;L1A/L2K O--|PD1 PB6|--O L9A/L10K ; | AT | ; O--|PA1 PB5|--O L8A/L9K ; | tiny | ; O--|PA0 PB4|--O L7A/L8K ; | 2313 | ;L2A/L3K O--|PD2 PB3|--O ; | V | ;L4K/L3A O--|PD3 PB2|--||--O Lsp ; | (OC0A)| ;L5K/L4A O--|PD4 PB1|--O ; | | ;L6K/L5A O--|PD5 PB0|--O L0K ; | | ; GND O--|GND PD6|--O L6A/L7K ; |___________| ; ; ; *************************************** ; Definiere Ports und Portbits ; *************************************** ; .EQU pOcO = PORTB .EQU dOcO = DDRB .EQU bOcO = 2 ; .EQU pL0K = PORTB .EQU dL0K = DDRB .EQU bL0K = 0 ; .EQU pL1K = PORTD .EQU dL1K = DDRD .EQU bL1K = 0 ; .EQU pL1A = PORTD .EQU dL1A = DDRD .EQU bL1A = 1 ; .EQU pL2K = PORTD .EQU dL2K = DDRD .EQU bL2K = 1 ; .EQU pL2A = PORTD .EQU dL2A = DDRD .EQU bL2A = 2 ; .EQU pL3K = PORTD .EQU dL3K = DDRD .EQU bL3K = 2 ; .EQU pL3A = PORTD .EQU dL3A = DDRD .EQU bL3A = 3 ; .EQU pL4K = PORTD .EQU dL4K = DDRD .EQU bL4K = 3 ; .EQU pL4A = PORTD .EQU dL4A = DDRD .EQU bL4A = 4 ; .EQU pL5K = PORTD .EQU dL5K = DDRD .EQU bL5K = 4 ; .EQU pL5A = PORTD .EQU dL5A = DDRD .EQU bL5A = 5 ; .EQU pL6K = PORTD .EQU dL6K = DDRD .EQU bL6K = 5 ; .EQU pL6A = PORTD .EQU dL6A = DDRD .EQU bL6A = 6 ; .EQU pL7K = PORTD .EQU dL7K = DDRD .EQU bL7K = 6 ; .EQU pL7A = PORTB .EQU dL7A = DDRB .EQU bL7A = 4 ; .EQU pL8K = PORTB .EQU dL8K = DDRB .EQU bL8K = 4 ; .EQU pL8A = PORTB .EQU dL8A = DDRB .EQU bL8A = 5 ; .EQU pL9K = PORTB .EQU dL9K = DDRB .EQU bL9K = 5 ; .EQU pL9A = PORTB .EQU dL9A = DDRB .EQU bL9A = 6 ; .EQU pL10K = PORTB .EQU dL10K = DDRB .EQU bL10K = 6 ; .EQU pL10A = PORTB .EQU dL10A = DDRB .EQU bL10A = 7 ; ; *************************************** ; Funktionsweise Timing ; *************************************** ; ; Timer1 = Zeitmessung ; _______ ______ ______ ______ _____ ______ ; |RC-Osc.| | CDiv |500|Presc.|62,5|TC1CNT|5Hz| LED |0,5|MinCnt| ; | 4 MHz |===>| / 8 |==>| / 8 |===>|/12500|==>|Count|==>| / 30 |==>1 Min. ; |_______| |______|kHz|______|kHz |______| |_____|Hz |______| ; | ; Timer0 = NF-Erzeugung| ; | ______ ______ ; | |Presc.| |TC0CNT|992Hz ; |=>| / 8 |==>| / 63 |===> OC0A = Beep-Lautsprecher ; |______| |______| ; ; ; *************************************** ; Register ; *************************************** ; .DEF rmp = R16 .DEF rFlg = R17 .DEF rLed = R18 .DEF rSec = R19 .DEF rMin = R20 .DEF rNb = R21 ; ; *************************************** ; Reset und Interrupt-Vektoren ; *************************************** ; .CSEG .ORG $0000 rjmp Main ; Reset reti ; INT0 Interrupt reti ; INT1 Interrupt reti ; TC1Capt Interrupt rjmp TC1CmpA ; Timer 1 Compare A match reti ; TC1 Overflow Int reti ; TC0 Overflow Int reti ; UART0 RX Int reti ; UART0 TX Int reti ; Ana Comp Int reti ; PCINT reti ; TC1 CompB Int reti ; TC0 Compare Match A Int reti ; TC0 Compare Match B Int reti ; USISTART Int reti ; USIOverflow Int reti ; EERDY Int reti ; WDT Overflow Int ; ; *************************************** ; TC1 Compare Match A Interrupt Routine ; *************************************** ; TC1CmpA: set reti ; ; *************************************** ; Hauptprogramm ; *************************************** ; Main: ; Stack init ldi rmp,LOW(RAMEND) ; Setze Stackpointer out SPL,rmp ; Init Register ldi rFlg,0 ; Init Flagge ldi rLed,0 ; Init LEDs ldi rSec,0 ; Init Sekundenzaehler ldi rMin,1 ; Init Minutenzaehler ldi rNb,1 ; Init Beep-Zaehler ; Init OCR0A-Output fuer Beep sbi dOcO,bOcO ; Init Timer 1 fuer Zeit- und Lampensteuerung ldi rmp,HIGH(12500) ; CTC-Wert out OCR1AH,rmp ldi rmp,LOW(12500) out OCR1AL,rmp clr rmp ; Kontrollwort A out TCCR1A,rmp ldi rmp,(1<