单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写?

2025-03-03 18:39:24
推荐回答(4个)
回答1:

定时器T0 工作方式1 晶振频率24MHz
定时器最大定时时间(us):32768
定时器最小定时时间(us):0.5

【1ms精确定时C51代码】
void T0_init(void) //定时器初始化
{
TMOD |= 0x01;
TH0 = 0xf8; //设置定时器计数初值,定时1000us
TL0 = 0x33;
IE |= 0x82; //打开总中断
TR0 = 1; //启动定时器
}

void T0_intservice(void) interrupt 1 //定时器中断服务
{
TH0 = 0xf8; //重装载定时器计数初值
TL0 = 0x33;
//这里可以插入其他处理程序,不会影响定时器工作
}

回答2:

光从C语言程序本身是看不出误差的,可以仿真一下试试。用C语言很难得到精确的延时,只能用定时器或者汇编的方法。
这和你用的单片机有关系啊,比如是1/12T指令周期还是1/6T指令周期,或者1T指令周期,以1/12指令周期的单片机(最常用的51),24M的话每执行一条指令是用0.5uS,16位计数器最大计数65536,就是32.768mS,设置定时器的初始值就可以很精确地定时(延时)了。定时器初始值应该会算吧?中断函数应该会写吧?

回答3:

void delayms(unsigned int times )
{
unsigned int i,j;
for(j=0;j {
for(i=0;i<400;i++);
}
}

回答4:

lz烧饼