定时器初始值该怎么算?

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:57:49
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AT89C2051时钟程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;
; 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用,
; P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H ;程序执行开始地址
LJMP START ;跳到标号START执行
ORG 0003H ;外中断0中断程序入口
RETI ;外中断0中断返回
ORG 000BH ;定时器T0中断程序入口
LJMP INTT0 ;跳至INTTO执行
ORG 0013H ;外中断1中断程序入口
RETI ;外中断1中断返回
ORG 001BH ;定时器T1中断程序入口
LJMP INTT1 ;跳至INTT1执行
ORG 0023H ;串行中断程序入口地址
RETI ;串行中断程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;

当选择定时/计数器作为定时器工作时,计数器的加1信号由振荡器(晶振)的12分频产生,即每经过1个机器周期,计数器增1,直至计数溢出为止。显然,定时器的定时时间与系统的振荡频率有关。
例:
晶振频率12MHz,则计数周期为:
T=1/(12000000Hz)*(1/12)=1us

MOV TMOD,#11H
T0,T1均为16位计数器,计数最大值为65536 。要定时 50MS,需要计数50000个1us(计数周期)
计数初值=最大值 - 计数周期数
(计数初值= 65536 - 50000 = 15536)
15536转换为十六进制即为 3cb0
计数器从3cb0开始计数,计数到65536溢出,产生定时中断。