微控制器中斷問題,高手進,微控制器C語言外部中斷程式問題,高手進

2022-08-16 00:40:08 字數 3694 閱讀 7485

1樓:

中斷函式寫在主函式之外,中斷函式是不能由主函式呼叫的,但是中斷函式本身可以呼叫其他函式。微控制器一般都有若干個中斷源,每個中斷源對應乙個中斷入口位址,也叫做中斷向量,中斷向量空間很小,一般在中斷向量處放入一條跳轉指令指向中斷服務程式位址,當你用c語言宣告乙個中斷函式時,編譯器會幫你完成這些工作。以上說的中斷工作的過程。

你這個程式不知道中斷4是屬於什麼中斷,外部還是內部,不過這些不重要,這個中斷肯定是對應乙個中斷源的,當有中斷觸發後,比如串列埠的中斷,當串列埠有電平的跳變時觸發乙個中斷,微控制器轉向這個中斷函式,執行結束後返回原來位址繼續執行。

至於函式內部你應該比較了解,我也就不多說了,就是乙個開關語句分別呼叫兩個不同的函式。

2樓:匿名使用者

count=0;計數清零,時間重新計算。

與重灌初值的位置無關!

微控制器c語言外部中斷程式問題,高手進

3樓:做而論道

外部中斷,要求是低電平/下降沿觸發。

你應該把按鍵改成接地,不要接電源。

另外,程式缺少延時,這樣,按一下鍵,會加上很多次的。

試試如下程式:

#include

unsigned char code tab = ;

unsigned char a, b, c;

//-------------------------------void delay(unsigned int k)//-------------------------------void main()

}//-------------------------------void key()interrupt 0//-------------------------------

4樓:胡楊胖子

c語言不太熟

1、從硬體看,按鍵直接接/int0有很大問題,按一次鍵,由於抖動的原因,可能會出現多次int0中斷

2、 p0=tab[c]也很有問題,當c>9的時候,定址會超過共陰極七段編碼表的範圍,得到的是無效資料,你需要用c&0xf遮蔽一下,如果要也能顯示多位數的個位,你還需要把c轉成bcd碼,如果不管那麼多的話,你在c>9的情況下需要處理一下。

5樓:匿名使用者

你好,從圖看,硬體有錯,

1,用的是共陰led數碼管,但排阻rp1的pin1腳接地了,應接vcc.

2.你只畫了簡圖,其它引腳接線是否正確?如晶體,復位.pin29,30,31.中斷引腳應接上拉電阻.

3.你的電路故障表現是什麼?並沒有說明,

4.軟體編寫不對.按鍵要有消抖延時,清空中斷標緻位.請不要用c++;而可用c2++,或其它.

5.暫存器c應當這樣:if(c>9)c=0;

6,你可先使c=2,p0=tab[c] ;看程式,電路正常工作了嗎?再做其它的功能.

7,我不建議把程式直接給你,我提示這些方向,自己解決問題才能進步.

msc51微控制器中斷處理問題高手進

6樓:做而論道

int00:

mov p0,40h

clr tr0

ljmp 0000h

end-------------------------你在這裡,沒有從中斷返回,所以下次的中斷就進不來。

正確的做法是:

int00:

mov p0,40h

clr tr0 ;是否還有應該清理的標誌位?都清理乾淨.

;clr a

push acc

push acc

reti ;返回到0000h;ljmp 0000hend

7樓:阿鵬溜溜溜

應該是中斷標誌位沒有處理好

從你的描述中我認為你在中斷程式處理結束後應該用的是jmp指令而不是reti指令,同時大概在出中斷前沒有把禁掉的中斷使能復原 具體情況只有看到程式才知道了

stc51微控制器 中斷問題 高手請進

8樓:荔菲奇邃

就粗略的看了下 你tmod=0x10 就開了1個中斷吧

9樓:且聽風吟_舞

我感覺是你用了「using 0」而畫蛇添足了。我印象中不同優先順序的中斷必須分配不同的工作暫存器組,你把兩個外部中斷都用了using 0,而你的計數器中斷又不用using宣告一般預設為暫存器組0,這樣你三個中斷都是暫存器組0,估計會出問題。一般「using 0」不寫,交給編譯器分配好一些。

你把兩個「using 0」刪了看看。應該是這問題吧。

為什麼不能進入at89s52微控制器的定時器2中斷服務程式?程式在keil編譯沒有問題,請高手指點。程式如下:

10樓:匿名使用者

你的程式能進入中斷服務,但是每次進入中斷,你沒有讓變數j遞增,所以j的值永遠是0,就永遠不會讓led閃爍了。

你把程式改成這樣:

if(j>=66)

else j++;

另外,盡量不要在中斷中進行延時,雖然你這裡是沒有什麼影響,但這種寫法應該盡量避免。

51微控制器定時器消抖的問題。高手進

11樓:匿名使用者

ms++;

if(key==0)key_num++;

if(ms==15) //15秒重新整理一次這部分有問題,改為:

if(key==0)

else

if(key_num>10) //如果低電平持續時間大於10ms就認為按鍵按下,而不是抖動

12樓:匿名使用者

你可以在t0中設定中斷除錯一下,在第一次按鍵時,單步執行t0中斷,看一下程式是如何工作的。

我覺得t0中斷處理程式有些問題,建議按使用下面的程式,int0可以不用。

bit key_d0;

bit key_d1;

void t0() interrupt 1 //定時間隔決定去抖動的間隔,可以將t0定時設定為20ms。

key_statue=1; //按鍵標識位置1}else

led=key_statue; //按鍵時燈亮,松鍵時燈滅}}led=~led; //按一次鍵,燈亮滅交替一次led=key_statue; //按鍵時燈亮,松鍵時燈滅這兩個只能選用乙個。因為不太清楚你要哪種控制方式。

c51 微控制器程式設計中斷問題,中斷後不能繼續返回main函式,哪位高手看一下我的程式,多謝了

13樓:匿名使用者

void int1_srv() interrupt 2//int1中斷服務函式,中斷向量標號2

{ my_delay_10ms(1);//延時消抖key_bit = 1;//讀mcs51的io口之前要先對其置1if(key_bit == 0)//按鍵仍然是按下狀態{//while(key_bit == 0);//等待按鍵抬起這部分就不用了。使用邊沿觸發,不必在等待按鍵抬起,因為第乙個下降沿已經出發了中斷。如果硬體是現成開發板的話就不用這麼麻煩了,如果是自製電路板,記得在p3.

3加上10uf防抖電容,防抖電路可參考**。

我的建議不一定對,但請嘗試一下。

14樓:

void tuichu(void )

在中斷中調運此函式即可

微控制器的中斷問題,關於微控制器中斷的問題

那個中斷函式和主函式直接是什麼關係?為什麼寫在主函式後邊但是主函式又沒引用?中斷函式無需被顯式呼叫。當有相應的中斷產生時,程式會自動中止當前的執行 記錄位置,然後跳轉到相應的中斷入口處。而在中斷入口會進行二次跳轉,到程式中對應的中斷處理函式內並執行。中斷處理函式執行完畢返回後,跳回到剛才中止執行的位...

微控制器外部中斷,微控制器外部中斷?

定時百器中斷是設定定時時間,到了該時間,就進行處理一次。可以處理按度鍵掃瞄,動態顯示,時鐘累加等問。外部中斷,是與外答接接觸,當中斷引腳為低電平時,進入中斷。如果你的微控制器沒內有專門的鍵盤中斷,可以使用外部中容斷來做鍵盤中斷。定時百器中斷是設定定時時間,到了該時間,就進行處理一次。可以處理按度鍵掃...

微控制器外部中斷0和外部中斷,微控制器外部中斷0和外部中斷

你想要的結果是不是應該要把while 1 中的第乙個time1 0去掉。不知你 time2 是否有用 ew free sn free 執行一次要多長時間?若時間很短的話,有可能一直執行下去,因你不斷地把 time1清0,time1 10永遠滿足 若時間較長的話,執行一次 ew free sn fre...