PIC16F887 RB0外部中断(2)
2015-09-22 15:54
351 查看
#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; } } }
代码经过测试。
相关文章推荐
- Android 获取屏幕尺寸
- Bochs调试手册(英)
- [MySQL分享]MySQL启动以及my.cnf参数文件结构小结
- 继承Thread父类和实现Runnable接口的区别
- 服务器基础问题
- SecureCRT配置
- js数组算法总结
- svg中的path指令分析
- UIView动画
- jquery Select2 学习笔记之中文提示
- H2.64中I帧和IDR帧的区别
- C语言第一节-进制,运算符,输入输出
- 关于WPF转换.net平台的工作
- BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
- Python中创建一个多维数组的方法
- Win10系统下如何使用默认浏览器打开QQ网页?
- win10定时关机在哪?win10设置定时关机的三种方法
- C#根据当前时间获取,本周,本月,本季度等时间段
- 树莓派 感光模块
- COC历程-Mac快捷常识