实例讲解:如果我们想隔0.5S输出个高电平,0.5S输出个低电平那要怎么做呢?
首先:先选择合适的时钟频率和预分频。这个只要满足需要的延时时间就行了。这里我们选择时钟为4MHZ,预分频为1:8;
然后:设置TMR1定时器的初始值,初始值的作用即是设置TMR1的溢出时间,(设置溢出时间的原因是)
比如在初始值为0的情况下,定时器需要经过524288us的时间才溢出,
如果初始值为3036,定时器就在这个值的基础上一直加上去,需要的时间为0.5s才溢出。
这个的时间是怎么计算出来的呢,最长的定时时间-需要定时的时间=初始值的时间。524288us-500000us=24288us.
初始值的时间/预分频器溢出的周期=初始值 24288us/8us=3036.将其转换为十六进制为0x0BDC将高位存入TMR1H寄存器,将低位存入TMR1L寄存器。
程序如下: TMR1H=0x0B;
TMR1L=0xDC;
指令周期x预分频比=预分频器溢出的周期 1usX8=8us
时钟周期x4=指令周期 0.25usX4=1us.详见上图。
这只是我个人理解方式有兴趣的朋友可以看看:
我们可以将分频器,寄存器,还有溢出中断标志这几个名词完全不一样的东西理解成同一个22位寄存器。
下面是一个由4分频,8分频TMR1L,TMR1H,TMR1IF组成的一个22位寄存器。定时就是该寄存器对时钟周期的计数。
该表格的值是TMR1H刚溢出TMR1IF为1时的数值。二进制数10000,0000,0000,0000,0000,0代表的十进制为2097152,2097152×0.25us=524288us
初始化设置 T1CON:TIMER1控制寄存器
我重点要设置就是设置预分频比,和开启TMR1其他默认为0就行了。T1CKPS<1:0>设置为11,TMR1ON设置为1,。
所以设置 T1CON = 0x31; //enable TIMER1 ,1:8
|