- /*-----------------------------------------------
- 名称:外部中断0电平触发
- 论坛:www.doflye.net
- 编写:shifang
- 日期:2009.5
- 修改:无
- 内容:通过中断接口P3.2连接的独立按键测试,按一次P1口的LED灯反向,
- 这里使用电平触发,所以一直按键不松开和一次按键效果不相同,按下会看到灯全部亮
- 说明中断一直在作用,用示波器看则是高频方波
- ------------------------------------------------*/
- #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- P1=0x55; //P1口初始值
- EA=1; //全局中断开
- EX0=1; //外部中断0开
- IT0=0; //电平触发
- while(1)
- {
- //在此添加其他程序
- }
- }
- /*------------------------------------------------
- 外部中断程序
- ------------------------------------------------*/
- void ISR_Key(void) interrupt 0 using 1
- {
- P1=~P1; //进入中断程序执行程序,
- //此时可以通过 EA=0指令暂时关掉中断
- }
- <pre code_snippet_id="2145062" snippet_file_name="blog_20170122_1_1379483" name="code" class="cpp">/*-----------------------------------------------
- 名称:外部中断1电平触发
- 论坛:www.doflye.net
- 编写:shifang
- 日期:2009.5
- 修改:无
- 内容:通过中断接口P3.3连接的独立按键测试,按一次P1.0口的LED灯反向,
- 作用效果和中断0相同,启用按键去抖,所以适合实际按键
- ------------------------------------------------*/
- #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- sbit LED=P1^0; //定义LED端口
- void DelayUs2x(unsigned char t);//us级延时函数声明
- void DelayMs(unsigned char t); //ms级延时
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- LED=0; //LED灯点亮
- EA=1; //全局中断开
- EX1=1; //外部中断0开
- IT1=0; //琁T1=0表示电平触发
- while(1)
- {
- //在此添加其他程序
- }
- }
- /*------------------------------------------------
- 外部中断程序
- ------------------------------------------------*/
- void ISR_INT1(void) interrupt 2
- {
- if(!INT1)
- {
- DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
- if(!INT1)
- while(!INT1);//等待按键释放
- {
- LED=!LED;
- }
- }
- }
- /*------------------------------------------------
- uS延时函数,含有输入参数 unsigned char t,无返回值
- unsigned char 是定义无符号字符变量,其值的范围是
- 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
- 长度如下 T=tx2+5 uS
- ------------------------------------------------*/
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- /*------------------------------------------------
- mS延时函数,含有输入参数 unsigned char t,无返回值
- unsigned char 是定义无符号字符变量,其值的范围是
- 0~255 这里使用晶振12M,精确延时请使用汇编
- ------------------------------------------------*/
- void DelayMs(unsigned char t)
- {
- while(t--)
- {
- //大致延时1mS
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
- </pre><br>
- /*-----------------------------------------------<br>
- 名称:外部中断0边沿触发<br>
- 论坛:www.doflye.net<br>
- 编写:shifang<br>
- 日期:2009.5<br>
- 修改:无<br>
- 内容:通过中断接口P3.2连接的独立按键测试,按一次P1口的LED灯反向,<br>
- 这里使用边沿触发,所以一直按键不松开和一次按键效果相同,区<br>
- 别于电平触发<br>
- ------------------------------------------------*/<br>
- #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义<br>
- /*------------------------------------------------<br>
- 主程序<br>
- ------------------------------------------------*/<br>
- main()<br>
- {<br>
- P1=0x55; //P1口初始值<br>
- EA=1; //全局中断开<br>
- EX0=1; //外部中断0开<br>
- IT0=1; //边沿触发<br>
- while(1)<br>
- {<br>
- //在此添加其他程序<br>
- }<br>
- }<br>
- /*------------------------------------------------<br>
- 外部中断程序<br>
- ------------------------------------------------*/<br>
- void ISR_Key(void) interrupt 0 using 1<br>
- {<br>
- P1=~P1; //s3按下触发一次,P1取反一次<br>
- }<br>
- <br>
- /*-----------------------------------------------<br>
- 名称:外部中断1电下降沿平触发<br>
- 论坛:www.doflye.net<br>
- 编写:shifang<br>
- 日期:2009.5<br>
- 修改:无<br>
- 内容:通过中断接口P3.3连接的独立按键测试,按一次P1.0口的LED灯反向,<br>
- 作用效果和中断0相同<br>
- ------------------------------------------------*/<br>
- #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义<br>
- <br>
- sbit LED=P1^0; //定义LED端口<br>
- <br>
- void DelayUs2x(unsigned char t);//us级延时函数声明 <br>
- void DelayMs(unsigned char t); //ms级延时<br>
- /*------------------------------------------------<br>
- 主程序<br>
- ------------------------------------------------*/<br>
- main()<br>
- {<br>
- LED=0; //LED灯点亮<br>
- EA=1; //全局中断开<br>
- EX1=1; //外部中断1开<br>
- IT1=1; //IT1=1表示边沿触发<br>
- while(1)<br>
- {<br>
- //在此添加其他程序<br>
- }<br>
- }<br>
- /*------------------------------------------------<br>
- 外部中断程序<br>
- ------------------------------------------------*/<br>
- void ISR_INT1(void) interrupt 2 <br>
- {<br>
- <br>
- if(!INT1)<br>
- {<br>
- DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误<br>
- if(!INT1)<br>
- //while(!INT1);//等待按键释放<br>
- {<br>
- LED=!LED; <br>
- }<br>
- }<br>
- }<br>
- <br>
- /*------------------------------------------------<br>
- uS延时函数,含有输入参数 unsigned char t,无返回值<br>
- unsigned char 是定义无符号字符变量,其值的范围是<br>
- 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时<br>
- 长度如下 T=tx2+5 uS <br>
- ------------------------------------------------*/<br>
- void DelayUs2x(unsigned char t)<br>
- { <br>
- while(--t);<br>
- }<br>
- /*------------------------------------------------<br>
- mS延时函数,含有输入参数 unsigned char t,无返回值<br>
- unsigned char 是定义无符号字符变量,其值的范围是<br>
- 0~255 这里使用晶振12M,精确延时请使用汇编<br>
- ------------------------------------------------*/<br>
- void DelayMs(unsigned char t)<br>
- {<br>
- <br>
- while(t--)<br>
- {<br>
- //大致延时1mS<br>
- DelayUs2x(245);<br>
- DelayUs2x(245);<br>
- }<br>
- }<br>
- <br>
- <pre></pre>
- <br>
C51外部中断
最新推荐文章于 2024-07-04 23:02:04 发布