一个延时函数:
void delay_8us(unsigned int us)
{
while(--us);
}
生成汇编
C:0x0023 7FF4 MOV R7,#0xF4
C:0x0025 7E01 MOV R6,#0x01
C:0x0027 12003F LCALL delay_8us(C:003F)
C:0x003F EF MOV A,R7
C:0x0040 1F DEC R7
C:0x0041 7001 JNZ C:0044
C:0x0043 1E DEC R6
C:0x0044 14 DEC A
C:0x0045 4E ORL A,R6
C:0x0046 70F7 JNZ delay_8us(C:003F)
我算的是 9us*R6*R7+R6+6us 但如果我要延时1ms 我该怎么赋值给us啊
不用算 用大概就可以了 开始 赋值us=500 算出时间/500 大概就是us=1时的延时时间! 可以吧
对于汇编计算周期我还很不会
如
C:0x003D DFFE DJNZ R7,delay_8us(C:003D)
如果R7=100 那么延时周期是不是 2*R7us即是200us 啊(12MHZ晶振)
找到一个小工具 它的延时算法是这样的
WAIT: MOV BYT_DLY,#X
LCALL DELAY1
...
DELAY1: DJNZ BYT_DLY,DELAY1
RET
T=[2X + 4] * (12 / Fosc)
那么我这个"
C:0x003D DFFE DJNZ R7,delay_8us(C:003D)
如果R7=100 那么延时周期是不是 2*R7us即是200us 啊(12MHZ晶振)
"就对了 解决了