一、PIC单片机定时器初值计算方法
PIC的指令周期是4个震荡周期,在没有使用分频器的情况下,TMR0 会在每个指令周期信号(等于晶体振荡器产生的主时钟周期的 4 倍)到来时自动加 1。
在配置了分频器的情况下,TMR0 会在每次收到由分频器将指令周期信号分频一个固定倍数后产生的信号时自动加 1。
如果 TMR0在累加计数的过程中,CPU 执行一条往 TMR0 中写入数据的指令,则累加计数器的加 1 操作将被推迟两个指令周期,重新开始计数。这两个指令周期的偏差在用户编写时间精度要求较高的程序时应引起注意,可以通过在每次写入 TMR0 时给一个调整值的方法来解决。 假设的是时钟频率为 4MHz,因此,一个指令周期就是一个微秒(μs)的时间,也就是计数一次时间是1us。
没有分频比定时器的初值计算公式:T0=256-Tc+2 其中TC是想得到的次数。加2的原因是写值的时候要消耗两个指令周期。 如果分频器给了定时器,最好不要再读写TMR0了,不然会照成误差。
假设分频器是16,晶振是4Mhz(指令周期1MHz),则一次由00到FF的时间是16*256=4096us。假设50ms的时间 在中断每次加上4096, 主程序检查是不是超过5000,超过了就减掉5000,这样算是50ms就得到了。
再如:
EG:
晶振8M 需定时25us 分频比1:2
初值(EE)=256 - 25/ (4/8*2) + 14/2 = 256- 25 + 7 = 238
二、时钟周期、机器周期、指令周期的概念及三者之间的关系
时钟周期
时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
总线周期:cpu从内存中读取指令,向内存中存取数据,对外设端口读写数据,执行总线周期,总线周期通常包含4个T状态:T1,T2,T3,T4。所谓一个T状态就是一个时钟周期。它是CPU执行操作的最小时间单位。
机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个基本操作所需的时间。通常一个机器周期包含12个时钟周期,在8051系列单片机。又称CPU的工作周期或基本周期,总线周期。
指令周期:执行一条指令所需要的时间,是从取指令、分析指令到执行完指令所需的全部时间,计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期,所以一个指令周期一般由若干个机器周期组成。指令不同,所需的机器周期也不同,比如一个复杂指令可能需要很多个机器周期才能完成,而每个机器周期又由多个时钟周期完成。