1樓:匿名使用者
while(1)在那 會使微控制器停在那 相當於是等待當中斷來臨時 執行中斷
下面那個就是當到50ms的時候 執行計時器1中斷如果沒有那個while(1)則主程式就執行完了 中斷會沒有作用中斷和程式主程式各個執行是同步的
因為你把那個et0開了 則就有時鐘中斷了
當到了50ms 中斷就會自動作用
停止程式執行
那是後main在while()那迴圈呢
之後就停止迴圈
中斷中的語句
t++;
if(t==20)t=0;
if(t<10)
p2=0x0;
else
p2=0xff;
這些在作用
*************************這些你要好好理解一下 中斷的概念 先把外部中斷先理解一下就是那個ex0那個 p3.2口為0時的中斷之後再把上面的程式按你不理解的地方改改看效果如果沒有while() 中斷是沒顯現的
試試就知道了
2樓:匿名使用者
2 個程式while(1)的區別在於:第1 個while(1)後面有分號,表示程式一直在這裡執行,等待50ms中斷到來。而第2 個程式的while(1)後面沒用分號,表示程式在while(1)後面那個大括號裡一直迴圈執行。
void time () interrupt 1//是定時器0 中程式,50ms到時產生中斷,進入這個子程式執行。
3樓:匿名使用者
while(1); //程式就在這個語句中動態停機,如果發生中斷則程式轉到中斷程式,處理完中斷程式後仍回到此處繼續動態停機。
--------
while(1)
//程式在花括號無限迴圈,產生中斷時情況同上,處理完中斷後返回重複迴圈。
51微控制器中的定時器中斷是怎麼用的 ?
4樓:娛樂小八卦啊
**如下:
//實現led燈一秒亮滅閃爍
void main()
tmod=0x01;//設定定時器0為工作方式1(m1 m0為01)
th0=(65536-45872)/256;//裝初值11.0582晶振定時50ms數為45872
tl0=(65536-45872)%256;
ea=1;//開總中斷
et0=1;//開定時器0中斷
tr0=1;//啟動定時器0
while(1);//程式停止在這裡等待中斷髮生
void t0_time() interrupt 1
tmod=0x01;//重灌初值
th0=(65536-45872)/256;
num++;//num每加一次判斷一次是否到20次
if(num==20)//如果到了20次,說明1秒時間到
num=0;//num清0重新計數
led=~led1;
擴充套件資料
定時器有兩種工作模式,分別為計數模式和定時模式。對px,y的輸入脈衝進行計數為計數模式。定時模式,則是對mcu的主時鐘經過12分頻後計數。
因為主時鐘是相對穩定的,所以可以通過計數值推算出計數所經過的時間。
51微控制器計數器的脈衝輸入腳。主要的脈衝輸入腳有px,y, 也指對應t0的p3.4和對應t1的p3.
5,主要用來檢測片外來的脈衝。而引腳18和19則對應著晶振的輸入脈衝,脈衝的頻率和週期為
f = f/12 = 11.0592m/12 = 0.9216mhz t = 1/f = 1.085us
51計數器的計數值存放於特殊功能暫存器中。t0(tl0-0x8a, th0-0x8c), t1(tl1-0x8b, th1-0x8d)
定時器常用作定時時鐘,以實現定時檢測,定時響應、定時控制,並且可以產生ms寬的脈衝訊號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是週期固定的脈衝則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
5樓:匿名使用者
所以中斷的使用:
1.開全域性中斷 51是 ea = 1
2.對應中斷使能 比如定時器1 et1 = 1、定時器0 et0 = 1
3.定時器工作方式配置: 有三種方式 雙8位定時 16位定時 還有捕捉方式 定時器2有4種 ,具體不介紹了 tmod 是定時器0和定時器1方式配置的暫存器 tmod = 0x01,定時器0工作在方式1(16位計數)
4.開啟定時器 tr0 = 1;定時器1開啟是 tr1 = 1;
5.中斷服務程式:就是定時時間到,你要處理的事務。
例子://50ms定時
void main(void)
void timer0_isr(void) intterupt 1 //中斷服務程式
微控制器跑飛時,時間中斷執行不?
6樓:
中斷喂狗很容易導致跑飛時不復位,這種時候喂狗還有什麼作用????
狗兒應當在非中斷的迴圈體中定時飼餵。這樣當主程式執行異常時才會把狗兒餓到汪汪叫,並且一口將程式咬回正常軌道上來。
7樓:匿名使用者
硬體看門狗,就不用餵了。直接接到51 30腳,振盪檢測端即可。
8樓:匿名使用者
時間中斷能執行,一般用主程式喂狗好些。
51微控制器中中斷服務程式佔用時間不?
9樓:
答:你的意思是定時10個週期,每一個週期中斷一次,在中斷程式里加1 至10嗎?
那麼加到10以後呢?接下來幹什麼?接下來的程式也在中斷程式裡嗎?
照你的程式,不會影響計時時間,只是在加到10以後,執行下一步工作時要多一些中斷程式用去的時間。這是因為中斷程式在執行加夠10以後的程式時,前幾句程式已經用一些時間。像這個在一般的設計中都不考慮。
中斷函式不影響定時器的工作,定時器是完全獨立的。
可以在中斷程式中關閉定時器。
10樓:匿名使用者
在某種意思上,中
斷更具有實時性,中斷處理是根據程式段的大小花費時間的,中斷程式段如果比定時時間還長,那個這個定時在主程式裡失去意義了;比如中斷定時為10個機器週期,而中斷程式段需要執行11個機器週期,那麼意味著緊著的中斷程式失去了理論的實時性;cpu無法在設計的要求下執行指令,所以,一般情況下,要考慮程式段是否能在中斷定時時間內完成;若能完成,那麼使用非自動賦值時也存在時間差異,兩個高低8位的賦值語句也將至少浪費兩個機器(還需要放在中斷的最前面),所以要求時間較為精確時,一定要使用自動裝載方式,若是使用非中斷方式,c語言程式是無法保證的,要使用匯編,一個一個指令進行計算。
而所謂的查詢等待,cpu在這個時間段內就執行累加或自減計數,不做任何工作,這個時間就被白白的浪費了;
中斷程式中可以關閉定時器的,在主程式裡設定一個變數,不斷地查詢這個變數是否為要關閉定時器的值,而中斷程式可以為這個變數賦值。
如:...while(1)
}interrupt 1
11樓:匿名使用者
中斷程式是肯定要佔用時間的,在中斷中可以關閉定時器的;
一般可以在中斷中做計數,累加,設定標誌位,到主迴圈裡面查詢比較好,
當然主要是看你要求的時間精度以及允許的誤差了,如果不是特別高的話也是沒太大影響的,我用t1技術,t0定時,可以測65000hz內的頻率,誤差不查過50,反正可以達到我的頻率測量效果了
12樓:匿名使用者
如果要保證實時性,那就要對每條指令的執行時間相當的瞭解,只有這樣才能夠準確地進行時間的設定;
如果改用查詢等待,則在計時時會佔用主程式的時間,而利用計時器的中斷程式則可以和主程式同時進行,可以讓微控制器的效率更高,當然用查詢也是可以的,只是微控制器此時需要佔用主程式段的時間;
在中斷程式中和主程式中是一樣的,均可以對計時器進行關閉和開啟操作。
13樓:匿名使用者
需要佔用時間,時間的長短 由 中斷服務程式 的長短有關。
51微控制器中斷時間不對。
14樓:做而論道
高低位元組,弄反了。
有錯:tl0=(65536-45820)/256;
th0=(65536-45820)%256;
改為:th0=(65536-45820)/256;
tl0=(65536-45820)%256;
另外,45820,應為:46080,才對。
這個 45820,是怎麼算出來的?
15樓:匿名使用者
45820距離50000差得比較遠
4990還差不多,刨除一定的中斷誤差即可
16樓:風雨人生
用12mhz的晶體振盪器
關於51微控制器的中斷,關於51微控制器的中斷。
中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷髮生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5箇中斷源 中斷號 優...
51微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?
方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...
微控制器中斷程式怎麼讀啊,什麼是微控制器的中斷
讀懂中斷服務程式很容易的。首先你要搞懂這是什麼中斷,從中斷服務程式第一行可以看出來。void int time void interrupt 1這是中斷名,可以隨便取 這是中斷號,從0 開始往上排,1表示定時器0中斷。分別是 0 外部中斷0 1 定時器0中斷。2 外部中斷1 3 定時器1 4 串列埠中...