微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第66节:单片机外部中断的基础

第66节:单片机外部中断的基础

时间:11-22 来源:互联网 点击:

字模的驱动函数

TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b

TL0=0x0b;

TR0=1; //开中断

}

/* 注释一:

* 用朱兆祺51学习板中的S1按键作为模拟外部中断0的下降沿脉冲输入。

* 原来S1按键是直接连接到P0^0口的,因此必须通过跳线把P0^0口连接到

* 单片机外部中断0专用IO口P3^2上,只需把P0^0和P3^2的两个黄颜色跳冒去掉,通过一根

* 线把P0^0和P3^2相互连接起来即可。这时每按下一次S1按键,就会给P3^2口

* 产生一个下降沿的脉冲,然后程序会自动跳到以下中断函数中执行一次。

* 由于按键按下去的时候有抖动,也就按一次可能产生几个脉冲,所以按一次往往看到数据一次加了三四个,

* 这种实验现象都是正常的。

*/

void INT0_int(void) interrupt 0 //INT0外部中断函数

{

EX0=0; //禁止外部0中断 这个只是我个人的编程习惯,也可以不关闭

uiPluseCnt++; //累计外部中断下降沿的脉冲数

ucWd1Update=1; //窗口1更新显示

EX0=1; //打开外部0中断

}

void delay_short(unsigned int uiDelayShort)

{

unsigned int i;

for(i=0;i

{

; //一个分号相当于执行一条空语句

}

}

void delay_long(unsigned int uiDelayLong)

{

unsigned int i;

unsigned int j;

for(i=0;i

{

for(j=0;j<500;j++) //内嵌循环的空指令数量

{

; //一个分号相当于执行一条空语句

}

}

}

void initial_myself() //初始化单片机

{

/* 注释二:

* 矩阵键盘也可以做独立按键,前提是把某一根公共输出线输出低电平,

* 模拟独立按键的触发地,本程序中,把key_gnd_dr输出低电平。

* 朱兆祺51学习板的S1就是本程序中用到的一个独立按键。S1经过跳线后

* 连接到单片机的外部中断专用接口P3^2上,用来模拟外部下降沿脉冲输入。

*/

key_gnd_dr=0; //模拟独立按键的地GND,因此必须一直输出低电平

beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。

TMOD=0x01; //设置定时器0为工作方式1

TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b

TL0=0x0b;

}

void initial_peripheral() //初始化外围

{

ucDigDot8=0; //小数点全部不显示

ucDigDot7=0;

ucDigDot6=0;

ucDigDot5=0;

ucDigDot4=0;

ucDigDot3=0;

ucDigDot2=0;

ucDigDot1=0;

EX0=1; //允许外部中断0

IT0=1; //下降沿触发外部中断0 如果是0代表低电平中断

/* 注释三:

* 注意,由于本系统中用了2个中断,一个是定时中断,一个是外部中断,

* 因此必须设置IP寄存器,让外部中断0为最高优先级,让外部中断0可以打断

* 定时中断。

*/

IP=0x01; //设置外部中断0为最高优先级,可以打断低优先级中断服务。实现中断嵌套功能

EA=1; //开总中断

ET0=1; //允许定时中断

TR0=1; //启动定时中断

}

总结陈词:

这节讲了外部中断的基本程序模板,下一节我会讲一个外部中断的实际应用项目例子。欲知详情,请听下回分解----利用外部中断实现模拟串口数据的收发。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top