; ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ;Q Beginn der verwendeten Interrupt Service Routinen ( ISR ) ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; ; ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ;Q USART Transmit Complete Interrupt ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; ; Mit RETI in der Vektorsprungtabelle ist es auch getan ; ; _UTXCaddr: ; in s_sreg,SREG ;Statusregister sichern ; out SREG,s_sreg ;Statusregister wiederherstellen ; reti ;Ruecksprung aus der Interrupt Service Routine ; ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ;Q Timer0 Overflow ISR ( Interrupt Service Routine ) ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; _OVF0addr: in s_sreg,SREG ;CPU-Statusregister sichern ; ;Tasterentprellung. Das Bit key.actuated ( Taster betaetigt & entprellt ) ;wird nach dem Auswerten in der Hauptprogrammschleife rueckgesetzt. ; bst key_reg,key.unactuated;Taster betaetigt & entprellt im T-Flag speichern sbis KEY_PIN,key.bit ;Taster unbetaetigt? rjmp _actuated ;Nein => Taster betaetigt brts _counterrestore ;Zaehler auf 4 ruecksetzen rjmp _count ;Bis 3 Zaehlen _actuated: brts _count ;Weiter von 5 bis 8 zaehlen _counterrestore: cbr key_reg,$03 ;Zaehlerbits 1&0 ruecksetzen _count: sbrs key_reg,key.actuated ;Taster betaetigt entprellt? inc key_reg ; ;ProgrammLaufAnzeige-LED ( PLA-LED ) blinken lassen ; sbrs flag_reg,pla.flg ;PLA-Flag in der Mainschleife quitiert?... rjmp _exit_OVF0addr ;...Nein => ISR verlassen inc ovf0_zaehler ;Overflowzaehler inkrementieren... sbrs ovf0_zaehler,#ovf0_zaehler;...bis 16 gezaehlt... rjmp _exit_OVF0addr ;...Nein => ISR verlassen clr ovf0_zaehler ;Overflowzaehler ruecksetzen sbi PLA_PIN, led.pla ;Programmlaufanzeige LED toggeln ; ;Timer0 Overflow ISR verlassen ; _exit_OVF0addr: ;Timer0 Overflow Interrupt verlassen cbr flag_reg,1< Fehlerbehandlung noetig cpse ia,twi_status_check ;..passt TWI-Status zur jeweiligen TWI-Aktion? rjmp _twi_error_seq ;NEIN => Fehlerbehandlung noetig cpi twi_ablauf_nr, 9 brne _twi_irq_sperren ;TWI-IRQ sperren und ISR verlassen cbi LED_PORT,led.ok ;TESTWEISE Error-LED einschalten################### lds ia,TWCR ;TESTWEISE TWI-Ablauf stoppen ################### cbr ia,TWINT sts TWCR,ia ;################################################## */ rjmp _twi_irq_sperren ;TWI-IRQ sperren und ISR verlassen ; ;Der TWI-Status passt nicht zur TWI-Aktion. ; _twi_error_seq: sbr flag_reg,1<