标题:
求助,单片机程序烧进去以后定时器好像没开启
[打印本页]
作者:
Proteus111
时间:
2020-1-8 09:43
标题:
求助,单片机程序烧进去以后定时器好像没开启
如果在主程序里面循环前面加上TR0=0,定时器运行正常;现在是按键以后也无法触发计时。多个定时器同时开启的话,会有相互干扰的问题吗?
#include<reg52.h>
#define uint unsigned int //定义常用数据类型替代码
#define uchar unsigned char
uchar t0; //定时器累加位
sbit K1=P3^2; //按键输入
sbit beep=P1^0; //蜂鸣器模拟标记输出
sbit relay=P1^7;
void IntConfiguration(); //设置定时器初始值
void Delay(uint n); //延时函数
void main()
{
uint i;
IntConfiguration();
while(1)
{
if(K1==0) //是否有种茎进入
{
TR0=0; //关闭定时器0
TR1=0; //关闭定时器1
t0=0;
relay=1;
beep=1; //关闭标记装置
while((i<50)&&(K1==0)) //判断种茎是否离开
{
Delay(1);
i++;
}
i=0;
IntConfiguration();
TR0=1;
}
else
{
if(t0==1296) //定时器0计时1.08s
{
t0=0;
beep=0; //打开标记装置
relay=0;
}
}
}
}
void IntConfiguration()
{
//设置定时器
TMOD=0x11; //设置定时器0和1均为工作方式1
TH0=0xfc; //定时器0定时50ms初值
TL0=0x66;
ET0=1; //开定时器0中断
EA=1; //打开总中断
}
void Timer0() interrupt 1 //定时器0中断函数
{
TH0=0xfc;
TL0=0x66;
t0++; //计算定时5ms的个数
}
void Delay(uint n) //延时50us误差0us
{
unsigned char a,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}
复制代码
作者:
ziiyn
时间:
2020-1-8 12:21
程序有问题吧。我开了3个定时器也没影响。如果有屏幕,可以显示下定时器状态,没有屏幕的话用LED显示下定时器状态就知道定时器有没有工作正常了。
作者:
Proteus111
时间:
2020-1-8 15:25
ziiyn 发表于 2020-1-8 12:21
程序有问题吧。我开了3个定时器也没影响。如果有屏幕,可以显示下定时器状态,没有屏幕的话用LED显示下定时 ...
拿LED显示了一下,定时器0开启时LED亮。现在LED不亮;如果在while循环之前加TR0=1,LED会亮,但是不会灭,应该是没有进入循环体里面。但是还不知道怎么改
作者:
166864646883
时间:
2020-1-9 13:45
首先你的按键要去抖,其次你定义的定时器累加位是一个unsigned char 的变量,最大为255,而你主程序里判断的是t0==1296,肯定是不行的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1