imp_mess.asm
1 | ;==============================================================================
| 2 | ;====== Misst den vorgegebenen Kanalimpuls, Vorgabe in A Kanal 1,2 oder 3
| 3 | ;====== Rückgabe Wert proportional zur Impulsbreite
| 4 |
| 5 | MESS: PUSH B
| 6 | PUSH C
| 7 | IN B,TIMSK
| 8 | SBR B,0b00000010 ;Timer 0 Überlauf Interrupt
| 9 | OUT TIMSK,B ;einschalten
| 10 | CLR B
| 11 | SEC ;1 Bit setzen
| 12 | MESS_01: ROR B ;solange rotieren bis das Bit
| 13 | DEC A ;analog zum Abfragebit steht
| 14 | BRNE MESS_01
| 15 | MESS_02: IN A,PINA ;Port lesen
| 16 | AND A,B
| 17 | BRNE MESS_02 ;Bit war gesetzt, warten bis low
| 18 | MESS_03: IN A,PINA ;damit ein ganzet Impuls gemessen wird
| 19 | AND A,B ;jetzt ist es low
| 20 | BREQ MESS_03 ;warten bis es high ist
| 21 | LDI C,255-OFFSET
| 22 | MOV COUNT_MESS,C
| 23 | MESS_04: IN A,PINA
| 24 | AND A,B
| 25 | BRNE MESS_04 ;Bit war gesetzt, warten bis low
| 26 | MOV A,COUNT_MESS ;Messwert nach A
| 27 | IN B,TIMSK
| 28 | CBR B,0B00000010
| 29 | OUT TIMSK,B ;Timer Interrupt ausschaltem
| 30 | POP C
| 31 | POP b
| 32 | RET
|
|