找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5455|回复: 6
打印 上一主题 下一主题
收起左侧

[紧急求助]大家帮忙看一段程序

[复制链接]
跳转到指定楼层
楼主
ID:16658 发表于 2009-8-29 09:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家看一下这个程序,我想让单片机显示RIGHT,但是一直显示ERROR:

      显示子程序DISPLAY是正确的,大家不用看了,就是比较密码子程序TEST的问题?

我测试时把最后三行改为 :R:      SETB MMRE
                                            RET
                                   END  
显示RIGHT,这时程序的执行流程与原先相同(不关程序逻辑正误问题)。




程序:
             MMRE    EQU 00H  ;密码正确与否标志,用位寻址区第一位为标志                  

             ORG 0050H
TABLE0: DB 79H,77H,77H,3FH,77H                        ;显示:ERROR
TABLE1: DB 77H,30H,7DH,76H,02H                       ;显示:RIGHT
TABLE2: DB 07H,0BH,0FH,13H,17H,1BH,1FH,23H    ;密码:1 2 3 4 5 6 7 8

;-------------------------------主程序入口-------------------------------------
             ORG 0000H
             LJMP MAIN

             ORG 0100H
MAIN:       
             MOV 30H,#07H       ;用八字节存储正确的密码
             MOV 31H,#0BH
             MOV 32H,#0FH
             MOV 33H,#13H
             MOV 34H,#17H
             MOV 35H,#1BH
             MOV 36H,#1FH
             MOV 37H,#23H

             LCALL TEST                ;就这个比较密码子程序的问题?

             MOV C,MMRE               ;根据标志位选择不同的显示内容
             JC M2
             MOV DPTR,#TABLE0    ;显示:ERROR
             SJMP M3
M2:        MOV DPTR,#TABLE1    ;显示:RIGHT
M3:       MOV R3,#5
            LCALL DISPLAY             ;调用显示子程序,循环
            LJMP MAIN    

;--------------------------------显示子程序------------------------------------
DISPLAY:     MOV P2,#0            ;清0复位
                  ANL P1,#0F8H        ;用与保护P1口高5位不受影响,将低三位清0,
                                              ;选择第一个数码管
                   MOV R4,#0
L2:              MOV A,R4
                   MOVC A,@A+DPTR        ;用查表法得到A对应在表中的段值
                   MOV P2,A            ;输出显示
                   LCALL DELAY0        ;加入延时,使每位显示保持一段时间
                   MOV P2,#0            ;延时过后,清0,为下一位显示做准备    
                   INC R4                ;移到下一个数据
                   DJNZ R3,L3            ;显示完指定个数返回,否则进入下一个显示
                   RET
L3:              INC P1                ;选择下一位数码管
                   SJMP L2

;---------------------------------延时子程序-----------------------------------
DELAY0:         MOV R5,#20
                     DJNZ R5,$
                     RET
    
;----------------------------测试密码正确与否子程序----------------------------
TEST:        MOV R0,#30H
                 MOV DPTR,#TABLE2
                 MOV R2,#0
COMP:        MOV A,R2
                 MOVC A,@A+DPTR
                 MOV 0FFH,A
                 MOV A,@R0
                 CJNE A,0FFH,R
                 INC R0
                 INC R2
                 CJNE R0,#38H,COMP
                 SETB MMRE
R:              RET

END

/********************************** END OF FILE ******************************/    

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:16658 发表于 2009-8-29 09:11 | 只看该作者
 就是最后这一段程序:
TEST:        MOV R0,#30H
                 MOV DPTR,#TABLE2
                 MOV R2,#0
COMP:        MOV A,R2
                 MOVC A,@A+DPTR
                 MOV 0FFH,A
                 MOV A,@R0
                 CJNE A,0FFH,R
                 INC R0
                 INC R2
                 CJNE R0,#38H,COMP
                 SETB MMRE
R:              RET

我调试时也走到 SETB MMRE ,如果在这个子程序的其它地方 写上 SETB MMRE 显示:REIGHT,但是源程序执行了 SETB MMRE 但是现实:ERROR?
回复

使用道具 举报

板凳
ID:14855 发表于 2009-8-29 17:04 | 只看该作者
CJNE R0,#38H,COMP

你去把书看下,然后把CJNE这个指令的含义好好的理解下。希望你能够深刻的理解掉它。
回复

使用道具 举报

地板
ID:14855 发表于 2009-8-29 17:04 | 只看该作者
ret是结束,你还要检查SETB MMRE这个指令是为了什么服务的。
回复

使用道具 举报

5#
ID:15306 发表于 2009-8-29 21:01 | 只看该作者
                MOV R2,#0
COMP:        MOV A,R2
                 MOVC A,@A+DPTR


A中为显示内容,根据你的语句,A中的内容始终为0;
回复

使用道具 举报

6#
ID:14095 发表于 2009-10-26 20:14 | 只看该作者

好好看书

回复

使用道具 举报

7#
ID:14095 发表于 2009-10-26 20:14 | 只看该作者
我也不会
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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