单片机定时器的问题 汇编程序
由AT89S52内部定时器0,按方式1工作,即作为16位定时器使用每0.05秒T1溢出中断一次。P1口的P1.0~P1.8分别接8个发光二极管。要求编写程序模拟一时序控制...
由AT89S52内部定时器0,按方式1工作,即作为16位定时器使用每0.05秒T1溢出中断一次。P1口的P1.0~P1.8分别接8个发光二极管。要求编写程序模拟一时序控制装置。开机后按以下顺序循环, L4,L5→L3L6亮→L2,L7亮→L1,L8亮→L2,L7亮→L3,L6亮→L4,L5亮→L1,L2,L3,L4亮→L5,L6,L7,L8亮→灭,共10种状态,每种状态的持续时间为0.5秒。然后再从头循环
一。在上面的程序中已经设定了定时器的初值,为什么下面还要设置初值
二。设置的R2有什么作用 DJNZ R2,M那句不是把程序直接调到结束那儿了吗 展开
一。在上面的程序中已经设定了定时器的初值,为什么下面还要设置初值
二。设置的R2有什么作用 DJNZ R2,M那句不是把程序直接调到结束那儿了吗 展开
2个回答
展开全部
“设置的R2有什么作用 DJNZ R2,M那句不是把程序直接调到结束那儿了吗”
这是中断计时最常用的方法了,一点也不萌,因中断定时只是0.05秒,题目要求是每种状态持续0.5秒改变一次,这就需要对中断计数,计数10次中断延时才是0.5秒,而没有到10次时,那延时不够吗,就直接从中断返回了,就是你说的:把程序直接调到结束那儿了,只有到了10次才够0.5秒,才读出彩灯的状态从P0口输出。这个计数器用是就是R2,是减法计数器,每减到0就说明中断够10次了,就要执行DJNZ R2,M下面的程序了,不仅要输出灯的状态,还要为下一次计10做准备,所以还要重新赋值,MOV R2,#14H。不同的是,程序中R2赋值是20,那实际的延时为1秒了,即每种状态持续时间为1秒了,与题目不符了,应该是10就对了。
这是中断计时最常用的方法了,一点也不萌,因中断定时只是0.05秒,题目要求是每种状态持续0.5秒改变一次,这就需要对中断计数,计数10次中断延时才是0.5秒,而没有到10次时,那延时不够吗,就直接从中断返回了,就是你说的:把程序直接调到结束那儿了,只有到了10次才够0.5秒,才读出彩灯的状态从P0口输出。这个计数器用是就是R2,是减法计数器,每减到0就说明中断够10次了,就要执行DJNZ R2,M下面的程序了,不仅要输出灯的状态,还要为下一次计10做准备,所以还要重新赋值,MOV R2,#14H。不同的是,程序中R2赋值是20,那实际的延时为1秒了,即每种状态持续时间为1秒了,与题目不符了,应该是10就对了。
展开全部
在上面的程序中已经设定了定时器的初值,为什么下面还要设置初值?
首先为什么要重新装载初值,因为你用的不是自动重载模式,每次进入定时中断之后,不进行重装在,那么下一次就不会进入定时中断!
首先为什么要重新装载初值,因为你用的不是自动重载模式,每次进入定时中断之后,不进行重装在,那么下一次就不会进入定时中断!
更多追问追答
追问
这样的话,上面的设定定时器的程序是不是可以不写了
追答
当然要写!你要先进入一次中断,然后在重新装载定时器初始值,才能保证每次都是间隔相同的时间进入中断 比如50ms
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询