标题:
关于51单片机的定时器问题
[打印本页]
作者:
菜菜的周某人
时间:
2022-1-6 12:04
标题:
关于51单片机的定时器问题
本帖最后由 菜菜的周某人 于 2022-1-6 12:11 编辑
大家好,我想问下,现在我51单片机同时使用了两个定时器,即定时器0和定时器1,分别是50ms和20ms的中断,中断服务函数里分别是进中断20次闪烁LED1和进中断50次闪烁LED2,我的初始目的是将两个作为1s对比,但是现在问题现象是这两个灯的闪烁频率不是设定的1s了,反而闪烁频率极快,类似是程序紊乱了,这是为什么?麻烦论坛大佬帮忙指导下。
作者:
lkc8210
时间:
2022-1-6 14:52
个别问题要先贴代码才能讨论下去
作者:
AUG
时间:
2022-1-6 15:39
盲猜用到同个全局变量了
作者:
qwer9177
时间:
2022-1-6 15:44
分开写代码
作者:
wulin
时间:
2022-1-6 16:50
用一个定时器能解决的事情不要开两个定时器,等玩熟了开几个定时器都不会互扰。
#include <reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^1;
unsigned char count1,count2;
void InitTimer0(void)//10毫秒@12.000MHz
{
TMOD = 0x01;
TH0 = 0xD8;
TL0 = 0xF0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
InitTimer0();
while(1);
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0xD8;
TL0 = 0xF0;
if(++count1==5)
{
count1=0;
LED1=~LED1;
}
if(++count2==2)
{
count2=0;
LED2=~LED2;
}
}
复制代码
作者:
冰火风轮
时间:
2022-1-6 17:33
猜在 100 MS 时,中断打架了
作者:
PEB188
时间:
2022-1-7 08:02
冰火风轮 发表于 2022-1-6 17:33
猜在 100 MS 时,中断打架了
中断有先后顺序,怎么会发生打架。如果中断间隔很短,中断里要运行的代码时间超出中断时间,才会错乱吧。像他几十ms的中断应该不至于打架。同时中断也是最高优先级先运行完再运行次优先级的吧。
作者:
kissdb
时间:
2022-1-7 15:24
一般情况是个别数据忘记清零了,
作者:
13205495918
时间:
2022-1-7 15:35
程序贴出来,你这个可能的错误原因不是唯一的,x
作者:
菜菜的周某人
时间:
2022-1-7 17:56
谢谢大家的回复,问题找到了,由于我是以赋实参进行定时器初始化的,所以定时器0和1的两次初始化的TMOD寄存器先后冲突了,我将赋值操作改成位或操作就可以了
作者:
123456ZXC1
时间:
2022-1-8 15:02
建议先搞一个吧 把代码粘贴上了 不然没办法差错
作者:
攻城狮小李
时间:
2022-1-9 13:16
程序可以进行仿真,看看目标端口变化的情况,或者直接上示波器看LED灯控制端口的波形情况,怀疑是不是在中断里面没有清零定时器
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1