51单片机51定时器中断中断的问题

51单片机外部中断的C51编程
学习到中断这卡壳了,先是理解不了两种触发,现在是自己写查询方式的也不对。可能是心不静,也没好好来想想到底是为啥不行?从网上粘点学习的过来吧!我越来越懒了。
以下来自网址:&&谢谢原创!
相关知识:
1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;
2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0;
3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高;
4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1);
5、使用前必须通过IE寄存器打开总中断和自己的中断;
//外部中断基本例程-1(未使用中断,键盘扫描为一般端口扫描)
//这是特意安排的一个例程,以便和使用外部中断的例程2进行对比
//用一个按键控制一个灯的亮灭,开始不亮,按一下则点亮,再按一下灭掉,再按又亮........
//广西民大物电学院 李映超 日
#include &reg52.h&
sbit k1=P3^2;
sbit led=P2^7;
void delay_ms(unsigned int xms);&
//ms级延时子程序
key_scan();&&//声明键盘扫描子函数
//=================================================
void main()
led=1;& &//上电初始化,led灯不亮
& key_scan();
& delay_ms(3000);
//=================================================
void delay_ms(unsigned int xms)&
//ms级延时子程序
& & unsigned int
for(x=x&0;x--)
for(y=130;y&0;y--);}
//-------------------------------------------------&
void key_scan()& &
& & //键盘扫描子函数
& if(k1==0)& &
& & //有键按下吗?(k1=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k1==0)&
&&&//确实是有键按下,则:
{led=!& & &
& & //翻转灯的状态
&&&while(!k1);}
& //等待按键放开
//-------------------------------------------------
//外部中断基本例程-2 (单个键盘的外部中断0扫描处理)
//用一个按键控制一个灯的亮灭
//开始不亮,按一下则点亮,再按一下灭掉,再按又亮........
//广西民大物电学院 李映超 日
#include &reg52.h&
sbit k1=P3^2;
sbit led=P2^7;
void delay_ms(unsigned int xms);&
//ms级延时子程序
void key_scan() interrupt 0& &
//使用了外部中断0的键盘扫描子函数。也可放在主函数而不需要预先声明
& if(k1==0)& &
& & //有键按下吗?(k1=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k1==0)&
&&&//确实是有键按下,则:
{led=!& & &
& & //翻转灯的状态
&&&while(!k1);}
& //等待按键放开
//=================================================
void main()
led=1;& &&
& //上电初始化,led灯不亮
TCON=0x01;& & &
& & //打开外部中断0,并设置为下降沿触发
IE=0x81;& & &
& & //开总中断
delay_ms(3000);&
&//注意主函数这里没有键盘扫描程序了
//=================================================
void delay_ms(unsigned int xms)&
//ms级延时子程序
& & unsigned int
for(x=x&0;x--)
for(y=130;y&0;y--);}
//-------------------------------------------------
//外部中断扩展应用例程-5(8个按钮分别去控制8个灯的亮灭)
//八个按钮通过8个二极管接到外部中断0脚进行中断扩展,
//从而解决外部中断口不够用的问题
//广西民大物电学院 李映超 日
#include &reg52.h&
sbit k0=P2^0;& &
& & //八个按键分别接到P2口各个脚上,
sbit k1=P2^1;& &
//同时还通过二极管连接到外部中断0脚(P3.2)
sbit k2=P2^2;
sbit k3=P2^3;
sbit k4=P2^4;
sbit k5=P2^5;
sbit k6=P2^6;
sbit k7=P2^7;
sbit led0=P0^0;& &
//接在P0脚上的8个LED灯,分别受控于上述8个按键
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
sbit led4=P0^4;
sbit led5=P0^5;
sbit led6=P0^6;
sbit led7=P0^7;
void delay_ms(unsigned int xms);&
//ms级延时子程序
//=================================================
void main()
& //上电初始化,led灯不亮
TCON=0x01;& & &
& & //打开外部中断0,并设置为下降沿触发
IE=0x81;& & &
& & //开总中断
& & delay_ms(3000);
//=================================================
void delay_ms(unsigned int xms)&
//ms级延时子程序
& & unsigned int
for(x=x&0;x--)
for(y=130;y&0;y--);}
//-------------------------------------------------&
void key_scan() interrupt 0& &
& & //使用了外部中断0的键盘扫描子函数
& if(k0==0)& &
& & //有键按下吗?(k0=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k0==0)&
&&&//确实是有键按下,则:
{led0=!led0;& &
//翻转灯的状态
&&&while(!k0);}
& //等待按键放开
& if(k1==0)& &
& & //有键按下吗?(k1=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k1==0)&
&&&//确实是有键按下,则:
{led1=!led1;& &
//翻转灯的状态
&&&while(!k1);}
& //等待按键放开
& if(k2==0)& &
& & //有键按下吗?(k2=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k2==0)&
&&&//确实是有键按下,则:
{led2=!led2;& &
//翻转灯的状态
&&&while(!k2);}
& //等待按键放开
& if(k3==0)& &
& & //有键按下吗?(k3=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k3==0)&
&&&//确实是有键按下,则:
{led3=!led3;& &
//翻转灯的状态
&&&while(!k3);}
& //等待按键放开
& if(k4==0)& &
& & //有键按下吗?(k4=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k4==0)&
&&&//确实是有键按下,则:
{led4=!led4;& &
//翻转灯的状态
&&&while(!k4);}
& //等待按键放开
& if(k5==0)& &
& & //有键按下吗?(k5=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k5==0)&
&&&//确实是有键按下,则:
{led5=!led5;& &
//翻转灯的状态
&&&while(!k5);}
& //等待按键放开
& if(k6==0)& &
& & //有键按下吗?(k6=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k6==0)&
&&&//确实是有键按下,则:
{led6=!led6;& &
//翻转灯的状态
&&&while(!k6);}
& //等待按键放开
& if(k7==0)& &
& & //有键按下吗?(k7=0 ?)
& & delay_ms(10);
& & //延时消抖
& & if(k7==0)&
&&&//确实是有键按下,则:
{led7=!led7;& &
//翻转灯的状态
&&&while(!k7);}
& //等待按键放开
呵呵,基本我中断都讲了。我想知道的那种没有讲哦。呵呵,学到了一个中断扩展,主要是靠硬件来实现的,用或门的方式,和我知道的唤醒扩展差不多,呵呵。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。21ic官方微信-->
后使用快捷导航没有帐号?
查看: 2467|回复: 15
51单片机中断问题 进入 后不能退出
&&已结帖(20)
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
/************************************************************************************
简单的小车驱动&&小车学会了躲避障碍物
*************************************************************************************/
#include &reg52.h&
#include &intrins.h&
#define&&NOP() _nop_()&&/* 定义空指令 */
sbit MOSIO =P1^0;
sbit R_CLK =P1^1;
sbit S_CLK =P1^2;&&//移位寄存器时钟
sbit EN=P1^3;& && && &//使能端
sbit flag =P1^7;
sbit zhong =P3^2;
void delay10ms(unsigned char e);& &//误差 -0.us
void delay1s(unsigned char d);& && &//函数声名
void HC595SendData(unsigned char dat);
//unsigned char code table[]={ 0x27,0x27, 0x27,0x27} ;&&//定义电机驱动数组0x27,0xc6, 0xd8,0x39 包含前进,原声左转,后退,原声右转
& && &EN=0;& &//595
& && & & & S_CLK=0;&&//595
& & & & & & & & R_CLK=0;& &//595
& & & & & & & & delay1s(1);
&&EA=1;&&// 打开总中断
&&EX0=1;&&//允许外部中断0申请中断
&&IT0=1;&&// 下降沿触发
&&while(1)
&&HC595SendData(0x27);
&&delay1s(100);
/*********并口数据转换成串行发送节省I/O口*********************& & & &
& & & && && & & & for (i;i&4;i++)& & //4个数据,循环4次
& & & & & & & &&&{& &
& & & & & & & &&&HC595SendData (table[i]);
& & //& &if (i==1|i==3)
& & & & & & & & & & & & & & & & delay1s(10);
& & & & //& & & & & & & & & & & & else&&delay1s(2);
& && && &}& & & &
***********以下一段用于躲避障碍物**************************/& & & & & & & & & & & &&&
& & & & & & & &&&
/*****************************************************************************
*&&延时子程序& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && && &*
*& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&*
******************************************************************************/
void delay1s(unsigned char d)& &//误差 0us
& & unsigned char a,b,c;
& & while (d--)
& & & &&&{
& && &for(c=46;c&0;c--)
& && &&&for(b=152;b&0;b--)
& && && && &for(a=70;a&0;a--);
& && &_nop_();&&
void delay10ms(unsigned char e)& &//误差 -0.us
& & unsigned char a,b;
while (e--)
& &{ for(b=249;b&0;b--)
& && & for(a=17;a&0;a--);
& & & & & & & && &}
/*********************************************************************************************************
** 函数名称: HC595SendData
*********************************************************************************************************/
void HC595SendData(unsigned char dat)
& & & & & & & &
&&for(j=0;j&8;j++)
& & & & if((dat&&j)&0x80) MOSIO=1; //set dataline high&&0X80&&最高位与SendVal左移的最高位 进行逻辑运算
& & & & else MOSIO=0;& & & & & & & & & & & & & & & && & // 如果为真 MOSIO = 1&&
& & & & S_CLK=0;
& & & & NOP();& & & & //移位寄存器时钟
& & & & NOP();
& & & & S_CLK=1;
& & & & NOP();& && && && && && && & //修正驱动轮只有一个转
& & & & S_CLK=0;& && && && && && &&&//修正驱动轮只有一个转
& &EN=1;& && && && && && && &//修正正反转太快
& & & & delay10ms (10);& && && && & //修正正反转太快
& & & & EN=0;& && && && && && && && &//修正正反转太快
&&R_CLK=0;
&&NOP();& &//存储寄存器时钟
&&R_CLK=1;
&&NOP();& && && && && && && & //修正驱动轮只有一个转
&&R_CLK=0;& && && && && && & //修正驱动轮只有一个转
/*************小车用中断0进行避障 **********************/
void zhongduan()&&interrupt 0
HC595SendData(0x00);
&&EX0=0;&&//暂时关闭中断0
&&x=P2;&&// 保护现场
&&switch (x)
& & & && && && & case 0x9f: { HC595SendData (0x39);
& & & && && && && && & & & & & delay10ms (50);
& & & && && && && && & while ( P3^2==0) ;& && && && && && && && &&&//
& & & && && && && && && & HC595SendData(0x27);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & }& && &//前防撞
& && &case 0xef: { HC595SendData (0x39);
& & & && && && && && & & & & & delay10ms (50);
& & & && && && && && &&&while ( P3^2==0) ;
& & & && && && && && && &HC595SendData(0x27);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & }& && &//左后防撞
& && &case 0xdf: { HC595SendData (0x39);
& & & && && && && && & & & & & delay10ms (50);
& & & && && && && && && &while ( P3^2==0) ;
& & & & & & & & & & & & & & & & & & & && && & HC595SendData(0x27);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & }& && &//左前防撞
& && &case 0xbf: { HC595SendData (0x39);
& & & && && && && && && && & & & delay10ms (50);
& & & && && && && && &while ( P3^2==0) ;
& & & & & & & & & & & & & & & & & & & && && & HC595SendData(0x27);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & }& && &//右前防撞
& && &case 0x7f:&&{HC595SendData (0x39);
& & & && && && && && & & & & & delay10ms (50);
& & & && && && && && &&&while ( P3^2==0) ;
& & & & & & & & & & & & & & & & & & & && && & HC595SendData(0x27);
& & & & & & & & & & & & & & & & & & & & & & & & & & & & }& && &//右后防撞
& & & && &}
& & & && &IE0=0; // 标志 位清零
& &HC595SendData(0x27);
& & & && &EX0=1;
& & & && &zhong=1;
& & & & flag=0;&&
& & & & delay10ms (1);
问题出在中断这里& &case 0xdf: { HC595SendData (0x39);
& & & && && && && && & & & & & delay10ms (50);
& & & && && && && && && &while ( P3^2==0) ;
& & & & & & & && && & HC595SendData(0x27);
& & & & & & & & & & & & }& && &//左前防撞
& && && &我把while (P3^2==0)去掉了不行,再去掉HC595SendData (0x27) 才可以正常进退中断,不知道为什么&&? 只要去掉这两句,或者 把HC595SendData (0x27)放在switch语句后面就能正常进退中断,放到case里能进中断退不出来,麻烦师傅看一下,谢谢了
满意回复+15
"while ( P3^2==0) 等待P3.2变成高电平这样不对吗?"
sbit P3_2 = P3^2;
while ( P3_2==0)
有测过执行一次中断里的代码需要多久吗?
可能是你中断里面的程序还没执行完,它又响应中断了,然后就一直在中断里面。
如果实时性要求不是非常高的话,你可以把 ...
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
这什么程序嘛,中断还延时那么久,还死等等
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
原意是异或意思吗?
还是P3口的位2,如果是那就写错了,不能这样写
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
怎么发了这么多,手机还是没有电脑方便
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
ayb_ice 发表于
原意是异或意思吗?
这是四驱小车的程序,自己写的,用52单片机通过74HC595 串行发送数据 驱动两片L293D& &HC595SendData(0x27)是前行代码& & HC595SendData (0x39)是光电传感器遇到障碍后进入中断的转弯指令,用的是外部中断0,下降沿触发,当在switch语句中写HC595SendData(0x27)后就不能退出中断了,现象就是进入中断后,再遇到障碍不能躲避,当把 前进代码写在seitch语句后面就可以正常进退。while ( P3^2==0) 等待P3.2变成高电平这样不对吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
中断延时太久了
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 105, 距离下一级还需 195 积分
中级技术员, 积分 105, 距离下一级还需 195 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 105, 距离下一级还需 195 积分
中级技术员, 积分 105, 距离下一级还需 195 积分
有测过执行一次中断里的代码需要多久吗?
可能是你中断里面的程序还没执行完,它又响应中断了,然后就一直在中断里面。
如果实时性要求不是非常高的话,你可以把中断里的东西放到while(1)循环里面,中断只设置一个标记。
一般不在中断里面用很长的循环,会死机的。
还没来及接触51就开始用112引脚的单片机了
不过有些是想通的吧
世界上最可怕的两个词,一个是执着,一个是认真。认真
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
rdfeps 发表于
这是四驱小车的程序,自己写的,用52单片机通过74HC595 串行发送数据 驱动两片L293D& &HC595SendData(0x2 ...
可不是判断P3.2电平等于0的意思
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
技术总监, 积分 40100, 距离下一级还需 9900 积分
&while ( P3^2==0) 等待P3.2变成高电平这样不对吗?&
sbit P3_2 = P3^2;
while ( P3_2==0)
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1321, 距离下一级还需 679 积分
助理工程师, 积分 1321, 距离下一级还需 679 积分
主题帖子积分
专家等级:结帖率:95%
主题帖子积分
助理工程师, 积分 1321, 距离下一级还需 679 积分
助理工程师, 积分 1321, 距离下一级还需 679 积分
楼上大侠真是热心 赞一个
行李再重我自己搬 脚步再沉我移的开 心情再黑我看的淡
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
ayb_ice 发表于
&while ( P3^2==0) 等待P3.2变成高电平这样不对吗?&
谢谢了师傅
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 69, 距离下一级还需 31 积分
初级技术员, 积分 69, 距离下一级还需 31 积分
xy123151 发表于
有测过执行一次中断里的代码需要多久吗?
可能是你中断里面的程序还没执行完,它又响应中断了,然后就一直 ...
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术新星奖章
人才类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
社区建设奖章
等级类勋章
热门推荐 /4查看: 2273|回复: 0
使用51单片机的中断功能!(绝对很简单的教程)
大家好,我是电子设计小杨,上次,小编给大家写了一个液晶显示1602的程序,其实那个程序看起来虽然很长,但是本身是不难的,只要理解了数据手册中的内容,按照数据手册上的时序图还有要求照着写下来,很快可以写出来,不过那仅仅是一个静态显示而已,如果要写一个动态显示的,方法和数码管的写法基本相似,大家可以模仿写数码管动态显示的方法去写。
好了,废话不多说,今天小编给大家讲讲如何来写51单片机的中断功能,51单片机中断源有5个,分别是外部中断0,外部中断1,定时器0,定时器1,串行口中断。& &不管是大学里上课的书本,还是参考书也好,在单片机的书里面都是写了一系列密密麻麻的知识点,最后就敲个代码,然后很多初学者从头学到尾,好像知道怎么写,但是又不会写。进来看这篇文章的同伴们,不管您会也好,不会也罢,小编把我当时怎么学中断的经验分享给大家,好让更多的同伴们早日脱离书本,开启自写编程时代!!!
好了,我们进入正题,到底什么是中断??中断这个过程我们程序员需要去做什么??我们带着这两个问题来查找我们当时为什么不会中断的原因。首先:
1、你想使用的中断是哪个?选择相应的序号;2、你所希望触发的条件是什么?3、你希望在中断之后干什么?
中断是什么?说白一点就是,比如你正在家里看电视,然后准备用电磁炉煮水来喝茶。水还没有开的时候当然你还在看电视对不对,等到水开了,当然一般水开了都会有个信号让你知道,那么你就要想着要关掉电磁炉。这个关掉电磁炉的动作就是所谓的中断。而关掉电磁炉之后你进而就要喝茶,然后在看电视或者做其它事情,那么中断以后的这个过程就是我们上面问题的第三点:你希望在中断之后干什么?好了,大家也大概明白了什么是中断了吧?我们不要像书本写的内容那么复杂,我们来说,怎么样来让51单片机执行中断,然后,有需要的我们再去查书本。那么,我们如何来写一个51单片机的中断呢??
首先,我们在主函数中要有以下代码:以外部中断0为例子:void main(){&&EA=1;& && &//打开中断总开关,等于1表示打开,等于0表示关闭&&EX0=1;& & //打开外部中断0,如果是外部中断1则为EX1=1;&&IT0=0;& & //选择触发方式,0是表示电平触发,1表示下降沿触发&&//如果是外部中断1则为IT1=?}接着写中断服务函数void interrupt_0()interrupt 0& &//这后面的中断序号千万别写错{& && &........................}大概就是以上的两个步骤!接下来我们来看一个程序代码:感受一下中断的魅力!
#include&reg51.h&
#define uchar unsigned char& & //宏定义
#define uint unsigned int& &
sbit led=P1^0;& && && && && && && && & //
void Delay(uint del)& & //10毫秒带参量延时函数& &
& && &&&uint i,j;
& && &&&for(i=0; i& i++)
& && &&&for(j=0; j&1827; j++);
void interrupt_0()interrupt 0& &//外部中断0的序号是0
&&led=~& && && && && &&&//将led的状态取反& && && && && &&&
&&delay(10);& && && && && & //延时10X10=100ms
//现在你试试,按一下P3^2的按键,看看led有没有闪一下,注意噢,这是用外部中断来实现led灯亮灭的噢,虽然也是用按键,但是开头我没有对任何一个按键KEY进行定义噢。
void main()
&&EA=1;& && && && && && & //打开总中断
&&EX0=1;& && && && && &&&//打开外部中断0
&&IT0=0;& && && && && && &//让外部中断0用电平触发方式
while(1);& && && && && &//让程序就停在这儿
好了,我们这一讲就到此结束吧,你们可以把我的程序拷贝回去改一改变成自己想要的中断操作模式,要是有不懂的地方多翻翻书本,如果还不理解的话可以加小编的微信提问。
Powered by}

我要回帖

更多关于 单片机的中断系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信