我写的这个程序是实现两种输出方波的转换. 利用定时器0来查询转换的条件,转换条件是P1.0输入一个负脉冲,当然对脉冲的宽度有一定的要求.程序如下: ORG 0000H AJMP MODE1 ORG 000BH AJMP CTC0 ORG 002BH AJMP CTC2 ORG 30H T2MOD EQU 0C9H T2CON EQU 0C8H TR2 EQU T2CON.2 TF2 EQU T2CON.7 ET2 EQU IE.5 RCAP2L EQU 0CAH RCAP2H EQU 0CBH TL2 EQU 0CCH TH2 EQU 0CDH MODE1: CLR TR2 SETB P3.0 MOV TMOD,#01H ;脉宽检测 MOV TL0,#0AFH MOV TH0,#3CH SETB EA SETB ET0 CE1: MOV B,0 LOOP: JB P1.0,LOOP SETB TR0 LOOP2: JNB P1.0,LOOP2 CLR TR0 MOV A,B ;条件判断,脉宽在50ms到3s之间时候转换模式 CLR C SUBB A,#01H JC CE1 CLR C MOV A,B SUBB A,#3CH JNC CE1 MODE3: MOV T2MOD,#00000001B MOV T2CON,#10001100B MOV RCAP2H,#0ECH MOV RCAP2L,#017H ;定时器T2,控制输出方波 SETB EA SETB ET2 SETB TR2 MOV TMOD,#01H MOV TL0,#0AFH ;脉宽检测 MOV TH0,#3CH SETB ET0 CE3: MOV B,0 LOOP5: JB P1.0,LOOP5 SETB TR0 LOOP6: JNB P1.0,LOOP6 CLR TR0 MOV A,B ;条件判断,脉宽在50ms到3s之间时候转换模式 CLR C SUBB A,#01H JC CE3 CLR C MOV A,B SUBB A,#3CH JNC CE3 LJMP MODE1 CTC2: CLR EA ;定时器1中断服务程序,控制输出方波。 CPL P3.0 MOV TL2,#78H ;输出占空比为50% MOV TH2,#0ECH SETB EA RETI CTC0: CLR EA INC B ;计时器扩展 MOV TL0,#0AFH MOV TH0,#3CH SETB EA RETI END 理论上好象没错,但是不能实现我想要的功能. 各位大大,帮忙看看,谢谢
|