我是初學者,遇到了些問題
1,假如說一個程序有3條語句,分別為1,2,3.是不是一個機器周期執(zhí)行一條語句
2,如果是外部中斷的話,假如在執(zhí)行到語句1時,有中斷指令,就先執(zhí)行中斷指令,然后再回來執(zhí)行語句2?
3,如果是定時器/計數(shù)器中斷,是不是在啟動TR=1時程序就開始在后臺進行+1的操作了,與此同時程序在同步進行?如果是的話,以定時器為例,我想在執(zhí)行完語句1后延時再執(zhí)行語句2,但是按照定時器的+1運算和程序語句執(zhí)行是同步的,要是在定時器的定時時間還沒到時,程序已經(jīng)運行到語句2了怎么辦?
謝謝大家! 我的QQ:530883031 xscn1986@163.com
互相交流!
我是初學者,遇到了些問題
全部回復(3)
正序查看
倒序查看
@njyd
1、對51系列來說,一條指令至少一個機器周期,還有兩個、三個機器的周期的. 2、基本上對,還要允許中斷. 3、定時器可以認為是與CPU互相獨立的電路,除了對定時器控制的指令外,其他語句對定時器運行無關(guān).定時器靠硬件+1. 你可以在語句1和語句2之間加上檢測定時器狀態(tài)的語句,當定時器達到狀態(tài)時再運行語句2. 也可以用定時器中斷,中斷時運行語句2. 如果延時不長可以用一小段程序延時.
我舉個例子吧,簡單些的.
void main()
{
語句1;
語句2;
語句3;
}
void 定時器1() interrupt 3
{
TH1=......
TL1=......
}
我的意思是,如果一個機器周期是0.5秒,而且一個機器周期執(zhí)行一條語句.
定時器的延時時間是1秒.
所以說當程序運行時,主程序和定時器在同時工作(定時器打開),主程序在
語句1、2、3、1、2、3......的執(zhí)行,我的目的是當執(zhí)行完1時延時1秒再執(zhí)
行2,但是實際情況當定時器計數(shù)器記滿溢出之后置相應的溢出標志時是1秒此
時剛好主程序中執(zhí)行完語句2,于是就在2結(jié)束后延時1秒了,沒有達到我的目
的.
void main()
{
語句1;
語句2;
語句3;
}
void 定時器1() interrupt 3
{
TH1=......
TL1=......
}
我的意思是,如果一個機器周期是0.5秒,而且一個機器周期執(zhí)行一條語句.
定時器的延時時間是1秒.
所以說當程序運行時,主程序和定時器在同時工作(定時器打開),主程序在
語句1、2、3、1、2、3......的執(zhí)行,我的目的是當執(zhí)行完1時延時1秒再執(zhí)
行2,但是實際情況當定時器計數(shù)器記滿溢出之后置相應的溢出標志時是1秒此
時剛好主程序中執(zhí)行完語句2,于是就在2結(jié)束后延時1秒了,沒有達到我的目
的.
0
回復
@電源插頭
我舉個例子吧,簡單些的.voidmain(){ 語句1; 語句2; 語句3;}void定時器1()interrupt3{ TH1=...... TL1=......}我的意思是,如果一個機器周期是0.5秒,而且一個機器周期執(zhí)行一條語句. 定時器的延時時間是1秒. 所以說當程序運行時,主程序和定時器在同時工作(定時器打開),主程序在 語句1、2、3、1、2、3......的執(zhí)行,我的目的是當執(zhí)行完1時延時1秒再執(zhí) 行2,但是實際情況當定時器計數(shù)器記滿溢出之后置相應的溢出標志時是1秒此 時剛好主程序中執(zhí)行完語句2,于是就在2結(jié)束后延時1秒了,沒有達到我的目 的.
俺一直用匯編,你的例子看的有點迷糊.
看你的意思,好象是1、2、3一直在循環(huán).那么不管定時器有無溢出,一秒鐘內(nèi)語句1、2、3已經(jīng)運行許多許多次了.
如果一定要在1后一秒再運行2,可以在1后面開定時中斷,然后進入空循環(huán),在定時中斷后再運行2.當然也可以運行其他程序,在中斷處理程序中運行2.
如果主程序衡環(huán)時間很短,也可以在中斷程序中設一個標志,主程序循環(huán)中不斷檢查這個標志,見到標志置位才運行2.當然循環(huán)中如果不見標志置位要跳過2.
看你的意思,好象是1、2、3一直在循環(huán).那么不管定時器有無溢出,一秒鐘內(nèi)語句1、2、3已經(jīng)運行許多許多次了.
如果一定要在1后一秒再運行2,可以在1后面開定時中斷,然后進入空循環(huán),在定時中斷后再運行2.當然也可以運行其他程序,在中斷處理程序中運行2.
如果主程序衡環(huán)時間很短,也可以在中斷程序中設一個標志,主程序循環(huán)中不斷檢查這個標志,見到標志置位才運行2.當然循環(huán)中如果不見標志置位要跳過2.
0
回復