|
|
查詢方式就是不斷的查詢某個(gè)標(biāo)志位,需要耗費(fèi)大量的cpu 的時(shí)間,一般情況下除專門用于延時(shí)外不用這種方式(自己認(rèn)為),中斷方式比較適合處理具有隨即特性的事件,事件發(fā)生后向cpu提出申請,然后cpu會(huì)保存當(dāng)前的任務(wù)轉(zhuǎn)去處理事件
編程時(shí)查詢方式要不斷查詢標(biāo)志位,而中斷要編寫中斷服務(wù)子程序來處理中斷事件
你看看上面的,能不能編個(gè)中斷方式的程序給我咯
比方說定時(shí)100ms,分別用查詢法和中斷法實(shí)現(xiàn)
查詢法
#include<reg52.h>
void main()
{
TMOD=0X01;//定時(shí)器0方式1
TH0=(65536-10000)%256;//定時(shí)器器初值
TL0=(65536-10000)/256;
ET0=0;//關(guān)定時(shí)器0中斷
TR0=1;
while(TF0==0);//若定時(shí)完成則中斷標(biāo)志位TF0為1,在此不斷查詢TF0
TR0=1;//完成定時(shí)關(guān)閉定時(shí)器
while(1); //等待
}
中斷法
#include<reg52.h>
void main()
{
TMOD=0X01;//定時(shí)器0方式1
TH0=(65536-10000)%256;//定時(shí)器器初值
TL0=(65536-10000)/256;
EA=1;//開總中斷
ET0=1;//關(guān)定時(shí)器0中斷
TR0=1;//打開定時(shí)器
while(1); //等待
}
void isr_timer0 interrupt 1
{
TR0=0;//關(guān)閉定時(shí)器
}
另一個(gè)實(shí)例:P3.2口接有一個(gè)按鍵,未按下為高電平,按下則為低電平,當(dāng)按下鍵時(shí)點(diǎn)亮一個(gè)led燈
查詢法
#include<reg52.h>
sbit led=P1^1;//led是共陰極接法
sbit key=P3^2//按鍵接到p3.0口
void main()
{
led=0;//熄滅所有燈
while(key==1);//沒有鍵按下則等待(不斷查詢p3.0的狀態(tài))
led=1;//點(diǎn)亮燈
while(1);
}
中斷法
#include<reg52.h>
sbit led=P1^1;//led是共陰極接法
void main()
{
led=0;//熄滅所有燈
while(1);
}
void isr_led interrupt 0
{
led0=1;//點(diǎn)亮燈
}
|
評分
-
查看全部評分
|