找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1683|回复: 2
收起左侧

51单片机红外线控制数码管汇编语言程序有问题

[复制链接]
ID:928089 发表于 2021-6-10 17:40 | 显示全部楼层 |阅读模式
上传有开发板的原理图,麻烦大佬帮忙一下看看,我这个按遥控器按键它显示不对,也不是每个按键按下去都会数码管亮,哪点程序出问题了,求指导应该如何排查错误
                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

111.52 KB, 下载次数: 7

回复

使用道具 举报

ID:123289 发表于 2021-6-11 15:07 | 显示全部楼层
本帖最后由 yzwzfyz 于 2021-6-12 08:39 编辑

看了你的原理图,相对来说比较复杂。
显示是扫描的,所以你的延时不能用“硬延时”,即调用 YSx与扫描显示是有冲突的。
例如显示分8次扫描,每次4ms,如果在这4ms中,你多次调用了 YSx延时,而延时的总时间超过了4ms,这时就破坏了扫描显示的规则。也就会发生显示闪烁、停顿……。
你必须画出显示框图,并走通流程。重要的是仔细规划显示的时序!!!同时红外解码的时序逻辑,也在其中。
如果不是老道的单片机设计人员,搞定这张图,是很难的,
回复

使用道具 举报

ID:401564 发表于 2021-6-11 17:10 | 显示全部楼层
代码是不是网上复制的,如果是,那就看一下延时那
网上的一些代码是AT8051的,而大多用的是STC8051
指令速度是不一样的
很有可能就是你按一下遥控数码管就会闪,或者是卡住,运气好的话还能有那么一两下好像是可以的
这基本是单片机时钟不一样造成的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表