找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1806|回复: 5
收起左侧

STC12C5A60单片机写的一个用定时器消抖,有点问题请指教

[复制链接]
ID:465279 发表于 2020-3-7 16:41 | 显示全部楼层 |阅读模式
定义一个按键和一个LED,按一下按键LED亮再按一下LED灭,用定时器消抖。下载后试了,可以实现但有时需要按好几下才会亮或灭,不知是哪里代码有问题
--------------------------------下面是main.c文件----------------------------------
#include <reg52.h>
#include <dingyi.h>
#include <timer.h>

void main(void)
{  
          LED=1;
        
   timer0();
         
         while(1){  anjian_0();   }
}


--------------------------下面是timer.c文件--------------------------------

#include <reg52.h>
#include <dingyi.h>

void anjian_0(void)
{
   if(KEY==0)
         {
            TR0  = 1;        //启动定时器0
         }
}

void anjian_1(void)
{
        
  while(1){ if(KEY==0)    LED=~LED;   }
         
}
void timer0(void)      //配置定时器0
{
   TMOD &= 0xf0;      
         TMOD |= 0x01;    //TMOD 是定时器选择及工作方式选择,此是选择定时器0工作在方式1,16位计数器
         TH0  = 0xF8;        //给高8位赋初值
         TL0  = 0xCC;         //给低8位赋初值
//         TR0  = 1;        //启动定时器0
         ET0  = 1;        //开定时器0中断
         EA   = 1;        //开总中断
}

void timer0zd(void) interrupt 1    //定时器0中断标志
{
  //static uchar i=0;
         TH0  = 0xF8;
         TL0  = 0xCC;
         LED=0;
         TR0=0;
         anjian_1();
}


回复

使用道具 举报

ID:275826 发表于 2020-3-7 17:28 | 显示全部楼层
看你的程序真费劲,按键去抖就三条语句的事情
回复

使用道具 举报

ID:462827 发表于 2020-3-7 20:29 | 显示全部楼层
那你这个根本无须中断嘛,搞复杂还写错了去了
回复

使用道具 举报

ID:465279 发表于 2020-3-7 21:17 | 显示全部楼层
tyrl800 发表于 2020-3-7 17:28
看你的程序真费劲,按键去抖就三条语句的事情

是因为我要用这个来实现其它功能,而我想要的功能说起来费劲。这个说着简单点,
回复

使用道具 举报

ID:213173 发表于 2020-3-8 07:19 | 显示全部楼层
hxszrb 发表于 2020-3-7 21:17
是因为我要用这个来实现其它功能,而我想要的功能说起来费劲。这个说着简单点,

使用定时器中断服务函数的一般要求:函数中任务尽可能简短,俗称打一枪就跑,不可久留。更不能接近或大于中断周期。不是必须不要在中断函数中执行具体任务,只要设置个标志,具体任务放在main函数主循环中完成。更不能调用带有阻滞型延时函数和while(1)死循环的子函数。在中断任务没有完成前CPU不会响应再入中断请求。除非有更高优先级中断才能打断此中断。
回复

使用道具 举报

ID:465279 发表于 2020-3-8 12:22 | 显示全部楼层
wulin 发表于 2020-3-8 07:19
使用定时器中断服务函数的一般要求:函数中任务尽可能简短,俗称打一枪就跑,不可久留。更不能接近或大于 ...

非常感谢你的解释,学习了。也大概知道我这个问题在那了,非常感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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