标题:
51单片机红外线控制数码管汇编语言程序有问题
[打印本页]
作者:
wuyuetian
时间:
2021-6-10 17:40
标题:
51单片机红外线控制数码管汇编语言程序有问题
上传有开发板的原理图,麻烦大佬帮忙一下看看,我这个按遥控器按键它显示不对,也不是每个按键按下去都会数码管亮,哪点程序出问题了,求指导应该如何排查错误
DQ EQU P3.3
ADDR0 EQU P1.0
ADDR1 EQU P1.1
ADDR2 EQU P1.2
ADDR3 EQU P1.3
ENLED EQU P1.4
ORG 000H
LJMP MAIN
ORG 000BH
LJMP ZD
MAIN:
MOV TH0,#0FEH
MOV TL0,#0FEH
MOV TMOD,#01H
SETB ET0
SETB TR0
SETB EA
CLR ENLED
CLR ADDR0
CLR ADDR1
CLR ADDR2
SETB ADDR3
SJMP $
ZD:
CLR EA
MOV R3,#10
SB: LCALL YS1 ;延时9000微妙
DJNZ R3,SB
JB DQ,EXIT
;---------------以上对检测9000微妙的初始低电平
JNB DQ,$
LCALL YS2 ;延时4.74毫秒避开4.5毫秒结果码
MOV R1,#40H ;设定起始RAM区
MOV R2,#4 ;四组八位数据
PP: MOV R3,#8
JJJ: JNB DQ,$ ;等待地址码第一个高电平信号
LCALL YS1 ;延时882微妙去判断此时的信号高低电平状态
MOV C,DQ
JNC UU
LCALL YS3 ;延时1000微妙
UU: MOV A,@R1 ;将R1的地址给它
RRC A ;将C转到最低位
MOV @R1,A ;再将A存到r1中
DJNZ R3,JJJ ;循环接受地址码的高8位
INC R1
DJNZ R2,PP ;接受完16位地址码和8位数据吗和8位数据反码
;---------------以上将16位地址码和8位数据吗和8位数据反码存放在1AH,1BH,1CH,1DH
MOV A,42H
CPL A
XRL A,43H ;将两数据作比较
JNZ EXIT ;不相同则丢弃退出解码
MOV DPTR,#TABLE
MOV A,43H
ANL A,#0FH ;求与取其低四位
MOVC A,@A+DPTR
MOV 44H,A ;将查表得到的数字存到1EH中
MOV A,43H
SWAP A ;高四位与低四位交换
ANL A,#0FH ;求与取其高四位
MOVC A,@A+DPTR
MOV 45H,A ;将查表到的数据放在45H中
;---------------以上将接受到的数据码与数据反码经过查表后存放在44H和45H中
MOV R7,#20H
DISP:
MOV P0,45H ;将数据送到数码管中
CLR P2.1
LCALL YS2
SETB P2.1
MOV P0,44H
CLR P2.2
LCALL YS2
SETB P2.2
CLR P1.6
LCALL YS2
SETB P1.6
DJNZ R7,DISP
EXIT: SETB EA
RETI ;退出解码程序
;延时882微秒
YS1: MOV R4,#03H
DL0:
MOV R5,#91H
DJNZ R5,$
DJNZ R4,DL0
RET
YS2:
;延时4740微秒
MOV R6,#03H
DL1:
MOV R4,#08H
DL2:
MOV R5,#61H
DJNZ R5,$
DJNZ R4,DL2
DJNZ R6,DL1
RET
YS3:
;延时1000微秒
MOV R4,#01H
DL3:
MOV R6,#8EH
DL4:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL4
DJNZ R4,DL3
RET
TABLE: DB 0C0h,0F9h,0A4h,0B0h,99h,92h
DB 82h,0F8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh
KST-51开发板原理图.pdf
2021-6-10 17:38 上传
点击文件名下载附件
111.52 KB, 下载次数: 7
作者:
yzwzfyz
时间:
2021-6-11 15:07
本帖最后由 yzwzfyz 于 2021-6-12 08:39 编辑
看了你的原理图,相对来说比较复杂。
显示是扫描的,所以你的延时不能用“硬延时”,即调用 YSx与扫描显示是有冲突的。
例如显示分8次扫描,每次4ms,如果在这4ms中,你多次调用了 YSx延时,而延时的总时间超过了4ms,这时就破坏了扫描显示的规则。也就会发生显示闪烁、停顿……。
你必须画出显示框图,并走通流程。重要的是仔细规划显示的时序!!!同时红外解码的时序逻辑,也在其中。
如果不是老道的单片机设计人员,搞定这张图,是很难的,
作者:
Y_G_G
时间:
2021-6-11 17:10
代码是不是网上复制的,如果是,那就看一下延时那
网上的一些代码是AT8051的,而大多用的是STC8051
指令速度是不一样的
很有可能就是你按一下遥控数码管就会闪,或者是卡住,运气好的话还能有那么一两下好像是可以的
这基本是单片机时钟不一样造成的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1