找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2305|回复: 1
收起左侧

用2ms定时器处理按键消隐问题

[复制链接]
ID:138343 发表于 2016-9-27 14:55 | 显示全部楼层 |阅读模式
使用stc15w404as单片机,定时器2做中断源,定时器测试过确定有效。

定时器中断处理,定时器间隔2ms
void timer2_int (void) interrupt 12
{
    static unsigned char keybuf = 0xFF;
    keybuf = (keybuf << 1) | key;
    if (keybuf == 0x00)
    {
        key_state = 0;
    }
    else if (keybuf == 0xff)
    {
        key_state = 1;
    }
}

在main中扫描key_state状态
void main(void)
{
    while (1)
    {
      if (key_state != key_backup)
      {
          key_backup = key_state;
          if (key_state == 0)
              mode = !mode;
      }

       if (mode == 1)
         P21=1;
       else
         P21=0;
    }
}

按测试目的应该是按一次就切换灯开关,但不起作用,请大家帮忙看看。

回复

使用道具 举报

ID:138343 发表于 2016-9-27 19:41 | 显示全部楼层
问题已经解决了,问题出在定时器上

由于使用stc的库函数进行定时器的初始化,没有在最后置EA=1导致定时器中断不会触发。
大家如果同样使用stc15库进行开发中如果一样使用定时需要注意以下几点:
1、定时器的数量,如stc15w404as只有两个定时器分别为0和2,而stc15库时支持的定时器不止这两个,要注意,否则比如在404as上用定时器1是无论如何也没有结果的
2、库的示例有关定时器初始化Timer_config中没有把EA=1帮你写好,在函数末尾自己手动加一下,否则会出和我一样的问题,测试stc的示例时定时器ok,自己写的时候没有注意到原来示例在main里多了一句EA=1
3、关于定时器的精度,由于stc15系列内置有晶振,通过isp软件可以检测到晶振的参数,在设置定时器时注意自己使用的芯片内部晶振参数,如404as用的是11059200,需要手动修改stc15库的MAIN_Fosc定义达到高精度
4、最后说一下stc的isp软件带有定时器计算工具非常好用,stc的isp工具用好了就是百宝箱啊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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