① 如何寫中斷程序
果你在程序裡面對函數進行了聲明的話,子程序可以寫在任意地方(當然還是要在這個文件裡面)。如果不進行聲明的話,也不是僅僅寫在MAIN函數之前這條規則這么簡單,而是不能還讓編譯器沒有編譯到這個函數當時遇到了這個函數被其他函數調用,這樣的話就會出錯。
第二,中斷函數不用進行函數聲明,可以寫在MAIN函數前面也可以寫在MAIN函數後面。
第三,由於不知道你說的是那種單片機在那種編譯器下面的寫法,我在這里給你一個51內核的單片機79F168在KEIL裡面的中斷函數的寫法給你。
void UART_ISR() interrupt 4
{
if(RI && REN)
{
}
if(TI && TXEN)//TXEN為自己定義的一個串口發送使能標志
{
}
}
void timer0_1ms_ISR() interrupt 1
{
TL0=LOBYTE(TIMER0);
TH0=HIBYTE(TIMER0);
}
這兩個函數第一個是串口中斷函數,第二個是定時器0中斷函數,函數名可以自己定義,後面的interrupt必須寫,緊著這最關鍵的就是這個中斷號,可以查詢數據手冊得到這個中斷號,每一個中斷都會有一個中斷號,對應著寫在後面就可以了。
另提醒樓主基礎很重要,所有的東西都是由最基本基礎的東西疊加起來的。
② 如何用c語言編寫一個可中斷的程序
駐留程序
通俗點講
就是
程序運行完了,
還要保留
臨時數據
和
運行狀態,
等下一次
調用時
繼續
執行
和普通程序的
區別:
普通程序(如一個
子函數)
調用完了
,
臨時數據
就
不需要了,
分配的
內存
空間
就
回收了,
而
駐留程序
是
要保留這些的
駐留
程序
主要
用於
中斷函數
,
非中斷函數
也
有應用,較少。分別舉個例子:
1)用於
中斷:
假設
一個
用
定時器
做的
時鍾函數,定時器
設置為
1s一個中斷。
main()
{
顯示
時間
hour,min,sec;
//
循環
刷屏顯示
}
中斷函數
{
sec++;
if(sec>=60)
{
sec=0;
min++;
}
if(min>=60)
{
min=0;
hour++;
}
if(hour>=24)
{
hour=0;
}
}
這時候
就能看出,
中斷程序
在
運行完的
時候
不能
把
3個
變數
清空,
因為
下次
中斷
還要用到
上次的
值,
這個程序
要
一直
駐留
內存;
2)再來個
普通
函數的
假設
做了一個程序
,程序中
有一個
函數aa,而
函數
aa
我只能
讓它執行
3次就得
關閉程序(這個
用在
密碼
驗證上)
aa()
{
密碼驗證次數n+1
返回n
和
驗證結果
}
那這個
aa函數
在
密碼
驗證
階段
就要
常駐
內存