
C语言for循环嵌套延时问题
我在程序中有IIC读写操作大概流程是:初始化->写IIC->延时->读IIC现在的问题是中间的延时函数会导致读出的数据不对,写操作正常如果把下面程序中“unsignedc...
我在程序中有IIC读写操作
大概流程是:
初始化->写IIC->延时->读IIC
现在的问题是中间的延时函数会导致读出的数据不对,写操作正常
如果把下面程序中“unsigned char x;”改成“unsigned int x;”,IIC读写都是正常的
/******************************************************************
写IIC以后至读IIC之间的延时函数;写完IIC以后不能立即读IIC,应当延时一段时间再读
******************************************************************/
void Delay_ms(unsigned int num_ms)
{
unsigned int i;
unsigned char x;
for(i=0;i<num_ms;i++)
{
for(x=0;x<120;x++);
}
} 展开
大概流程是:
初始化->写IIC->延时->读IIC
现在的问题是中间的延时函数会导致读出的数据不对,写操作正常
如果把下面程序中“unsigned char x;”改成“unsigned int x;”,IIC读写都是正常的
/******************************************************************
写IIC以后至读IIC之间的延时函数;写完IIC以后不能立即读IIC,应当延时一段时间再读
******************************************************************/
void Delay_ms(unsigned int num_ms)
{
unsigned int i;
unsigned char x;
for(i=0;i<num_ms;i++)
{
for(x=0;x<120;x++);
}
} 展开
2个回答
展开全部
这说明是你的延时时间不足,造成的错误。
这个延时函数是个指令延时,指令多了,延时时间就长。
for(x=0;x<120;x++) 这个循环里,每一次循环,都会有一个 加一 和 判断跳转指令。
X为char 时是单字节,这些指令都是一条指令,当改为 int时 x就成了双字节了,这些操作就需要多几条指令来完成。这就相当于,每次循环的时间加长了。
这个延时函数是个指令延时,指令多了,延时时间就长。
for(x=0;x<120;x++) 这个循环里,每一次循环,都会有一个 加一 和 判断跳转指令。
X为char 时是单字节,这些指令都是一条指令,当改为 int时 x就成了双字节了,这些操作就需要多几条指令来完成。这就相当于,每次循环的时间加长了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询