您的位置 首页 嵌入式

STC89C52单片机外部中止0和外部中止1的使用

实现功能:测试外部中断0和外部中断1下降沿触发,因为实验板

///////////////////////////////////////////////////////////////////////

完结功用: 测验外部中止0外部中止1下降沿触发,由于试验板上的K3键与外部
中止0的引脚相连,K4与单片机的外部中止1相连,本试验要完结的测
试结果是,按下K3键时,即外部中止0触发,试验板上所以数码管上的
数加1,而按K4按下时,即外部中止1触发,数码管上的数值减1
试验板类型:BS-XYD-C52
试验称号: 外部中止0和外部中止1的使用
编写人: 谢应东
编写日期: 2012-4-27
///////////////////////////////////////////////////////////////////////
#include
#include

#define uchar unsigned char //界说unsigned char 为 uchar
#define uint unsigned int

uchar cCounter; //记载外部中止次数的变量

sbit Duan=P2^6;//界说数码管的段选使能端
sbit Wei =P2^7; //界说数码管的位选使能端

#define Digital_tube_Wei_Enable Wei=1;//敞开操控数码管的位选使能端
#define Digital_tube_Wei_Disable Wei=0; //封闭操控数码管的位选使能端

#define Digital_tube_Duan_Enable Duan=1;//敞开操控数码管的段选使能端
#define Digital_tube_Duan_Disable Duan=0;//封闭操控数码管的段选使能端

#define Digital_tube_Duan P0 //界说数码管数据端口

uchar code Dis_table[]= //将BCD码转换成数码管扫描码的数组
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code Dis_Position[]=//界说数码管位选的数组
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

///////////////////////////////////////////////////////////////////////
函数称号:毫秒延时函数
函数功用:完结毫秒级的延时
参数介绍:Delay_MS: 界说需求延时的毫秒的数值
iNumber: 记载Delay_MS的数值,以for句子完结所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实践测得
返回值:
注意事项:本试验是在所用晶振为12M的前提下完结的毫秒延时,本函数是经过循环的形
式完结,所以假如改动了晶振的频率,请做相应的改动
///////////////////////////////////////////////////////////////////////
void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber //用for句子完结单片机的延时
{
iValue=107; //107这个数值是经过测定而得
while(iValue–);
}
}
///////////////////////////////////////////////////////////////////////
函数称号:Init_INT0
函数功用:设置单片机的外部中止0和中止1,详细的设置状况都为外部低电平触发,并
且开总中止
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////
void Init_INT0()
{
EX0=1; //敞开外部中止 0
IT0=1; //设置成低电平触发,1为下降沿触发

EX1=1; //敞开外部中止 0
IT1=1; //设置成低电平触发,1为下降沿触发
EA=1;//敞开总中止
}
///////////////////////////////////////////////////////////////////////
函数称号:main
函数功用:完结外部中止0和中止1的初始化设置,然后体系彻底进入等候状况,直到有
外部中止被触发
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////
void main()
{
Init_INT0(); //初始化外部中止0和外部中止1

cCounter=0;

Digital_tube_Wei_Enable;
Digital_tube_Duan=0x00;
Digital_tube_Wei_Disable;
while(1)
{

Digital_tube_Duan_Enable;
Digital_tube_Duan=Dis_table[cCounter];//送入要显现的cCounter的数值
Digital_tube_Duan_Disable;
}
}
///////////////////////////////////////////////////////////////////////
函数称号:Interrupt0_handler
函数功用:进入中止服务函数,当cCounter小于10时,其加1,当大于0时,加1
参数介绍:无
返回值:
注意事项:关总中止和延时函数是为了消除颤动然后发生的再次中止
///////////////////////////////////////////////////////////////////////
void Interrupt0_handler() interrupt 0
{
EA=0;//首要封闭总中止,以消除按键呈现的颤动所发生的搅扰
DelayMs(200);//相同是为了消除颤动而发生新的中止
if(++cCounter>=10)
{
cCounter=0;
}
EA=1; //康复中止
}
///////////////////////////////////////////////////////////////////////
函数称号:Interrupt1_handler
函数功用:进入中止服务函数,当cCounter大于0,其减1,小于0时,赋值为10
参数介绍:无
返回值:
注意事项:关总中止和延时函数是为了消除颤动然后发生的再次中止
///////////////////////////////////////////////////////////////////////
void Interrupt1_handler() interrupt 2
{
EA=0;//首要封闭总中止,以消除按键呈现的颤动所发生的搅扰
DelayMs(200);//相同是为了消除颤动而发生新的中止
if(cCounter)
{
–cCounter;
}
else
cCounter=10;
EA=1; //康复中止
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/262867.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部