义隆78P153按键唤醒代码

78P153价格便宜,在一些小产品中应用广泛,比如灯饰,玩具等。这些产品很多用电池供电,在关机状态下都要求单片机进入省电模式。

78P153的P6口有按键唤醒功能。进入休眠状态和按键唤醒后的执行代码如下

clr tcc 1

mov a,@0b00001111 2

contw 3

wdtc 4

mov a,@0 5

iow ioce ;disable wdt 6

mov p6,p6 7

disi 8

mov a,@0b00000011 9

iow iocf 10

slep 11

nop 12

nop 13

nop 14

mov a,@0b10000000 15

iow ioce ;enable wdt,18ms time out,use p60 16

mov a,@0b00000001 17

iow iocf ;enable t0 int 18

mov a,@0 ;tcc 1/2指令周期 19

contw 20

eni 21

mov a, @166 ;100us interval 22

mov tcc,a 23

1、 清零TCC,在进入睡眠模式后晶振停振,TCC是不会计数的,这条指令可要可不要

2-3、设置wdt预分频,把分频器分配给WDT,在硬件使能WDT(就是option选项里使能WDT)时,153从休眠模式唤醒后,自动使能WDT,所以在进入休眠模式前要设置WDT,并且为了防止唤醒后看门狗溢出复位,WDT的分频比例要设置大。

4、清WDT计数器

5-6、禁止WDT,因为在睡眠模式下153的WDT仍然在计数,所以用P6口唤醒时,要关闭看门狗

7、读P6口,因为唤醒是P6口的状态改变导致的,所以在进入睡眠前要读P6口的状态

8、禁止中断,在SLEP命令前执行DISI,在按键唤醒后将从SLEP的下一条指令开始执行。

如果在SLEP命令前执行ENI,唤醒后将从终端地址008处开始执行。

9-10、使能P6口的输入变化中断,因为我的程序里使能了定时中断,所以这里是@0b00000011。

11、进入休眠

12-14、延时一段时间,按键唤醒后从12条指令处开始执行

15-16、我的程序正常运行时要使能看门狗,所以这里使能WDT

17-18、禁止P6口的输入变化中断,因为程序里使用了定时中断,所以这里把00000001送入IOCF.

19-20、设置TCC的预分频器

21、使能中断

22-23、设置TCC的初值。然后可以调到主程序开始处开始执行程序了。

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发