久久人妻精品人妻视频五月天一区二区三区,,自慰午夜喷水久久久av国产成人a视频高在线,,欧美日韩免费专区在线97精品国产手机

  • <cite id="cwywg"></cite>
    <button id="cwywg"></button>
  • <button id="cwywg"><source id="cwywg"></source></button>
    <button id="cwywg"><tbody id="cwywg"></tbody></button>
  • <button id="cwywg"></button>
  • 
    
  • logo logo
    • BANNER
    • BANNER
    • BANNER
    您的位置 : 首頁 > 新聞資訊 > 技術(shù)支持
    AVR 定時(shí)器中斷程序
    發(fā)布者:江蘇瑞易通電子科技有限公司 人氣:465 發(fā)布日期:2021-04-23 10:10:40

    基于7.3728M晶振作AVR定時(shí)器的時(shí)鐘源進(jìn)行1S定時(shí)! 
    實(shí)驗(yàn)內(nèi)容: 
    使用AVR的定時(shí)器T1做1S定時(shí),并使用PD口的LED指示燈做簡單指示。

    #include

    #include


    #define DISP_DDR   DDRD

    #define DISP_PORT  PORTD


    /*--------------------------------------------------------

    程序名稱:定時(shí)器1初始化程序

    --------------------------------------------------------*/

    void timer1_init(void)

    {

     TCCR1B = 0x00;  //stop timer


     TCNT1H = 0xE3;  //設(shè)置 TC1 的 計(jì)數(shù)寄存器 高8位值,基于7.3728M晶振

     TCNT1L = 0xDF;  //設(shè)置 TC1 的 計(jì)數(shù)寄存器 低8位值,基于7.3728M晶振


     //OCR1AH = 0x1C; //設(shè)置 TC1 的 輸出比較寄存器A 高8位值

     //OCR1AL = 0x20; //設(shè)置 TC1 的 輸出比較寄存器A 低8位值


     //OCR1BH = 0x1C; //設(shè)置 TC1 的 輸出比較寄存器B 高8位值

     //OCR1BL = 0x20; //設(shè)置 TC1 的 輸出比較寄存器B 低8位值


     //ICR1H  = 0x1C; //設(shè)置 TC1 的 輸入捕獲寄存器 高8位值

     //ICR1L  = 0x20; //設(shè)置 TC1 的 輸入捕獲寄存器 低8位值


     TCCR1A = 0x00;

     TCCR1B = 0x05;  //設(shè)置TC1 為 CLK/1024分頻,啟動(dòng)TC1

    //選擇時(shí)鐘為晶振1024分頻即7372800/1024=7200HZ

    //定時(shí)1s (65535-初值)/(定時(shí)器時(shí)鐘7200)=1s

    //得初值換算十六進(jìn)制給TCNT1H TCNT1L

     MCUCR = 0x00;  //設(shè)置 MCU 的 控制寄存器

     GICR  = 0x00;  //設(shè)置 中斷控制寄存器

     TIMSK = 0x04;  //設(shè)置 定時(shí)計(jì)數(shù)器 的 屏蔽寄存器(TIMSK = BIT(2);)溢出中斷使能

     //SEI();  //enable interrupts

    }

    /*--------------------------------------------------------

    程序名稱:定時(shí)器1中斷服務(wù)程序

    --------------------------------------------------------*/

    #pragma interrupt_handler timer1_ovf_isr:9

    void timer1_ovf_isr(void)

    {

     TCNT1H = 0xE3;  //reload counter high value

     TCNT1L = 0xE1;  //reload counter low value

     DISP_PORT++;  //每加1S,顯示加1

    }


    void main(void)

    {

     DISP_DDR = 0XFF; //設(shè)置顯示口為輸出

     timer1_init();

     SEI();

     while(1);

    }



    返回新聞列表