原创 义隆78P153按键唤醒代码

2011-4-20 09:26 3570 6 6 分类: MCU/ 嵌入式

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的初值。然后可以调到主程序开始处开始执行程序了。

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /5 下一条