STC12單片機有定時器輸出口,定時器可以自己重裝,有需要可以開中斷,但產生38k無需中斷。
再開一個定時器T1定時10ms, 這個要中斷,每次中斷反轉TR0。
跑的時候,若TR0為1,接收管輸入端產生中斷,進入測量脈載波長度程序,過程中T1發生中斷將TR0置0,載波消失,即獲得載波長度,若與10ms相符則非干擾,大概是這樣。
AUXR EQU 8EH
WAKE_CLKO EQU 08FH
ORG 0000H
MOV WAKE_CLKO,#00000001B ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT BRT@P1.0 T1@P3.5 T0@P3.4
MOV AUXR, #11111100B ;T0x12,T1x12,UART_M0x6,BRTRUN,S2SMOD,BRTx12,EXTRAM,S1BRS
MOV TMOD, #00100010B ;TIMER1 AS MOD2(8 BYTE AUTO RELOAD TIMER)
;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)
MOV TL0, #111 ;Tx12 111=38.2K OUTPUT AT P3.4
MOV TH0, #111
SETB TR0 ;RUN T0
|