打印
[PIC®/AVR®/dsPIC®产品]

dsPIC30F2010定时器问题

[复制链接]
1176|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Gadisgirl|  楼主 | 2014-3-25 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,初次接触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++;
                }
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

27

帖子

0

粉丝