不是软件问题! 1、检测出掉电。(电源输入通道上,设置一个电压检测电路) 2、通知到CPU。(例如,使用INT0) 3、对应中断响应后,退出休眠。(大多是自然,退出) |
红外遥控唤醒掉电模式,红外接收我接外部中断0脚,进入掉进模式后,唤醒首先是进入外部中断0中断程序关闭该IO口的外部中断,这样该脚就能接收红外解码的功能了,还有将掉电模式标志清0,开机就不会再进入掉电模式。 按关机的话,标志位置1,先打开外部中断0允许中断,再进入掉电模式 |
418854190 发表于 2021-9-11 21:59 对呀,这所谓的"向量地址"就是中断的地址,中断被触发后,程序就会跳转到这个地址,执行完中断之后,由RETI返回之前的代码,但不跳过的话,汇编是一条一条指令执行下来,那就是直接进入中断了,虽然说中断不开启,但执行的结果是"未知"的 |
Y_G_G 发表于 2021-9-11 21:17 官方提供的INT4中断入口是ORG 0083H 是不是在主程序前加的比它大就行 |
418854190 发表于 2021-9-11 20:12 你要去看一下这个单片机的中断向量最高地址是多少,不跳过的话,程序一执行就进入中断,进入中断之后就乱,后果不可知,ORH 100H是一个大概值,反正空间有的是 用汇编要很了解硬件的,而且代码量是很大的,像你这种直接复制的,估计过一段时间再看,基本就是什么思路都找不着了 |
Y_G_G 发表于 2021-9-11 19:04 不习惯用官方的计算器 加了ORG 100H掉电唤醒正常了之前没加 唤醒后就死机了 现在INT0 INT1 INT2 INT3 INT4都可以唤醒了 没专门学过编程 都是自己没事琢磨玩的 C语言改不明白 一改就错 汇编还能改改编编 |
用什么"单片机小精灵"呀,STC下载器那有,官方的它不行吗? MOV PCON,#02H就是掉电了 想要唤醒是要开启中断的,你想要哪个唤醒就开启哪个中断 比如,你要外部中断INT0唤醒, 那就: CLR EI0;这个要先清除 SETB EX0; SETB EA; 然后,当外部中断触发之后,就会进入中断程序 还有,ORG 0000H前面不要有指令,main标号前面也要有一个ORG 100H,要跳过中断向量区的 你这程序太乱了...............你应该用C,没事别乱玩汇编 |
418854190 发表于 2021-9-11 17:11 不是…… 掉电唤醒的定义,你理解么? 你先让单片机关机(自主掉电 PowerDown),然后通过中断触发,单片机又开机,这个过程叫掉电唤醒。掉电唤醒一般是没有程序的,只要开了外部中断,当你执行了ShutDown指令之后,就能通过外部中断唤醒,换句话说,大多的掉电唤醒,都是只有看到关机指令通常是: MOV PCON,#02H , 而没有唤醒指令的,所以,你说你加掉电唤醒“源程序”,啥程序? |
188610329 发表于 2021-9-11 15:54 我发的是没加掉电唤醒的源程序 我试着加掉电唤醒只是led亮了 看电流没有发射就死机了 不知道应该怎么加 |
粗看了一遍你的代码, C01C4: LCALL keyscan; //键值扫描 JNB keyflag,C01C4 //若有按键按下 CLR LED; LCALL DELAY20MS; LCALL DELAY20MS; LCALL ir_send; //发送红外编码 JNB KA,$; JNB KB,$; LCALL DELAY20MS; JNB KA,$; JNB KB,$; CLR keyflag; //按键标志清零 SETB LED; SJMP C01C4 这里构成了死循环, 单片机会一直周而复始复始的反复执行这段代码. 你LCALL出去的分支,也都有RET回来。也没有找到 类似 MOV PCON,#02H 这类关机指令; 那么,你为什么需要掉电唤醒呢? 不存在掉电,何来唤醒? |