From 526d5b3d4f0d6356baec290a9e9ce1fb945ebe6a Mon Sep 17 00:00:00 2001 From: hackbard <hackbard> Date: Mon, 15 Jan 2007 23:32:17 +0000 Subject: [PATCH] somehow t1_overflow is not executed properly ... --- thermo/thermo.asm | 169 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 129 insertions(+), 40 deletions(-) diff --git a/thermo/thermo.asm b/thermo/thermo.asm index a66a491..3794546 100644 --- a/thermo/thermo.asm +++ b/thermo/thermo.asm @@ -21,13 +21,13 @@ reti reti ; T1 CAPT1 -rjmp T1_CAPTURE +reti ; T1 COMP A reti ; T1 OVF1 -reti +rjmp T1_OVERFLOW ; T0 OVF0 reti @@ -42,7 +42,7 @@ reti reti ; ANA COMP -reti +rjmp ANA_COMP ; PCINT reti @@ -85,60 +85,147 @@ INIT: ; uart init UART_INIT: - ldi r16,51 ; 9600 bps @ 8mhz + ldi r16,51 ; 9k6 bps @ 8mhz out UBRRL, r16 out UBRRH, r0 - ldi r16,(1<<UCSZ0)|(1<<UCSZ1) ; 8 data bits, no parity, 1 stop bit + ldi r16,(1<<UCSZ0)|(1<<UCSZ1) ; 8n1 out UCSRC,r16; sbi UCSRB,TXEN ; enable tx ; timer init - TIME_INIT: + TIMER_INIT: - ldi r16,(1<<CS10)|(1<<CS11) ; prescaler 1/64 + ; prescaler 64 + ldi r16,(1<<CS10)|(1<<CS11) out TCCR1B,r16 - ldi r16,(1<<ICIE1) ; enable input capture interrupt - out TIMSK,r16 - ; analog comparator init ANA_COMP_INIT: - ; interrupt if voltage is higher, enable input capture function ot tc1 - ldi r16,(1<<ACIS0)|(1<<ACIS0)|(1<<ACIC) ; (no analog comp interrupt!) + ; interrupt if voltage is higher + ; enable input capture function ot tc1 + ldi r16,(1<<ACIS0)|(1<<ACIS1) out ACSR,r16 ; output for rc element - ldi r17,(1<<DDB2) - out DDRB,r17 - out PORTB,r0 + RC_PIN_INIT: + sbi DDRD,DDD2 ; pin 2 port d is output - sei ; global interrupt enable MAIN: + + ; print 'S'tart symbol via uart + ldi r17,0x53 + sbis UCSRA,UDRE rjmp MAIN + out UDR,r17 + + ; decharge rc pin + cbi PORTD,PORTD2 + + ; reset timer counter 1 and enable overflow interrupt + out TCNT1H,r0 + out TCNT1L,r0 + ldi r17,(1<<TOIE1) + out TIMSK,r17 + + ; global interrupt enable + sei + + ; loop forever + MAIN_LOOP: + + ldi r21,0 + WLOOP1: + ldi r22,0 + WLOOP2: + inc r22 + cpi r22,0xff + brne WLOOP2 + inc r21 + cpi r21,0xff + brne WLOOP1 + + ; tell the world + + ; separate with a space + ldi r17,0x20 + SPACE1: + sbis UCSRA,UDRE + rjmp SPACE1 + out UDR,r17 + + ; aco status + ldi r17,0x30 + sbic ACSR,ACO + ldi r17,0x31 + ACO_STAT: + sbis UCSRA,UDRE + rjmp ACO_STAT + out UDR,r17 + + ; aci status + ldi r17,0x30 + sbic ACSR,ACIE + ldi r17,0x31 + ACI_STAT: + sbis UCSRA,UDRE + rjmp ACI_STAT + out UDR,r17 + + ; pin status + ldi r17,0x30 + sbic PORTD,PORTD2 + ldi r17,0x31 + PIN_STAT: + sbis UCSRA,UDRE + rjmp PIN_STAT + out UDR,r17 + + ; ti status + ldi r17,0x30 + in r23,TIMSK + sbrc r23,TOIE1 + ldi r17,0x31 + TI_STAT: + sbis UCSRA,UDRE + rjmp TI_STAT + out UDR,r17 + + ; a space again for separation + ldi r17,0x20 + SPACE2: + sbis UCSRA,UDRE + rjmp SPACE2 + out UDR,r17 + + ; loop + rjmp MAIN_LOOP ; -; timer 1 input capture interrupt routine +; analog comparator interrupt routine ; -T1_CAPTURE: +ANA_COMP: - ; disable input capture interrupt - in r17,TIMSK - cbr r17,ICIE1 - out TIMSK,r17 - - ; pull low the rc element - cbi PORTB,PORTB2 + ; immediately disable the analog comparator interrupt + cbi ACSR,ACIE ; read the captured value - in r19,ICR1L - in r18,ICR1H + in r19,TCNT1L + in r18,TCNT1H + + ; pull low the rc element + cbi PORTD,PORTD2 ; uart out + ANA_COMP_SEND: + ldi r17,0x61 + sbis UCSRA,UDRE + rjmp ANA_COMP_SEND + out UDR,r17 LOOP_ONE: sbis UCSRA,UDRE rjmp LOOP_ONE @@ -148,6 +235,10 @@ T1_CAPTURE: rjmp LOOP_TWO out UDR,r19 + ; reset timer counter + out TCNT1H,r0 + out TCNT1L,r0 + ; enable timer 1 overflow interrupt in r17,TIMSK sbr r17,TOIE1 @@ -161,29 +252,27 @@ T1_CAPTURE: T1_OVERFLOW: - ; disable timer 1 overflow interrupt - in r17,TOIE1 - cbr r17,TOIE1 + ; immediately disable timer 1 overflow interrupt + in r17,TIMSK + cbr r17,(1<<TOIE1) out TIMSK,r17 - ; uart space out - ldi r17,0x20 - LOOP_THREE: + ; uart debug out + ldi r17,0x4f + OVF_SEND: sbis UCSRA,UDRE - rjmp LOOP_TWO + rjmp OVF_SEND out UDR,r17 ; reset timer counter out TCNT1H,r0 out TCNT1L,r0 - ; pull rc element high - sbi PORTB,PORTB2 + ; enable analog comparator interrupt + sbi ACSR,ACIE - ; enable input capture interrupt - in r17,TIMSK - sbr r17,ICIE1 - out TIMSK,r17 + ; pull rc element high + sbi PORTD,PORTD2 reti -- 2.39.5