- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
定时计数器实验-单片机
单
片
机
实
验
报
告
实验五 定时/计数器实验
实验目的
学习8051内部定时/计数器的工作原理及编程方法;
掌握定时/计数器外扩中断的方法。
实验原理
8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。
T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。
定时/计数器的结构:
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
计数器初值的计算:
设计数器的最大计数值为M(根据不同工作方式,M可以是213、216或28),则计算初值X的公式如下:
X=M-要求的计数值(十六进制数)
定时器初值的计算:
在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。因此,定时器定时初值计算公式:
X=M-(要求的定时值)/(12/fosc)
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
工作方式寄存器TMOD:
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四 位用于T0,高四位用于T1。其格式如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。
M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
控制寄存器TCON
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
实验电路图
三部分电路图:
第二部分电路图(加入一个脉冲计数的开关):
实验设备
微型计算机、单片机仿真器、实验仪、示波器(各一台);
实验连线(若干)。
实验内容
*由于汇编语言程序中已经做了相应的注释,C语言的编程原理与之相同不再做重复注释,请见谅。
实验例程
使8个发光二极管点亮,点亮时间间隔一秒,要求用定时器中断方 式产生延时。
汇编语言代码:
ORG 0000H
AJMP START
ORG 000BH
AJMP T0INT ;定时器T0中断入口
ORG 0030H
START:
MOV SP,#60H
MOV TMOD,#01H
MOV TL0,#0B0H ;晶振为12兆赫资时,50ms溢出一次
MOV TH0,#3CH
SETB ET0
SETB EA
SETB TR0 ;启动定时器
MOV A,#0FEH
MOV R1,#20 ;定时器溢出20次为1秒
MOV P1,A
LOOP:
CJNE R1,#0,LOOP
MOV R1,#20
DEC A
MOV P1,A ;发光二极管低电平点亮,因此为记数加显示
AJMP LOOP
T0INT:
MOV TH0,#3CH ;定时器重新初始化
MOV TL0,#0B0H
DEC R1
RETI ;中断返回
END
C语言程序代码:
#includereg51.h
#define
文档评论(0)