導航:首頁 > 操作系統 > 單片機中斷的控製程序

單片機中斷的控製程序

發布時間:2023-04-14 15:11:35

單片機怎麼從主函數跳到中斷函數中

為了把主程序全部放入(定時)中斷中,必須把程序化分成一個個的模塊,即任務,每個任務完成一個特定的功能,例如掃描鍵盤並檢測按鍵。 設定一個合理的時基 (tick),例如 5, 10 或 20 ms, 每次定時中斷,把所有任務執行一遍,為減少復雜性。

一般不做動態調度(最多使用固定數組以簡化設計,做動態調度就接近 os 了),這實際上是一種無優先順序時間片輪循的變種。


(1)單片機中斷的控製程序擴展閱讀

大多數中斷系統都具有如下幾方面的操作,這些操作是按照中斷的執行先後次序排列的。

①接悔絕收中斷請求。

②查看本級中斷屏蔽位,若該位為1則本級中斷源參加優先權排隊。

③中斷優先權選擇。

④碧咐姿處理機執行完一條指令後或者這條指令已無法執行完,則立即中止現行程序。接著,中斷部件根據中斷級去指定相應的主存單元,並把被中斷的指令地址和處理機當前的主要狀態信息存放在此單元中。

⑤中斷部件根據中斷級又指定另外的主存單元,從這些單元中取出處理機新的狀態信息和該級簡正中斷控製程序的起始地址。

⑥執行中斷控製程序和相應的中斷服務程序。

⑦執行完中斷服務程序後,利用專用指令使處理機返回被中斷的程序或轉向其他程序。

Ⅱ 簡述8051單片機中斷響應過程

單片機一旦響應中斷請求,就由硬體完成以下功能:

(1)根據響應的中斷源的中斷優先順序,使相應的優先順序狀巧野態觸發器置1;

(2)執行硬體中斷服務子程序調用,並把當前程序計數器PC的內容壓入堆棧,保護斷點,尋找中斷源;

(3)清除相應的中斷請求標志位(串列口中斷請求標志RI和TI除外);

(4)把被響應的中斷源所對應的中斷服務程序的入口地址(中斷矢量)送入PC,從而轉入相應的中斷服務程序。

(5)中斷返回,程序返回斷點處繼續執行。

(2)單片機中斷的控製程序擴展閱讀:

單片機應用分類:

單片機(Microcontrollers)作為計算機發展的一個重要分支領域,根據發展情況,從不同角度,單片機大致可以分為通用型/專用型、匯流排型/非匯流排型及工控型/家電型。

通用型:

這是按單片機(Microcontrollers)適用范圍來區分的。例如讓槐,80C51式通用型單片機,它不是為某種專門用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功孝滑喊能的溫度測量控制電路。

匯流排型:

這是按單片機(Microcontrollers)是否提供並行匯流排來區分的。匯流排型單片機普遍設置有並行地址匯流排、數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接。

另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積,這類單片機稱為非匯流排型單片機。

控制型:

這是按照單片機(Microcontrollers)大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設介面集成度高。顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。

參考資料:網路——單片機

Ⅲ 單片機中斷程序

結構很規矩,這個程序。

首先單片機上電復位,運行死循環前面的程序(,你這里就是init_timer(); // 應該叫初始化定時器,才合適,讓定時器按照你需要的定時長度工作,或叫產生中斷 )
接下來單片機主程序就是一直在死循環了。我們的主要任務一般在這里處理。
中斷,就是在處理一些特殊任務,比如按鍵,或定時處理的程序,或外部一個不知道什麼時間發生的任務,或通信任務等等。你在主循環的時候,無論在什麼時候,中斷請求來了(可以理解為需要處理比較緊急任務,優先處理的任務),就會暫停主循環,進入對應中斷服務程序。運行完,在回主循環的暫停地方,繼續執行死循環的任務。
定時器中斷,就是每過一定時間,運行一下中斷服務程序。常用來計時和產生脈沖信號。

初始化定時器,就是給定時器的寄存器,設置工作模式,時鍾源,溢出的計數值。設置好了,定時器就能根據每個時鍾源的頻率,進行計數,直至溢出,然後產生一個中斷請求。如果不餓能自動載入計數初值的定時器,在中斷處理函數(服務函數)必須手動載入初值。

Ⅳ 51系列單片機的按鍵中斷控製程序

void External_Interrupt_0() interrupt 0
{
Count_A = ~ Count_A;
LED1 = ~ LED1;
}
你用外部中斷0,是否是想按住按鍵時就停在哪裡,是就這樣改一下!void External_Interrupt_0() interrupt 0
{
Count_A = ~ Count_A;
LED1 = ~ LED1; while(!P32);
}
假如P32按下時下降沿或低電平觸發,進入外部中斷,執行完2條指令取反後,一直等待按鍵松開。

Ⅳ 中斷程序(單片機控制PGA2310)

if(vol) //判斷是否達到最小音量
{
vol+=0X0101; //音量減
sendvol(vol); //音量輸出
應該是vol-=0X0101; //音量減


這是修改以後的程序

#include <reg52.h> //包括一個52標准讓凳內核的頭文件
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long

sbit cs=P2^0; //片選
sbit volbit=P2^1; //音量位數據
sbit clk=P2^2; //時鍾
sbit war=P2^3; //極限警告輸出
unsigned int vol;
void warn();
void sendvol(uint vol);
void delay(uint t);
void voldown();
void volup();

void volup() //音量加
{
if (vol==0Xffff) //判斷是否達到最大音量
{
warn() ;//警報
}
if(vol < 0Xffff)
{
vol+=0X0101; //增加音量
sendvol(vol); //輸出音量旦畝
}
}

void voldown() //音量減
{
if(vol > 0x0000) //判斷是否達到最小音量
{
vol-=0X0101; //音量減
sendvol(vol); //音量輸出
}
else
warn(); //警報
}

void sendvol(uint vol) //模滑森輸出音量
{
uchar i;
cs=0; //片選
for(i=16;i>0;i--) //發送16bit音量數據
{
clk=0;
if(vol&0X0001==0x0001)
{
volbit=1;
}
else
{
volbit=0;
}

clk=1;
vol>>=1; //右移一位
}
cs=1;
volbit=1;
}

void warn() //警報
{
war=0;
delay(100);
war=1;
delay(100);
war=0;
}

void main() // 主程序
{
vol=0X0f0f;
EX0=1; //開外中斷
IT0=0; //外中斷低電平變產生中斷
EX1=1;
IT1=0;
EA=1; //打開總中斷
sendvol(0xffff) ;
while(1) //主程序循環
{
;
}
}
//外中斷0
void int0() interrupt 0
{
EA=0;
volup(); //聲音加
delay(500);
EA=1;
}
//外中斷1
void int1() interrupt 2
{
EA=0;
voldown();//聲音減
delay(500);
EA=1;
}
//延時
void delay(uint t)
{
uchar i;
for (t;t>0;t--)
{
for (i=200;i>0;i--);
}
}

Ⅵ 單片機中斷處理流程

當某中斷產生而且被CPU響應,主程序被中斷,接下來將執行如下操作:
1.
當前正被執行的指令全部執行完畢;
2.
PC值被壓入棧;
3.
現場保護;
4.
阻止同級別其他中斷;
5.
將中斷向量地址裝載到程序計數器PC;
6.
執行相應的中斷服務程序。
中斷服務程序ISR完成和該中斷相應的一些操作。ISR以RETI(中斷返回)指令結束,將PC值
從棧中取回,並恢復原來的中斷設置,之後從主程序的斷點處繼續執行。

Ⅶ 單片機 按鍵產生中斷 控制顯示 程序

不知道是怎樣的顯示方式,5位數碼管掃描顯示嗎? 對應的原理圖是什麼,對應那些引腳,以下做參考
#include "reg51.h"
#include "intrins.h"
#include <absacc.h>

#define unit unsigned int
#define char unsigned char
sbit deng1=P0^1;
sbit deng2=P0^2;
sbit kong=P0^0;

char code dis_7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00, 0xff };
/*共陰LED數碼管段碼 0 1 2 3 4 5 6 7 8 9 10 A B C D E F 滅 */
char data timedata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//定義計數單元初值0,6個
char code weisao[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位掃描控制字
char data BUFFER[1]={0}; //定時器記數變數
char data wei=-1; //時間設置時選種位
char c=0; //閃爍次數變數
bit flag=0; //標志位
char j1,j; //計數標志

ledxian() //LED顯示子程序
{
char k;
for(k=0;k<6;k++)
{
if(wei==-1) //當WEI為-1時正常顯示
{
P1=dis_7[timedata[k]];//各位時間顯示值轉段碼
}
else //WEI不為-1時再判斷哪一位K閃
{
if(k==wei) //K=WEI時閃等掃過128次時閃
{
if(j==128)
{
//j1++;
//if(j1==1)
flag=~flag; //J到128時標志位取反
}
j++;

if(!flag)
{
P1=dis_7[16]; //滅LED燈
if(j==0)
{
if(c<15) //選種後閃爍次數
{
c++ ;
}
else //20次到了清WEI標志,清閃爍次數標志
{
wei=-1;
c=0;
ET0=1; //定時中斷開
}

}
}
else
{
P1=dis_7[timedata[k]]; //FLAG=1時正常顯示

}
}
else
{
P1=dis_7[timedata[k]]; //J不到128則正常顯示
}
}
P2=~weisao[k]; //位掃描
delayxms(1); //1毫秒延時
P2=~0xff; //屏蔽

}
}

Ⅷ 什麼是單片機的中斷

不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。

計算機的中斷系統能夠加強CPU對多任務事件的處理能力。中斷機制是現代計算機系統中的基礎設施之一,它在系統中起著通信網路作用,以協調系統對各種外部事件的響應和處理。中斷是實現多道程序設計的必要條件。 中斷是CPU對系統發生的某個事件作出的一種反應。

引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發生中斷時被打斷程序的暫停點稱為斷點。

CPU暫停現行程序而轉為響應中斷請求的過程稱為中斷響應。處理中斷源的程序稱為中斷處理程序。

CPU執行有關的中斷處理程序稱為中斷處理。而返回斷點的過程稱為中斷返回。中斷的實現實行軟體和硬體綜合完成,硬體部分叫做硬體裝置,軟體部分稱為軟體處理程序。

響應處理

大多數中斷系統都具有如下幾方面的操作,這些操作是按照中斷的執行先後次序排列的。

1、 接收中斷請求。

2、 查看本級中斷屏蔽位,若該位為1則本級中斷源參加優先權排隊。

3、 中斷優先權選擇。

4、 處理機執行完一條指令後或者這條指令已無法執行完,則立即中止現行程序。接著,中斷部件根據中斷級去指定相應的主存單元,並把被中斷的指令地址和處理機當前的主要狀態信息存放在此單元中。

5、 中斷部件根據中斷級又指定另外的主存單元,從這些單元中取出處理機新的狀態信息和該級中斷控製程序的起始地址。

6、 執行中斷控製程序和相應的中斷服務程序。

7、 執行完中斷服務程序後,利用專用指令使處理機返回被中斷的程序或轉向其他程序。

沖突

在一些罕見的情況下,兩個ISA設備可以共享相同的 IRQ,只要它們不同時使用即可。為了解決這個問題,後來的PCI 匯流排允許 IRQ 共享。PCI Express沒有物理中斷線,並使用消息信號中斷(MSI) 到操作系統(如果可用)。

在早期的 IBM 兼容個人計算機中,中斷曾經是一種常見的硬體錯誤,當兩個設備嘗試使用相同的中斷請求(或 中斷)向可編程中斷控制器(PIC)發出中斷信號時會收到該錯誤。

PIC 期望每條線路僅來自一個設備的中斷請求,因此沿同一條線路發送中斷信號的多個設備通常會導致 中斷 沖突,從而導致計算機死機。

例如,如果在系統中添加數據機擴展卡並分配給中斷4,傳統上分配給串列埠1,則可能會導致中斷沖突。最初,中斷 7 是使用音效卡的常見選擇,但後來發現 中斷 7 會干擾列印機埠(LPT1)時使用了中斷5。該串列埠經常禁用可以用於其他設備的中斷線。

中斷 2/9 是 MPU-401 MIDI 埠的傳統中斷線,但這與ACPI系統控制中斷(SCI 在 Intel 晶元組上硬連線到 中斷9)沖突;

這意味著 ISAMPU-401帶有硬連線中斷2/9 的卡和帶有硬編碼 中斷 2/9 的 MPU-401 設備驅動程序不能在啟用 ACPI 的系統上以中斷驅動模式使用。

以上內容參考網路-中斷

Ⅸ 51單片機之中斷系統,外部中斷

中斷分為前棚4個步驟:中斷請求→中斷相應→中斷處理→中斷返回(先做更重要的事)
1、數據的輸入/輸出傳送方式

外部中斷要段梁看對應引腳外部的電平狀態。
例如:外部中斷0(INT0)對應的引腳是P32,
當出現 低電平 ,即P32引腳連接的地方是 低電平 ,進入相應的中斷函數;
當出現 下降沿 ,即P32引腳連接的地方 由高電平變為低電平 ,進入相應的中斷函數

內部中斷源要看單片機內部的定時器/計數器

中斷允許寄存器IE

定時器/計數器0/1控制寄存器TCON

對同時發生多個中斷申請時:
不同優先順序的中斷同時申請:先高後低
相同優先順序的中斷同時申請:按序執行
正處理低優先順序中斷又接到高級別中斷:高打斷低
正處理高優先順序中斷又接到低級別中斷:高不理低

初始化的意思如圖所示

實現思路
查看上方 P3第二功能各引腳功能定義 ,P3.3是外部中斷1 (INT1)的外部輸入引腳

編寫一個程序握悔運,使得 S2按鍵按下 時,某個IO口(下面程序選擇了P3.7這個IO口) 產生跳變沿 (由1變0)。P3.3與P3.7用跳線連接,使P3.3口與P3.7口同時產生跳變沿。

Ⅹ 80C51單片機,12mhz.利用中斷程序控制8個燈依次亮滅,定時時間為1秒。

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char tab[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};

void delay(uint e) //延時函數,延時為0.5s
{
uint i,j;
while(e--)
{
for(i=0;i<500;i++)
for(j=0;j<110;j++);
}
}

void Timer0Init()
{
TMOD|=0x01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0xfe; //給定時器賦初值,定時1ms
TL0=0xfc;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}

void main()
{
Timer0Init();
while(1);
}

void timer0() interrupt 1
{
uchar i;
for(i=0;i<8;i++)
{
P2=tab[i];
delay(1);
}
for(i=0;i<8;i++)
{
P2=~tab[i];
delay(1);
}

閱讀全文

與單片機中斷的控製程序相關的資料

熱點內容
易語言遞歸演算法 瀏覽:284
中國有出什麼加密幣嗎 瀏覽:530
加密程序不小心刪除 瀏覽:415
清除空文件夾的代碼 瀏覽:608
相冊視頻水印怎麼去掉的app 瀏覽:616
雞啄米c編程入門 瀏覽:826
iphone手機視頻如何加密或隱藏 瀏覽:289
車床一個軸的編程 瀏覽:6
任何APP都借不了款怎麼辦 瀏覽:362
linux刷新命令 瀏覽:518
解壓配音的小視頻 瀏覽:652
phptable頁 瀏覽:813
人工智慧怎麼擺脫演算法 瀏覽:72
思科顯示配置命令 瀏覽:411
網上為什麼對程序員這么多評論 瀏覽:84
app續費怎麼算 瀏覽:775
安卓手機怎麼把相冊傳到蘋果 瀏覽:261
高中信息技術演算法教案 瀏覽:245
百戰程序員職業 瀏覽:606
abb機器人焊接操作編程教學視頻 瀏覽:384