久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2722|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

新手弄的單片機定時器延時代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:260656 發(fā)表于 2022-10-29 11:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
新手弄的定時器延時代碼歡迎高手指點

         #include <reg52.h>                        //頭文件                        
         #include <intrins.h>

         #define uchar unsigned char // 數(shù)據(jù)類型簡化-起別名
        #define uint unsigned int        // 數(shù)據(jù)類型簡化-起別名
        uint n,i,j,m;


          //定時1ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xfc;                //初值高8位
            TL0 =0x66;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
          //定時10ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xdc;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
          //定時20ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xb8;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
          //定時30ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x94;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
          //定時40ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x70;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
//定時50ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x4c;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
//定時60ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x28;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************

//定時70ms ***************************************************
        {
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x04;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
//*************************************************************************
void delay(n)           //定時1ms的n(n<10)倍數(shù)  ***************************
          {
           for(i=0;i<n;i++)                  
           {
            TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xfc;                //初值高8位
            TL0 =0x66;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
          }
//*************************************************************************
void delay(m)           //定時50ms的m(m<=20)倍數(shù)  **************************
          {
           for(j=0;j<m;j++)                  
           {
            TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0x4c;                //初值高8位
            TL0 =0x00;                 //初值低8位
                TF0 =0;                  //溢出清0
            TR0 = 1;                          //打開定時器T0
                  EA=0;                                  //關(guān)閉總中斷
                ET0=0;                                  //關(guān)閉T0中斷
                while(TF0 ==0);              //溢出等待
                TR0 = 0;                          //暫停定時器T0
           }
          }
//*************************************************************************



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1044091 發(fā)表于 2022-10-29 21:35 | 只看該作者
STC-ISP 軟件里也有一個定時器計算器,直接復(fù)制代碼就行。



回復(fù)

使用道具 舉報

板凳
ID:496636 發(fā)表于 2022-10-29 21:46 | 只看該作者
定時1毫秒,如果單片機的頻率是11059200HZ,這個就是單片機的時鐘頻率,而機器工作頻率則為時鐘頻率的12分之一,即921600HZ,我們關(guān)注的計數(shù)頻率就是機器工作頻率,意味著每1秒鐘它可以數(shù)數(shù)921600,如果要定時1毫秒,那么在這1毫秒時間內(nèi),可以數(shù)數(shù)921.6。算它是922。而二個字節(jié)的最大數(shù)是65535,再加1就是65536(十六進制數(shù)就是0XFFFF,再加1就是0X10000)所以要讓計數(shù)器數(shù)數(shù)922下,能產(chǎn)生溢出那么這個數(shù)就是65536-922=64614,轉(zhuǎn)成十六進制數(shù)為FC66,其實要想讓它精確點,應(yīng)該比這個值大點,如是FC67,使定時微小于1毫秒,因為產(chǎn)生中斷后,重載定時器等操作都需要額外的時間,如果前頭定時剛好1毫秒,那么加上額外的時間,就會超過1毫秒了。
定時器的初始化,開總中斷,還是開定時中斷,還是開啟定時器都是在main函數(shù)的除while(1)以前的語句執(zhí)行的,這樣之前的語句只執(zhí)行一次,然后while(1)一直執(zhí)行,在while(1)的循環(huán)體里,對TF溢出標志不斷判斷,來確定定時時間是否已到。

//定時1ms ***************************************************
        
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xfc;                //初值高8位
            TL0 =0x66;                 //初值低8位
            EA=1;                        //開總中斷
            ET0=1;                          //開定時器中斷
            TR0 = 1;                          //打開定時器T0
            while(1)
        {
                 if(TF0==1)                    //判斷定時器1是否溢出         
                {
                   TF0=0;                //復(fù)位定時器0中斷標志位
                   執(zhí)行你要執(zhí)行的語句,如計時,如某個變量加1

                }                                 
               
               
           }
回復(fù)

使用道具 舉報

地板
ID:496636 發(fā)表于 2022-10-29 22:00 | 只看該作者
在西門子S7-200PLC中,有系統(tǒng)特殊寄存器,如SM0.1和SM0.0還是SM0.5,都是特殊意義,SM0.1就是PLC開機首次掃描執(zhí)行一次,然后就不執(zhí)行了,它是起到初始化的作用,在單片機里實現(xiàn),你可以在單片機開頭書寫,然后加個while(1)循環(huán)體,while(1)之前就是初始化,while(1)之后就是循環(huán)體內(nèi)一直執(zhí)行下去,它是不斷往復(fù)執(zhí)行下去。在PLC中編程,我一條語句只要開機執(zhí)行一次,那只要在繪制梯形圖時,在其能流左端加上sm0.1的常開觸點即可。
而SM0.5,就是半秒ON(1),半秒OFF(0)的布爾變量,用它就能得到秒計數(shù)器,用它來使能一個計數(shù)器,就能得到一個秒表。
學(xué)習(xí)知識要懂得融匯貫通。
回復(fù)

使用道具 舉報

5#
ID:496636 發(fā)表于 2022-10-29 22:13 | 只看該作者
漏了二條語句
定時1毫秒,如果單片機的頻率是11059200HZ,這個就是單片機的時鐘頻率,而機器工作頻率則為時鐘頻率的12分之一,即921600HZ,我們關(guān)注的計數(shù)頻率就是機器工作頻率,意味著每1秒鐘它可以數(shù)數(shù)921600,如果要定時1毫秒,那么在這1毫秒時間內(nèi),可以數(shù)數(shù)921.6。算它是922。而二個字節(jié)的最大數(shù)是65535,再加1就是65536(十六進制數(shù)就是0XFFFF,再加1就是0X10000)所以要讓計數(shù)器數(shù)數(shù)922下,能產(chǎn)生溢出那么這個數(shù)就是65536-922=64614,轉(zhuǎn)成十六進制數(shù)為FC66,其實要想讓它精確點,應(yīng)該比這個值大點,如是FC67,使定時微小于1毫秒,因為產(chǎn)生中斷后,重載定時器等操作都需要額外的時間,如果前頭定時剛好1毫秒,那么加上額外的時間,就會超過1毫秒了。
定時器的初始化,開總中斷,還是開定時中斷,還是開啟定時器都是在main函數(shù)的除while(1)以前的語句執(zhí)行的,這樣之前的語句只執(zhí)行一次,然后while(1)一直執(zhí)行,在while(1)的循環(huán)體里,對TF溢出標志不斷判斷,來確定定時時間是否已到。

//定時1ms ***************************************************
        
           TMOD |= 0x01;                //定時器0,工作方式1,16位
            TH0 = 0xfc;                //初值高8位
            TL0 =0x66;                 //初值低8位
            EA=1;                        //開總中斷
            ET0=1;                          //開定時器中斷
            TR0 = 1;                          //打開定時器T0
            while(1)
        {
                 if(TF0==1)                    //判斷定時器1是否溢出         
                {
                   TF0=0;
                TH0 = 0xfc;                //初值高8位
                    TL0 =0x66;                 //初值低8位
                //復(fù)位定時器0中斷標志位
                   執(zhí)行你要執(zhí)行的語句,如計時,如某個變量加1

                }                                 
               
               
           }

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

6#
ID:260656 發(fā)表于 2022-10-30 16:01 | 只看該作者
ningsy 發(fā)表于 2022-10-29 21:35
STC-ISP 軟件里也有一個定時器計算器,直接復(fù)制代碼就行。

看了一下,真的有啊,才知道
回復(fù)

使用道具 舉報

7#
ID:123289 發(fā)表于 2022-11-1 16:38 | 只看該作者
寫出公式,做個EXCEL表貼出來就行了。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 犬夜叉在线观看 | 国产精品美女在线观看 | 亚洲区一 | 国产午夜三级一区二区三 | 亚洲精品一区国产精品 | 美女在线一区二区 | 亚洲手机在线 | 亚洲大片| 日韩一区中文字幕 | 在线播放国产一区二区三区 | 亚洲国产一区视频 | 国产精品亚洲精品日韩已方 | 国产剧情一区 | 成人在线欧美 | 国产小u女发育末成年 | 国产一级特黄真人毛片 | 亚洲欧美一区二区三区在线 | 亚洲精品视频免费观看 | 国产做a爱片久久毛片 | 欧美亚洲在线视频 | 久久成人在线视频 | 国产成人区 | 国产毛片av | 一区二区视频在线观看 | 狠狠操狠狠色 | 综合久久99 | 亚洲精品乱码久久久久久按摩观 | 亚洲区中文字幕 | 久久一区二区三区四区五区 | 国产一区不卡 | 男女羞羞视频网站 | 亚洲精品一区在线 | 午夜爽爽爽男女免费观看 | 精品9999 | 亚洲成人免费av | 国产999精品久久久久久 | 国产精品久久久久久影院8一贰佰 | 精品日韩一区二区 | 久久久久久国产精品免费免费狐狸 | 一级片av | 黄色网址免费在线观看 |