作者theend1109 (工作真难找)
看板ASM
标题Re: [问题] [PIC] timers.h 中的 WriteTimer涵数
时间Sat Dec 20 12:44:48 2008
自己最近拿个范例来试WriteTimer()函数
试的结果,(a数-b数)自己感觉的定义
a数-b後的结果,会存在TRM1H(较高的八元位)跟TRM1L(较低的八位元)中
当然,如果只是设定为八位元的Timer,结果只会存在TRM1L里
这是我从范例里观察的心得
我用的范例是这样
EX1:如果按了四次SW开关,Timer0中断,执行中断程序里的程式。
这个范例WriteTimer0里的a-b是为256-4
把256-push_no,push_no为按sw开关的次数
以这范例来看,push_no=4,所以相减结果为252,换算成16进位为0xFC
因为此范例是用8位元的Timer0,所以只丢TMR0L=0xFC
因为Timer的中断条件是当TMRxL(16位元时是TMRxH:TMRxL)=0时发生中断
所以当SW开关按了4次,TMR0L累加了4次,TMR0L=0因此发生中断
如果题目改5次,相减结果为0xFB,所以TMR0L就要多累加一次才可中断
EX2:每0.5秒让LED程式二进制累加动作。
这个范例WriteTimer里的a-b是为65536-16384
相减结果为49152,换算成16进位为0xC000
此范例是用16位元的Timer1,所以是把结果丢到TMR1H:TMR1L=0xC000
因为Timer的中断条件是当是TMRxH:TMRxL=0x0000时发生中断
从书上所给的资料
内部的震荡频率在TMR1H=0xC0时刚好是0.5秒,=0x80时为1秒
而我自己试着直接给WriteTimer 0xC0跟0x80
结果执行起来是一样的(还是差异我看不出来?)
但为何要用(a数-b数),从EX2可能比较看不出来用意
但从EX1可以知道,这样的写法就可以省去计算TRMxH:TRMxL要从多少开始
中断频率只要事先算好b数的变化值为多少(EX1中,每一个push_no代表按一次)
那之後需要改变中断频率就容易多了
以上是我测试范例所得到的心得,但不知道是否函数真正的意义是不是这样。
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.100.26
1F:→ theend1109:刚找到MCC18的函数库文件,是像我说那样。 12/20 13:28