之前由于对AB1601的编译器不熟悉,写出来的延时代码在每个工程中都可能不一样,因为被编译器优化得一塌糊涂了。
后来发现通过volatile关键字来避免优化,结合逻辑分析仪或者示波器测量io口输出的波形来确定延时参数,实现了毫秒精度的延时。代码如下:
volatile void NopDelayMs(volatile U16 msVar)
{
volatile U16 i;
volatile U16 j;
volatile U32 k;
for(i=0; i<msVar; i++)
{
//for(j=0; j<2822; j++)//48M
for(j=0; j<940; j++)//16M
{
k++;
}
}
}