我后面那段话打的字白打了
如果你要一个1000uS的延时,16位定时器要工作在1模式,中断程序的代码执行时间是50uS,那么,设定16位定时器的溢出就是950
当中断被触发的时候延时开始,执行时间是50uS,中断返回.950uS之后再次触发中断,这个过程不就是精确的1000uS了?
你告诉我,哪里不对了
对于你说的那些问题,是基于你对单片机的不了解产生的
比如,你说的:如果你延时的时间很短,只有8uS,但定时器执行代码可能是50uS的长度,那么肯定是会出现问题的,像这种情况,在8051的8位定时器模式0就是可以自动加载延时时间的,它可以做到只有两条指令,也就是两个时钟周期的中断,对于12MHZ的晶振,所用的时间就是2uS
从你的话里,我认为你并没有真正的编写过一个严谨的定时器延时程序,甚至是中断都不太了解是怎么一回事
编程是一门很严谨的技术,并不是你觉得它会乱或者太麻烦了就不会这样执行了
C语言会由于编译器的不同,编译出来的效率也不同,所以,C语言在精确到几个时钟周期的精确度是很难做到的,所以,你会看到有的人在写C的时候会嵌入汇编,汇编语言可以精确到一个时钟周期 |