找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC單片機(jī)掉電中斷的寫法

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:624769 發(fā)表于 2021-10-8 21:55 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
發(fā)現(xiàn)有不少人還不會用STC的掉電中斷,這里就拋磚引玉一下。很多STC的單片機(jī),都內(nèi)帶ELVD 掉電中斷,只要利用好這個(gè)中斷,不需要增加額外的硬件,就能在掉電的瞬間把需要保存的設(shè)置存儲到單片機(jī)自帶的偽Eeprom 中,中斷部分代碼如下,根據(jù)每個(gè)人實(shí)際情況修改。

  1. void        PowerLost()        interrupt 6
  2. {
  3.         unsigned char i;
  4.         EA        = 0;                //關(guān)閉所有中斷
  5. //        P0Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  6.         P1Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  7. //        P2Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  8.         P3Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  9. //        P4Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  10.         P5Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  11. //        P6Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗
  12. //        P7Mode        = HHHH_HHHH;        //切換到高阻模式,關(guān)閉所有IO的輸出,降低功耗

  13.         IAP_CMD                = 0x02;                   //Eeprom 操作模式切換到 寫
  14.         IAP_ADDRH        = (Saving_ADDR & 0x0f);        //定義重要參數(shù)儲存地址 Saving_ADDR 的低4位保存Eeprom 的高位地址
  15.         IAP_ADDRL        = (Saving_ADDR & 0xf0);        //定義重要參數(shù)儲存地址 Saving_ADDR 的高4位保存Eeprom 的低位地址
  16.         for(i=0; i<16; i++)                //保存系統(tǒng)重要參數(shù)到Eeprom
  17.         {
  18.                 IAP_DATA        = System_Setting[i];
  19.                 IAP_TRIG        = 0x5A;
  20.                 IAP_TRIG        = 0xA5;
  21.                 IAP_ADDRL++;
  22.         }
  23.         while((PCON & 0x20) != 0)        //復(fù)查掉電標(biāo)志
  24.         {
  25.                 PCON &= 0xDF;                //清除掉電標(biāo)志
  26.                 _nop_();               
  27.                 _nop_();                //坐等掉電
  28.         }
  29.         IAP_CONTR        = 0x20;                //發(fā)現(xiàn)是誤報(bào),重啟單片機(jī),恢復(fù)正常工作
  30. }
復(fù)制代碼

關(guān)于這個(gè)中斷,由于Eeprom 地址是在開機(jī)的時(shí)候,就準(zhǔn)備好的,所以,中斷中不用再次準(zhǔn)備,這也是為什么發(fā)現(xiàn)是誤報(bào)的時(shí)候,選擇重啟恢復(fù)工作的原因之一,不然還要再計(jì)算一次地址,設(shè)置一次端口模式;旧,掉電中斷只需要做這些事,值得一提的是,掉電標(biāo)志位,開機(jī)后默認(rèn)是1,所以在開掉電中斷ELVD = 1; 之前,要先清掉電標(biāo)志位,PCON &= 0xDF;  同時(shí),如果要像我一樣,掉電中斷中用極簡寫法,那么,一定要Eeprom地址全都計(jì)算完畢之后,才開掉電中斷。

以上,希望可以幫到大家。

評分

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

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:881715 發(fā)表于 2021-10-8 23:40 來自手機(jī) | 只看該作者
有用 多謝您賜教,多謝多謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:965189 發(fā)表于 2022-6-5 22:37 | 只看該作者
我之前試過不成功可能是沒有及時(shí)關(guān)閉所有輸出。找時(shí)間試試這個(gè)。
回復(fù)

使用道具 舉報(bào)

地板
ID:398219 發(fā)表于 2022-6-16 14:47 | 只看該作者
STC90C514AD有這個(gè)功能嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1108581 發(fā)表于 2024-1-10 21:15 | 只看該作者
代碼寫的非常好,清晰明了
回復(fù)

使用道具 舉報(bào)

6#
ID:1115340 發(fā)表于 2024-4-3 23:14 | 只看該作者
想問一下大佬,為啥我按照你的代碼寫了,但還是觸發(fā)不到低壓中斷呢?我已經(jīng)初始化EA=1;
     ELVD=1;了
回復(fù)

使用道具 舉報(bào)

7#
ID:1115340 發(fā)表于 2024-4-3 23:14 | 只看該作者
低壓檢測電壓有要求嗎,還是要加一個(gè)大電容來增加斷電時(shí)間
回復(fù)

使用道具 舉報(bào)

8#
ID:378108 發(fā)表于 2024-4-5 10:36 | 只看該作者
STC 掉電中斷,最關(guān)鍵的一點(diǎn)是,要事先擦除flash,中斷里只寫入很短的數(shù)據(jù),寫完以后可以點(diǎn)一個(gè)功率比較大的設(shè)備,把電快速消耗光,調(diào)試的時(shí)候可以不寫入,只點(diǎn)燈,看燈亮的時(shí)間
回復(fù)

使用道具 舉報(bào)

9#
ID:1117545 發(fā)表于 2024-4-20 23:38 來自手機(jī) | 只看該作者
zhxzhx 發(fā)表于 2024-4-5 10:36
STC 掉電中斷,最關(guān)鍵的一點(diǎn)是,要事先擦除flash,中斷里只寫入很短的數(shù)據(jù),寫完以后可以點(diǎn)一個(gè)功率比較大的設(shè) ...

你說的對,我一般是上電讀完數(shù)據(jù)就立即擦除EEPROM數(shù)據(jù),等斷電中斷的時(shí)候只需要寫入數(shù)據(jù)就行了,不會在擦除EEPROM扇區(qū)上浪費(fèi)時(shí)間
回復(fù)

使用道具 舉報(bào)

10#
ID:1117545 發(fā)表于 2024-4-20 23:40 來自手機(jī) | 只看該作者
寧遠(yuǎn)133 發(fā)表于 2024-4-3 23:14
低壓檢測電壓有要求嗎,還是要加一個(gè)大電容來增加斷電時(shí)間

事先擦除EEPROM扇區(qū),低壓中斷里只包含清標(biāo)志位和寫入數(shù)據(jù)的語句
回復(fù)

使用道具 舉報(bào)

11#
ID:584288 發(fā)表于 2024-5-31 21:37 | 只看該作者
多謝!學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表