#include <pic.h>
#include <pic16f616.h>
__CONFIG(0x3ED4);
void PIC_INTI(void) //IO口初始化
{
GIE = 0; //关闭全局中断,然后开始配置
//各模块初始化
PORT_INIT();
TMR0_INIT();
TMR1_INIT();
//PIC_AD_INIT();
External_INT_INIT();
PEIE = 1; //PEIE :外设中断允许位 1 = 允许所有未被屏蔽的外设中断 0 = 禁止所有外设中断
GIE = 1; //当器件被中断唤醒且GIE(全局中断允许位)位置1 时, PC 装入中断向量(0004h)
}
void PORT_INIT(void)
{
TRISA |= 0x37; //0X37 = 0011 0111B配置RA0、RA1、RA2,RA4、RA5引脚为输入
TRISC &= 0xcc; // 0Xcc =1100 1100B配置RC0,RC1,RC4,RC5,为输出
ANSEL = 0x01; //RA0为模拟输入。为1 = 模拟输入。引脚被配置为模拟输入,模拟输入的引脚将读为0,且不能产生中断。
//为0 = 数字I/O。分配引脚为端口或特殊功能。
RAPU = 0 ; //总使能弱上拉, 必须使能全局 RAPU (低电平有效)位才能使能单独的上拉功能。PORTA 上拉使能位
// WPUA |= 0x30; //0x30=0011 0000B 指定位(即指定引脚RA4、RA5)使能弱上拉 。手则第35页
//WPUA4 =1;
WPUA5 =1;
// RP0 = 0;
}
void main(void)
{
PIC_INTI();
while(1)
{
//`````
}
}
void External_INT_INIT(void)
{
ANSEL &= 0xFB; //将RA2设为数字IO口。为0 = 数字I/O;为1 = 模拟输入
TRISA |= 0x04; //0000 0100
INTEDG = 0; //为1上升沿中断,为0下降沿中断
INTF=0; //外部中断标志清0
INTE = 1; //INTE :RA2/INT 外部中断允许位 : 1 = 允许 RA2/INT 外部中断; 0 = 禁止 RA2/INT 外部中断
}
void interrupt ISR(void)
{
GIE = 0;
TIMER_0_ISR();
TIMER_1_ISR();
A_to_D_ISR();
External_INT_0_ISR();
//if( INTE && INTF )
// {
// INTF = 0;
// ground_count = 0;
// //#ifdef debug
// debug_LED('r');//调试用,‘r’或‘g’对应颜色的LED闪烁,1绿灯亮,2红灯亮,3两灯亮
// debug_LED(2);
// // #endif
//}
GIE = 1;
}
void External_INT_0_ISR(void)
{
if( INTE && INTF )
{
INTF = 0;
ground_count = 0;
//#ifdef debug
debug_LED('r');//调试用,‘r’或‘g’对应颜色的LED闪烁,1绿灯亮,2红灯亮,3两灯亮
debug_LED(2);
// #endif
}
}
外部中断已解决 弱上拉还没搞垫 求助
pic16外部中断初始化,为何我设置RC4和RC5为弱上拉 不起作用 还有我的外...
——首先,要告诉你的是WPUA4=1不是设置RC4的弱上拉,而是RA4的弱上拉;其次,WPUA4=1;之后RA4没有输出,因为此时是输入状态。你应该读一下RA4。好好看看弱上拉的一些知识。这东西最常用于按键输入方面的操作。