我是初学者,遇到了些问题
1,假如说一个程序有3条语句,分别为1,2,3.是不是一个机器周期执行一条语句
2,如果是外部中断的话,假如在执行到语句1时,有中断指令,就先执行中断指令,然后再回来执行语句2?
3,如果是定时器/计数器中断,是不是在启动TR=1时程序就开始在后台进行+1的操作了,与此同时程序在同步进行?如果是的话,以定时器为例,我想在执行完语句1后延时再执行语句2,但是按照定时器的+1运算和程序语句执行是同步的,要是在定时器的定时时间还没到时,程序已经运行到语句2了怎么办?
谢谢大家! 我的QQ:530883031 xscn1986@163.com
互相交流!
我是初学者,遇到了些问题
全部回复(3)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@njyd
1、对51系列来说,一条指令至少一个机器周期,还有两个、三个机器的周期的. 2、基本上对,还要允许中断. 3、定时器可以认为是与CPU互相独立的电路,除了对定时器控制的指令外,其他语句对定时器运行无关.定时器靠硬件+1. 你可以在语句1和语句2之间加上检测定时器状态的语句,当定时器达到状态时再运行语句2. 也可以用定时器中断,中断时运行语句2. 如果延时不长可以用一小段程序延时.
我举个例子吧,简单些的.
void main()
{
语句1;
语句2;
语句3;
}
void 定时器1() interrupt 3
{
TH1=......
TL1=......
}
我的意思是,如果一个机器周期是0.5秒,而且一个机器周期执行一条语句.
定时器的延时时间是1秒.
所以说当程序运行时,主程序和定时器在同时工作(定时器打开),主程序在
语句1、2、3、1、2、3......的执行,我的目的是当执行完1时延时1秒再执
行2,但是实际情况当定时器计数器记满溢出之后置相应的溢出标志时是1秒此
时刚好主程序中执行完语句2,于是就在2结束后延时1秒了,没有达到我的目
的.
void main()
{
语句1;
语句2;
语句3;
}
void 定时器1() interrupt 3
{
TH1=......
TL1=......
}
我的意思是,如果一个机器周期是0.5秒,而且一个机器周期执行一条语句.
定时器的延时时间是1秒.
所以说当程序运行时,主程序和定时器在同时工作(定时器打开),主程序在
语句1、2、3、1、2、3......的执行,我的目的是当执行完1时延时1秒再执
行2,但是实际情况当定时器计数器记满溢出之后置相应的溢出标志时是1秒此
时刚好主程序中执行完语句2,于是就在2结束后延时1秒了,没有达到我的目
的.
0
回复
提示
@电源插头
我举个例子吧,简单些的.voidmain(){ 语句1; 语句2; 语句3;}void定时器1()interrupt3{ TH1=...... TL1=......}我的意思是,如果一个机器周期是0.5秒,而且一个机器周期执行一条语句. 定时器的延时时间是1秒. 所以说当程序运行时,主程序和定时器在同时工作(定时器打开),主程序在 语句1、2、3、1、2、3......的执行,我的目的是当执行完1时延时1秒再执 行2,但是实际情况当定时器计数器记满溢出之后置相应的溢出标志时是1秒此 时刚好主程序中执行完语句2,于是就在2结束后延时1秒了,没有达到我的目 的.
俺一直用汇编,你的例子看的有点迷糊.
看你的意思,好象是1、2、3一直在循环.那么不管定时器有无溢出,一秒钟内语句1、2、3已经运行许多许多次了.
如果一定要在1后一秒再运行2,可以在1后面开定时中断,然后进入空循环,在定时中断后再运行2.当然也可以运行其他程序,在中断处理程序中运行2.
如果主程序衡环时间很短,也可以在中断程序中设一个标志,主程序循环中不断检查这个标志,见到标志置位才运行2.当然循环中如果不见标志置位要跳过2.
看你的意思,好象是1、2、3一直在循环.那么不管定时器有无溢出,一秒钟内语句1、2、3已经运行许多许多次了.
如果一定要在1后一秒再运行2,可以在1后面开定时中断,然后进入空循环,在定时中断后再运行2.当然也可以运行其他程序,在中断处理程序中运行2.
如果主程序衡环时间很短,也可以在中断程序中设一个标志,主程序循环中不断检查这个标志,见到标志置位才运行2.当然循环中如果不见标志置位要跳过2.
0
回复
提示