接收部分的指示灯还没接收到信号时,自己会随机的闪烁,复位后还是如此。 发射部分按下开关后,发射指示灯一直亮着。 哪位好心人能帮忙看一下,自己的水平有限,有些东西卡住了,想了很久都调试不行
接收程序 ;t0:红外线脉冲计数器 ;t1:计数时间控制器 ;sw为控制方式选择开关,闭合时:单片机输出为“互锁”控制方式,断开时:单片机输出控制为单路控制方式 x0 equ 30 ;计数次数设定 x1 equ 60 x2 equ 90 x3 equ 120 x4 equ 150 x5 equ 180 fz equ 10 sw bit p3.2 ;控制方式选择开关 bz bit 00h ;bz为判定标志,是为0,非为1 ORG 0000H aJMP START ORG 0013H ;int1入口 LJMP intout1 ORG 001bH ;定时器T1入口 aJMP intt1 org 0030h intout1: clr ex1 ;清外部中断1中断允许位 MOV TH1,#03ch ;定时时间约为100ms MOV TL1,#0b0h setb tr1 ;启动T1计时 setb et1 ;允许T1中断 mov th0,#0 mov tl0,#0 setb tr0 ;启动T0计数 reti intt1: clr tr0 ;清T0运行控制位,下次从新计数 mov a,tl0 mov b,x0 ;X0 acall jspd jb bz,d01 cpl p0.0 jb sw, d01 mov a,p0 orl a,#0feH mov p0,a ajmp d06 d01: mov b,x1 ;X1 acall jspd jb bz,d02 cpl p0.1 jb sw ,d02 mov a,p0 orl a,#0fdH mov p0,a ajmp d06 d02: mov b,x2 ;X2 acall jspd jb bz,d03 cpl p0.2 jb sw ,d03 mov a,p0 orl a,#0fbH mov p0,a ajmp d06 d03: mov b,x3 ;X3 acall jspd jb bz,d04 cpl p0.3 jb sw ,d04 mov a,p0 orl a,#07H mov p0,a ajmp d06 d04: mov b,x4 ;X4 acall jspd jb bz,d05 cpl p0.4 jb sw ,d05 mov a,p0 orl a,#0efH mov p0,a ajmp d06 d05: mov b,x5 ;X5 acall jspd jb bz,d06 cpl p0.5 jb sw ,d06 mov a,p0 orl a,#0dfH mov p0,a ajmp d06 d06: setb ex1 reti jspd: push acc clr bz cjne a,b,jspd1 ajmp jspd5 jspd1: jc jspd2 subb a,b ajmp jspd3 jspd2: mov r1,b mov b,a mov a,r1 clr c subb a,b jspd3: cjne a,fz,jspd4 ajmp jspd5 jspd4: jc jspd5 setb bz pop acc ret jspd5: clr bz pop acc ret start: MOV P0,#0FFH mov p3,#0ffh clr it1 ;int1中断为电平触发 SETB EX1 ;允许int1中断 MOV TMOD,#15H ;设置T0为计数方式、T1为计时方式1 setb ea ;开所有中断 xh: nop ajmp xh end
发送程序 ;k0-k5:为遥控按钮 ;t1:红外线发射时间控制器 ;t0:红外线发射频率控制器 $NOMOD51 #include<reg51.h>
k0 BIT P1.0 ;开关定义 k1 BIT P1.1 k2 BIT P1.2 k3 BIT P1.3 k4 BIT P1.4 k5 BIT P1.5 bz bit 00h k0h equ 0f1h k0l equ 0c8h ;k0键输出频率300Hz833(3640) k1h equ 0f8h k1l equ 0ech ;k1键输出频率600Hz417(1812) k2h equ 0feh k2l equ 0eah ;k2键输出频率900Hz278 k3h equ 0ffh k3l equ 030h ;k3键输出频率1200Hz208 k4h equ 0ffh k4l equ 059h ;k4键输出频率1500Hz167 k5h equ 0ffh k5l equ 075h ;k5键输出频率1800Hz139 ORG 0000H aJMP START ORG 000BH ;定时器T0入口 aJMP intt0 ORG 001bH ;定时器T1入口 aJMP intt1 org 0030h intt0: cpl p3.4 ;T0中断 mov a,r1 mov th0,a mov a,r2 mov tl0,a reti intt1: clr tr0 ;关闭定时器t0和t1的外部中断 CLR ET0 clr tr1 clr et1 setb bz setb p3.4 reti start: MOV P1,#0FFH ;主程序开始 mov p3,#00h MOV TMOD,#11H ;计数器T0、T1工作在方式1
setb ea ;开所有中断 xh: jb k0,d01 ;K0 acall ys Jb k0,d01 ;k0 jnb k0,$ acall sett1 mov r1,k0h mov r2,k0l acall sett0 jnb bz,$ d01: jb k1,d02 ;K1 acall ys Jb k1,d02 ;k1 jnb k1,$ acall sett1 mov r1,k1h mov r2,k1l acall sett0 jnb bz,$ D02: jb k2,d03 ;K2 acall ys Jb k2,d03 ;k2 jnb k2,$ acall sett1 mov r1,k2h mov r2,k2l acall sett0 jnb bz,$ D03: jb k3,d04 ;K3 acall ys Jb k3,d04 ;k3 jnb k3,$ acall sett1 mov r1,k3h mov r2,k3l acall sett0 jnb bz,$ D04: jb k4,d05 ;K4 acall ys Jb k4,d05 ;k4 jnb k4,$ acall sett1 mov r1,k4h mov r2,k4l acall sett0 jnb bz,$ D05: jb k5,d06 ;K5 acall ys Jb k5,d06 ;k5 jnb k5,$ acall sett1 mov r1,k5h mov r2,k5l acall sett0 jnb bz,$ d06: ajmp xh ys: mov r6,#128 ys1: djnz r6,ys1 ret sett1: MOV TH1,#3ch ;定时时间约为100ms MOV TL1,#0b0h setb tr1 ;启动T1计时 setb et1 ;允许T1中断 clr bz ret sett0: MOV TH0,r1 MOV TL0,r2 setb tr0 setb et0 ret end
|