中斷大概是這樣的。。。如果有點(diǎn)錯(cuò)誤不要怪我。。。我以前作過鼠標(biāo)中斷的東西?!,F(xiàn)在有些想不起來了。。。所以。。。呵呵呵。。。
紅安網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),紅安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為紅安1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的紅安做網(wǎng)站的公司定做!
當(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了。。。
中斷函數(shù)是不需要額外通過代碼調(diào)用的
當(dāng)中斷條件滿足,單片機(jī)會(huì)打斷當(dāng)前執(zhí)行的語句,跳轉(zhuǎn)到中斷函數(shù),然后執(zhí)行完中斷函數(shù)后,再次返回之前被打斷的語句繼續(xù)執(zhí)行
中斷函數(shù)中,每次都會(huì)對定時(shí)器重新初始化,即頭兩句對TH1和TL1的賦值,這樣每50ms會(huì)再次進(jìn)入一次中斷函數(shù).每20次進(jìn)入中斷,即經(jīng)過了1秒,然后對全局變量miao自增1
而main函數(shù)則是不斷對變量miao進(jìn)行輸出
首先你要寫中斷函數(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++;
}