1.时钟源选择 1:外部时钟源,从xtal1输入 2:看门狗振荡器(400kHz) 3: 内部RC振荡器(7.3728MHz) 4:外部晶振xtal1,xtal2 。(最常用11.0592M, 32.768K)此时钟源也可用作实时时钟RTC的时钟源
2.经过DIVM寄存器分频 DIVM=n fcclk=fosc/2*n
3.把cclk转换成机器周期(指令执行时间以机器周期为单位) 对LPC900系列,(每个机器周期占2个CCLK周期), 若时钟源选内部rc,DIVM=0, 则机器周期频率fm=fcclk/2=7.3728/2=3.6864MHz, 每个机器周期所占的时间 = 1/fm 对PIC16F630, 若时钟源选内部RC, 则机器周期的频率fm=fcclk=4MHz, 每个机器周期所占的时间 = 1/fm
4.算出指令的机器周期数CX, 1/fm * CX = tn(延时时间), 则 CX=fm * tn 如延时时间tn=10us(us单位和MHz抵消),则 fm*tn=36.864~37
5.根据指令的机器周期数算出寄存器的值 nop 1 djnz rn,ln 2 | mov rn,#xx 1 |> 指令周期数*寄存器初值 = fm*tn(机器周期频率 * 延时时间) !!!! inc rn 1 /
总结如下: ;1/机器周期频率 * 机器周期数 = 时间 ====> 机器周期数 = 时间 * 机器周期频率 ====> 指令周期数 * 寄存器初值 = 时间 * 机器周期频率 ;LPC系列的延时, 指令周期数 * 寄存器初值 = 3.6864 * 延时时间 ;LPC系列的定时模式1, 65536 - 定时器初值 = 3.6864 * 定时时间
;------- 10ms, 此部分在中断向量之间,注意空间 ------------ delay_10: mov r6,#81 ;60 delay_10_1: mov r7,#226 ;238 djnz r7,$ ;(1+226*2+2)*81+1 = 3.6864*tn, tn=9997us=10ms djnz r6,delay_10_1 ret
|