新塘N76E003 芯片的定时器 初始化不正确,原因找到了,但内心还是不明白。
比如定时器0
//设置定时器0和1为16位模式
TMOD |= 0x01; //Timer0 Mode1
//定时器0中断允许
ET0=1;
TH0=(65536-1000)/256; // 0xff;
TL0=(65536-1000)%256; // 0xf1;
//开始计数
TR0=1;
//总中断开
EA=1;
系统是内部时钟16m,时钟分频没有设置默认为0 应该是运行时钟应该是1/16m = 0.0625us
上面初始化 1000数值 应该定时时间 1000*1/16m = 0.0625*1000 = 62.5us 但是 示波器测试得到的时间是760us ,百思不得其解
后面网上看到信息,说是分频系数问题,1000*1/16m/12 = 1000*12/16m = 750us 时间差不多,应该是分频 默认是12分频
但是具体在哪里已经设置了呢,我不得而知,不知道,有知道的大神告知下,谢谢
参考
//-------------------------------------------------------------------------
void Timer0_Delay100us(UINT32 u32CNT)
{
clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
TMOD |= 0x01; //Timer0 is 16-bit mode
set_TR0;

本文探讨了新塘N76E003芯片中定时器0初始化不准确导致的时间误差问题。作者发现实际定时时间与预期相差较大,后经研究发现默认存在12分频,而非预期的1分频。通过修改代码并理解分频设置,作者解决了定时器的精度问题。示例代码展示了如何正确设置100us和1ms的延时函数。
最低0.47元/天 解锁文章
2324

被折叠的 条评论
为什么被折叠?



