单片机 > 单片机程序设计 > 详情

PIC16F887 RB0外部中断(2)

发布时间:2023-08-03 发布时间:
|

#include

#include

__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

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;

}

}

}



代码经过测试



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR IO输出之LED显示程序