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