打印
[疑难问答]

求指出错误原因和提供更正可以正常运行的程序

[复制链接]
598|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shashaa|  楼主 | 2016-8-18 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序原设计要求是:                             2数码管显示00-99秒的,要求用P1.0做按键输入,而且要实现一键式控制:第一次按下又放开为启动,第二次按下又放开为暂停,暂时还需保持数据,第三次按下又放开为返回主程序重新开始并清除数据.然后就是再按就按上述依次循环。下面是有错误的没完善的程序:



RG 00H;
START:
     MOV P0,#00H;  显示00
     JB  P1.0,$;   当按钮按下则继续
     CALL FIR;     消除开关的抖动
     JNB P1.0,$;   判断有没有放开按钮
     MOV R0,#00H;  计时初始值00
PR1:
   MOV A,R0;      将初始值载入ACC
   MOV P0,A;      输出至P0
   MOV R5, #10;   延时1秒。
AD1:
   MOV R6,#200;  延时用寄存器
   CALL DEY;     调用延时子程序。
   DJNZ R5,PR1;  
   MOV A,R0;
   ADD A,#01H;  计时值加1,
   DA  A;        十进制调整
   MOV R0,A;    返回计时用寄存器
   JMP PR1;     重复计时动作
PR2:                 ; 第二次按按钮
    CALL FIR;        消除开关的抖动
    JB P1.0, PR3;    如果放开按钮,则跳至PR3。
    JMP PR2;
PR3:
    JB P1.0,$;     第三次按按钮
    CALL FIR;      消除开关的抖动
PR4:
    JB P1.0,START;  放开按钮则跳至START清零。
    JMP PR4;
DEY:          ;      延时子程序。
    MOV R7,#248;
    JNB P1.0,PR2;
    DJNZ R7,$;
    DJNZ R6,DEY;
FIR:
    MOV R6,#60;   消除抖动30ms。
D1:
   MOV R7,#248;
   DJNZ R7,$;
   DJNZ R6,D1;
   RET;
   END;



求指出错误原因和提供更正可以正常运行的程序,谢谢各位高手了!
沙发
qiangweii| | 2016-8-18 19:57 | 只看该作者
汇编让人头疼, 用C 来做太简单了! 什么单片机都可以, 最好用RTC时钟源, 1秒一次中断

使用特权

评论回复
板凳
litengg| | 2016-8-18 20:06 | 只看该作者
来简单的,都是没有通过电路板测试
JMPKEY MACRO LL
     JB  P1.0,LL;第一次按下判断
     CALL FIR  ;消除开关的抖动
     JB  P1.0,LL;第一次按下判断
     JNB P1.0,$  ;等待按钮松开
     ENDM
ORG 00H
START:
     MOV P0,#00H;  显示00
     JMPKEY START
     MOV R0,#00H;  计时初始值00
PR1:
   MOV A,R0;      将初始值载入ACC
   MOV P0,A;      输出至P0
   MOV R5, #10;   延时1秒。
AD1:
   MOV R6,#200;  延时用寄存器
   CALL DEY;     调用延时子程序。
   DJNZ R5,PR1;  
   MOV A,R0;
   ADD A,#01H;  计时值加1,
   DA  A;        十进制调整
   MOV R0,A;    返回计时用寄存器
   JMPKEY PR1  
PR2:   
    JMPKEY PR2  
   JMP START
DEY:          ;延时子程序。
    MOV R7,#248;
    DJNZ R7,$;
    DJNZ R6,DEY;
RET
FIR:
    MOV R6,#60;   消除抖动30ms。
D1:
   MOV R7,#248;
   DJNZ R7,$;
   DJNZ R6,D1;
   RET;
   END;

使用特权

评论回复
地板
androidbus| | 2016-8-18 20:07 | 只看该作者
不知道阁下的电路板LED是否低电平点亮?

使用特权

评论回复
5
feiqi1| | 2016-8-18 20:11 | 只看该作者
JMPKEY MACRO LL  
ENDM  
是宏定义了一个JMPKEY LL宏,带变量LL,
在程序里头可以直接使用

使用特权

评论回复
6
shashaa|  楼主 | 2016-8-18 20:13 | 只看该作者
qiangweii 发表于 2016-8-18 19:57
汇编让人头疼, 用C 来做太简单了! 什么单片机都可以, 最好用RTC时钟源, 1秒一次中断 ...

先学好汇编语言,再来学C就比较容易一点吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝