
HT47R20
计数器
A
和定时/计数器
B
之间产生冲突 应在定时/计数器关闭的情况下 ½用指令
MOV
访问寄存器
TMRAH TMRAL TMRBH TMRBL
TMRC
为定时/计数器控制寄存器 用来定义定时/计数器的某些选项 定时/计数器的控制寄存器可以
定义定时/计数器的工½模式 计数的允许或禁止以及计数的触发沿
名称
TE
吨
½
0~2
3
4
功½
未定义 读取时为
0
定义定时/计数器
TMR
½用沿(0=上升沿½用
1=下降
沿½用)
允许/禁止定时器计数(0=禁止
1=允许)
定义操½方式(TN2,TN1,TN0)
000=定时器模式(系统时钟)
001=定时器模式(系统时钟/4)
010=定时器模式(RTC
输出)
011=A/D
时钟模式(由
ADCR
寄存器决定
RC
振荡)
100=计数器模式(外部时钟)
101=脉冲½度测量模式(系统时钟/4)
110=未定义
111=未定义
TMRC
寄存器
TN0
TN1
TN2
5
6
7
写入定时器
B
就可以将定时/计数器的初始值放到预½寄存器中 而读取定时器
A
就可以得到定时/计
数器的内容 定时器
B
是定时/计数器的初始值预½寄存器
TN0 TN1
和
TN2
用来定义操½模式 计数器模式是用来计数外部事件 这表示时钟来源为外部
TMR
引脚的输入
A / D
时钟模式是用来计数外部
A / D
时钟
RC
振荡模式由寄存器
ADCR
来决定 定时器模式
则½为普通定时器½用 其时钟来源为内部各种时钟 最后 脉冲½度测量模式½够对外部引脚
TMR
的
高电平或½电平的持续时间进行计数 计数的时钟来源为指令时钟
在计数器
A / D
时钟或内部定时器模式下 一旦定时/计数器开始计数即从定时/计数器的现行内容
( TMRAH
和
TMRAL )开始计数至FFFFH
若发生溢出 计数器即从定时/计数器预½寄存器(TMRBH 和
TMRBL)重新装入加½½值
并同时½½中断请求标志(TF
INTC1
的第四½)
在脉冲½度测量模式下 ½
吨
和
TE
½的值½为
1
时 如果
TMR
收到由高电平到½电平(如果
TE
½的值为
0
则为由½电平到高电平)的½变信号 计数器就会开始数 直到
TMR
引脚回到原来的电平
为止 并且会将
吨
½清零 测量的结果会依然存放在定时/计数器之中 也就是说一次只½计数一次脉
冲的½度 而½
吨
½重新½½为
1
只要
TMR
收到跳变脉冲 测量就会再次执行下去 在脉冲测量
模式中 定时/计数器并不会根据逻辑电压来计数 其根据的标准为信号的½变沿 一旦发生计数溢出 计
数器会从定时/计数器加½½寄存器重新装入初值 同时还会发出中断请求 这种情况和定时和计数这两个模
式一样
若欲启动计数器运行 只要将定时器启动½(TON
TMRC
的第四½)的值设为
1
即可 在脉冲½度
测量模式中
吨
½在测量周期完成后 会自动被清除 ½在其它三种模式中
吨
½只可以用指令
除 定时/计数器的溢出可½为唤醒的信号或由掩膜选项设定为
PA
的
PFD
输出 不管是½种操½模式 只
要将
0
写入
ETI
½中即可将相对的中断服务禁止 ½选择
PFD
功½时 执行
CLR PA.3
指令可以允
许
PFD
输出 而执行
SET PA.3
指令则禁止
PFD
输出 并且
PA.3
输出为½电平
若在定时/计数器关闭的情况下 将数据写入定时/计数器的预½寄存器同时也会将该数据重新½½入定
时/计数器之中 ½若定时/计数器已经开启 写入定时/计数器的数据只会保存在定时/计数器的预½寄存器
中 这时定时/计数器并不会马上被改变而会继续计数下去 直到发生溢出为止 此时再由加½½寄存器装入
新的初始值
一旦定时/计数器(读取
TMRAH )的数据被读取
会将时钟禁止 以避免发生错误 将时钟禁止可½会
导致计数错误 所以程序编写工程师必须考虑清楚才行
我们强烈建议在打开定时/计数器前先将要加½½的数据写入到
TMRBL TMRBH TMRAL
和
TMRAH
中去 因为在系统初始化后
TMRBL TMRBH TMRAL
和
TMRAH
的值是未知的
如果定时/计数器是打开的 那么
TMRBL TMRBH TMRAL
和
TMRAH
最½不要进行读写操½ 只
有在定时/计数器关闭并且½用
MOV
指令时 才½对这四个寄存器进行读写操½
修订版1.10
16
2002-07-25