1樓:
樓上說得太專業了,就擔心樓豬看不懂哦-
想想都知道
他這樣的問題都問出來,所以肯定不知道什麼是「累加器」
-要比喻估計好些-
th0 ,tl0就好比兩隻水桶; 0x3c,0xb0就好比放進水桶裡的水,(就像遠古時期的沙漏)
-微控制器會自動把水一滴一滴的放幹,當水桶裡的水被放乾枯時候,說明定時時間到;
0x3c,0xb0的水,估計要滴漏需要50ms秒時間;發現水桶乾枯後微控制器會「自動啟用」聲音開關-
而 interrupt 1 的意思就是自動啟用 地點1 處的開關,(比如還有interrupt 0;1;2;3)指的是標號,開關地點而已,後面的數字表示第幾個地點;
speaker=~speaker; 是取反的意思,就是原來是1就要改變成0,原來是0就要改變成1,每水桶乾枯一次,就再次往水桶裡加水,同時改變0或1 一次;反覆出現0和1,這樣就形成了方波;而聲音就是靠方波來驅動才響的!--
如果說那麼多還是不明白的話!你還是多去看點基礎書吧!
希望提議能給你幫助!
2樓:
定時器說白了就是一個計數器,你設定一個初值,然後再你這個值上不停的加,來一個系統時鐘,或者你設定的方式加1,等加到上限後會溢位,當溢位的時候定時器就會給cpu傳送一箇中斷訊號,cpu就停止手頭的工作,然後執行你的中斷,就是interrupt 1 裡面的程式,在interrupt裡面給你的音訊一個翻轉,就是產生一個震動,這樣平率就固定了。
3樓:夜貓叫楓子
上課時每節課的時間是固定是,下午鈴響了,上課被中斷
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 //中斷服務程式
51微控制器定時的時候為什麼一定要開啟中斷?
6樓:最近的天涯海角
不一定要開啟中斷吧,如果只是為了單純的延時的話可以利用查詢法,如果定時時間到要採取操作最好還是用中斷
7樓:匿名使用者
1、微控制器的中斷是一個很高明的辦法。沒有中斷時微控制器只會順序執行主程式中的語句。
2、微控制器的定時器有自己的時鐘,開啟51微控制器的定時器後,微控制器一邊順序執行主程式的語句時,一邊定時器在計時。當計到你設定的值後,他需要產生中斷,然後暫停主程式語句,轉到中斷程式中執行你的命令。執行完命令後返回到主程式的順序語句中。
然後知道下一次中斷來臨,再次產生中斷。
3、要讓他能產生中斷,你就必須開中斷。這就像一個控制開關,你不把開關開啟,燈怎麼會亮。
8樓:
也可以不開啊,如果不開就沒多大意義了。開中斷主要是能在第一時間解決問題。
9樓:匿名使用者
不開啟中斷使能位怎麼讓定時器工作啊。就像微控制器不供電它怎麼工作。對吧!
10樓:做而論道
一定要開啟中斷?
樓主怎麼會有這樣的想法?
51微控制器中什麼是中斷?其作用是什麼?怎麼用?用自己的理解回答把
11樓:匿名使用者
中斷來就是中途打斷。
通俗自解釋:
你在看影碟,bai有人敲門du(中斷源),中斷了zhi你看影碟,**暫停。處dao理敲門的事宜(中斷目的),處理完成(中斷結束),繼續看影碟(繼續執行原來的任務)。
再比如:你在看電視,水開了(中斷源),把水灌到暖瓶裡(中斷目的),再燒上一壺(繼續開中斷),回去看電視。水又開了。。。。。。。。(迴圈中斷)
以51微控制器16位定時計數器0(t0)來講,
計數是t1是一個能盛65536(十六位時)滴水的水盆,在水龍頭下水一滴滴地滴入盆中。如果盆是空的那水在滴完65536滴水時盆子的水就滿了再滴一滴的時候就溢位了。這時就會產生中斷。
如果盆裡面已經裝入65500滴水(即初裝值),那麼只需要36滴水後就溢位了。
每一個水滴計數時即一個脈衝(高低電平變換一次)。
定時時每一個水滴即一個機器週期,水滴的速度即機器週期,等於12個振盪週期(晶振的振盪頻率除以12),直接影響到溢位的時間。
12樓:匿名使用者
中斷就是好像你
來現自在正在洗衣服,這時候**來了,你就要放下手頭的衣服去接**,接完**繼續回來洗衣服。中斷也是如此,眾所周知,程式是在main函式中從上至下逐條執行的,當中斷髮生時,程式要響應中斷,從而進入到中斷服務子程式中(也就是去接**),處理完中斷服務子程式後,返回到剛才中斷的地方繼續執行(也就是繼續洗衣服)。
至於中斷的作用,基本上就是當cpu在執行現行程式中啟動外部裝置之後,反覆查詢外部裝置的狀態。當外部裝置的資料準備就緒後,主動向cpu發出中斷請求。cpu接到外部裝置的中斷請求後,如果沒有更加緊急的任務,就暫停正在執行的現行程式,轉去執行中斷服務程式,為外部裝置服務。
當中斷服務完成之後,再返回到原先的現行程式中繼續執行。中斷以上的特性在嵌入式系統中有很大的作用。可以響應處理例外事件,多道程式並行執行。
怎麼用我就不說明了,基本上每本教材上說的很詳細了。
13樓:匿名使用者
就像你在吃飯的時候,突然想拉肚子,你必須停止吃飯,跑去廁所解決問題,然後回到座位上繼續吃飯。
夠形象嘛!
怎麼用?每個中斷都有對應跳轉地址,對應一箇中斷服務程式,你必須實現那段程式。
具體,還是看看書。
微控制器中斷系統工作原理,C51微控制器的中斷系統的結構及其工作原理是什麼
我覺得你應該看看暫存器是怎樣工作的,比如tr0 1 表示定時器中斷 et0 1 表示開啟定時器中斷 es 1 串列埠中斷 ex0 1 外部中斷 ea 1 開啟所有中斷 一般的微控制器書上都有介紹的,而且使用的時候也是比較簡單,直接在程式裡給暫存器寫值就可以了!中斷有硬中斷與軟中斷。中斷有優先度之分,...
51微控制器的定時器怎麼做延時51微控制器的定時器怎麼做延時彙編
1 你的主程式必須在1秒內完成一個過程,然後等待下一秒的到來 2 主程式放在一個迴圈內,並回設定答一個標記,以判斷是否觸發執行主程式,還是繼續空迴圈 3 這個標記就由延時中斷例程來賦值 其實,如果你的主程式能夠在1秒內完成,由沒有其他任務的話,完全可以放在中斷例程裡執行的 貌似想到的方法和複雜,就是...
微控制器外部中斷0的入口地址,外部中斷0的入口地址是
mcs 51系列微控制器各中斷源的入口 地址由硬體事先設定,分配如下 中斷源 入口地址外部中斷0 0003h 定時器t0中斷 000bh 外部中斷1 0013h 定時器t1中斷 001bh 序列口中斷 0023h 使用時,通常在這些中斷入口地址處存放一條絕對跳轉指令,使程式跳轉到使用者安排的中斷服務...