一、定时/计数器终端模式
org 0000h
ljmp bb ;跳转到主程序入口bb处
org 000bh ;定时器0中断响应从这里开始执行
cjne r2,#9d,xx
mov r2,#00h
ljmp xx11
org 001bh ;定时器1中断响应从这里开始执行
ljmp xxx
bb: mov p1,#3fh ;主程序入口处
mov tmod,#05h ;05h=0000 0101B设置T1定时T0计数模式,0定时,1计数
;00是13位二进制计数模式0,高4位控制T1
;01是16位二进制计数模式1,低4位控制T0
mov dptr,#0300h ;查表入口地址存放
mov r2,#00h
setb et0 ;和setb 0afh效果相同
setb ea ;和setb 0abh相同
setb et1 ;和setb 0a9h相同
setb tr0
setb tr1
mov th0,#0ffh ;计数器0的计数初值的高8位
mov tl0,#0fdh ;计数器0的计数初值的低8位(第一次开始计数初值)
sjmp $ ;程序执行时,原地踏步等待语句,在没有中断请求时,
;在此位置原地踏步计数定时计数,有请求时跳到中断入口执行中断
xx: inc r2
xx11:mov th0,#0ffh ;计数器0的计数初值的高8位
mov tl0,#0fdh ;计数器0的计数初值的低8位(第二次以后开始计数初值)
mov a,r2
movc a,@a+dptr
cpl p2.5
mov p1,a
reti
xxx: mov th1,#00h ;计数器1的计数初值的高8位
mov tl1,#00h ;计数器1的计数初值的低8位
cpl p2.0
reti
org 0300h ;七段显示吗表格入口
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end
二、定时/计数器查询模式
org 0000h
ljmp bb ;跳转到主程序入口bb处
bb: mov tmod,#15h;主程序入口处
;设置T1定时模式,工作在计数方式0,设置T0计数模
;式工作在计数方式1
mov dptr,#0300h ;查表入口地址存放
clr et0 ;关定时/计数器0中断
setb ea ;和setb 0abh相同,开总中断开关
setb et1 ;和setb 0a9h相同,开定时/计数器1中断
setb tr0
setb tr1
mov th0,#0ffh ;计数器0的计数初值的高8位
mov tl0,#0ffh ;计数器0的计数初值的低8位(第一次开始计数初值)
CX:JBC TF0, xx;查询定时/计数器0溢出标志位,有溢出跳转xx执行
JBC TF1, xxx ;查询定时/计数器1溢出标志位,有溢出跳转xxx执行
sjmp CX ;无溢出,跳CX继续查询
;溢出是在THi和TLi计数满,超过FFFFH时,TFi被自动置1,中断和查询都是根
;据这个标志是否为1来响应的。
xx: mov th0,#0ffh ;计数器0的计数初值的高8位
mov tl0,#0ffh;计数器0的计数初值的低8位(第二次以后开始计数初值)
cjne r2,#10d,xx11
mov r2,#00h
xx11: mov a,r2
movc a,@a+dptr ;查表,用七段码显示计数数字
cpl p2.5 ;并让P2.5上的LED有闪烁效果
mov p1,a ;显示数字效果从P1口输出
inc r2 ;加1计数
ret
xxx: mov th1,#00h ;计数器1的计数初值的高8位
mov tl1,#00h ;计数器1的计数初值的低8位
cpl p2.0 ;t0定时模式,定时到让P2.0取反,LED达到闪烁效果
ret
org 0300h ;七段显示吗表格入口
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end