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

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

        avr單片機8位定時器LED精確1秒閃爍程序

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月02日   【字體:

         /*
              程序名 (program name): 定時器程序 (LED精確一秒閃爍)

             芯片名(chip name): 艾特梅爾公司 MEGA16A 芯片;

             概述:   利用8位定時器0 完成精確定時,其中,定時器0溢出 重設初始值和溢出位清零很重要,
             一旦定時器溢出,溢出標志位不會自動清零,注意!此時需要向定時器0溢出標志位位TOV0
         寫"1",它就會自動清零;TOV0在TIFR寄存器的末位,溢出位不能位尋址(不能位操作);  
          
        完成(finish time) : 2014年2月28日13:50:14
         噢 ,,,'主碼' 時間了,,,
                    

        */

        #include <avr/io.h>
        #include <avr/interrupt.h>    //中斷頭文件..

        typedef unsigned char uint8;
        typedef unsigned int uint16;

         


        io()     //初始化所有IO口函數;
        {
           DDRA=0Xff;
           PORTA=0Xff;

           DDRB=0XFF;
           PORTB=0X00;

           DDRC=0XFF;
           PORTC=0X00;

           DDRD=0XFF;
           PORTD=0XFF;
         


        }

        mcu()  //
        {

          TCNT0=0x6A;//定時器初始值寄存器,設置 初始值 (此寄存器的值自增到255再加一就是0了);
          TCCR0=0x02;//定時器0分頻設置寄存器  定時器8分頻.

            //定時器公式:   256 - (12兆(機器頻率) ÷ 分頻) X (溢出時間) =初始值;

        }

        int main(void)

        {
             uint16 i=0,j=0;

        io();  //初始化所有io口;
        mcu(); //設置定時器分頻和初始值;

            
        PORTB=0X04; //LED共陽極使能;
        while(1)
        {

           if((TIFR&0X01)==1)   //如果定時器溢出;
         {
            j++;
           
         TCNT0=0x6a;    //重設初始值,溢出時間是0.0001秒;
                      TIFR|=0X01;    //!!!!!!!!!這個很重要,一定要將溢出位置一,它就會自己清零;
         }

                 if(j ==9932)//溢出一次用時100微妙,變量j加一,加一萬次用時1秒,邏輯分析儀捕捉到
         {          //PA口跳變時間有一點誤差,稍作調整,,
           j=0;
                    PORTA^=0XFF; 

         }


        }


        }
         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮