51单片机的定时/计数器(CTC)及应用

发布时间:2023-12-17
51单片机内有两个定时/计数器,称为t0和t1,是16位的,所以它们各由两个8位的特殊功能寄存器(sfr)组成,即t0=th0+tl0,t1=th1+tl1,默认情况下,通电后它们是不启动的。
一、定时/计数器的应用
1.计数功能:
2.定时功能:
二、定时/计数器的工作原理
定时/计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值产生溢出,可查询判断此溢出;也可申请中断。
定时/计数器的结构示意图
2.定时器的控制、模式寄存器
tmod定时器方式寄存器(89h) tcon定时器控制/状态寄存器(88h)
定时实验(采用查询法) 如图,p0口接了8只发光管,高电平亮。用定时器实现50ms延时,轮流点亮。(注:实验时用短路帽短路jmp2的2-3脚和jmp3的2-3脚)
参考程序:
org 0000h
main: mov tmod,#00000001b ;选t0,定时,方式1
mov th0,#3ch
mov tl0,#0b0h ;预置初值15536
setb tr0 ;启动t0
mov a,#00000001b ;设置显示模式
loop: mov p0,a
rl a
jnb tf0,$ ;等候50ms的溢出
clr tf0
mov th0,#3ch
mov tl0,#0b0h ;预置初值15536
sjmp loop
思考题:⑴ 若定时30ms,怎样修改程序?
⑵ 若定时1秒,怎样修改程序?
⑶ 若定时任意长时间,怎样修改程序?
计数实验 如图,计数器t0的计数引脚(p3.4脚)接有一开关,每按一次开关,理论上计数器t0就会计一个数(若考虑抖动问题,实际上可能会计多个数),读出该数送p0口,通过p0口的发光管的亮灭情况,读出计数值(设t0计数、用方式2)。
参考程序:
org 0000h
main: mov p0,#0
mov tmod,#00000110b ;选t0,计数,方式2
setb tr0 ;启动t0
loop: mov a,tl0 ;读出t0的低8位值送a寄存器
mov p0,a ;送p0口显示
sjmp loop
思考题:⑴ 若计数100,然后声光指示,怎样修改程序?
⑵ 若计数500,然后声光指示,怎样修改程序?
定时、计数联合实验(采用查询法) 任务:定时器t0产生2000hz方波信号,从p3.6脚输出,再从t1的计数脚p3.5引入;t0还产生1秒的定时信号,定期打开和关闭t1计数器。打开t1时,方波信号输入并计数;关闭t1时,读出t1的值送p0口和p1口显示(注:p1口的值是反相的,即低电平亮,高电平灭。当然可以取反后送p1口)。
参考程序:
;*********************************************************
;************* 数字频率计程序 ***************
;*********************************************************
;任务:利用定时器t0定时,产生2khz方波,从p3.6脚输出,
;并送p3.5脚(t1的计数脚)进行计数;t0还产生1秒定时,不断地
;打开和关闭t1计数器,并将读取到的频率值送p0口和p1口显示。
;分析:2khz方波,设占空比为50%,则高低电平的时间各为250us,
;可用t0定时,选方式2,自动重新装载初始值6。t1计数,方式1。
;硬件上,将p3.6脚与p3.5脚相连(注意从排针上相连或短路帽短接)即可。
org 0000h
ljmp main
;*********************************************************
;主程序
org 0030h
main: mov p0,#0
mov p1,#0ffh
mov p3,#0ffh ;初始化,关闭所有发光管
mov r3,#0
mov r4,#0 ;r3-r4组成1秒计数器
mov tmod,#01010010b ;t1计数,方式1;
;t0定时,方式2。
mov th0,#6
mov tl0,#6 ;预置初始值6,准备计数250
mov th1,#0
mov tl1,#0
setb tr0 ;启动定时器t0
main_disp: jnb tf0, main_disp
clr tf0
cpl p3.6 ;输出方波
inc r3
cjne r3,#0,next
inc r4
sjmp main_disp
next: cjne r3,#0a0h,main_disp
cjne r4,#0fh,main_disp ;判断够4000次计数吗?
;因为中断4000次为1秒。
mov r3,#0
mov r4,#0 ;1秒计数器清0
cpl tr1 ;启动或关闭t1计数器
jb tr1,main_disp ;若t1启动则返回,否则去读取频率值
mov a,tl1
mov p0,a ;将频率值的低8位送p0口显示
mov a,th1
cpl a ;考虑p1口是低电平点亮,故取反
mov p1,a ; 将频率值的高8位送p1口显示
mov tl1,#0
mov th1,#0 ;t1计数器清0
ljmp main_disp
end
;注:以上送p1和p0口的数据为16进制。经实验,得到的16进制值为07h、0d0h。
;***************************************************************
上一个:水仙叶片上出现红褐色的大斑怎么办
下一个:宿根花卉栽种的注意事项

office你的许可证不是正版怎么解决(office 你的许可证不是正版)
诺基亚强制恢复出厂设置无限重启(诺基亚怎么进入恢复模式)
配电变压器绝缘电阻的测量内容是什么?
电力变压器储油柜安装注意事项
铝电解电容是如何制作的呢?
花卉养殖中的家养芦荟的简单步骤
旺诠薄膜RTX031402BDTP,0603 14KΩ ±0.1% 1/10W贴片电阻
工厂供电的设计
智能家居与装修关系
开春适合种什么绿色植物