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...