找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1412|回复: 11
打印 上一主题 下一主题
收起左侧

关于51单片机的定时器问题

  [复制链接]
跳转到指定楼层
楼主
ID:966089 发表于 2022-1-6 12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 菜菜的周某人 于 2022-1-6 12:11 编辑

大家好,我想问下,现在我51单片机同时使用了两个定时器,即定时器0和定时器1,分别是50ms和20ms的中断,中断服务函数里分别是进中断20次闪烁LED1和进中断50次闪烁LED2,我的初始目的是将两个作为1s对比,但是现在问题现象是这两个灯的闪烁频率不是设定的1s了,反而闪烁频率极快,类似是程序紊乱了,这是为什么?麻烦论坛大佬帮忙指导下。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-1-6 14:52 | 只看该作者
个别问题要先贴代码才能讨论下去
回复

使用道具 举报

板凳
ID:313048 发表于 2022-1-6 15:39 | 只看该作者
盲猜用到同个全局变量了
回复

使用道具 举报

地板
ID:944369 发表于 2022-1-6 15:44 | 只看该作者
分开写代码
回复

使用道具 举报

5#
ID:213173 发表于 2022-1-6 16:50 | 只看该作者
用一个定时器能解决的事情不要开两个定时器,等玩熟了开几个定时器都不会互扰。
  1. #include <reg51.h>

  2. sbit LED1=P1^0;
  3. sbit LED2=P1^1;

  4. unsigned char count1,count2;


  5. void InitTimer0(void)//10毫秒@12.000MHz
  6. {
  7.     TMOD = 0x01;
  8.     TH0 = 0xD8;
  9.     TL0 = 0xF0;
  10.     EA = 1;
  11.     ET0 = 1;
  12.     TR0 = 1;
  13. }

  14. void main(void)
  15. {
  16.         InitTimer0();
  17.         while(1);
  18. }

  19. void Timer0Interrupt(void) interrupt 1
  20. {
  21.         TH0 = 0xD8;
  22.         TL0 = 0xF0;
  23.         if(++count1==5)
  24.         {
  25.                 count1=0;
  26.                 LED1=~LED1;
  27.         }
  28.         if(++count2==2)
  29.         {
  30.                 count2=0;
  31.                 LED2=~LED2;
  32.         }
  33. }
复制代码

回复

使用道具 举报

6#
ID:955673 发表于 2022-1-6 17:33 | 只看该作者
猜在 100 MS 时,中断打架了
回复

使用道具 举报

7#
ID:956872 发表于 2022-1-7 08:02 来自手机 | 只看该作者
冰火风轮 发表于 2022-1-6 17:33
猜在 100 MS 时,中断打架了

中断有先后顺序,怎么会发生打架。如果中断间隔很短,中断里要运行的代码时间超出中断时间,才会错乱吧。像他几十ms的中断应该不至于打架。同时中断也是最高优先级先运行完再运行次优先级的吧。
回复

使用道具 举报

8#
ID:82067 发表于 2022-1-7 15:24 | 只看该作者
一般情况是个别数据忘记清零了,
回复

使用道具 举报

9#
ID:908826 发表于 2022-1-7 15:35 | 只看该作者
程序贴出来,你这个可能的错误原因不是唯一的,x
回复

使用道具 举报

10#
ID:966089 发表于 2022-1-7 17:56 | 只看该作者
谢谢大家的回复,问题找到了,由于我是以赋实参进行定时器初始化的,所以定时器0和1的两次初始化的TMOD寄存器先后冲突了,我将赋值操作改成位或操作就可以了
回复

使用道具 举报

11#
ID:526543 发表于 2022-1-8 15:02 | 只看该作者
建议先搞一个吧  把代码粘贴上了 不然没办法差错
回复

使用道具 举报

12#
ID:484706 发表于 2022-1-9 13:16 | 只看该作者
程序可以进行仿真,看看目标端口变化的情况,或者直接上示波器看LED灯控制端口的波形情况,怀疑是不是在中断里面没有清零定时器
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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