单片机技术及应用(基于Proteus 的汇编和C语言版)项目6 定时计数器控制及应用_第1页
单片机技术及应用(基于Proteus 的汇编和C语言版)项目6 定时计数器控制及应用_第2页
单片机技术及应用(基于Proteus 的汇编和C语言版)项目6 定时计数器控制及应用_第3页
单片机技术及应用(基于Proteus 的汇编和C语言版)项目6 定时计数器控制及应用_第4页
单片机技术及应用(基于Proteus 的汇编和C语言版)项目6 定时计数器控制及应用_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

项目6

定时/计数器控制及应用知识与能力目标熟悉单片机定时/计数器的结构与功能;1掌握定时/计数器在各个模式下的程序初始化过程;2学会并掌握定时/计数器初始值的分析与计算;34理解并掌握定时/计数器的编程与控制方法;65初步学会定时/计数器应用程序的分析与设计。熟练使用Proteus进行单片机应用程序开发与调试。项目6定时/计数器控制及应用1定时/计数器结构与功能分析2定时/计数器编程与控制任务6.1定时/计数器分析与控制1控制要求与功能展示2硬件系统与控制流程分析3汇编语言程序分析与设计4C语言程序分析与设计任务6.2简易定时闹钟控制任务6.3简易按键计数器控制1控制要求与功能展示2硬件系统与控制流程分析3汇编语言程序分析与设计4C语言程序分析与设计5基于Proteus的调试与仿真

6.1.1定时/计数器结构与功能分析

定时/计数器是单片机系统的一个重要部件,此外定时/计数器还可用作为串口通信中波特率发生器。

工作方式灵活使用方便编程简单定时/计数器信号检测定时控制延时信号发生脉宽测量频率测量定时/计数器6.1.1定时/计数器结构与功能分析

1、定时/计数器的组成

6.1.1定时/计数器结构与功能分析

(1)设置定时/计数器的工作方式通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,以及工作方式及启动方法。(2)设置计数初值定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。定时/计数器的工作过程如下:

6.1.1定时/计数器结构与功能分析

定时/计数器的工作过程如下:(3)启动定时/计数器当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计数溢出时才能中断CPU当前的操作。

(4)计数溢出计数溢出标志位在控制寄存器TCON中,用于通知用户定时/计数器已经计满,用户可以采用查询方式或中断方式进行操作。6.1.1定时/计数器结构与功能分析

2、定时/计数器的控制寄存器(1)定时/计数器的控制寄存器TCON:既参与中断控制又参与定时控制表6-1TCON寄存器的结构TCON(88H)D7D6D5D4D3D2D1D0位名称TF1TR1TF0TR0IE1IT1IE0IT0位含义T1的溢出中断标志位T1的启动停止控制位T0的溢出中断标志位T0的启动停止控制位INT1中断请求标志位INT1触发方式控制位INT0中断请求标志位INT0触发方式控制位位地址8FH8EH8DH8CH8BH8AH89H88H6.1.1定时/计数器结构与功能分析

2、定时/计数器的控制寄存器(2)定时/计数器的工作方式控制寄存器TMOD定时/计数器T0定时/计数器T1表6-2TMOD寄存器的结构TMOD(89H)D7D6D5D4D3D2D1D0位名称GATEC/

M1M0GATEC/

M1M0位含义T1门控位模式选择位工作方式选择位T0门控位模式选择位工作方式选择位6.1.1定时/计数器结构与功能分析

2、定时/计数器的控制寄存器M0、M1——工作方式选择位M0和M1两位二进制数可表示4种状态,通过M1和M0可选择4种工作方式表6-3工作方式M1、M0工作方式功能M1、M0工作方式功能00方式013位计数器10方式28位计数器,初值自动装入01方式116位计数器11方式3T0:两个8位计数器T1:停止计数6.1.1定时/计数器结构与功能分析

◆最大计数值M=8192◆定时时间为:(8192-初值)x时钟周期x123、定时/计数器的工作方式(1)工作方式0:M1、M0=006.1.1定时/计数器结构与功能分析

(1)工作方式0:M1、M0=00工作于方式0下的13位定时/计数器

内部计数器为13位,由TLi低5位(高3位未用,一般清零)和THi高8位组成。TLi低5位计数满时不向TLi的第六位进位,而是直接向THi进位。当13位计数计满溢出,溢出标志位TFi置位。3、定时/计数器的工作方式6.1.1定时/计数器结构与功能分析

例如:当晶振为12M时,机器周期为1us,试着配置定时器1工作于方式0定时时间5ms的初值。

由于方式0采用13位计数器,其最大定时时间为:8192x1us=8.192ms,大于定时时间5ms,则计数值为5ms/1us=5000,T1的初值为:

X=M-计数值=8192-5000=3192=C78H=0110001111000B13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以X的实际填写值应为:

X=0110001100011000B=6318H3、定时/计数器的工作方式(1)工作方式0:M1、M0=006.1.1定时/计数器结构与功能分析

3、定时/计数器的工作方式(2)工作方式1:M1、M0=01◆最大计数值M=65536◆定时时间为:(65536-初值)X时钟周期X126.1.1定时/计数器结构与功能分析

3、定时/计数器的工作方式(3)工作方式2:M1、M0=10◆最大计数值M=256◆定时时间为:(256-初值)X时钟周期X126.1.1定时/计数器结构与功能分析

3、定时/计数器的工作方式(3)工作方式2:M1、M0=10◆工作方式2具有初值自动装载功能,适合用于比较精准的定时场合。◆TLi用作8位计数器,THi用来保持初值。◆编程时,TLi和THi必须由软件赋予相同的初值。◆一旦TLi计数溢出,TFi将被置位,同时THi中保存的初值自动装入TLi,进入新一轮计数。

6.1.1定时/计数器结构与功能分析

3、定时/计数器的工作方式(4)工作方式3:M1、M0=11◆只有T0可以设置为工作方式3,T1设置为工作方式3后不工作◆T0被分解成两个独立的8位计数器TL0和TH06.1.1定时/计数器结构与功能分析

3、定时/计数器的工作方式(4)工作方式3:M1、M0=11当T0在工作方式3时,T1仍可设置为方式0、方式1或方式2。由于TR1、TF1和T1中断源已被T0占用,定时器T1仅由控制位C/切换其定时或计数功能。当T1计数器计满溢出时,只能将输出送往串行口。T1一般用作串行口波特率发生器或不需要中断的场合。当设置好工作方式后,T1自动开始计数;当送入一个设置T1为工作方式3的方式字后,T1停止计数。6.1.2定时/计数器编程与控制

中断方式查询方式定时/计数器的编程6.1.2定时/计数器编程与控制

(1)中断方式——编程步骤设置中断优先级,当中断只有一个时不用设置设置TMOD初始化设置定时/计数初值启动定时/计数器编写定时/计数器中断的处理服务程序124563编程步骤开中断6.1.2定时/计数器编程与控制

(1)中断方式——汇编语言编写ORG0000HLJMPMAINORG000BH;T0中断入口地址

LJMPTIMER0ORG0030HMAIN:SETBEA ;开总中断

SETBET0 ;开定时器T0中断

MOVTMOD,#XXH;设置TMODMOVTH0,#XXH;设置TH0、TL0MOVTL0,#XXH SETBTR0 ;启动定时器T0……TIMER0:…… ;中断服务程序

RETI6.1.2定时/计数器编程与控制

(1)中断方式——C语言编写#include<regx51.h>voidmain(){ IE=0X83;//开中断

TMOD=0XXX;//设置TMODTH0=0XXX;//设置TH0、TL0TL0=0XXX;

TR0=1;//启动定时器T0……;

}//=====中断服务程序=====voidtimer0()interrupt1//T0中断服务子程序

{……;

}6.1.2定时/计数器编程与控制

(1)查询方式——编程步骤设置TMOD初始化设置定时/计数初值启动定时/计数器查询溢出标志位TF0或TF1置位情况及相关处理1

2

4

5

3

开中断编程步骤6.1.2定时/计数器编程与控制

(1)查询方式——汇编语言编写ORG0000HLJMP MAINORG0030HMIAN:CLREA ;关中断

MOVTMOD,#XXH;设置TMODMOV TH0,#XXH;设置TH0、TL0MOV TL0,#XXHSETB TR0 ;启动定时器T0……LOOP:JBCTF0,TIMER0;若TF0置位,则先跳转到TIMER0,

;后再清零TF0LJMPLOOPTIMER0:…… ;中断处理程序

LJMPLOOPEND6.1.2定时/计数器编程与控制

(1)查询方式——C语言编写#include<regx51.h>voidmain(){EA=0;

TMOD=0Xxx; //设置TMODTH0=0Xxx; //设置TH0、TL0TL0=0Xxx;

TR0=1;//启动定时器T0if(TF0!=0) //查询TF0标志位是否置位

{TF0=0;//清零TF0标志位

……; //相关处理

}……;}任务6.2简易定时闹钟控制6.2.1控制要求与功能展示实物运行视频两位数码管K1按键

蜂鸣器

单片机

K2按键

6.2.1控制要求与功能展示简易定时闹钟控制电路原理图任务6.2简易定时闹钟控制6.2.2硬件系统与控制流程分析1、任务硬件系统分析

电路原理图所示,该电路主要是由两个按键电路、1个蜂鸣器驱动电路以及1个两位数码管显示电路组成。数码管显示电路中单片机P0口提供段选信号,而P2口提供位选信号;蜂鸣器驱动电路由PNP型三极管驱动。

6.2.2硬件系统与控制流程分析2、任务控制流程分析图6-9简易定时闹钟控制程序流程6.2.3汇编语言程序分析与设计1、任务相关汇编指令

(1)位控制转移指令:JBC

使用格式:JBCbit,<地址或地址标号>

使用说明:JBC指令是用来判断某个位是否置位;置位后,则跳转到所指定的地址中去执行,同时再清零该位。

使用示例JBCTF0,TIMER0;判断TF0是否置位,是则跳转到;TIMER0执行,后清零TF0…………;否,则顺序执行TIMER0:…………6.2.3汇编语言程序分析与设计

(2)逻辑或操作指令:ORL使用格式:ORL<目的操作数>,<源操作数>使用说明:①将目的操作数与源操作数按位进行“或”运算后,将其结果放回目的目的操作数中。②任意逻辑量和1相或,其结果为1;和0相或,其结果不变。逻辑或指令常用来把累加器、内部RAM或特殊功能寄存器的指定位置1。③目的操作数一般情况为累加器A,但也可以是内部数据存储单元的地址。

使用示例ORLA,#01H;将A中的内容与立即数01H相或后结果放入A中6.2.3汇编语言程序分析与设计

(3)逻辑与操作指令:ANL使用格式:ANL<目的操作数>,<源操作数>使用说明:①将目的操作数与源操作数按位进行相“与”之后,将其结果放在目的操作数中;②任意逻辑量(0或1)和0相与,其结果为0;和1相与,其结果不变。逻辑与指令常用来完成将若干数据位清0,而其余位不变的操作。③目的操作数一般情况为累加器A,但也可以是内部数据存储单元的地址。

使用示例ANLA,#01H;将A中的内容与立即数01H相与后结果放入A中6.2.3汇编语言程序分析与设计

(4)逻辑异或操作指令:XRL使用格式:XRL<目的操作数>,<源操作数>使用说明:①将目的操作数与源操作数按位进行相“异或”之后,将其结果放在操作数一中。②任意逻辑量(0或1)和1相异或,其结果取反;和0相异或,其结果不变。逻辑异或指令常用来完成将若干数据位取反,而其余位不变的操作。④相同逻辑量(0或1)相异或,结果为0,不同逻辑量相异或,结果为1,利用这个特点,也可判断两数是否相等。

使用示例XRLA,#01H;将A中内容与立即数01H相异或后结果放入A6.2.3汇编语言程序分析与设计

汇编程序6.2.4C语言程序分析与设计

C程序C语言程序主函数main()程序初始化子函数Init()数码管显示子函数display()输出处理子函数shuchu()程序初始部分(含数据表定义)按键去抖子函数qu_doudong()定时器中断子函数timer0_server()延时子函数delay()1、创建Proteus仿真电路图(1)列出元器件表;(2)绘制仿真电路图6.2.5基于Proteus的调试与仿真

6.2.5基于Proteus的调试与仿真

安装插件vdmagdi.e(注意:应把插件安装在Keil3的安装目录下)将Keil安装目录\C51\BIN中的VDM51.dll文件复制到Proteus软件的安装目录Proteus\MODELS目录下修改Keil安装目录下的Tools.ini文件,在C51字段中加入TDRV11=BIN\VDM51.DLL(“PROTEUS6EMULATOR”)并保存。(1)(2)(3)2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

打开“简易定时闹钟控制.DSN”文件,在Proteus的“Debug”菜单中选中“UseRemoteDebugMonitor(远程监控)”。右键选中STC89C51单片机,在弹出的对话框“ProgramFile”项中,导入在Keil中生成的HEX文件。Keil打开“简易定时闹钟控制.UV2”,打开窗口“OptionforTarget‘工程名’”。在Debug选项中右栏上部的下拉菜单选中ProteusVSMSimulator。点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。

在Keil中点击,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。(4)(5)(6)6.2.5基于Proteus的调试与仿真

工作模式定时工作方式定时器当前值中断标志位程序初始化后,T0窗口

2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

开启定时器定时器当前值启动后中断前,T0窗口

2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

中断后定时器当前值为0000H标志位当进入中断后自动清零中断时,T0窗口

2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

TH0=0x3C、TL0=0xB0T0中断后,重新赋初值3CB0H2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

R0=0x01T0中断次数计数控制2、Proteus与Keil联调2、Proteus与Keil联调6.2.5基于Proteus的调试与仿真

低电平,蜂鸣器鸣叫TR0=0定时时间到,TO停止运行6.2.5基于Proteus的调试与仿真

3、Proteus仿真运行6.2.5基于Proteus的调试与仿真

仿真运行视频任务6.3简易按键计数器控制

实物运行视频数码管单片机K1按键K2按键6.3.1控制要求与功能展示6.3.1控制要求与功能展示简易按键计数器控制电路原理图任务6.3简易按键计数器控制

6.3.2硬件系统与控制流程分析1、任务硬件系统分析

电路原理图所示,该电路主要是由2个按键电路和1个数码管显示电路组成。该数码管显示电路中由单片机P0口提供段选信号,其共阴端串上阻值200欧的限流电阻接地。但要使用计数器来实现该控制要求,需要了解单片机计数器的部分具体知识。

6.3.2硬件系统与控制流程分析(1)单片机定时/计数器的计数功能注意:计数器的位数确定了计数器的计数范围

定时/计数器有定时和计数两种功能,通过定时/计数器的工作方式控制寄存器TMOD中的C/位控制。当C/位为1时,定时/计数器设为计数工作方式,对由T0(P3.4引脚)或T1(P3.5引脚)引入的外部脉冲计数,其余设置与定时器的设置相同。

6.3.2硬件系统与控制流程分析2、任务控制流程分析图6-22简易按键计数器控制流程6.3.3汇编语言程序分析与设计

汇编程序6.3.4C语言程序分析与设计

C程序C语言程序主函数main()程序初始化子函数Init()数码管显示子函数display()计数0中断子函数T_0()定时器1中断子函数T_1()外部中断1子函数int_1()外部中断1子函数int_1()延时子函数delay()1、创建Proteus仿真电路图(1)列出元器件表;(2)绘制仿真电路图6.3.5基于Proteus的调试与仿真

6.3.5基于Proteus的调试与仿真

安装插件vdmagdi.e(注意:应把插件安装在Keil3的安装目录下)

将Keil安装目录\C51\BIN中的VDM51.dll文件复制到Proteus软件的安装目录Proteus\MODELS目录下修改Keil安装目录下的Tools.ini文件,在C51字段中加入TDRV11=BIN\VDM51.DLL(“PROTEUS6EMULATOR”)并保存。(1)(2)(3)2、Proteus与Keil联调6.3.5基于Proteus的调试与仿真

打开“简易按键计数器控制.DSN”文件,在Proteus的“D

温馨提示

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

评论

0/150

提交评论