void main(void) { . . . . while(1) { P301=0; } } |
cheney03 发表于 2020-12-26 20:10 上电开机,这个要从硬件上去查了,测一下Q301的G极电压,看是不是这个MOS管坏了或焊错了 P301置低不关机,你还要查一下,是不是被其它代码置位了, 正常的来说,关机过程是先把要保存的数据存好,然后P301置低,之后不再运行任何代码。 |
感谢大家的解释。 这非常有帮助。 |
名字不是重点 发表于 2020-12-25 13:32 还有两个问题,能再帮忙分析一下吗 ①接上电池,没按POWER1键,我单片机就有电工作了 ②单片机运行后,我程序中直接置P301=0;(没按POWER1键,POWER1为高电平),没关机,而是单片机复位重新上电 (主电路电压)VDD=5V,(电池电压)VPP=4V,单片机IO口输出3.3V(上面两个问题跟这些电压有没关系) |
1楼讲述很清晰了 |
power为低/P301为高,这个两条件有一个为真时,Vpp不掉电,都为假时,掉电 |
本帖最后由 cheney03 于 2020-12-24 23:04 编辑 cheney03 发表于 2020-12-24 20:18 上面说的是在程序执行过程中 P301=0;当执行到这条语句会不会关机?或者在单片机初始化设置P301=0;能不能开机? |
本帖最后由 cheney03 于 2020-12-24 22:56 编辑 名字不是重点 发表于 2020-12-24 14:44 还有个疑问我程序中直接设置P301为低电平(不按POWER1键,也不检测INT1电平),会不会关机? |
名字不是重点 发表于 2020-12-24 14:44 分析很正确,也很详细,分给你了 ![]() |
开机: power1按下,Q301的G极经D302/R303拉低而导通,VPP得电供CPU, CPU上电初始IO后,P301输出高电平,致Q302导通, Q301的G极通过R304/Q302被锁定为导通态,此时即使POWER1释放,也不会断电。 关机: power1按下(最好能软件设为长按),CPU检测到INT为低,开始计时, 计时超过设定值时,启动关机程序,待power1释放后,P301输出低电平, Q302截止、Q301截止,VPP失电,CPU失电,完成关机。 这个电路很常见,逻辑分析并不难。 |