发 帖  
原厂入驻New
[问答]

基于PIC24FJ64GA002单片机的计时器代码问题

263 单片机
分享
基于PIC单片机的具有暂停和重置的计时器代码
代码如下:
#include <p24fj64ga002.h>


_CONFIG1(ICS_PGx2 & JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF)
_CONFIG2(0x7987)
int centaine=1, dizaine=2, unite=3, dizieme=4;
int etape = 0;
void __attribute__((__interrupt__)) _T1Interrupt(void)//从RB15-12输出四位信号
{
    // 0111->7  1011->B  1101->D  1110->E
    switch(etape)
    {
        // RB15 14 13 12
        case 0: PORTB = 0x7000 | (centaine << 8); break;
        case 1: PORTB = 0xB000 | (dizaine << 8); break;
        case 2: PORTB = 0xD000 | (unite << 8); break;
        case 3: PORTB = 0xE000 | (dizieme << 8); break;
    }
  //  PORTB 0x7300; // 0111 0011 0000 0000 RB15-0
    ++etape;
    if(etape > 3) etape = 0;
        _T1IF = 0;//Interrupt
}
void __attribute__((__interrupt__)) _T2Interrupt(void)//四位计数器
{
   ++dizieme;
   if(dizieme > 9)
   {
       dizieme = 0;
       ++unite;
   }
   if(unite > 9)
   {
       unite = 0;
       ++dizieme;
   }
   if(dizaine > 9)
   {
       dizaine = 0;
       ++centaine;
   }
   if(centaine > 9)
   {
       centaine = dizaine = unite = dizieme = 0;
   }
        _T2IF = 0;//Interrupt
}
void __attribute__((__interrupt__)) _CNInterrupt(void)//由RB7和RB6输入来控制暂停与重置
{        
    if(!(PORTB & 0x0080)) //appuyer le bouton RB7=>0
    {
    _T2IE =!_T2IE;
//这也是我不懂的地方
    }


    if(!(PORTB & 0x0040)) //appuyer le bouton RB6=>0
    {
        centaine = dizaine = unite = dizieme = 0;
    }
    _CNIF = 0;
}
int main()
{
        AD1PCFG = 0xFFFF;// Config analogique -> numerique
        TRISA = 0x0000;//output input
        //TRISB = 0x0080;//RB7input Bouton
        TRISB = 0x00C0;//RB7et6 input Bouton
   
    T1CON = 0x8010;//1
    PR1 = 4999;//timer1
   
    _T1IF = 0;
    _T1IE = 0;
    _T1IP = 2;//0,6
   
    T2CON = 0x8020;//8分频
    PR2 = 12499; //  100000/8=12499
   
    _T2IF = 0;
    _T2IE = 0;
    _T2IP = 2;//0,6
   
    //CNEN2 = 0x0080 //CN23
    CNEN2 = 0x0180; //CN23 CN24
    CNPU2 = 0x0180; //PU23 PU24
            
    _CNIF = 0;
    _CNIE = 1;
    _CNIP = 2;
   
        LATB = 0xFFFF;//PORTB
       
        while(1)
        {


        }
               
        return 0;
}


希望由dalao可以帮我找出代码有什么错误或者缺失。
万分感谢
0
2020-10-1 21:43:07   评论 分享淘帖 邀请回答

相关问题

1个回答
_T2IE =!_T2IE;一般是计时器使能,加非的话代表关闭或者打开

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表