51单片机的外部中断的学习(一)

来源:互联网 发布:form表单提交到数据库 编辑:程序博客网 时间:2024/05/16 09:32
/**********************************************************************************      外部中断实验* 实验现象: 下载程序后,按K3按键可以对LED进行取反,按一下K4按键可以对LED1进行取反。* 注意事项: 无* * 注意事项:* interrupt0:外部中断0* interrupt1:定时器中断0* interrupt2:外部中断1* interrupt3:定时器中断1* interrupt4:串口 *********************************************************************************/#include<reg52.h>typedef  unsigned int uint16;typedef  unsigned char uchar8;sbit  k3 = P3^2;    // 定义按键 K3 sbit  k4 = P3^3;    // 定义按键 K4 sbit  led = P2^0;// 定义P2口为LEDsbit  led1= P2^1;    /********************************************************************************* 函数名:   delay *  功能 :延时函数,i=1时,大约延时10us*********************************************************************************/void delay(uint16 i){   while(i--);}/**********************************************************************************  函数名:   Int0Init()*  函数功能: 设置外部中断0*   输入: 无*   输出: 无**********************************************************************************/void  Int0Int(){    // 设置INT0IT0 = 1;   // 跳变沿触发方式(下降沿触发)EX0 = 1;   // 打开INT0的中断允许EA  = 1;   // 开总中断}/**********************************************************************************  函数名:   Int0Init()*  函数功能: 设置外部中断1*   输入: 无*   输出: 无**********************************************************************************/void  Int1Int(){    // 设置INT1IT1 = 1;   // 跳变沿触发方式(下降沿触发)EX1 = 1;   // 打开INT0的中断允许EA  = 1;   // 开总中断}/**********************************************************************************  函数名:   main()*  函数功能: 主函数*   输入: 无*   输出: 无**********************************************************************************/void main(){    Int0Int(); Int1Int(); while(1);}/**********************************************************************************  函数名:   Int0()    interrupt 0*  函数功能: 外部中断0的服务函数*   输入: 无*   输出: 无**********************************************************************************/void waibu0()  interrupt 0 {    delay(1000);if(k3==0)  // 延时去抖{   delay(1000);   if(k3==0)   {          led=~led;      }}}/**********************************************************************************  函数名:   waibu1()    interrupt 2*  函数功能: 外部中断1的服务函数*   输入: 无*   输出: 无**********************************************************************************/void waibu1()  interrupt 2{    delay(1000);if(k4==0)        // 延时去抖{   delay(1000);   if(k4==0)   {          led1=~led1;      }}}编程中要注意的事项:
1、外部中断0 编好以后 Int0()  interrupt 0 编写外部中断1的时候要用 interrupt 2 用 interrupt 1 ,会出现问题的。
2、外部中断1的编写也要打开,进行初始化操作
3、中断服务函数,不要进行声明,它是可以直接调用的
4、编写代码的时候要注意规范,养成良好的习惯
 
阅读全文
0 0