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
|