; ----- Reset- und Interrupt-Vektoren ------- .org 0 ;Startadresse=0 rjmp Reset ; Reset reti ; INT0 reti ; INT1 reti ; TC1-Capt reti ; TC1-CompA rjmp T1ovr ; TC1-Ovflw soll extern zaehlen, fall. Flanke , Mz 1sek reti ; TC0-Ovflw reti ; UART RX reti ; UART UDRE reti ; UART TX reti ; Ana-Comp reti ; PCInt reti ; T1CompB rjmp T0cmpA ; T0CompA jede ms reti ; T0CompB reti ; USI SC reti ; USI Ovflw reti ; EE Ready reti ; WDT Ovflw reti ; PCInt1 reti ; PCInt2 BadVector: nop rjmp BadVector ; ********************************************** ;Stackpointer initialisieren RESET: ldi AL,low(RAMEND) out SPL,AL ; ---- Ports def. ----- outi DDRB, $FF ; alle Bits = Out outi PortB,0 ; alle Bits = 0 ; Port D konfigurieren outi DDRD, 0b01001000; Bits 0-2,4,5,7 = In Bit3, 6 = Out outi PortD,0b01101000; Start 4040 = 10:1 (default) ; Timer0 einstellen ; Int (Anzeige) outi OCR0A,T0Wert ; 54=1ms outi TCCR0A,0b00000010 ; CTC outi TCCR0B,0b00000100 ; Clk/256 ; Timer1 einstellen outi TCCR1B,0b00000110 ; ext Clock| fall. Flk outi TIMSK,0b10000001 ; T0=Comp A Match| T1=Overflow ; ----- Hauptschleife nur Warten und berechnen ----- MainLoop: cli clr Al sts IntZ_T0,AL ; Int Zaehler 0 – wird jede ms +1 gezählt sts IntZ_T0+1,AL out TCNT1H,AL out TCNT1L,AL ; TCNT1 = 0 sei ML2: ldsw A,IntZ_T0 ldsw B,Led_Z cpw A,B ; Loop1 = LED Time ? brne ML2 sbi PORTD,6 ; LED on - Blinkzeit 500 ms an ,500ms aus ML1: ldsw A,IntZ_T0 ldsw B,M_Intv cpw A,B ; Loop2 = M_Intv ? hier 1000 = 1sek Messzeit brne ML1 cli in E1L,TCNT1L in E1H,TCNT1H ; TCNT1 in E1L,E1H speichern lds AL,IntZ_T1 mov E2L,AL ; T1 Ovf in E2L speichern sei rcall HEX_ASC_24 ; erg auf 8 ASC-Stellen aufbereiten rcall Aufb_Anzeige ; 8stell. --> 5stellig + LED (Hz, kHz, MHz) cbi PORTD,6 ; LED off rjmp Mainloop ---------------------------------------------------------------------------------------------- Erklärung: .macro outi ldi AL,@1 out @0,AL .endm .macro ldsw lds @0L,@1 lds @0H,@1+1 .endm