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