本帖最后由 lvben5d 于 2019-8-7 09:23 编辑
本人使用GD32F130R8T6作为MCU控制单色LED,当Keil527,采用complier 5 -o1
for(n=0; n<32; n++)
{
LED_CLK_L;
delay_us(2);
if(len) LED_DATA_H;
else LED_DATA_L;
delay_us(5);
LED_CLK_H;
delay_us(5);
}
找到问题,keil5 c6编译 会将for循环内的 ; 号 识别非执行一步。
void delay_us(unsigned char n)
{
unsigned short int m;
for(; n>0; n--)
{
for(u=0; u<US_UPPER; u++)
;
}
}
为了在不同晶振下,做简单的软件延迟,改为如下。 比如晶振为36MHZ,那么当ctr=1的时候,下面的循环最好执行36条指令左右,就差不多是1us.
void delay_us(unsigned char ctr)
{
unsigned char nb;
volatile unsigned char nop=1;
for(; ctr>0; ctr--)
{
for(nb=0; nb<US_UPPER; nb++)
nop++;
}
}
|