项目4 简易秒表的设计与制作_第1页
项目4 简易秒表的设计与制作_第2页
项目4 简易秒表的设计与制作_第3页
项目4 简易秒表的设计与制作_第4页
项目4 简易秒表的设计与制作_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机系统设计与制作项目4秒表的设计与制作目录

知识链接任务实施一、任务分析二、安装与调试一、定时器/计数器的基本概念及其应用目录

知识链接任务实施一、任务分析二、安装与调试一、定时器/计数器的基本概念及其应用1、作用和功能进行精确地定时和计数。定时器:单片机内部稳定的信号源计数。计数器:用于记录单片机外部发生的事件。作用广泛应用于工业控制和检测中,可实现定时、延时、频率测量、信号检测等功能。功能2、内部结构及工作原理MCS-51单片机内部有两个16位的可编程定时器/计数器T0(定时器0)和T1(定时器1),分别由两个8位的RAM单元组成,最大计数值为65536,超过65536时,定时器/计数器产生溢出。内部结构加法计数器TMODTCON定时器/计数器控制寄存器,控制T0、T1的启动和停止及设置溢出标志。定时器/计数器工作方式寄存器,确定工作方式和功能。16位,高8位和低8位组成。2、内部结构及工作原理图5.1

T0、T1内部结构示意图TL02、内部结构及工作原理TH010000000000000001111111111111111TF0011设定初值2启动计数送入计数脉冲3计数溢出产生中断信号2、内部结构及工作原理定时工作方式时,计数脉冲来自系统时钟振荡器输出十二分频信号。计数周期即为单片机的一个机器周期。调整计数器初值,即调整了定时时间。定时工作方式2、内部结构及工作原理相关数值计算计数值N=溢出值(最大计数值)-计数初值X定时时间τ=机器周期T×计数值N计数频率ƒc=时钟频率ƒosc/122n(溢出值)2n-1(全1)……计数初值X……0计数值N例ƒosc=12MHz时,T=1/[12×106×(1/12)]=1μs若计数值为N,则定时Nμs。(计数值N=定时时间τ/机器周期T)2、内部结构及工作原理计数工作方式时,计数脉冲来自输入引脚T0(P3.4)和T1(P3.5)的外部信号,外部脉冲的下降沿触发计数,计数器加1。CPU能够检测到的外部脉冲的最高频率为系统时钟频率的1/24。外部输入信号的高电平与低电平的持续时间须在一个机器周期以上。计数工作方式3、定时器/计数器的控制寄存器位D7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M089H定时器T1方式字段定时器T0方式字段表5.2

TMOD位格式定义TMOD(Timer/CounterModeControlRegister)定时器工作方式寄存器。用于控制T0和T1的工作方式,低4位用于T0,高4位用于T1。TMOD其位格式定义如表5.2所示。(1)TMOD3、定时器/计数器的控制寄存器位D7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M089H定时器T1方式字段定时器T0方式字段GATE:选通控制位。GATE=0,软件对TR0(或TR1)置1时可启动定时器。GATE=1,在INT0(或INT1)引脚为1,且软件对TR0(或TR1)置1时启动定时器工作。C/T:定时器/计数器方式选择位。C/T=0,定时工作方式;C/T=1,计数工作方式。M1、M0:工作方式控制位,可构成4种工作方式。注意:TMOD所有位复位后清零。TMOD不能位寻址,只能以字节方式工作。3、定时器/计数器的控制寄存器M1M0工作方式说明最大计数值00013位定时器/计数器213=819201116位定时器/计数器216=65536102自动重装初值8位定时器/计数器28=256113T0:分成两个8位计数器T1:停止计数28=256表5.3工作方式选择3、定时器/计数器的控制寄存器与定时器计数器相关的是TCON的高四位,TF1、TF0为溢出中断标志位,TR1、TR0为定时器/计数器运行控制位。请复习任务4相关内容(见教材P74)。(2)TMOD位D7D6D5D4D3D2D1D0TCONTF1TR1TF0TR0IE1IT1IE0IT088H8FH8EH8DH8CH8BH8AH89H88H表4.2TCON位格式定义4、定时器/计数器的工作方式用户通过指令把工作方式写入TMOD,选择定时器/计数器的功能和工作方式,然后将计数初值写入THx和TLx中控制定时或计数长度,再通过选通控制位的置1或清0来启动或停止定时器/计数器工作。查询TH、TL和TCON的内容,可以判断定时器的状态。4、定时器/计数器的工作方式

(1)工作方式0TLx———×××××THx××××××××13位计数器,由TLx的低5位(高3位未用)和THx的8位组成。213=8192最大计数值1~8192计数范围1~8192μs(fosc=12MHz)定时范围4、定时器/计数器的工作方式

(2)工作方式1TLx××××××××THx××××××××16位计数器,由TLx的8位和THx的8位组成。216=65536最大计数值1~65536计数范围1~65536μs(fosc=12MHz)定时范围4、定时器/计数器的工作方式

(3)工作方式2TLx××××××××THx××××××××可自动重装初值的8位计数器,仅TLx用于计数,THx用于保存计数初值。28=256最大计数值1~256计数范围1~256μs(fosc=12MHz)定时范围4、定时器/计数器的工作方式

(3)工作方式3TL0××××××××TH0××××××××定时器T0被分解成两个独立的8位计数器TL0和TH0,两个定时器的最大计数值均为256。此时,定时器T1的中断标志位TF1和运行控制位TR1被TH0占用,不能中断,只能将溢出送给串行口。T1不能使用工作方式3。28=256最大计数值1~256计数范围1~256μs(fosc=12MHz)定时范围5、定时器/计数器的应用

(1)定时器/计数器的编程确定工作方式计算计数初值开放中断根据功能,确定计数还是定时工作方式,将工作方式控制字写入TMOD。根据定时时间或计数要求计算计数初值,并将其写入TLx和THx。若需要使用中断,ETx、EA置1,开放定时器/计数器中断和CPU中断。启动计数GATE=0时,TRx置1启动计数;GATE=1时,除TRx置1外,还必须在外中断引脚处加上相应的电平值才能启动。5、定时器/计数器的应用利用中断系统,计数溢出后向CPU发出中断请求,将溢出后需要执行的操作放入定时器/计数器对应的中断服务程序中执行。采用中断方式可以提高CPU的效率。在整个计数过程中,通过指令不断查询TF0或TF1的状态来判断计数是否溢出。这种方式编程较简单,但是需要占用大量CPU时间,使得CPU效率降低。编程方式查询中断如果在某些应用中不需要进行定时或计数,则T0和T1可作为外部中断请求使用。此时将定时器/计数器设置成计数方式,计数初值设为最大值。5、定时器/计数器的应用查询的编程方式小丁同学,你的作业还没做完吗?每隔10分钟……5、定时器/计数器的应用中断的编程方式报告老师,我作业做完了!5、定时器/计数器的应用

(2)应用实例如所示,P1口接有8个发光二极管,编程使8个发光二极管轮流点亮。每个发光二极管亮100ms,设晶振频率fosc=6MHz。例5.1①确定工作方式

用T1完成100ms定时时间,使P1初始状态为01H,每隔100ms左移一次。

当晶振频率fosc=6MHz时,机器周期Tcy=2μs,则:

计数值N=T/Tcy=100ms/2μs=50000

因此采用工作方式1,工作方式字TMOD=10H,即: TMOD.0~TMOD.3:因T0不用,可取任意值,此处取0值; TMOD.4、TMOD.5:M1M0=01,T1工作在方式1; TMOD.6:C/T=0,T1为定时方式; TMOD.7:GATE=0,计数不受INT1脚控制。5、定时器/计数器的应用②计算计数初值

X=216-N=65536-50000=15536=3CB0H

则: TH1=3CH,TL1=0B0H。③C源程序(查询方法)#include"reg51.h"voidmain(){ P1=0x01;

//点亮第一个LED TMOD=0x10;

//T1工作于方式1 TR1=1;

//启动T1计数

while(1) { TH1=0x3c; //装载计数初值

TL1=0xb0;

//TH1=(65536-50000)/256; //TL1=(65536-50000)%256;

while(!TF1); //等待定时器溢出

P1<<=1; //点亮下一LED if(P1==0) P1=0x01;

TF1=0;

//软件清除TF1 }}④C源程序(中断方法)#include"reg51.h"voidtimer1()interrupt3using1 //T1中断服务程序{ TH1=0x3c; //重装计数初值

TL1=0xb0;

P1<<=1; //点亮下一LED

if(P1==0) P1=0x01;}voidmain(){ P1=0x01; //点亮第一个LED TMOD=0x10; //T1工作于方式1 TH1=0x3c; //装载计数初值

TL1=0xb0;

IE=0x88; //开放T1中断

TR1=1; //启动T1计数

while(1); //等待中断}T1中断初始化5、定时器/计数器的应用在单片机P1.0口接一个发光二极管,要求利用定时控制使LED亮1s灭1s周而复始,设晶振频率fosc=6MHz。例5.2当fosc=6MHz时,机器周期Tcy=2μs,工作方式0最大定时时间为16.384ms,工作方式1最大定时时间为131.072ms,工作方式2最大定时时间为512μs。显然无法满足定时1s的要求。5、定时器/计数器的应用确定工作方式

可以采用方式0,使T0每隔10ms中断一次,利用软件对中断次数进行计数,中断100次即实现1s定时。也可以采用方式1,使T0每隔100ms中断一次,中断10次实现1s定时。

这里采用T0工作方式0,则TMOD=00H。计算计数初值X=213-N=8192-(10ms/2μs)=3192=0C78H=0000110001111000B则TH0=01100011B=63H,TL0=00011000B=18H。C源程序#include"reg51.h"sbitLED=P1^0;unsignedcharnum=0;voidtimer0()interrupt1

//T0中断服务程序{ TH0=0x63;

//重装计数初值

TL0=0x18;

num++;

if(num==100) //1s时间到LED状态取反

{ LED=~LED;

num=0;

}}voidmain(){ TMOD=0x00; //T0工作于方式0

TH0=0x63;

//定时10ms

TL0=0x18;

ET0=1; //开放T0中断

EA=1;

TR0=1; //启动T0计数

while(1); //等待中断}T0中断初始化C源程序#include"reg51.h"sbitLED=P1^0;unsignedcharnum=0;voidtimer0()interrupt1

//T0中断服务程序{ TH0=(8192-5000)/32;

//重装计数初值

TL0=(8192-5000)%32;

num++;

if(num==100) //1s时间到LED状态取反

{ LED=~LED;

num=0;

}}voidmain(){ TMOD=0x00; //T0工作于方式0

TH0=(8192-5000)/32;

//定时10ms

TL0=(8192-5000)%32;

ET0=1; //开放T0中断

EA=1;

TR0=1; //启动T0计数

while(1); //等待中断}T0中断初始化5、定时器/计数器的应用当GATE=1、TR0=1时,只有INT0(P3.2)引脚上出现高电平时,T0才被允许计数,试利用这一功能测试INT0(P3.2)引脚上正脉冲的宽度(以机器周期表示)。例5.3设外部待测脉冲由INT0脚输入,T0工作在方式1,设置为定时状态,GATE置1。测试时,在INT0端为0时TR0置1,当INT0脚变为1时启动计数;再次变为0时停止计数。此时的计数值即为被测正脉冲宽度。TR=1TR=0计数C源程序#include"reg51.h"sbitsignal=P3^2;voidmain(){ unsignedintwidth=0;

TMOD=0x09; //T0工作于方式1定时,GATE=1 TH0=0x00;

TL0=0x00;

while(signal); //等待P3.2变低

TR0=1; //启动T0计数

while(!signal); //等待P3.2变高

while(signal); //等待P3.2再次变低

TR0=0; //停止计数

width=(TH0<<8)|TL0;}T0中断初始化目录

知识链接任务实施一、任务分析二、安装与调试一、定时器/计数器的基本概念及其应用1、任务要求本任务要求设计一个计时时间为0~59s的秒表。利用定时器实现1s定时。P3.7口接一个按键,该按键有三个功能,分别为开始计时、停止计时和清零。每次按下按键后,按键标识会在三个功能之间循环。P0、P2口接共阳极数码管,静态显示秒表计时。用KeilC、Proteus等作开发工具,进行仿真,并完成实物电路制作并测试,最后需完成项目报告。秒表任务要求2、总体设计方案AT89C51单片机按键控制复位电路时钟电路LED数码管显示3、硬件电路设计4、软件设计

程序流程图C源程序(1)#include"reg51.h"unsignedcharsegtab[10]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; //0~9共阳极段码表unsignedcharcount; //秒计数unsignedcharkey_flag; //按键功能:0启动,1停止,2清零unsignedcharnum; //定时次数计数sbitkey=P1^0; //按键bitkey_state; //按键状态voidDelay(unsignedcharn) //延时程序{ unsignedchari,j; for(i=0;i<n;i++) for(j=0;j<200;j++);}C程序(2)voidTimer0()interrupt1 //T0中断服务程序{ TH0=(65536-50000)/256; //重装初值,50ms TL0=(65536-50000)%256; num++; if(num==20) //每50ms*20=1s刷新一次

{ num=0; count++; P0=segtab[count%10]; //显示个位

if(count/10==0) //显示十位,十位为0则不显示

P2=0xff; else P2=segtab[count/10]; if(count==60) //计满59秒后回0 count=0; }}C程序(3)voidKey_Event() //按键处理子程序{ if(key_state==0) key_flag=(key_flag+1)%3; switch(key_flag) { case1: //启动计时

TR0=1;break; case2: //停止计时

TR0=0;break; case0: //清零

P0=0xc0;P2=0xff;count=0;num=0;break; }}C程序(4)voidmain() //主程序{ P0=0xc0; //显示0s P2=0xff;num=0;count=0;

key_flag=2;

//按键标志初值为0 key_state=1; TMOD=0x01; //T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论