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条评论)
登录后参与讨论