PIC16F887 RB0外部中断(2)

来源:互联网 发布:淘宝上买药品不能付款 编辑:程序博客网 时间:2024/05/23 16:12
#include <pic.h>  #include <pic16f887.h>   __CONFIG (CP_OFF&WDTE_OFF&BOREN_ON&PWRTE_OFF&FOSC_HS&WRT_OFF&LVP_OFF&CPD_OFF);     /*配置位 CP_OFF,代码保护位,程序存储器代码保护关闭; WDTE_OFF,看门狗定时器使能位,看门狗定时器关闭,可以通过WDTCON寄存器的SWDTEN位使能; BOREN_OFF,掉电复位选择位,掉电复位关闭; PWRTE_OFF,上电定时器使能位,上电定时器关闭; FOSC_HS,振荡器选择位,高速晶振或谐振器在RA6/OSC2/CLKOUT和RA7/OSC1/CLKIN; WRT_OFF,闪存程序存储器自写使能位,写保护关闭; LVP_OFF,低电压编程使能位,RB3引脚有数字I/O,使用MCLK上的HV(高电压)来编程; CPD_OFF,数据代码保护位,数据存储器代码保护关闭; */       #define uchar unsigned char  #define uint unsigned int  #define LEDA RB3//定义灯1  #define RET RB0//定义灯1      void delay(unsigned int n);  void interrupt ISR(void);   uchar count;    main()  {  TRISB=0X01; //RB0为输入,其余为输出   PORTB=0x09; //RB3置1  //ANSEL=0x00;  ANSELH=0x00;  //将RB0(AN12)引脚被分配给端口或特殊功能。//必须初始化ANSELH 寄存器以将模拟通道配置为数字输入。配置为模拟输入的引脚将读为0。  /*GIE = 1;  //GIE:  全局中断允许位   1 = 允许所有未被屏蔽的中断PEIE = 1; //PEIE: 外设中断允许位  1 = 允许所有未被屏蔽的外设中断INTE = 1; //INTE:INT 外部中断允许位 1 = 允许INT 外部中断RBIE = 1; //RBIE:PORTB 电平变化中断允许位 1 = 允许PORTB 电平变化中断INTF=0;   //INTF:INT 外部中断标志位 0 = 未发生INT 外部中断 */INTCON=0XD8;   WPUB = 0X01;//使能上拉 /*INTEDG=0; //触发中断的边沿选择位   0 = INT 引脚下降沿触发中断*/ OPTION_REG=0x00;     TRISD=0X00;  //定义PORTD为输出   PORTD=0X00;  //输出低电平  while(1)  {  }    }      //延时(n)ms  void delay(unsigned int n)  {      unsigned int j;      unsigned int k;      for(j=0;j<n;j++)          for(k=264;k>0;k--)          NOP();  }    void interrupt ISR(void)  {   if(INTF==1)   //电平变化中断  {  delay(20); if(RB0 == 0){INTF=0;  PORTD = ~PORTD;LEDA = ~LEDA;}}        } 


代码经过测试。



0 0
原创粉丝点击