单片机用汇编写两个数码管显示0到99循环的程序

单片机用汇编写两个数码管显示0到99循环的程序,第1张

1、新建项目,做好准备。

2、数码管段选表。

3、延时函数。

4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。

5、while(1) //死循环效果{} 。

6、dk = 1; //打开段选,P0 = leddata[i];,dk = 0; //关闭段选,delay(100);//延时效果。

7、选择效果,限制i值的循环范围。

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

    MOV A,#0FEH

    MOV R2,#10

LOOP:

    MOV P0,A

    LCALL DELAY

    MOV P0,#0FFH

    LCALL DELAY

    DJNZ R2,LOOP

    MOV R2,#10

    RL A

    SJMP LOOP

DELAY:

    MOV R3,#200

DLY:

    MOV R4,#250

    DJNZ R4,$

    DJNZ R3,DLY

    RET

    END

简单啊。

大致说来就是

你先开启个定时器,根据你选用的晶振,计算出你要用定时器定时的基准时间,

就假设是10毫秒吧。

然后给定时器的THx,TLx写入初值,开启中断,进行定时。

然后就等待中断。

在你响应中断的程序中,再次给单片机送入初值,

由于是10毫秒中断一次,因此我们设置几个“软件计数器

比如每此中断,软甲计数器+1,

例如“软件计数器1”在中断程序中计数100次,则是10ms100=1s

而“软件计数器2”在1的基础上继续计数100次,则是1S100=100S

而“软件计数器3”在2的基础上继续计数36次,则是100S36=3600S=1小时。

楼主的程序有两个明显错误:

(1)第3行指令 MOV BH,00 使首行指令MOV BX,0100 作废,

        使 BX = 0000,导致后面的指令MOV AL,[BX]读入AL的不是成绩数据。

(2)在DEGUG 环境输入程序,数值不加后缀H,默认为16进数,

         例如楼主程序中的 CMP AL,60,其中60默认为16进制数,即96D,

         导致统计结果错误。

我修改的程序及运行结果如以下截图所示,供参考:

你理解从程序上面执行下来到达 loop s后又去执行标号s处,这没错。然后就无限循环死,这就错了!汇编语言的循环指令LOOP是有条件的,这个隐含 *** 作和条件就是每循环一次,CX=CX-1,如果CX=0,循环就结束了。在这个程序中,循环3次结束。

mov cx,10

A:

loop A

;此时会执行A中的内容(CX)次,即10次~

;再同理

mov cx,10

B:

loop B

如果你要循环嵌套的话,需要用 "cmp" "jg" "jl"等

如果是

LOOP

等之类的循环是没有办法设置断点的

如果你有源程序,可以在循环体内增加判断的条件,然后在这个地方设置断点,待调试正确后再将这个新增加的判断去掉,或者增减

ecx

的数值

如果调试别人生成的可执行文件,那就没有办法了

以上就是关于单片机用汇编写两个数码管显示0到99循环的程序全部的内容,包括:单片机用汇编写两个数码管显示0到99循环的程序、用汇编语言编制循环闪烁灯程序、怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9317560.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存