當前位置:首頁 » 編程語言 » c語言中斷程序

c語言中斷程序

發布時間: 2023-05-09 15:39:00

A. 什麼是c語言的中斷程序作用是什麼

中斷服務程序:處理器處理「急件」,可理解為是一種服務,是通過執行事先編好的某個特定的程序來完成的,這種處理「急件」的程序被稱為——中斷服務敗銷程序。

當中央處理器正在處理內部數據時,外界發氏念生了緊急情況,要求CPU暫停當前的工作轉去處理這個緊殲枯困急事件。處理完畢後,再回到原來被中斷的地址,繼續原來的工作,這樣的過程稱為中斷。實現這一功能的部件稱為中斷系統,申請CPU中斷的請求源稱為中斷源,單片機的中斷系統一般允許多個中斷源,當多個中斷源同時向CPU請求中斷時,就存在一個中斷優先權的問題。通常根據中斷源的優先順序別,優先處理最緊急事件的中斷請求源,即最先響應級別最高的中斷請求。

B. C語言中斷正在執行的子程序

在子程序中用While(一個全局變數){這里執行子程序的操作}
要中斷時把這個變數設為0,
則那個子程序就退出了.
這里神氏搜假設你的子程序是個游歷重復反復執行的操作.如果不是,那麼你的需求本身就是錯的做法你需要核悉重新評估你的設計合理性.

C. c語言怎麼編寫單片機的中斷

給你上個較完整的程序,可以直接在KEIL中運行並觀察輸出
/******************************************************************************
功能:
本程序在12M晶振模式下,通過定時器中斷精確實現數字時鍾計時操作,並在KEIL
中實現輸出。時、分、秒的變化在定時中斷里處理。
說明:
因採用工作方式2,自動裝入初值,所以此程序計時很精確,只是在KEIL中模擬輸
出顯示的變化速度很快,這點可不理會
******************************************************************************/
#include
#include
#define
TEST
//此行用於KEIL輸出顯示,如果不需要顯示可將其刪除
typedef
unsigned
char
uchar;
typedef
unsigned
int
uint;
#define
TH0TL0_INIT
(256-250)
//定時器8位自動裝入模式下寄存器初值,0.25ms中斷一次
char
cHour;
//時
char
cMin;
//分
char
cSec;
//秒
uint
iCount;
//秒計數,計數達到4000時1s,4000*0.25ms
=1000ms
=
1s
bit
bSecChanged;
//秒發生變化標志,每秒送一次輸出顯示,送顯完成後清0,提高主程序效率
//==============================================================================
//T0定時器中斷服務程序,12M晶振下每0.25ms產生中斷,本程序執行一次
//==============================================================================
void
Timer0()
interrupt
1
{
iCount++;
//秒計數值+1
if(iCount==4000)
{//時間計數達到1S
iCount
=
0;
//重新開始下一秒計數
cSec++;
//時鍾:秒+1
bSecChanged
=
1;
//置秒發生變化標志
if(cSec==60)
{//計夠60s
cSec
=
0;
//重新開始下一分計數
cMin++;
//時鍾:分+1
}
if(cMin==60)
{//計夠60分鍾
cMin
=
0;
//重新開始下一小時計數
cHour++;
//時鍾:小時+1
}
if(cHour==24)
{//計夠24小時
cHour
=
0;
//重新開始第二天計數
}
}
}
//==============================================================================
//主程序
//==============================================================================
void
main()
{
uchar
outstr[10];
//輸出字元串,我的編譯器可能有問題,直接輸出有錯
TMOD
=
0X02;//工作方式2,8位自動重裝計時模式
TH0
=
TH0TL0_INIT;
//0.25ms中斷一次
TL0
=
TH0TL0_INIT;
//0.25ms中斷一次
#ifdef
TEST
SCON
=
0x50;
/*
SCON:
mode
1,
8-bit
UART,
enable
rcvr
*/
TMOD
|=
0x20;
/*
TMOD:
timer
1,
mode
2,
8-bit
reload
*/
TH1
=
221;
/*
TH1:
reload
value
for
1200
baud
@
16MHz
*/
TR1
=
1;
/*
TR1:
timer
1
run
*/
TI
=
1;
/*
TI:
set
TI
to
send
first
char
of
UART
*/
#endif
cHour
=
0;
//時
cMin
=
0;
//分
cSec
=
0;
//秒
iCount
=
0;
//秒計數
bSecChanged
=
0;
outstr[2]
=
':';
//時分分隔符
outstr[5]
=
':';
//分秒分隔符
outstr[8]
=
0;
//字元串結束符
EA=1;
//開總中斷
ET0=1;
//允許T0中斷
TR0=1;
//啟動T0
while(1)
{
if(bSecChanged==1)
{//秒發生變化,將時間值轉換為可顯示字元串准備送顯示
bSecChanged
=
0;//清除標志,節省CPU資源
outstr[0]
=
cHour/10
+
0x30;
//將秒轉換為ASCII碼
outstr[1]
=
cHour%10
+
0x30;
outstr[3]
=
cMin/10
+
0x30;
//將分轉換為ASCII碼
outstr[4]
=
cMin%10
+
0x30;
outstr[6]
=
cSec/10
+
0x30;
//將小時轉換為ASCII碼
outstr[7]
=
cSec%10
+
0x30;
#ifdef
TEST
printf("
%s\r",outstr);
//在KEIL中顯示時鍾
#endif
}
}
}

D. 怎樣用C語言編寫一個DOS下的中斷服務程序

DOS中斷中斷屬於匯編層面的內容,可以用asm內聯實現:

在windows visual c++下用__asm關鍵字。

在gcc下用__asm__宏即可。


示例(vc):

#include<stdio.h>
intmain()
{
__asmint3h;
return0;
}


這樣就可以在C裡面寫入匯編代碼了。

__asm關鍵字用於調用內聯匯編程序,並且可在 C 或 C++ 語句合法時出現。它不能單獨出現。必須後跟匯編指令、一組在大括弧中的命令、或者至少一對空大括弧。術語 「__asm塊」在此處指任何命令或命令組,不管是否在大括弧內。


如果不與大括弧一起使用,則__asm關鍵字表示此行的其餘部分是一條匯編語言語句。如果與大括弧一起使用,則該關鍵字表示大括弧之間的每一行都是一條匯編語言語句。為了與早期版本兼容,_asm是__asm的同義詞。

由於__asm關鍵字是語句分隔符,因此您可以將程序集指令放在同一行中。

在 Visual C++ 2005 之前,指令

__asm int 3
不會導致在使用/clr編譯時生成本機代碼;編譯器會將該指令轉換為 CLR 中斷指令。

__asm int 3現在將導致為函數生成本機代碼。如果您希望函數導致代碼中出現斷點,還希望將函數編譯為 MSIL,請使用__debugbreak。

E. C語言中斷/定時的疑問

中斷函數是不需陸虧要額外通過代碼調用的

當中斷條件滿足,單片機會打斷當前執行的語句,跳轉到中斷函數,然後執行完中斷函數後,再次返回之前被打斷的語跡悉絕句繼續執行

中斷函數中,每次都會對定時器重新初始化,即頭兩句對TH1和TL1的賦值,這樣每50ms會再次進入一次中斷函數.每20次進入中斷,即經過了1秒,然後對全局姿姿變數miao自增1

而main函數則是不斷對變數miao進行輸出

F. 如何用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函數

密碼
驗證
階段
就搏團要
常駐
內存

G. C語言中是怎麼實現中斷的能提供點資料或舉幾個例子更好……

中斷大概是這樣的。。。如果有點錯誤不要怪我。鉛如。。我以前作過滑鼠中斷的東西。。現在有些想不起來了。。。所以。。。呵呵呵。。。
當程序運行到中斷條件的時候,會向CPU發信號改變優先順序(原先運行的東西會放進哪個特定的地方的,作保存),以發出中斷的那段程序作為最高優先,執行完成後再由執行另外的。。。建議你去看看匯編。。。哈哈哈。。。我沒學過的。。。
C中實現中斷是用了一個函數:geninterrupt(...)
這個「...」是個16進制的數字,是中斷號,像滑鼠中斷號就是0x33
還要用到類似匯編里寄存器模樣的變數敬帶:如_AX,_BX,_CX,_DX...不同的值功能不同。。。哎呀,我都忘完了。。。建議去查下geninterrupt()的用法就亮激蘆OK了。。。

H. C語言定時中斷程序

你可以在蜂鳴器子程序中的while(1)內加一個按鍵掃描程序,如果掃描到撤警鍵可以跳出這個while(1)死循環,可以用go
to函數(出錯的可能性要大一些渣絕,但一般也沒事)。姿梁辯或者你把while(1)改成while(key);key為一個變數,外界跡缺可以將key置1(調用蜂鳴器),當蜂鳴器內部掃描到撤警鍵後將key置0,這樣也可以跳出這個循環。要不你就把程序直接發出來,幫你
改一下

I. 什麼是C語言的中斷程序 有什麼用啊

C語言標准語法中是沒有中斷的,稿橘中斷是硬體在應用C語言開發時引入的,中斷的實現邏輯都由硬體來完成。
下面以單片機的中斷為例:一般有兩種,定時器中斷和外禪敬雀部中斷。中斷的賀早提出主要是為了讓CPU能及時處理突發事件以及提高代碼運行效率。
舉生活中的例子:現在假設你正在家裡看書,突然電話響了,你會放下書,去接聽電話,聽完電話後,你會回去繼續看書。在這里,將主程序的運行比作看書,電話鈴聲響了是中斷觸發信號,你放下書是保護現場,接聽電話是在執行中斷,回去看書是返回現場繼續運行主程序。
當然中斷還有嵌套和優先順序的問題,這里就不詳細來講。
希望我的回答對你有所幫助!

J. 怎樣在C語言中使用中斷函數

首先你要寫中滑御斷圓讓祥函數
然後在主橘搏程序中像調用子函數一樣調用就可以了
舉個例子吧
#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++;
}

熱點內容
資料庫的根本目標 發布:2025-07-18 21:37:50 瀏覽:937
壓縮機的流速 發布:2025-07-18 21:37:40 瀏覽:406
三星怎麼取消手機密碼 發布:2025-07-18 21:33:50 瀏覽:629
安卓手機耳機如何彈窗顯示電量 發布:2025-07-18 21:20:53 瀏覽:59
雲伺服器搭建需要什麼工具 發布:2025-07-18 20:51:08 瀏覽:322
如何提高手機緩存速度 發布:2025-07-18 20:24:48 瀏覽:237
vba讀取資料庫數據 發布:2025-07-18 20:24:48 瀏覽:608
shell解壓zip 發布:2025-07-18 20:20:36 瀏覽:859
安卓泰拉瑞亞去哪裡買 發布:2025-07-18 20:01:05 瀏覽:694
flash編譯器 發布:2025-07-18 19:49:38 瀏覽:487