1樓:網友
1.不送初值,是從0 開始。一次中斷就是。
2.中斷就是從**開始中斷,中斷子程式招待完後,又轉回原來中斷處。那就是還在here裡。
3.需不需要壓棧要看有沒需要 保護的,就是進入子程式後會不會改變原來的暫存器或記憶體的資料 ,你這就不需要了。
4.清05.是的。你可以加個中斷子程式 ,裡面重新賦初值。你的程式 就是中斷方式 ,只是你這樣寫。
org 000bh
cplreti改成: org 000bh
ajmp t0int
然後在主程式 里加上中斷子程式,名字可以任起乙個。
t0int:mov th0,#0f6h
mov tl0,#23h
cplreti6. 二者一樣的,看使用習慣 ,後者簡潔。
2樓:網友
1. 要起動 timer 0, 讓它開始計數, 要有。
mov th0,#0f6h ; 先給 timer 0 初始值。
mov tl0,#23h ;
setb tr0 ; 開啟 timer 0setb et0 ; 致能 timer 0 中斷程式。
若沒先給 timer 0 初始值, timer 0 一定會先計數的。
2. 微控制器執行到 here:sjmp here , 就不會往下執行了, 除了有中斷(包括 timer 0)產生, 會跳去中斷程式, 否則會一直執行 這一行指令(here:
sjmp here)
3. 不需要的。
4. 溢位了, 就是清零了, 要再賦初值。
5. 是的, 要在中斷程式內, 賦予初值, 也只能用這個方法了, 否則第二次中斷開始計數長度就是2的十六次方個週期了。
6. 組譯出來的機器碼是一樣的, 沒有區別的。
3樓:網友
答1:不會從0 ,會繼續上次的值。
關於51微控制器自編計時器的問題:中斷函式還有按鍵怎樣加在程式裡??
4樓:網友
我看你的程式計時是通過主迴圈進行的,這個不會很準確的,void configtimer0()
上面是對定時器0 的初始化,1ms一次中斷void timer0() interrupt 1}這個就是使用定時器的計時方法,計時相對準確一點, 更準確的話 就用定時器的方式2 8位自動重灌模式。
void configtimer0()
void timer0() interrupt 1}方式1 是16位 ,,可以進行一箇中斷,,方式2 只能 0--256us
方式1 在中斷裡需要重新付初值,方式2是自動賦值, 減少執行時間,減小誤差。
51微控制器定時器中斷問題,單個數碼管間隔1秒一次顯示0到9。
5樓:網友
時間太長大哥 估計要好幾秒 根據你的程式 沒必要加延時 還有 如果用不到int這麼大的型別 就改為unsigned char 可以節約微控制器空間。
6樓:昔勤
定時器中斷就是用來代替延時delay的 你在加個delay,怎麼可能會用。
7樓:網友
if(tt>=20)/
另外程式這樣寫是不行的,費勁啊。
8樓:網友
延時太大,等延時完成時tt>20,迴圈不能進行。
9樓:網友
因為 delay(500)延時時間太長。
10樓:夏羽晴
把500改成1就好了,1us為機器週期。
51微控制器中執行完定時器中斷函式,tf0是硬體自動清0嗎?
11樓:網友
tf0是51微控制器定時器t0的溢位中斷標誌位。當t0被允許計數後,t0從初值開始按機器週期或者外部引腳輸入的脈衝進行加1計數。當計數到t0最高位產生溢位時,置「1」tf0,並向cpu請求中斷。
當cpu響應該中斷時,將由硬體自動清「0」tf0。當然,你也可以用「位操作指令」對tf0進行置「1」或清「0」操作。
12樓:網友
tf0:定時器t0溢位標誌,可由程式查詢和清零,tf0也是中斷請求源,當cpu響應t0中斷時由硬體清零。
13樓:網友
給你看看規格 你就找到了。
51微控制器定時器中斷方式實現p1.0輸出週期1s的方波的方法
14樓:網友
讓定時器每秒進入一次中斷。
每進入一次中斷,就改變一次的電平狀態。
這樣你用示波器看到的就是週期1秒的方波了。
15樓:網友
有幾種方法,可以用89s52的定時器2工作在始終輸出模式。最高頻率可達晶振的1/4,還可以用任何乙個定時器定時一秒,中斷裡寫取反的程式就可以了。
16樓:
這是個基本的啊……查查電子鐘的程式,把定時中斷摘出來。獲取知識的過程是要有的,不能指望現成的一模一樣的程式。
51微控制器計時器中斷時還能讀管腳的值嗎?
17樓:718389823涼逍
可以讀,比如好多情況都要定時讀取i/o口的狀態,那麼都是用定時器實現的。另外再推薦種方法就是利用外部中斷讀取i/o狀態,但外部指春中斷很靈敏,容易受到干擾,在你的電路干擾很小唯銀耐的情況下,建議使用外部中斷,個人感覺外部中搏哪斷很準。
18樓:網友
可以在中斷服務子程式中讀取io腳的狀態。
51微控制器定時器中斷服務程式
19樓:網友
定時器定時時間到,則自動進入中斷程式,程式程式執行完後又「自動」返回主程式。
由於nn是全域性變數,所以它可以在原來的基礎不斷加1 如此反覆如果你看彙編程式:可知,不同的中斷源有不同的中斷程式入口位址,如定時器0的中斷程式入口位址是000bh,一旦中斷髮生,程式便跳至此處執行,但此處並不是真正的中斷程式,而它又是一條跳轉指令,指向真正的中斷服務程式,中斷程式結束有一條返回語句reti,又回到了中斷之前的主程式中去,主程式每執行完一條指令,都要判斷有無中斷的發生,不需人工乾預。
whlie(1)是個死迴圈,中斷程式跳來跳去,還是在這個小圈子裡。
80c51微控制器定時器中斷問題,單個數碼管間隔1秒一次顯示0到9。(彙編語
20樓:網友
org 0000h
ljmp main
org 000bh
ljmp t0isr
org 0030h
main:mov tmod,#01h
mov th0,#high(65536-50000)mov tl0,#low(65536-50000)setb tr0
setb et0
setb ea
mov r2,#
mov r3,#
sjmp $
t0isr:
clr tr0
mov th0,#high(65536-50000)mov tl0,#low(65536-50000)setb tr0
djnz r2,t0e
mov r2,#
mov dptr,#table
mov a,r3
movc a,@a+dptr
mov p0,a
inc r3
cjne r3,#10,t0e
mov r3,#
t0e:reti
table: ;共陰極數碼管顯示**表db 3fh,06h,5bh,4fh,66h ;01234db 6dh,7dh,07h,7fh,6fh ;56789end
利用微控制器設計59秒計時器,利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。
共陽共陰只是你在選com端時給其高低電平的問題無關大雅我給一段pic微控制器的程式讓你參考一下,如果你看懂的話應該能做出來了 include include 此程式實現計時秒錶功能,時鐘顯示範圍00.00 99.99秒,分辨度 0.01秒 unsigned char s0,s1,s2,s3 定義0....
c51微控制器 中斷,c51微控制器如何使用中斷
這個程式是有問題的,第一次中斷時,x先賦值0再加一,x為1,第二次中斷時,又給x賦值0,這樣每次中斷都為1,不可能為2,也就不可能執行到b,建議用全域性變數可以解決這個問題。還有一個問題,一直在執行中斷程式,下一次中斷來臨時,為同級中斷,同級中斷是否能觸發,這個問題要考慮。解決辦法 a和b放在主程式...
微控制器中斷系統工作原理,C51微控制器的中斷系統的結構及其工作原理是什麼
我覺得你應該看看暫存器是怎樣工作的,比如tr0 1 表示定時器中斷 et0 1 表示開啟定時器中斷 es 1 串列埠中斷 ex0 1 外部中斷 ea 1 開啟所有中斷 一般的微控制器書上都有介紹的,而且使用的時候也是比較簡單,直接在程式裡給暫存器寫值就可以了!中斷有硬中斷與軟中斷。中斷有優先度之分,...