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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6030|回復: 10
收起左側

STC單片機掉電中斷的寫法

  [復制鏈接]
ID:624769 發表于 2021-10-8 21:55 | 顯示全部樓層 |閱讀模式
發現有不少人還不會用STC的掉電中斷,這里就拋磚引玉一下。很多STC的單片機,都內帶ELVD 掉電中斷,只要利用好這個中斷,不需要增加額外的硬件,就能在掉電的瞬間把需要保存的設置存儲到單片機自帶的偽Eeprom 中,中斷部分代碼如下,根據每個人實際情況修改。

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

  13.         IAP_CMD                = 0x02;                   //Eeprom 操作模式切換到 寫
  14.         IAP_ADDRH        = (Saving_ADDR & 0x0f);        //定義重要參數儲存地址 Saving_ADDR 的低4位保存Eeprom 的高位地址
  15.         IAP_ADDRL        = (Saving_ADDR & 0xf0);        //定義重要參數儲存地址 Saving_ADDR 的高4位保存Eeprom 的低位地址
  16.         for(i=0; i<16; i++)                //保存系統重要參數到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)        //復查掉電標志
  24.         {
  25.                 PCON &= 0xDF;                //清除掉電標志
  26.                 _nop_();               
  27.                 _nop_();                //坐等掉電
  28.         }
  29.         IAP_CONTR        = 0x20;                //發現是誤報,重啟單片機,恢復正常工作
  30. }
復制代碼

關于這個中斷,由于Eeprom 地址是在開機的時候,就準備好的,所以,中斷中不用再次準備,這也是為什么發現是誤報的時候,選擇重啟恢復工作的原因之一,不然還要再計算一次地址,設置一次端口模式。基本上,掉電中斷只需要做這些事,值得一提的是,掉電標志位,開機后默認是1,所以在開掉電中斷ELVD = 1; 之前,要先清掉電標志位,PCON &= 0xDF;  同時,如果要像我一樣,掉電中斷中用極簡寫法,那么,一定要Eeprom地址全都計算完畢之后,才開掉電中斷。

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:881715 發表于 2021-10-8 23:40 來自手機 | 顯示全部樓層
有用 多謝您賜教,多謝多謝
回復

使用道具 舉報

ID:965189 發表于 2022-6-5 22:37 | 顯示全部樓層
我之前試過不成功可能是沒有及時關閉所有輸出。找時間試試這個。
回復

使用道具 舉報

ID:398219 發表于 2022-6-16 14:47 | 顯示全部樓層
STC90C514AD有這個功能嗎
回復

使用道具 舉報

ID:1108581 發表于 2024-1-10 21:15 | 顯示全部樓層
代碼寫的非常好,清晰明了
回復

使用道具 舉報

ID:1115340 發表于 2024-4-3 23:14 | 顯示全部樓層
想問一下大佬,為啥我按照你的代碼寫了,但還是觸發不到低壓中斷呢?我已經初始化EA=1;
     ELVD=1;了
回復

使用道具 舉報

ID:1115340 發表于 2024-4-3 23:14 | 顯示全部樓層
低壓檢測電壓有要求嗎,還是要加一個大電容來增加斷電時間
回復

使用道具 舉報

ID:378108 發表于 2024-4-5 10:36 | 顯示全部樓層
STC 掉電中斷,最關鍵的一點是,要事先擦除flash,中斷里只寫入很短的數據,寫完以后可以點一個功率比較大的設備,把電快速消耗光,調試的時候可以不寫入,只點燈,看燈亮的時間
回復

使用道具 舉報

ID:1117545 發表于 2024-4-20 23:38 來自手機 | 顯示全部樓層
zhxzhx 發表于 2024-4-5 10:36
STC 掉電中斷,最關鍵的一點是,要事先擦除flash,中斷里只寫入很短的數據,寫完以后可以點一個功率比較大的設 ...

你說的對,我一般是上電讀完數據就立即擦除EEPROM數據,等斷電中斷的時候只需要寫入數據就行了,不會在擦除EEPROM扇區上浪費時間
回復

使用道具 舉報

ID:1117545 發表于 2024-4-20 23:40 來自手機 | 顯示全部樓層
寧遠133 發表于 2024-4-3 23:14
低壓檢測電壓有要求嗎,還是要加一個大電容來增加斷電時間

事先擦除EEPROM扇區,低壓中斷里只包含清標志位和寫入數據的語句
回復

使用道具 舉報

ID:584288 發表于 2024-5-31 21:37 | 顯示全部樓層
多謝!學習了!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产情品 | 在线免费观看成人 | 蜜桃av人人夜夜澡人人爽 | 三级视频在线观看电影 | 91精品国产综合久久久亚洲 | 成人精品国产 | 欧美色a v | 一区二区在线 | 精品一区二区三区免费视频 | 国产午夜精品一区二区三区嫩草 | 国产成人艳妇aa视频在线 | 久久久久亚洲精品 | 在线观看中文字幕视频 | 欧美精品一区二区三区视频 | 国产精品毛片一区二区在线看 | 欧美一区二区三区在线 | 在线成人www免费观看视频 | 日韩av高清在线 | 亚洲精品99久久久久久 | 久久精品国产久精国产 | 成人在线日韩 | 九九热精品视频在线观看 | 成人中文字幕av | 国产精品久久国产精品 | 免费一级黄| 国产91中文 | 国产一区 在线视频 | 久久久久91 | 国产成人免费在线 | 国产亚洲第一页 | 99精品欧美一区二区三区 | 亚洲欧美综合 | 国产精品资源在线观看 | 亚洲精品视频免费看 | 美人の美乳で授乳プレイ | 亚洲精品一区二区二区 | 日韩手机在线视频 | 亚洲欧美国产精品一区二区 | 成人欧美一区二区三区在线播放 | a黄毛片 | 一区二区在线 |