<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        PIC單片機三個定時器中斷同時定時

        作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月31日   【字體:
        16F877A有三個定時器,中斷方式都調試出來了,想把它們整合到一塊同時工作,可搞了半天,就是不干。最后整明白了,PIC16系列單片機的中斷入口中有一個。PIC的功能是很強大,外圍模塊也多,速度也較快,但PIC的這個中斷方案不好,應該改進。以下是三個定時中斷同時工作的調試代碼。
        #include<pic.h>
        #define uchar unsigned char
        #define uint  unsigned int
        __CONFIG(0x3B31);
        void init();
        uint Timer0Num,Timer1Num,Timer2Num;//
        void timer0();
        void timer1();
        void timer2();
        void main()
        {
         init();
         while(1)
         {
          if(Timer0Num>=20)
          {
           Timer0Num = 0;
           RD0 = ~RD0;
          }
          if(Timer1Num >= 4)
          {
           Timer1Num = 0;
           RD2 = !RD2;
          }
          if(Timer2Num >= 50)
          {
           Timer2Num = 0;
           RD4 = !RD4;
          }
         }
        }
        void init(void)
        {
         TRISD = 0;
         PORTD = 0;
         OPTION = 0x07;//256分頻
         TMR0 = 56;
         PIE1 |= 0x01 | 0x02;
         TMR1H = (65536-50000)/256;
         TMR1L = (65536-50000)%256;
         T1CON = 0x21;//4分頻
         TMR2 = 0;
         PR2 = 100;
         T2CON = 0x1D;
         INTCON = 0xE0;
        }
        void interrupt Ints()
        {
         if(T0IE&&T0IF)    timer0();
         if(TMR1IE&&TMR1IF) timer1();
         if(TMR2IE&&TMR2IF) timer2();
        }
        void timer0()
        {
         T0IF = 0;
         TMR0 = 56;
         Timer0Num++;
        }
        void timer1()
        {
         TMR1IF = 0;
         TMR1H = (65536-50000)/256;
         TMR1L = (65536-50000)%256;
         Timer1Num++;
        }
        void  timer2()
        {
         TMR2IF = 0;
         TMR2 = 0;
         PR2 = 200;
         Timer2Num++;
        }
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮