小编在学习51单片机中断的时候常常被外部中断、定时/计数器和串行口弄的稀里糊涂的,本来就是个小小学渣,怎么能经得起折磨!!!
闲来无事,今天写一遍这个来介绍说明一下外部中断INT0、INT1。其他的小编以后再整理给大家。
先上一个实例:
题目:
实例仿真图:
程序
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
void delay1s(void) //延时1s
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_();
}
void main(void){
P0 = 0x01; //设一个初值
IP = 0x04; //设置中断优先级,人为的将INT1的优先级设置大于INT0
IT0 = 1; //TCON,设置中断触发方式为边沿触发方式
IE = 0x85; //IE,开总中断允许,开INT0,INT1中断允许
while(1); //死循环,等待中断信号
}
void int0_p(void) interrupt 0{ //外部中断0中断服务程序,其中 “int0_p(void)”函数名随意
uint j;
delay1s();
for(j=0;j<7;j++){
P0 = _crol_(P0,1);
delay1s();
}
}
void int1_p(void) interrupt 2{ //外部中断0中断服务程序,其中 “int1_p(void)”函数名随意
uint i;
delay1s();
for(i=0;i<7;i++){
P0 = _cror_(P0,1);
delay1s();
}
}
实例的结果:
(1)当仅按下INT0引脚处的按键K1时,LED自上向下依次点亮,即顺流水一次。
(2)当仅按下INT1引脚处的按键K2时,LED自下向上依次点亮,即逆流水一次。
(3)当按下K1后,在LED顺流水的过程中按下K2,LED变成逆方向依次点亮,一段时间后又变成顺流水,然后结束。(默认INT0的优先级大于INT1,我们在程序中将INT1的优先级设置大于INT0)
总结:
中断初始化过程:
1、设置IP:完成中断优先级的设置:
(老师的PPT,借来一用,嘿嘿)
2、设置TCON:设置中断触发方式
这个TCON可以位操作:例:程序中设置外部中断0为边沿触发,可直接写成IT0=1;
3、设置IE:开总中断,开需要的中断
(IE也可以位操作)
注意:外部中断的中断标志位是自动清除的
4、写中断服务程序的中断号如下:
补充:中断标志的撤销说明如下:
最后
以上就是矮小皮皮虾最近收集整理的关于51单片机系列——外部中断怎么写(讲解+实例:改变流水方向)的全部内容,更多相关51单片机系列——外部中断怎么写(讲解+实例内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复