关于定时器时钟(以定时/计数器0为例,比如10ms一次中断):
1、影响定时器的因素主要有TR0、TH0、TL0、TMOD,主程序运行时只要不改动上述控制信息,_nop_()不会对定时精度产生影响,因为定时计数是由单片机内部的硬件完成的。
2、进入中断服务程序后一般的做法是马上重新装载THx和TLx,这样定时计数仍然在后台运行,中断程序执行时间的长短不会影响每次中断的时间间隔,用几个_nop()_无所谓。反之,由于中断服务程序中一般都会有判断跳转等语句,每次执行时间的长短有可能不同,如果选择在退出中断前再重装则实际上每次中断的时间间隔可能是不一样的,这就会产生误差。
3、所以正常情况下中断服务程序一般尽可能简洁,只是设定标志,比如最多只占用500us时间,这样可以留出足够的时间在主循环中处理剩下的大量的运算。
关于锁存器
一般单片机外围电路使用的常规芯片基本上都是ns级的,而单片机对外部设备的访问时序是us级的。你可以看一下锁存器的时序,具体的方式我记不清了,但是单片机端口信号的输出肯定满足锁存器锁存所需的时间要求,所以你不加时间也可以。你的这种认真很好,在使用新的芯片是一定要关注时序,留有余量,否则将来出了问题查起来无从下手
厄,好像没这个必要吧,你给一条脉冲让锁存器打开,然后数据进去,再给个脉冲让所存器锁存,这样就好了我都是这么干的。你用定时器控制时间的话跟锁存器没影响,定时器是后台运行程序。你锁存器延时不会对定时器定时造成影响吧,除非你要在定时器中断服务程序里面调用延时程序。
通常情况下,锁存器的速度会比单片机的速度快.
参考你的锁存器类型,以及你MCU的速度,决定是否延时.
个人认为通常情况下不用加.
你执行任何指令都需要时间,如果时间是1us相对于1S的话完全可以忽略不计!