如果是用汇编语言的话,是可以做到精准延时的。当然首先要有一个精准的时钟,也即是晶振要准确,比如使用精准的12M晶振12T模式的51单片机延时1毫秒,程序如下:
DELAY1MS:
MOV R3,#249 ;1
DJNZ R3,$ ;2*249
MOV R3,#249 ;1
DJNZ R3,$ ;2*249
RET ;2
延时时间为:1+2*249+1+2*249+2=1000T,这里使用12M晶振,T=1微秒,所以总共延时1000微秒也即是1毫秒。如果要延时更多时间,可以采用循环方式来实现。当然在计算延时时间时要考虑到使用的单片机类型和型号,比如STC89C51是6T,DS80320是4T,STC12C5A60S2是12T,这些因数一定要考虑进去才行。