一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3444|回复: 12

[其他综合] 实验一下这个程序,感觉怎么与自己的思路不对呢?

[复制链接]
发表于 2013-12-3 20:50 | 显示全部楼层 |阅读模式
原来的思路:想让单片机进入掉电状态,休息16秒后,醒来闪一下灯。(灯接在P11端口上),然后再进入到掉电状态。但实际程序运行是,灯在不停的闪烁,根本没有休眠。不知是怎么回事?帮助分析一下原因?所用芯片为STC15W204S,一般的STC芯片应都可以试验。因第一次使用STC的片子,还不太熟悉。
#include "reg51.h"
#include "intrins.h"

sfr WKTCL = 0xaa;                   //掉电唤醒定时器计时低字节
sfr WKTCH = 0xab;                   //掉电唤醒定时器计时高字节

sbit P11 = P1^1;

void main()
{
    WKTCL = 32000;                     //设置唤醒周期为488us*(49+1) = 24.4ms
    WKTCH = 0x80;                   //使能掉电唤醒定时器

    while (1)
    {
        PCON = 0x02;                //进入掉电模式
        _nop_();                    //掉电模式被唤醒后,直接从此语句开始向下执行,不进入中断服务程序
        _nop_();
        P11 = 0;                 //接LED灯,低电平灯亮。
       延时1秒函数——;      //延时函数省略了,可以随便加个延时就行。
       P11 = 1;
    }

 楼主| 发表于 2013-12-3 20:55 | 显示全部楼层
上面的程序是在官方网站上程序的基础上,稍加修改的,应该不会有错。
回复

使用道具 举报

发表于 2013-12-3 21:01 | 显示全部楼层
WKTCL是字节,最多255,你放32000进去有意思吗?
忍不住要说你:机械照搬,不动脑子。
回复

使用道具 举报

 楼主| 发表于 2013-12-3 21:03 | 显示全部楼层
reiyawea 发表于 2013-12-3 21:01
WKTCL是字节,最多255,你放32000进去有意思吗?
忍不住要说你:机械照搬,不动脑子。

不是字节吧?看手册好像是15位的寄存器吧?
回复

使用道具 举报

 楼主| 发表于 2013-12-3 21:04 | 显示全部楼层
但还是要谢谢您的参与和回复。
回复

使用道具 举报

发表于 2013-12-3 21:06 | 显示全部楼层
关注。掉电模式没用过
回复

使用道具 举报

发表于 2013-12-3 21:10 | 显示全部楼层
根据手册,掉电时钟是独立的,频率约32768Hz,16分频。而计数器最多可计32768次,因此最多可延时约16秒。
据此,应取计数值为32767,即WKTCL = WKTCH = 0xFF;
回复

使用道具 举报

 楼主| 发表于 2013-12-3 21:25 | 显示全部楼层
reiyawea 发表于 2013-12-3 21:10
根据手册,掉电时钟是独立的,频率约32768Hz,16分频。而计数器最多可计32768次,因此最多可延时约16秒。
...

这点到没有想到:把它看成是一个15位的寄存器了。看来是要分别对这两个寄存器赋值才行。谢谢您的提醒。
回复

使用道具 举报

 楼主| 发表于 2013-12-3 21:30 | 显示全部楼层
不好意思,前段时间都在写STM32的程序,把它当做STM32的寄存器来处理了,走了一截弯路。
回复

使用道具 举报

发表于 2013-12-3 23:04 | 显示全部楼层
刚才心情不好,说话可能冲了点,现向楼主道歉。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-1 01:24 , Processed in 0.033898 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表