#include reg51.h
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。
void init(void)//聲明中斷初始化
{ EA=1;//中斷總開關(guān)
EX0=1;//開中斷0開關(guān)。中斷1為,EX1=1;
IT1=1;//采用邊沿觸發(fā),下降沿有效。IT1=0為低電平觸發(fā)中斷。
}
main()
{ init();調(diào)用中斷初始化函數(shù)
==
===主程序;
}
void in_0(void)interrupt 0//中斷服務(wù)函數(shù)
{ ==
==要服務(wù)的程序
}
1.void(中斷函數(shù)返回類型(空型)) Time1 (中斷函數(shù)名)(void(參數(shù)類型) interrupt 3 (中斷號(hào))
2: 中斷條件發(fā)生時(shí)執(zhí)行中斷,比如void Time1(void) interrupt 3 是定時(shí)器1定時(shí)時(shí)間到發(fā)生中斷,中斷函數(shù)放在那里無所謂
3:void PxInt0(void) interrupt 0 中斷名為PxInt0的0號(hào)中斷
void PxInt1(void) interrupt 2 中斷名為PxInt1的2號(hào)中斷
void time0_int(void) interrupt 1 中斷名為time0_int的1號(hào)中斷
void time1_int(void) interrupt 3 中斷名為time1_int的3號(hào)中斷
4:中斷的代碼是你想中斷執(zhí)行的工作,中斷的代碼是根據(jù)任務(wù),需要你自己寫的
中斷大概是這樣的。。。如果有點(diǎn)錯(cuò)誤不要怪我。。。我以前作過鼠標(biāo)中斷的東西。?,F(xiàn)在有些想不起來了。。。所以。。。呵呵呵。。。
當(dāng)程序運(yùn)行到中斷條件的時(shí)候,會(huì)向CPU發(fā)信號(hào)改變優(yōu)先級(jí)(原先運(yùn)行的東西會(huì)放進(jìn)哪個(gè)特定的地方的,作保存),以發(fā)出中斷的那段程序作為最高優(yōu)先,執(zhí)行完成后再由執(zhí)行另外的。。。建議你去看看匯編。。。哈哈哈。。。我沒學(xué)過的。。。
C中實(shí)現(xiàn)中斷是用了一個(gè)函數(shù):geninterrupt(...) 這個(gè)“...”是個(gè)16進(jìn)制的數(shù)字,是中斷號(hào),像鼠標(biāo)中斷號(hào)就是0x33
還要用到類似匯編里寄存器模樣的變量:如_AX,_BX,_CX,_DX...不同的值功能不同。。。哎呀,我都忘完了。。。建議去查下geninterrupt()的用法就OK了。。。
形式如下:
void 中斷名(void) inerrupt 中斷號(hào) using 工作寄存器組
比如外部中斷0
void ext0(void) interrupt 0 using 1 //后面的using 1可以省略,缺省為0
定時(shí)器1
void t1isr() interrupt 3
擴(kuò)展資料:
單片機(jī)內(nèi)部結(jié)構(gòu)
1、CPU
它的名字沒有改,還是稱為CPU(Central Processing Unit)。它是單片機(jī)的核心部件,包括運(yùn)算器和控制器。
運(yùn)算器既是算術(shù)邏輯單元ALU(Arithmetic logic Unit),其功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。
控制器一般由指令寄存器、指令譯碼器、時(shí)序電路和控制電路組成。其作用是完成取指令、將指令譯碼形成各種微操作并執(zhí)行指令,同時(shí)控制計(jì)算機(jī)的各個(gè)部件有條不紊地工作。
2、單片機(jī)內(nèi)部結(jié)構(gòu)之一ROM
“硬盤”,改了名字,稱為程序存儲(chǔ)器,也叫只讀存儲(chǔ)器。用ROM(Read only memery)表示。其作用和計(jì)算機(jī)的硬盤差不多,用來存放用戶編寫的程序。特點(diǎn)是:掉電后不會(huì)丟失數(shù)據(jù)(程序)。
首先你要寫中斷函數(shù)
然后在主程序中像調(diào)用子函數(shù)一樣調(diào)用就可以了
舉個(gè)例子吧
#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++;
}
對(duì)于C51單片機(jī),其內(nèi)部總共有五級(jí)中斷源
分別為外部中斷0、定時(shí)器0、外部中斷1、定時(shí)器1及串行中斷。
C51單片機(jī)的中斷使用時(shí),主要是通過中斷服務(wù)號(hào)來決定的。
如你定義一個(gè)中斷服務(wù)函數(shù):
void KEY(void) intterrupt 0
{
}
當(dāng)外部中斷0申請(qǐng)中斷時(shí)
會(huì)自動(dòng)根據(jù)interrupt后面的0,找到上面定義的這個(gè)中斷服務(wù)函數(shù)。
對(duì)于其他四個(gè)中斷源,其對(duì)應(yīng)的中斷號(hào)分別為1、2 、3、4