我是单片机初学者,定时器中断问题不太明白! 请
我是单片机初学者,定时器中断问题不太明白!不知道我问的对不对!1,假如说一个程序有3条语句,分别为1,2,3。是不是一个机器周期执行一条语句?2,如果是外部中断的话,假如...
我是单片机初学者,定时器中断问题不太明白!
不知道我问的对不对!
1,假如说一个程序有3条语句,分别为1,2,3。是不是一个机器周期执行一条语句?
2,如果是外部中断的话,假如在执行到语句1时,有中断指令,就先执行中断指令,然后再回来执行语句2?
3,如果是定时器/计数器中断,是不是在启动TR=1时程序就开始在后台进行+1的操作了,与此同时程序在同步进行?如果是的话,以定时器为例,我想在执行完语句1后延时再执行语句2,但是按照定时器的+1运算和程序语句执行是同步的,要是在定时器的定时时间还没到时,程序已经运行到语句2了怎么办? 主要就是想问问这里有关时间差的问题。
我是初学者,问题比较幼稚,可能有些地方问的不对,请包含!谢谢大家! 展开
不知道我问的对不对!
1,假如说一个程序有3条语句,分别为1,2,3。是不是一个机器周期执行一条语句?
2,如果是外部中断的话,假如在执行到语句1时,有中断指令,就先执行中断指令,然后再回来执行语句2?
3,如果是定时器/计数器中断,是不是在启动TR=1时程序就开始在后台进行+1的操作了,与此同时程序在同步进行?如果是的话,以定时器为例,我想在执行完语句1后延时再执行语句2,但是按照定时器的+1运算和程序语句执行是同步的,要是在定时器的定时时间还没到时,程序已经运行到语句2了怎么办? 主要就是想问问这里有关时间差的问题。
我是初学者,问题比较幼稚,可能有些地方问的不对,请包含!谢谢大家! 展开
4个回答
展开全部
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
通常对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,你自己设定的变量标志再置位,就行了
展开全部
第一个问题,不是一个机器周期执行一条语句,执行一条语句有的一个周期,比如MOV R2,#1;有的两个周期,比如DJNZ R2,$;还有的4个周期,比如 MUL AB。
第二个问题,是的。
第三个问题,启动TR=1时,定时器开始在后台自动计数,程序同步执行。相互不影响。如果定时时间到,产生溢出信号,申请中断,此时正在执行的语句执行完,进入中断服务程序。
第二个问题,是的。
第三个问题,启动TR=1时,定时器开始在后台自动计数,程序同步执行。相互不影响。如果定时时间到,产生溢出信号,申请中断,此时正在执行的语句执行完,进入中断服务程序。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 , 不对 各种指令的机器周期 不一样,请看单片机 指令系统。
2 , 对 一般在 出现中断后 执行完当前指令 后马上 进入中断服务程序,
中断返回 继续执行下面程序
3 , 不正确,应该是 启动 TR=1 定时器/计数器 开始 +1 计数, 程序是正常运行的,
定时器/计数器 中断 和 其它中断 一样,
2 , 对 一般在 出现中断后 执行完当前指令 后马上 进入中断服务程序,
中断返回 继续执行下面程序
3 , 不正确,应该是 启动 TR=1 定时器/计数器 开始 +1 计数, 程序是正常运行的,
定时器/计数器 中断 和 其它中断 一样,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、 一个机器周期不一定执行一条语句,有时候要几个机器周期才执行一条语句
2、 好久没用51了,貌似是打开TR=1就开始中断了。
3、 (1)对 (2)要是定时还没溢出程序就执行语句2了,这是OK的,再执行语句2的时候,当定时器定时溢出中断了,就会去执行定时器的中断程序,把语句2晾在一边,再执行完定时器中断程序后,再继续进行语句2的程序
记住,是继续执行语句2,不是重头开始执行语句2。即执行到语句2的哪一段(比如如A段)的时候进入了定时器中断,等待中断程序执行完后,就从语句2的那一段后面(即A段后面)继续执行语句2程序
2、 好久没用51了,貌似是打开TR=1就开始中断了。
3、 (1)对 (2)要是定时还没溢出程序就执行语句2了,这是OK的,再执行语句2的时候,当定时器定时溢出中断了,就会去执行定时器的中断程序,把语句2晾在一边,再执行完定时器中断程序后,再继续进行语句2的程序
记住,是继续执行语句2,不是重头开始执行语句2。即执行到语句2的哪一段(比如如A段)的时候进入了定时器中断,等待中断程序执行完后,就从语句2的那一段后面(即A段后面)继续执行语句2程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询