标题:
单片机查询方式和中断方式的区别详解
[打印本页]
作者:
yuduan66
时间:
2019-3-29 11:11
标题:
单片机查询方式和中断方式的区别详解
查询方式就是不断的查询某个标志位,需要耗费大量的cpu 的时间,一般情况下除专门用于延时外不用这种方式(自己认为),中断方式比较适合处理具有随即特性的事件,事件发生后向cpu提出申请,然后cpu会保存当前的任务转去处理事件
编程时查询方式要不断查询标志位,而中断要编写中断服务子程序来处理中断事件
你看看上面的,能不能编个中断方式的程序给我咯
比方说定时100ms,分别用查询法和中断法实现
查询法
#include<reg52.h>
void main()
{
TMOD=0X01;//定时器0方式1
TH0=(65536-10000)%256;//定时器器初值
TL0=(65536-10000)/256;
ET0=0;//关定时器0中断
TR0=1;
while(TF0==0);//若定时完成则中断标志位TF0为1,在此不断查询TF0
TR0=1;//完成定时关闭定时器
while(1); //等待
}
中断法
#include<reg52.h>
void main()
{
TMOD=0X01;//定时器0方式1
TH0=(65536-10000)%256;//定时器器初值
TL0=(65536-10000)/256;
EA=1;//开总中断
ET0=1;//关定时器0中断
TR0=1;//打开定时器
while(1); //等待
}
void isr_timer0 interrupt 1
{
TR0=0;//关闭定时器
}
另一个实例:P3.2口接有一个按键,未按下为高电平,按下则为低电平,当按下键时点亮一个led灯
查询法
#include<reg52.h>
sbit led=P1^1;//led是共阴极接法
sbit key=P3^2//按键接到p3.0口
void main()
{
led=0;//熄灭所有灯
while(key==1);//没有键按下则等待(不断查询p3.0的状态)
led=1;//点亮灯
while(1);
}
中断法
#include<reg52.h>
sbit led=P1^1;//led是共阴极接法
void main()
{
led=0;//熄灭所有灯
while(1);
}
void isr_led interrupt 0
{
led0=1;//点亮灯
}
作者:
zlstone1974
时间:
2020-6-17 09:23
你的查询法都没有包含在大循环中怎么实现查询。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1