永发信息网

我是单片机初学者,定时器中断问题不太明白! 请

答案:4  悬赏:30  手机版
解决时间 2021-03-23 11:17
  • 提问者网友:浪荡绅士
  • 2021-03-22 14:01
我是单片机初学者,定时器中断问题不太明白! 请
最佳答案
  • 五星知识达人网友:一袍清酒付
  • 2021-03-22 15:10
第一个问题,不是一个机器周期执行一条语句,执行一条语句有的一个周期,比如MOV R2,#1;有的两个周期,比如DJNZ R2,$;还有的4个周期,比如 MUL AB。
第二个问题,是的。
第三个问题,启动TR=1时,定时器开始在后台自动计数,程序同步执行。相互不影响。如果定时时间到,产生溢出信号,申请中断,此时正在执行的语句执行完,进入中断服务程序。
全部回答
  • 1楼网友:三千妖杀
  • 2021-03-22 18:21
1、 一个机器周期不一定执行一条语句,有时候要几个机器周期才执行一条语句
2、 好久没用51了,貌似是打开TR=1就开始中断了。
3、 (1)对 (2)要是定时还没溢出程序就执行语句2了,这是OK的,再执行语句2的时候,当定时器定时溢出中断了,就会去执行定时器的中断程序,把语句2晾在一边,再执行完定时器中断程序后,再继续进行语句2的程序
记住,是继续执行语句2,不是重头开始执行语句2。即执行到语句2的哪一段(比如如A段)的时候进入了定时器中断,等待中断程序执行完后,就从语句2的那一段后面(即A段后面)继续执行语句2程序
  • 2楼网友:蕴藏春秋
  • 2021-03-22 16:48
1.得看是什么语句,也要看单片机晶振是多少,另外是多少T的。
通常对12M晶振,12T(一个机器周期是12个时钟周期)的51单片机,有的指令(汇编)是1个机器周期,有的是2个,还有两条指令是4个(乘,除),这样对应的就需要1us,2us,4us
如果是C的语句,就要看编译成的机器指令是什么样的
2.中断都是这样执行的
3.你想实现的目的是让单片机等待,这种情况就是让单片机这段时间什么都不做,可以通过软件延时比如for(i=0;i<1000;i++);循环 让程序一直在数数 数完了 往下执行 你想延时多久 就让它数多久,还有一种比较好的办法就是定时器延时,因为不占用cpu资源,在延时的同时可以做其他事,延时到 置位一个标志 语句2通过判断这个标志来执行。你的后台这种理解是错误的,定时器是个硬件,他根据时钟频率在计数,TR=1让定时器开始工作,定时到了会给cpu一个中断信号,不会去占用cpu追问嗯,软件延时我知道。但是我想通过定时器实现精确定时,然后想到底了解定时器是怎样工作的。定时器是硬件?这个怎么去理解,是不是单片机就有这个定时功能,那定时器延时的时候CPU还可以用来干其他的什么?(不就是延时吗?)那个中断标志是要重新自己设定一个变量还是定时器里面的寄存器自己置位呢?多谢解答追答定时器是一个硬件,你可以去查看单片机内部结构,只不过集成在了一个单芯片上。当你用TR=1开启定时器后定时器就工作了,它计它的数和cpu不相关的,只是当他计数到的时候会有个中断信号传到cpu,cpu再根据你的设置是否响应这个中断,如果响应就会进入中断服务程序,执行完了再跳回来。在这个计时阶段,你的cpu是不会理睬这个定时器的,这个时候你就可以执行其他程序,等它计时到来响应就行了,标志可以自己设置一个变量,定时器也有一个溢出标志,就拿(12MHz)51来说,顶多计时65ms就会溢出,如果你要计时更长时间比如1s,那么定时器的自己的寄存器的溢出标志意义不大,你必须不停重装初值,直到计满1s,你自己设定的变量标志再置位,就行了
  • 3楼网友:神也偏爱
  • 2021-03-22 15:46
1 , 不对 各种指令的机器周期 不一样,请看单片机 指令系统。
2 , 对 一般在 出现中断后 执行完当前指令 后马上 进入中断服务程序,
中断返回 继续执行下面程序
3 , 不正确,应该是 启动 TR=1 定时器/计数器 开始 +1 计数, 程序是正常运行的,
定时器/计数器 中断 和 其它中断 一样,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯