1、假设在同一个硬件上做测试,单片机CPU指令周期是一致的。那么 变量i、K,存放在data跟存放在XDATA,读写速度能一样?精确计算有意义吗? 2、假设都存放在data,延迟1ms只需要char类型的变量即可完成,但是,延迟100ms必须16位变量,那么执行时间还能照着公式去套算? 3、假设上述条件都一样,计算好的延迟时间是1ms并且误差1%,打开中断之后,延迟时间变成了5毫秒了。误差500%了,精确计算有意义吗? 4、假设上述条件不影响延迟时间,那么,编译器呢?谁敢说编译器不同的优化等级不影响delay的延迟时间? 5、还有硬件不同的情况,就需要重新计算了。比如晶振频率不同,CPU内核速度不同,STC8H单片机就比STC15快了很多了比89系列快了十几倍了。 所以,不要去精确的计算delay 延迟了多少时间,毕竟单片机的运行情况有很多变数。学会提高CPU的代码执行效率,是很有必要的! “什么是单片机?咱玩的就是时间!” |
wulin 发表于 2020-10-16 14:02 知道了,谢谢你 |
楼主理解错误,delay(5);不是消影时间,是维持当前显示状态的时间。书中消隐代码也是错的,达不到消隐目的。正确写法如下: void display(uchar shi, uchar ge) { P0=0x00; //送段消隐 dula=1; //段码锁存 dula=0; P0=0xfe; //送位码 wela=0; //位码锁存 wela=1; P0=table[shi]; //送十位段码 dula=1; //段码锁存 dula=0; delay(5); //延时5ms,维持当前显示状态 P0=0x00; //送段消隐 dula=1; //段码锁存 dula=0; P0=0xfd; //送位码 wela=1; //位码锁存 wela=0; P0=table[ge]; //送个位段码 dula=1; //位码锁存 dula=0; delay(5); //延时5ms,维持当前显示状态 } |
amandv 发表于 2020-10-15 23:00 不是5x50ms,是5ms,前面理解错了,谢谢。那这个消影时间为什么是5ms而不是其他的数呢? |