怎么利用单片机24小时定时发送一个信号?
而不影响单片机其它工作!
(分数不多了,给50分吧)
谁能帮我看一下,我的程序行吗?
#include
//----------------------------------------------------
sbit led=P0^5;
//---------------------------------------------------
//全局变量及位标志定义
bit FT0;
unsigned long T0_200ms;
//---------------------------------------------------
//固定函数声明
void timer_0(); //定时器中断0
//---------------------------------------------------
//用户函数声明
void initial(); //初始化
//---------------------------------------------------
void main()
{
initial();
T0_200ms=0;
while(1)
{
if(FT0)
{
FT0=0;
EA=0;
TH0=0x63; //400KHZ频率下,中断一次定隔200ms
TL0=0xC0;
TR0=1;
if(++T0_200ms>432000) //24小时×3600秒×5 5个200ms为1秒
{
led=0; //每24小时led置1
}
}
//if( ) {}其他中断,处理其它工作
}
}
//-------------------------------------------------------------------
void initial(){
EA=1; // CPU所有中断开
TMOD=0x01;
return;
}
//定时器0中断
void timer_0() interrupt 1 using 2
{
FT0=1;
}
单片机可以相对准确地定出24小时出来
但是,这个累积误差也是很可观的
如果没有外部的校准,用不了多久,就会差得很离谱(当然,这是相对客观的时间而言)
要是只需要24个小时的间隔,用汇编+计算晶体周期,可以做得比较准
单片机可以相对准确地定出24小时出来
关键是定时器要做好补偿。
我们曾经用单片机做过时钟,最终做到每24小时误差一秒钟