1 单片机电源另外供电,稳压后加一个大容量电容足以保持单片机有足够的时间去运行掉电程序(因为你的掉电延时函数用得太多了太耗时间了);2 掉电输出控制电路也要有足够的电容实现掉电控制(同上);3 建议掉电检测用外部中断输入口实现;4 建议用光电隔离芯片直接检测主电源来实现掉电检测。
这个功能跟硬件这么紧密的结合,只看代码是看不出问题的。{掉电后由于继电器的跳动,单片机重启。}这个不是理由吧。你的电路设计在掉电后,电路中的剩余电量足够单片机工作这么久吗?