贴程序先:
void Sent0_0(void)
{
PD_ODR_bit.ODR2=0;
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
PD_ODR_bit.ODR2=1;
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
}
void main()
{
SCLK_Config();
IO_init();
Sent0_0();
Sent0_0();
Sent0_0();
Sent0_0();
Sent0_0();
Sent0_0();
Sent0_0();
}
我想问的是:为什么同样的延时函数,像上面那样叠加起来用,在示波器上看到的波形(注:不是看负脉宽,负脉宽没问题)——正脉宽有些不一样。比如调用第一个延时:6.60us,第二个是:6.60us,第三个是6.5us,第四个是6.2us。为什么会这样?
虽然st芯片程序是流水线设计,一个CALL指令就要6个周期,一个RET就要4个周期,但是我按照汇编指令条数数了,就是延时不对呀。求大神不吝赐教。。。。。
本人做的延时是us+ns级别,晶振13.56M。
|