单片机密码锁汇编程序计时汇编程序添加暂停和继续

单片机高手们谁会用汇编语言实现0~99间的计数、暂停、清零程序。对初学者实在是太难了。大神帮帮忙吧!_百度知道
单片机高手们谁会用汇编语言实现0~99间的计数、暂停、清零程序。对初学者实在是太难了。大神帮帮忙吧!
我有更好的答案
MOV SP: 共阴极数码管显示代码表DB
3FH,06H,5BH,4FH,66H ,#0
MOV R4,#250
DJNZ R7,@A+DPTR
DJNZ R6,DELAY1
RETT0ISR,#LOW ()
MOV R2;12345DB
6DH,7DH,07H,7FH
MOV A,#0T0ISR2,R0
CJNE A,#20,T0E
CJNE A,#100,T0ISR1T0ISR1,#0
SJMP LOOPDELAY.5:
INC R2LOOP1:
SJMP LOOPLOOP2:
SJMP LOOPLOOP3:
MOV R6,#20DELAY1:
MOV R7,#0LOOP:
LCALL DELAY
JB P3.5,LOOP
JNB P3,#LOW ()
MOV A,#TAB
MOVC A,@A+DPTR
MOV DPTRORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HABLE,#5FH
MOV TMOD,#01H
MOV TH0,#HIGH ()
MOV TH0,#HIGH ()
不行哦,下载到开发板没显示。
你得按一下键才开始显示,按一下,启动按两下,暂停按三下,清零按四下,启动................
高级工程师
3FH, 4FH, 66H,再按一下,停止;---------------------------------------T0_INT, @A + DPTR
P2, AT0_E, 6FH;5~9;---------------------------------------DLY:
RET;---------------------------------------END参考,;按一下,计时.5.baidu,再按一下,清零, T0_2
R2;http://zhidao, #06H
P3;0;P0, P2静态显示;设系统晶振为12MHz。;---------------------------------------.5.0 ~ 9.5;按键连接在P3.9:
RETI;---------------------------------------TAB.baidu.com/question/.html;显示个位
TL0, #(65536 - 5000) MOD 256
TH0, #(55536 - 5000) / 256
://hi.baidu.com/do_sermon/item/4fdbdde5b0c3" target="_blank">http://---------------------------------------M_LOOP
为您推荐:
其他类似问题
汇编语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机汇编延时程序
查看: 549|
摘要: 单片机汇编实现延迟的程序代码: DELAY: MOV R7,#250 ; D1: MOV R6,#250 ; D2: DJNZ R6,D2 ; DJNZ R7,D1 ; RET
如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢 ...
汇编实现延迟的程序代码:
DELAY: MOV R7,#250 ;
D1: MOV R6,#250 ;
D2: DJNZ R6,D2 ;
DJNZ R7,D1 ;
&&&&&&& 如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢?要想知其所以然,还得从汇编开始学起。
&&&&&&& 冒号前面的“DELAY”、“D1”、“D2”为语句行的名字,是为了程序的条件语句跳转用的,分号后面为注释,计算机执行时将过滤掉这些信息,最大限度减少代码长度,提高效率。
DELAY: MOV R7,#250 ; 名字为“DELAY”的语句:意思是将CPU内部内存RAM的R7位置填写为250(原来为0,为什么是0呢?因为任何程序开始执行前都要复位,就像我们打算盘要将算子复位一样,或者我们用沙盘写字,要将沙盘抹平类似)
D1: MOV R6,#250 ; 名字为“D1”的语句:将R6位置填写为250
D2: DJNZ R6,D2 ; 名字为“D2”的语句:将R6位置的250减1,如果为0就继续执行下一条,不为0就继续执行D2这一句,因为R6=250,所以这个语句要原地踏步执行250次!
DJNZ R7,D1 ; 这句没有名字,因为没有别的语句要跳到这里,所以就省略了。R7同样等于250,但它不是原地踏步,而是跳回了D1,这么干,D!、D2和本句将被循环执行250遍,需要强调的是:D2语句自身每次都要执行250遍,也就是执行了250*250=62500遍!
RET ;子程序结束(因为延时程序一般不作为独立程序存在,它只是一个子程序,也就是高级语言中的一个函数,看到这个字符,子程序将跳回到母程序,进行下一步)。
&&&&&&& 这个子程序这么反复地循环指令,到底有什么意义呢?又是怎么实现的延时程序呢?说起来计算机真是有点笨,它是*数程序执行的次数来累加时间的!也就是说语句本身就是为了浪费时间!哈哈,可笑吧?这就像你没有钟表,但是你知道你跑操场一圈是一分钟,然后就绕着操场跑了60圈,时间过了正好一小时一样。
&&&&&&& 如果是人的话,谁也不会笨到干这么累的活儿来计时,但计算机不一样,它不论静止还是运动,程序总是一拍一拍地运行着,所以它不累。
&&&&&&& 那么,计算机执行一个语句耗费的时间是多少呢?
&&&&&&& 以51型单片机为例:如果采用12MHz的晶振,运行一个机器周期为1微秒,具体为什么暂时不管。单片机的指令系统分为单周期、双周期和三周期指令(三周期实际上占用四个周期,多余一个周期浪费掉),这是有指令的内容决定的,内容多的单周期执行不完,肯定要延长了。子程序里面的MOV是单周期、DJNZ是双周期。
&&&&&&& 这样,我们就可以算算这个子程序累计进行了多少个周期,然后乘以1微秒,就算出它占用的时间,也就是延时的时长了!
&&&&&&& 第一句:DELAY: MOV R7,#250 ;执行了一次,没有任何语句跳转给它,单周期。1
&&&&&&& 第二句:D1: MOV R6,#250 ;执行了250次,全部是第四句跳过来的,单周期。250
&&&&&&& 第三句:D2: DJNZ R6,D2 ;原地执行了250次,从第二句顺延(第二句执行完,没有其它跳转的话肯定要执行第三句)过来250次,也就是250*250=62500次,双周期*2。125000
&&&&&&& 第四句:DJNZ R7,D1 ; 从第三句顺延过来250次,双周期*2。500
&&&&&&& 总计:1+250+=1257501次,乘以1微秒,换算约为0.13秒。
&&&&&&& 我们可以通过调整R6、R7的数值来调整延时的长度。事实上,8位计算机中,R6之类的工作寄存器地址最大只能放下255的十进制数值,因此要通过上述程序达到更长的延时是办不到的。
&&&&&&& 那怎么办呢?
&&&&&&& 我们可以再增加一个R4,让上述的程序最多可以循环255遍,这样,0.13秒的200多倍就是30秒上下了,不够的话再增加循环,又可以扩大200多倍,当然,工作寄存器的数量是有限的,因此这个延时程序也是有限的,如果还不够用怎么办呢,就目前我所学的知识,只能在母程序里面设置循环了,也就是让这个子程序在母程序里面继续循环......
上一篇:下一篇:
Powered by &
这里是—这里可以学习 —这里是。
栏目导航:21ic官方微信-->
请完成以下验证码
51进入中断程序后,定时器是否还在继续工作?
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
我要用定时器实时输出可调脉冲,中断程序内设置脉冲参数,不知道进入中断后,定时器是否还可以工作?
等<span id="liker_count_人点赞
只要不关就一直工作,直到单片机坏坏
等<span id="liker_count_人点赞
有可能导致定时器的中断进不了~~~~~
等<span id="liker_count_人点赞
LZ的中断是外中断还是定时中断?
若是外中断的话,可把外中断级别设置为低于定时中断,以确保定时中断
等<span id="liker_count_人点赞
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
确实是外中断。
我也考虑到定时器进不了中断,即便把定时器的级别设置到最高,也有这种可能,这样就会带来输出脉冲的误差。外中断是个设置按键,之所以按键用中断方式,是考虑到节省CPU时间。因为脉冲要实时输出,随着中断中改变的参数实时输出,一会也不能停,并且误差越小越好。有没有什么更好的方法?
等<span id="liker_count_人点赞
再怎么快也得等到定时中断发生,才能更改
其实查询方法完全可以胜任,查询一次要远快于你的按键动作.按键消个抖也得几十ms,主程序兜一圈该不会几十ms吧(是的话,说明你的程序结构有缺陷)
等<span id="liker_count_人点赞
资深工程师, 积分 12603, 距离下一级还需 7397 积分
资深工程师, 积分 12603, 距离下一级还需 7397 积分
资深工程师, 积分 12603, 距离下一级还需 7397 积分
资深工程师, 积分 12603, 距离下一级还需 7397 积分
中断的优先级只在多个中断源同时触发中断时才起作用
当正在处理一个较低优先级的中断时,如果没有中断嵌套机制再高优先级别的中断也进不来。所以楼主要求定时中断随时都要被及时响应就必须使用中断嵌套,如果你的单片机不支持中断嵌套,那你就要牺牲这一要求或换单片机。
等<span id="liker_count_人点赞
技术总监, 积分 47540, 距离下一级还需 2460 积分
技术总监, 积分 47540, 距离下一级还需 2460 积分
技术总监, 积分 47540, 距离下一级还需 2460 积分
技术总监, 积分 47540, 距离下一级还需 2460 积分
在MCS-51中完全可以实现中断嵌套
将定时器中断定为高优先级,而外部中断定为低优先级,这样就不必担心定时器中断程序进不了的问题。当然你的定时器中断服务程序不能太长,以至于影响下一次定时器中断。
等<span id="liker_count_人点赞
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
助理工程师, 积分 1124, 距离下一级还需 876 积分
谢谢几位的回答。
程序正在调试,有问题还会来请教大家。
等<span id="liker_count_人点赞
初级技术员, 积分 85, 距离下一级还需 15 积分
初级技术员, 积分 85, 距离下一级还需 15 积分
初级技术员, 积分 85, 距离下一级还需 15 积分
初级技术员, 积分 85, 距离下一级还需 15 积分
定时器是个独立的东东,跟CPU运行没有关系.
等<span id="liker_count_人点赞
高级技术员, 积分 877, 距离下一级还需 123 积分
高级技术员, 积分 877, 距离下一级还需 123 积分
高级技术员, 积分 877, 距离下一级还需 123 积分
高级技术员, 积分 877, 距离下一级还需 123 积分
定时器工作和中断工作没影响啊
定时器要不工作,你得手动把定时器停才行
等<span id="liker_count_人点赞
扫描二维码,随时随地手机跟帖
涓涓之细流
发帖类勋章
社区建设奖章
等级类勋章
时间类勋章
技术奇才奖章
人才类勋章
时间类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
技术领袖奖章
人才类勋章
永恒之光奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
核心会员奖章
等级类勋章
奔腾之江水
发帖类勋章
技术高手奖章
人才类勋章
荣誉元老奖章
等级类勋章
希望之星奖章
等级类勋章
技术新星奖章
人才类勋章
您需要登录后才可以回帖
热门推荐 /3汇编语言编写定时器,实现秒表功能,可按键暂停_百度知道
汇编语言编写定时器,实现秒表功能,可按键暂停
我有更好的答案
采纳率:64%
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。3548人阅读
计时类(11)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:412983次
积分:3887
积分:3887
排名:第9352名
原创:542篇
评论:13条
(window.slotbydup = window.slotbydup || []).push({
id: '4740890',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 单片机交通灯汇编程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信