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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4436|回復(fù): 28
收起左側(cè)

STC單片機(jī)喚醒定時(shí)器時(shí)間如何調(diào)整?

[復(fù)制鏈接]
ID:450037 發(fā)表于 2021-11-9 15:59 | 顯示全部樓層 |閱讀模式
捕獲.PNG
捕獲.PNG
捕獲.PNG

如圖:給PCON|0x02時(shí),單片機(jī)進(jìn)入掉電模式,當(dāng)WKTCH和WKTCL賦值過后,單片機(jī)喚醒啟動(dòng).

WKTCH最大賦值為0X7F,WKTCL最大賦值為0XFF;
最大賦值運(yùn)行時(shí)為15s,斷電15s后單片機(jī)又啟動(dòng),請(qǐng)問假如我想斷電一個(gè)星期怎么設(shè)置,比如山區(qū)有一個(gè)檢測儀器檢測空氣質(zhì)量,一個(gè)星期只需要檢測一次,那么檢測完的其他時(shí)間給單片機(jī)斷電,以延長單片機(jī)電池的運(yùn)行時(shí)間。

回復(fù)

使用道具 舉報(bào)

ID:277550 發(fā)表于 2021-11-9 17:10 | 顯示全部樓層
a=7*24*60*60= 604800  (秒)
a/15=40320(個(gè)周期),一個(gè)無符號(hào)整數(shù)變量,夠用


void main(){
    unsigned int a=0;
    WKTCH=0xff; //包含使能位在內(nèi)了。
    WKTCL=0xff;
    while(1){
         PCON|=2;
         _nop_(); _nop_(); _nop_(); _nop_();
         if(++a<40320){
             continue;
         }
        //這1個(gè)星期了,該干嘛
    }
}
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-9 17:38 | 顯示全部樓層
你這是STC的手冊(cè),

首先,掉電換醒定時(shí)器,非常的不準(zhǔn), 說是32.768K的晶振頻率,實(shí)際上,很多在36K左右,我見過最離譜的有38K,都能做紅外載波發(fā)生器了。所以,如果你要用這個(gè)做長眠的話……,最好做個(gè)采樣測試(比如for循環(huán)40次,就是理論上的 10分鐘,看看相差多少,再調(diào)整一下,妥了之后,乘以1008,就是1個(gè)星期了),不然你定1個(gè)星期,最后極有可能5天就醒了。
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 08:33 | 顯示全部樓層
devcang 發(fā)表于 2021-11-9 17:10
a=7*24*60*60= 604800  (秒)
a/15=40320(個(gè)周期),一個(gè)無符號(hào)整數(shù)變量,夠用

我不太懂啊,程序是這樣的,PCON|=2,打開CPU掉電模式,系統(tǒng)喚醒定時(shí)器在運(yùn)行,此時(shí)已經(jīng)運(yùn)行了無數(shù)次WHILE(1)函數(shù),當(dāng)15S過后,不是立即開啟CPU嗎?為什么會(huì)與IF語句做比較呢?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 10:05 | 顯示全部樓層
188610329 發(fā)表于 2021-11-9 17:38
你這是STC的手冊(cè),

首先,掉電換醒定時(shí)器,非常的不準(zhǔn), 說是32.768K的晶振頻率,實(shí)際上,很多在36K左右 ...

是的,這是STC手冊(cè)。那個(gè)C8051F020是另外一個(gè)項(xiàng)目的。這個(gè)STC是我自學(xué)的一個(gè)開發(fā)板上的。我學(xué)了看門狗與自啟動(dòng)這一塊,但是時(shí)間上我想能控制多久就多久。按上面一樓寫的程序,沒有運(yùn)行成功。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 10:12 來自手機(jī) | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-10 10:05
是的,這是STC手冊(cè)。那個(gè)C8051F020是另外一個(gè)項(xiàng)目的。這個(gè)STC是我自學(xué)的一個(gè)開發(fā)板上的。我學(xué)了看門狗與 ...

你除了定時(shí)器喚醒,還打算被其他,比如外部中斷之類的隨時(shí)喚醒么?
即,睡了之后,不到一周不起,
還是,如果沒有突發(fā)事件,就睡一周,有突發(fā)事件就處理,完了之后接著睡,或完了之后重新開始睡一周,這三種情況的哪種?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 10:53 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 10:12
你除了定時(shí)器喚醒,還打算被其他,比如外部中斷之類的隨時(shí)喚醒么?
即,睡了之后,不到一周不起,
還是 ...

只被定時(shí)器喚醒,定時(shí)醒,定時(shí)睡,外面打雷下雨不管。按時(shí)休息工作。且只被定時(shí)器控制
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 11:27 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 10:12
你除了定時(shí)器喚醒,還打算被其他,比如外部中斷之類的隨時(shí)喚醒么?
即,睡了之后,不到一周不起,
還是 ...

是的,只被定時(shí)器喚醒,掉電一個(gè)星期后再喚醒,不受其他影響。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 13:52 | 顯示全部樓層
本帖最后由 188610329 于 2021-11-10 15:36 編輯

先說明一下, 定時(shí)喚醒,只能最多睡15秒左右,就會(huì)醒,這是硬件限制,沒有辦法,我們能做的,就像逼不愛午睡的小孩午睡,你醒了,我安撫一下,接著再把被子一蒙頭,你給我繼續(xù)睡,直到睡夠午睡時(shí)間。所以要睡一周,就是反復(fù)醒了睡的過程,程序大致如下,你可以參考。實(shí)驗(yàn)時(shí)可以改小 i 和 j 的數(shù)字。更快的觀察到效果。

void    main()
{
          uchar i,j;
          while(1)
          {
                  LED0 = !LED0; //此處 你需要定期執(zhí)行的程序, 這里用 翻轉(zhuǎn)LED0 代替
                  i = 168;   // 一周168小時(shí)
                  while(--i)
                  {
                         j = 240;  //每小時(shí)有 60分鐘,即 240 個(gè) 15秒
                         while(--j)
                         {
                               WKTCH =0xff;       //WKTCL 不需要管,不需要那些雞毛蒜皮的時(shí)間
                               PCON  |= 0x02;
                                _nop_();
                               LED2   = !LED2;     //次處用來確定每15秒醒來,正式使用時(shí)去掉
                         }
                         LED1  =  !LED1;       //次處用來確定每小時(shí)醒來,正式使用時(shí)去掉
                  }
          }
}
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 14:33 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 13:52
先說明一下, 定時(shí)喚醒,只能最多睡15秒左右,就會(huì)醒,這是硬件限制,沒有辦法,我們能做的,就像逼不愛午 ...

捕獲.PNG
不行啊,我先用J=5測試了一下,意思是一分鐘之后就讓他重啟,但是它根本啟動(dòng)不了,我的理解是當(dāng)斷電后,喚醒定時(shí)器到時(shí)間重啟單片機(jī),單片機(jī)又重新開始運(yùn)行,所以J始終是從5開始減到4,連3都沒有減到,一直循環(huán)著。所以我在想有沒有什么斷電寄存器能把值保存一下,比如EEPRAM等,就是這個(gè)程序不會(huì)寫。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 15:00 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-10 14:33
不行啊,我先用J=5測試了一下,意思是一分鐘之后就讓他重啟,但是它根本啟動(dòng)不了,我的理解是當(dāng)斷電后 ...

首先,掉電,不是斷電,掉電是指,單片機(jī)進(jìn)入不怎么用電的狀態(tài),單片機(jī)本身還是通著電的,所以不需要Eeprom之類的保存任何東西,內(nèi)存里的東西不會(huì)丟失,其次,都說了,先加個(gè)LED觀察狀態(tài),你這代碼唯獨(dú)沒有觀察狀態(tài),你怎么知道掉電成功沒成功?
到時(shí)間,是從 PCON = 0x02 下一句開始執(zhí)行,不存在重新開始執(zhí)行。

最后,你說讓 j= 5; 那么 j=5 在哪里? 你看看我給你的代碼 j = 240; 在什么地方? 改動(dòng)代碼前,你是不是應(yīng)該先對(duì)代碼進(jìn)行理解?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 15:37 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 15:00
首先,掉電,不是斷電,掉電是指,單片機(jī)進(jìn)入不怎么用電的狀態(tài),單片機(jī)本身還是通著電的,所以不需要Eepr ...

捕獲.PNG
我剛剛把j=5放在mian函數(shù)最上面的,現(xiàn)在把它放到while函數(shù)里面,加了個(gè)LED翻轉(zhuǎn)顯示燈,還是不行,j=5運(yùn)行時(shí)實(shí)際一直在翻轉(zhuǎn)著。根本沒有走出while函數(shù)
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 15:43 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-10 15:37
我剛剛把j=5放在mian函數(shù)最上面的,現(xiàn)在把它放到while函數(shù)里面,加了個(gè)LED翻轉(zhuǎn)顯示燈,還是不行,j=5運(yùn) ...

對(duì)的,永遠(yuǎn)不會(huì)走出 while(1)的,所以,我是讓你把定期運(yùn)行的代碼放在 while(1) 里面的最上方的,代替LED0的位置的。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 15:45 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-10 15:37
我剛剛把j=5放在mian函數(shù)最上面的,現(xiàn)在把它放到while函數(shù)里面,加了個(gè)LED翻轉(zhuǎn)顯示燈,還是不行,j=5運(yùn) ...

換句說,加了一個(gè)星期 掉電喚醒的 while(1)  一個(gè)星期只會(huì)循環(huán)一次。這么說,理解了沒?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-10 15:53 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 15:45
換句說,加了一個(gè)星期 掉電喚醒的 while(1)  一個(gè)星期只會(huì)循環(huán)一次。這么說,理解了沒?

捕獲.PNG
已經(jīng)成功了,把它放到while函數(shù)外面就可以了。謝謝
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-10 16:10 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-10 15:53
已經(jīng)成功了,把它放到while函數(shù)外面就可以了。謝謝

………………

那你想過沒有,一周之后,怎么讓他再睡下?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-11 09:00 | 顯示全部樓層
188610329 發(fā)表于 2021-11-10 16:10
………………

那你想過沒有,一周之后,怎么讓他再睡下?

其實(shí)我覺得最主要的就是醒了,處理好數(shù)據(jù)后繼續(xù)睡,然后隔一個(gè)星期再醒,這樣周而復(fù)始。我今天就是處理這個(gè)問題。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-11 11:01 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-11 09:00
其實(shí)我覺得最主要的就是醒了,處理好數(shù)據(jù)后繼續(xù)睡,然后隔一個(gè)星期再醒,這樣周而復(fù)始。我今天就是處理這 ...

我想,你應(yīng)該知道,主程序一旦運(yùn)行進(jìn)入了 while(1) 就永遠(yuǎn)不會(huì)出來,所以,如果,你把睡眠這部分,和你要執(zhí)行的這部分,分別放在 while(1) 的內(nèi)外…… , 那么,除了重新啟動(dòng),你是無法讓單片機(jī)周而復(fù)始的執(zhí)行的。
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-11 11:28 | 顯示全部樓層
188610329 發(fā)表于 2021-11-11 11:01
我想,你應(yīng)該知道,主程序一旦運(yùn)行進(jìn)入了 while(1) 就永遠(yuǎn)不會(huì)出來,所以,如果,你把睡眠這部分,和你要 ...

我知道,我想用定時(shí)器0來控制,我正在寫這個(gè)程序,等會(huì)兒試運(yùn)行看看。
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-11 12:25 | 顯示全部樓層
188610329 發(fā)表于 2021-11-11 11:01
我想,你應(yīng)該知道,主程序一旦運(yùn)行進(jìn)入了 while(1) 就永遠(yuǎn)不會(huì)出來,所以,如果,你把睡眠這部分,和你要 ...

捕獲.PNG
利用時(shí)間定時(shí)器給htime賦值,然后while語句執(zhí)行,已經(jīng)驗(yàn)證過了。,可以隔一段時(shí)間開,隔一段時(shí)間關(guān)
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-11 12:43 | 顯示全部樓層
行, 你睡覺和干活都在 while(1) 里就沒問題了, 剩下的就是 htime 和 j 的調(diào)整, 以及htime 的計(jì)數(shù)邏輯了,if判斷來講,最好用 htime >= 240 代替  htime == 240
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-11 13:26 | 顯示全部樓層
188610329 發(fā)表于 2021-11-11 12:43
行, 你睡覺和干活都在 while(1) 里就沒問題了, 剩下的就是 htime 和 j 的調(diào)整, 以及htime 的計(jì)數(shù)邏輯了, ...

嗯嗯,是的。我把它成大于等于
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-11 15:46 | 顯示全部樓層
188610329 發(fā)表于 2021-11-11 12:43
行, 你睡覺和干活都在 while(1) 里就沒問題了, 剩下的就是 htime 和 j 的調(diào)整, 以及htime 的計(jì)數(shù)邏輯了, ...

運(yùn)行下來有飄移,時(shí)間不準(zhǔn)。我程序是關(guān)一個(gè)小時(shí),開五分鐘。動(dòng)作是有,但是開啟單片機(jī)的時(shí)間每次都向后延遲,誤差累計(jì)的越來越大。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-11 16:12 來自手機(jī) | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-11 15:46
運(yùn)行下來有飄移,時(shí)間不準(zhǔn)。我程序是關(guān)一個(gè)小時(shí),開五分鐘。動(dòng)作是有,但是開啟單片機(jī)的時(shí)間每次都向后延 ...

你htime是哪里累加的?
pcon的循環(huán),那個(gè)j確定是 u8定義么?
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-12 10:07 | 顯示全部樓層
188610329 發(fā)表于 2021-11-11 16:12
你htime是哪里累加的?
pcon的循環(huán),那個(gè)j確定是 u8定義么?

捕獲.PNG
不好意思,現(xiàn)在才回復(fù)。電腦崩了,才把它修復(fù)好,大白菜修復(fù)電腦是個(gè)好東西。
htime是這里給的。用的時(shí)間定時(shí)器。每1毫秒中斷一次,單片機(jī)啟動(dòng)5分鐘后休眠,這個(gè)沒問題。
捕獲.PNG

關(guān)鍵在于進(jìn)入這里時(shí),休眠時(shí)間一次比一次長。會(huì)不會(huì)是_nop_();和P33=~P33浪費(fèi)了時(shí)間累積產(chǎn)生了誤差啊


回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-12 12:06 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-12 10:07
不好意思,現(xiàn)在才回復(fù)。電腦崩了,才把它修復(fù)好,大白菜修復(fù)電腦是個(gè)好東西。
htime是這里給的。用的 ...

2個(gè)方案:

1) 寧可 count 變成 >=2000 的判斷,  也要把 htime  用u8 來定義 變成150,

2)while(--j) 之前 TR0 =0;    htime = 0; 之后 TR0 = 1;
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-12 13:50 | 顯示全部樓層
188610329 發(fā)表于 2021-11-12 12:06
2個(gè)方案:

1) 寧可 count 變成 >=2000 的判斷,  也要把 htime  用u8 來定義 變成150,

你意思說進(jìn)入中斷一次,htime的值累計(jì)也有誤差,因?yàn)橛衏ount=0這個(gè)指令也耗時(shí)間是吧。
第二個(gè)方案感覺減少了定時(shí)誤差。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-11-12 14:09 | 顯示全部樓層
zhangzhao2423 發(fā)表于 2021-11-12 13:50
你意思說進(jìn)入中斷一次,htime的值累計(jì)也有誤差,因?yàn)橛衏ount=0這個(gè)指令也耗時(shí)間是吧。
第二個(gè)方案感覺減 ...

我在另一個(gè) 關(guān)于中斷的帖子里 提到過。
51系的單片機(jī),屬于8位機(jī),一次只能處理8位數(shù)據(jù),因此,如果有變量需要在 中斷與主程序之間傳遞參數(shù)的話,這個(gè)變量,應(yīng)當(dāng)避免使用16位變量,(尤其是C編程的情況下)會(huì)出現(xiàn)你無法控制的錯(cuò)誤。
而你htime 恰恰就是在中斷和主程序之間傳遞參數(shù)的變量,那么他應(yīng)該是 u8 而不應(yīng)該是 u16。而count 僅僅只是在中斷中使用,所以雖然16位耽誤時(shí)間,但是不會(huì)產(chǎn)生你不可控的錯(cuò)誤。

最后,htime 即便改成了u8 if判斷中也要用 >=  而不能用==,這是原則問題(因?yàn)閔time++ 不是在while(1)里面實(shí)施的)。而反過來,count >=   即便改成 == 也沒有關(guān)系,因?yàn)?count++ 是在T0中斷中實(shí)施的。
回復(fù)

使用道具 舉報(bào)

ID:450037 發(fā)表于 2021-11-12 14:18 | 顯示全部樓層
188610329 發(fā)表于 2021-11-12 14:09
我在另一個(gè) 關(guān)于中斷的帖子里 提到過。
51系的單片機(jī),屬于8位機(jī),一次只能處理8位數(shù)據(jù),因此,如果有變 ...

不管它了,我相信如果真的有一天需要用到這個(gè)功能的話,我會(huì)解決時(shí)間延遲的問題的。知道能實(shí)現(xiàn)這個(gè)定時(shí)啟動(dòng)停止就行了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产超碰人人爽人人做人人爱 | 国产精品久久久久久久久久久久久 | 亚洲成人一区二区 | 日日夜夜天天久久 | 久久91精品久久久久久9鸭 | 成人精品一区二区 | 一区二区三区四区电影视频在线观看 | 午夜丰满寂寞少妇精品 | 欧美一区二 | 国产片淫级awww | 产真a观专区 | 色狠狠一区 | 亚洲美乳中文字幕 | 黄色精品 | 婷婷毛片| 久久久精彩视频 | www久久久 | 亚洲aⅴ一区二区 | 91精品国产综合久久久久久丝袜 | 久久久91精品国产一区二区三区 | 黄色一级毛片免费看 | 一区二区三区四区国产 | 成人影院午夜 | 综合久久综合久久 | 亚洲视频精品 | 欧美伦理一区 | 亚洲福利网站 | 国产精品一区久久久 | www.国产精| 久久99精品久久久久蜜桃tv | 日韩一区二区三区在线观看 | 日韩一区二区视频 | 99久久婷婷国产综合精品首页 | 国产精品久久久久一区二区三区 | 亚洲成人免费视频在线观看 | 精品亚洲91| 日本在线视频一区二区 | 久久久精品一区二区三区 | 午夜小视频在线播放 | 国产在线观看av | 日韩中文字幕在线播放 |