单片机定时计数器

来源:百度知道 编辑:UC知道 时间:2024/06/14 12:41:30
;********************************************************************
include "ht46r64.inc"
FSYS EQU 4000000
PSC EQU 128

;********************************************************************
var .section 'data'
tovr_cnt db ? ;定时器中断计数器

;********************************************************************

maincode .section 'code'
;定义中断矢量表
ORG 00h
JMP main

ORG 04h
RETI

ORG 08h
RETI

ORG 0Ch
JMP int_tmr0

ORG 10h
RETI

ORG 14h
RETI

ORG 18h
RETI

ORG 20h

;*********************************************************************

main:
MOV a,FSYS/PSC/2/256
MOV tovr_cnt,a ;设置定时器中断计数器初值
CLR TMR0 ;设置定时器0的预置寄存器初值
SET T0PSC0
SET T0PSC1
SET T0PSC2

既然你读得懂,那就应该明白的,至少离明白很近了,呵呵。
运行的过程大体上是这样的:上电复位后单片机从main初开始执行,主要的定时计数器以及中断等等的初始化,然后就反复执行jmp $这一条指令(这是个死循环)。
之前在执行了“SET T0ON ;定时器0开”以后,定时计数器硬件就开始工作了:每隔12个时钟周期就+1。
一旦计数器+1产生溢出(也就是丢失进位),就会引发定时计数器中断请求,单片机响应这个请求,由硬件自动转移到int_tmr0处执行中断服务程序(从前述死循环处被中断),执行完RETI指令后会自动返回(还是返回到那个死循环处)。上述过程会不断重复的。