求帮忙看看定时器的问题
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led=P1;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void TO_time() interrupt 1
{
led=~led;
}
为什么LED灯闪烁呢,这里定时器没有重新设定初值啊
#define uint unsigned int
#define uchar unsigned char
sbit led=P1;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void TO_time() interrupt 1
{
led=~led;
}
为什么LED灯闪烁呢,这里定时器没有重新设定初值啊
定时器在响应了中断后要重新给TH0,TL0赋值。因为既然响应了中断,那么肯定TF0=1了,既然TF0=1了,那么肯定计数满溢出了。你的中断程序里没有重新赋值,所以不闪烁
可是我的灯却在不停闪烁
不好意思,我看成不闪烁了。
肯能是中断标志的问题
程序好像是没错 看硬件电路有没有好错,最好接下上拉电阻
不是应该重新附初值的吗?
没有关闭中断,即TR0依然等于1,定时器溢出后重新头0开始计数了
void timer0_initialize()
{
counter=0;
TR0=0;
TMOD=0x01; //定时器0
TH0=(65535-5000)/256; //5ms
TL0=(65535-5000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0()interrupt 1 //中断服务子程序
{
TH0=(65535-5000)/256; //5ms
TL0=(65535-5000)%256;
counter++;
}
你换这个再试试!