如题,初次接触16位单片机,在使用定时器1时发现定时器无法进入中断。
程序如下:
忘大侠指点!
#include<XC.h>
_FOSC(XT_PLL8&PRI&CSW_FSCM_OFF);
_FWDT(WDT_OFF);
_FBORPOR(PWRT_16&BORV_27&PBOR_ON&PWMxL_ACT_LO&PWMxH_ACT_HI&RST_PWMPIN&MCLR_EN);
_FGS(GWRP_OFF&CODE_PROT_OFF);
_FICD(ICS_PGD);
#define uchar unsigned char
#define LED_T1 LATBbits.LATB5
uchar i=0;
/**********************函数申明*****************/
void init_sfr();
void init_PORT();
void init_PORT()
{
PORTB=0x0000;
TRISB=0x001f; //RB0~RB4为输入口,RB5为输出口
PORTC=0X0000;
TRISC=0Xa000; //RC14为输出口,RC13、RC15为输入口
PORTD=0X0000;
TRISD=0X0003; //RD0、RD1为输入口
PORTE=0X0010;
TRISE=0X0010; //RE8为输入口,RE0~RE5为输出口
PORTF=0X0008;
TRISF=0X0008; //RF2为输出口,RF3为输入口
}
void init_sfr()
{
INTCON1=0X0000; //禁止累加器A、B陷阱,禁止中断嵌套
INTCON2=0X001f; //外部中断负边沿有效触发
IFS0=0X0000; //各中断标志位初始为0
IFS1=0X0000; //各中断标志位初始为0
IFS2=0X0000; //各中断标志位初始为0
IEC0=0X0000; //禁止所有中断请求 (包括T1IE=0)
IEC1=0X0000; //禁止所有中断请求
IEC2=0X0800; //除允许故障A请求其余禁止 (包括PWMIE=0)
IPC0=0X7777; //中断优先级配置
/* *
*
*
IPC11=0X0000;
*/
T1CON=0X0030; //外部时钟1:256分频,定时器关闭
// TMR1=0X0000;
PR1=0X9896; //定时器T1 0.5s产生中断
IEC0bits.T1IE=1;
T1CONbits.TON=1;
}
int main(void)
{
init_PORT();
init_sfr();
LED_T1=1;
while(1)
{
if(i==6)
{
i=0;
LED_T1=~LED_T1;
}
}
}
/********************************中断服务程序*********************/
void __interrupt__ISR(void)
{
if(IFS0bits.T1IF&&IEC0bits.T1IE)
{
IFS0bits.T1IF=0;
i++;
}
} |