在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STC11F04單片機定時器模擬多任務(wù)程序

            STC11F04單片機定時器模擬多任務(wù)程序

            作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
            用STC單片機的定時器精確定時,做1秒、1分、1小時的定時任務(wù)。

            由于本人用的是11.0592的晶體,所以時間上不是很精確。如果對定時有精確要求的,請用32.768M的晶振。

            本文引用地址:http://www.biyoush.com/article/201611/318661.htm

            串口輸出采用 printf函數(shù)輸出。

            #include"reg51.h"

            #include "stdio.h"
            #include"intrins.h" //_nop_()

            unsigned int tick;

            int hh,mm,ss; //時:分:秒
            char putchar (unsigned char i)
            {
            ES = 0; //關(guān)串口中斷
            TI = 0; //清零串口發(fā)送完成中斷請求標(biāo)志
            SBUF = i;
            while(TI ==0); //等待發(fā)送完成
            TI = 0; //清零串口發(fā)送完成中斷請求標(biāo)志
            ES = 1; //允許串口中斷
            return SBUF;
            }

            void Task_1s()
            {
            printf("S=[%d:%d:%d]rn",hh,mm,ss);
            }

            void Task_1m()
            {
            printf("M=[%d:%d:%d]rn",hh,mm,ss);
            }

            void Task_1h()
            {
            printf("H=[%d:%d:%d]rn",hh,mm,ss);
            }

            //0.1ms = 100us
            void Timer0(void) interrupt 1 using 1//定時器0中斷外理
            {
            TR0=0;
            TH0=(65536-2000)/256;
            TL0=(65536-2000)%256;

            tick++; //計數(shù)值+1
            if(tick>999) //加到10次即1秒
            {
            tick=0;
            ss++;
            if(ss>59){
            mm++;
            ss=0;
            if(mm>59){
            hh++;
            mm=0;
            if(hh>11){
            hh=0;
            }
            Task_1h();//1小時定時任務(wù)
            }
            Task_1m(); //1分鐘定時任務(wù)
            }
            Task_1s();//1s定時任務(wù)
            }
            TR0=1;
            }

            void main()
            {
            SCON=0x50;//0101,0000 8位可變波特率,無奇偶校驗位
            TMOD=0X21;
            TH1=TL1=-(11059200L/12/32/9600);
            TR1=1;
            tick=0;
            hh=0;
            mm=0;
            ss=0;
            TH0=(65536-2000)/256;
            TL0=(65536-2000)%256;
            TR0=1;
            ET0=1;
            ES=1; //允許串口中斷
            EA=1; //開總中斷
            printf("SystemStart...rn");

            while(1)
            {
            _nop_();
            }
            }

            程序運行后結(jié)果如圖:


            代碼詳解:

            (1)串口波特率計算

            TH1=TL1=-(11059200L/12/32/9600);

            由于采用11.0592晶振,所以這里是11059200L

            由于采用9600波特率和計算機通信,所以采用9600

            (2)串口輸出為什么可以用“printf"函數(shù)?

            例如: printf("S=[%d:%d:%d]rn",hh,mm,ss); 可以很方便的輸出要的數(shù)據(jù)

            原因是要自己實現(xiàn)printf的底層通信代碼,即在你的代碼里加入


            這個函數(shù)的原型定義在:#include "stdio.h" 里,感興趣的朋友,還可以把其他函數(shù)也實現(xiàn)。這樣C51編程就可以和計算機上的C語言編程類似了。

            (3)定時器初值說明:

            TH0=(65536-2000)/256; 高8位
            TL0=(65536-2000)%256; 低8位

            (4) 定時任務(wù)


            任務(wù)的調(diào)用在定時器中斷里,詳細(xì)見定時器中斷。

            void Timer0(void) interrupt 1 using 1//定時器0中斷外理

            希望對大家有用!錯誤在所難免,諸位看官自己調(diào)試把



            關(guān)鍵詞: STC11F04單片機定時器模

            評論


            技術(shù)專區(qū)

            關(guān)閉