首先你要寫中斷函數

成都創新互聯是一家專注于成都網站制作、成都網站建設與策劃設計,七臺河網站建設哪家好?成都創新互聯做網站,專注于網站建設10余年,網設計領域的專業建站公司;建站業務涵蓋:七臺河等地區。七臺河做網站價格咨詢:18980820575
然后在主程序中像調用子函數一樣調用就可以了
舉個例子吧
#define uchar unsigned char
#define uchar unsigned char
sbit D1=P1^0;
uchar aa;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(aa==20)
{
D1=~D1;
aa=0;
}
}
}
void T0time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
外部中斷的常用功能
外部中斷經常用來記錄外部脈沖的個數,也就是當我們使用外部中斷1時,如果想記錄自身單片機的某個引腳的下降沿個數,只需用杜邦線把這個引腳和P3.3連接即可。
比如P2.3引腳產生這樣的電平無規律跳轉,則下降沿的個數為5
所以我們就用外部中斷1來實現記錄K4按鍵從按下到松手的抖動過程中經歷了多少個下降沿,把下降沿的個數顯示在數碼管上。
2.程序思路
我們定義一個16位的全局變量pulse用來記錄P2.3下降沿的個數,在中斷函數中的任務就是簡單的pulse自加,因為引腳遇到下降沿就會進入中斷函數。
在主函數里就是負責數碼管顯示即可。
3.代碼#include?
#include?//詳見第六章第8講
u16?pulse=0;
void?main()
{
u16?x,PULSE_buf;
IT1?=?1;???//下降沿觸發模式
EX1?=?1;
EA??=?1;
LED_Init();//初始化LED硬件模塊
KEY_Init();//初始化按鍵功能模塊
ShowNumber(pulse);
while(1)
{
SEG_Scan();
if(PULSE_buf!=pulse)ShowNumber(pulse);//pulse不再是前一次的值,也就是pulse數值更新了,所以數碼管緩存區也要更新pulse的數值以便顯示出來
x++;
if(x=50)//隔一段時間過來記錄此時的pulse數值
{
x=0;
PULSE_buf=pulse;
}
}
}
//請把P3.3和P2.3用杜邦線連接起來
void?EXTI1_IRQHandler()?interrupt?2
{
pulse++;
}
大家多按幾次K4,發現按下后松手的一個動作里有時pulse就自加了幾次,顯示在數碼管上的數加了好幾下。
對于C51單片機,其內部總共有五級中斷源
分別為外部中斷0、定時器0、外部中斷1、定時器1及串行中斷。
C51單片機的中斷使用時,主要是通過中斷服務號來決定的。
如你定義一個中斷服務函數:
void KEY(void) intterrupt 0
{
}
當外部中斷0申請中斷時
會自動根據interrupt后面的0,找到上面定義的這個中斷服務函數。
對于其他四個中斷源,其對應的中斷號分別為1、2 、3、4
二樓的說得很對。它是一個中斷處理函數,與一般的函數的區別在于他被調用的方式。一般的函數是由其上一層函數調用而得到執行。而中斷函數是是外圍設備觸發它執行的。比如說:spi接收到一字節的數據、adc采樣完成、定時器發生溢出等等。一旦這些事件發生了,只要中斷處于使能狀態,就會觸發對應的中斷。
不管主程序執行到什么地方,cpu都會暫停它并立即執行這種中斷處理函數。中斷處理函數執行完成后又恢復之前的程序位置繼續執行。
中斷的產生,不是由調用引起的,是由外界觸發的。就像,有人敲門,你就要去開門,這不等于你去開門了,就一定有人敲門。
另,中斷函數不能被直接調用,否則會出錯。
網頁題目:c語言中斷處理函數 c語言 中斷
本文地址:http://www.yijiale78.com/article44/dopjjhe.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、云服務器、商城網站、軟件開發、靜態網站、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯