找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1469|回复: 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了,反而闪烁频率极快,类似是程序紊乱了,这是为什么?麻烦论坛大佬帮忙指导下。
回复

使用道具 举报

ID:161164 发表于 2022-1-6 14:52 | 显示全部楼层
个别问题要先贴代码才能讨论下去
回复

使用道具 举报

ID:313048 发表于 2022-1-6 15:39 | 显示全部楼层
盲猜用到同个全局变量了
回复

使用道具 举报

ID:944369 发表于 2022-1-6 15:44 | 显示全部楼层
分开写代码
回复

使用道具 举报

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. }
复制代码

回复

使用道具 举报

ID:955673 发表于 2022-1-6 17:33 | 显示全部楼层
猜在 100 MS 时,中断打架了
回复

使用道具 举报

ID:956872 发表于 2022-1-7 08:02 来自手机 | 显示全部楼层
冰火风轮 发表于 2022-1-6 17:33
猜在 100 MS 时,中断打架了

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

使用道具 举报

ID:82067 发表于 2022-1-7 15:24 | 显示全部楼层
一般情况是个别数据忘记清零了,
回复

使用道具 举报

ID:908826 发表于 2022-1-7 15:35 | 显示全部楼层
程序贴出来,你这个可能的错误原因不是唯一的,x
回复

使用道具 举报

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

使用道具 举报

ID:526543 发表于 2022-1-8 15:02 | 显示全部楼层
建议先搞一个吧  把代码粘贴上了 不然没办法差错
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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