找回密码
 注册
关于网站域名变更的通知
查看: 195|回复: 3
打印 上一主题 下一主题

STC单片机掉电中断的写法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-16 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
发现有不少人还不会用STC的掉电中断,这里就抛砖引玉一下。很多STC的单片机,都内带ELVD 掉电中断,只要利用好这个中断,不需要增加额外的硬件,就能在掉电的瞬间把需要保存的设置存储到单片机自带的伪Eeprom 中,中断部分代码如下,根据每个人实际情况修改。
5 |! ~# L. {1 ^$ b' F! h
2 K3 r  v- B  y, ^# z
  • void        PowerLost()        interrupt 6
  • {
  •         unsigned char i;
  •         EA        = 0;                //关闭所有中断
  • //        P0Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  •         P1Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  • //        P2Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  •         P3Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  • //        P4Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  •         P5Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  • //        P6Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  • //        P7Mode        = HHHH_HHHH;        //切换到高阻模式,关闭所有IO的输出,降低功耗
  •         IAP_CMD                = 0x02;                   //Eeprom 操作模式切换到 写
  •         IAP_ADDRH        = (Saving_ADDR & 0x0f);        //定义重要参数储存地址 Saving_ADDR 的低4位保存Eeprom 的高位地址
  •         IAP_ADDRL        = (Saving_ADDR & 0xf0);        //定义重要参数储存地址 Saving_ADDR 的高4位保存Eeprom 的低位地址
  •         for(i=0; i<16; i++)                //保存系统重要参数到Eeprom
  •         {
  •                 IAP_DATA        = System_Setting;
  •                 IAP_TRIG        = 0x5A;
  •                 IAP_TRIG        = 0xA5;
  •                 IAP_ADDRL++;
  •         }
  •         while((PCON & 0x20) != 0)        //复查掉电标志
  •         {
  •                 PCON &= 0xDF;                //清除掉电标志
  •                 _nop_();
  •                 _nop_();                //坐等掉电
  •         }
  •         IAP_CONTR        = 0x20;                //发现是误报,重启单片机,恢复正常工作
  • }

  • % ]( {. @7 Z5 e1 ~, g( M8 I- v

* `5 R/ K! `! R3 a' w7 Z' L. A' Y! @) L
6 D" w3 z; {3 A' R
关于这个中断,由于Eeprom 地址是在开机的时候,就准备好的,所以,中断中不用再次准备,这也是为什么发现是误报的时候,选择重启恢复工作的原因之一,不然还要再计算一次地址,设置一次端口模式。基本上,掉电中断只需要做这些事,值得一提的是,掉电标志位,开机后默认是1,所以在开掉电中断ELVD = 1; 之前,要先清掉电标志位,PCON &= 0xDF;  同时,如果要像我一样,掉电中断中用极简写法,那么,一定要Eeprom地址全都计算完毕之后,才开掉电中断。
0 H2 q4 ^" f* F# Y
/ w8 C, U$ t6 y- \# f7 d  }以上,希望可以帮到大家。
- @& ]  x4 ~6 M) U+ o) D" g

该用户从未签到

2#
发表于 2022-6-16 11:14 | 只看该作者
,学习了,Thanks♪(・ω・)ノ

该用户从未签到

3#
发表于 2022-6-16 13:02 | 只看该作者
,学习了,Thanks♪(・ω・)ノ

该用户从未签到

4#
发表于 2022-6-16 14:39 | 只看该作者
学习了,Thanks♪(・ω・)ノ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-9 11:23 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表