




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 单片机原理与接口技术 主编任元吉 十二五 高职高专 教与做1 1 体验互动式创新规划教材 2 模块6单片机的定时器计数器 从单片机的角度来看 因为AT89C51系列单片机具有串行口的通信机制 以单片机或计算机作为通信的主体 以串行信道作为通信的媒介 以单片机串口的逻辑电平 数据格式 数据传输波特率等作为通信的协议基础 单片机也就具有了多系统信息传递 协同工作的能力 这也就为单片机的多系统控制和应用打开了崭新的天地 3 项目6 1定时器 计数器 项目6 2电子钟的制作及应用 项目6 3智能抢答器的制作及应用 技能训练 设计DS18B20与单片机的连接实验 基础训练 4 知识目标 广州城建职业学院电子系谢元成制作手机Q 79652257Email x yuancheng 1 了解单片机的中断定时计数器系统的结构2 掌握单片机的定时计数器控制3 掌握在程序设计中应用定时计数器的方法 5 技能目标 1 能够熟悉单片机的定时计数器2 能够掌握输入 输出的控制方式3 能在程序设计中应用中断方式 课时建议 6课时教学重点 单片机的定时计数器教学难点 应用中断定时计数器方式进行程序设计 核心职业技术基础课 项目6 1定时器 计数器 广州城建职业学院电子系谢元成制作手机Q 79652257Email x yuancheng 6 1 1定时器 计数器概述之前我们学习过用延时子程序实现一段时间的定时功能 但这种方法有它的局限性 在定时的过程中因延时子程序的运行会一直占用CPU 在延时时间段内单片机无法再做其它的事情了 如果我们需要用到一种不占用CPU的定时方法 就要用到单片机自带的定时 计数器进行定时工作 80C51的中断系统有5个中断源 2个优先级 可实现二级中断嵌套 器属于五个中断源包含两个外部中断 两个定时 计数器 一个串行中断 图1中断控制电路 如图1所示 80C51单片机共有五个中断源 每个中断源都可根据相应条件产生中断请求 中断请求会将相应的标志位置1 当单片机允许使用中断源时 会每过一个指令周期对相应中断标志位进行一次查询 如发现该标志位为1 则会停下当前工作转到中断子程序处进行程序处理 之后再返回刚才中断处继续执行 从中断请求的发生到处理完中断返回这一过程成为一个完整的中断过程 图2定时 计数器的原理图 定时 计数器的原理图如图2所示 单片机共有两个定时计数器 每一个定时 计数器的主要组成部分是两个连续的8位的存储单元 这两个存储单元分为低8位和高8位 低位可向高位进位 在定时计 数器进行定时工作时 每过一个机器周期 6MHZ晶振 2us 12MHZ晶振 1us 定时计数器的低8位存储单元会自动加一 当低8位 TL0或TL1 加满溢出后会向高8位存储单元 TH0或TH1 进位 当高 低两个8位存储单元全部加满溢出后会将与之对应的中断标志位 TF0或TH1 置1 当单片机允许使用定时 计数器这一中断源时 CPU会每过一个指令周期对与被使用的定时 计数器相应的中断标志位进行一次查询 如发现中断标志位为1 则说明定时到时 会停下当前工作 进入中断子程序进行相应的中断处理 之后返回原来的工作位置继续之前的工作 TCON 88H TMOD 89H 内部总线 知识1 了解定时 计数器的功能 1 什么是单片机的定时和计数功能 定时 Timer 是对机器周期计数 每到一个机器周期 计数器加1 直至计满并产生溢出信号 计数器 Counter 是对外部信号计数 计数脉冲来自外部引脚T0 P3 4 T1 P3 5 并采用其下降沿触发计数 共同 计数 不同 计数对象不同 6 1 2定时器 计数器控制分析 AT89S51单片机内部定时器 计数器结构如图3所示 内部设有两个16位的可编程定时器 计数器 可编程是指其功能 如工作方式 定时时间 量程 启动方式等 均可由指令来确定和改变 在定时器 计数器中除了有两个16位的计数器之外 还有两个特殊功能寄存器 控制寄存器和方式寄存器 图3定时 计数器的内部结构 从图3可看出 16位的定时 计数器分别由两个8位专用寄存器组成 即 T0由TH0和TL0构成 T1由TH1和TL1构成 每个寄存器均可单独访问 这些寄存器是用于存放定时或计数初值的 此外 其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON 这些工作方式 TCON主要是用于控制定时器的启动停止 此外TCON还可以保存T0 T1的溢出和中断标志 定时 计数器的的控制就是要对这些寄存器进行相应的赋值 使定时 计数器按照需要完成初始化 起到定时 技术作用 6 1 3定时器 计数器的工作模式 定时计数器在使用时首先要对其工作模式进行设定 与之有关的特殊功能寄存器在上一节已经有了介绍 下面我们就对其各自的作用做详细的介绍 1 定时 计数器控制寄存器TCONTCON是定时 计数器控制寄存器 它包含两个定时 计数器的溢出中断标志及外部中断和的中断标志 TCON的内部结构如表1所示 TCON位定义如表2所示 表1TCON位格式 表2TCON位定义 2 定时 计数器工作模式控制寄存器TMOD定时器方式控制寄存器TMOD 其结构如表3所示 表3TMOD格式 TMOD的高4位用控制于T1 低4用于控制T0 每一位的具体作用如下 GATE 门控制位 GATE和软件控制位TR0 或TR1 外部引脚信号 或 的状态 共同控制定时器 计数器的打开或关闭 C 定时器 计数器选择位 C 1 为计数器方式 C 0 为定时器方式 M1M0 工作方式选择位 定时器 计数器工作方式由M1M0设定 具体如表4所示 表4定时 计数器的工作方式 3 中断允许寄存器IEIE控制CPU总断源的允许或禁止以及每个中断源是否允许中断 IE内部结构如表5所示 IE位定义如表6所示 表5IE格式 表6IE位定义 4 中断优先寄存器IPIP用来控制各中断源优先级的选择 即设定中断源的中断响应优先级别 IP内部结构如表7所示 IP位定义如表8所示 表7IP位格式 表8IP位定义 单片机复位后 IP低五位全部清零 并将所有中断源设置为低优先级中断 如果几个同优先级的中断源同时向CPU申请中断 哪一个申请得到服务 取决于它们在CPU内部登记排队的序号 CPU通过内部硬件查询登记序号 按自然优先级响应各个中断请求 其内部登记序号是由硬件形成的 先后顺序如下 T0 T1 RI TI 6 1 4定时器 计数器的容量在使用AT89S51的定时器 计数器之前 一般完成以下几个步骤 1 确定定时 计数器工作方式 对TMOD赋值 2 计算定时 计数器的初值 对TH0 TL0或TH1 TL1赋值 3 开放CPU 定时 计数器中断 对IE中的EA ET0 ET1赋值 4 启动定时器 计数器 对TCON中TRl或TR0位赋值 下面我们来学习定时 计数器的初值的具体方法 因为在不同工作方式下计数器位数不同 因而最大计数值也不同 现假设最大计数值为M 那么各方式下的最大值M值如下 方式0 M 213 8192方式1 M 216 65536方式2 M 28 256方式3 定时器0分成两个8位计数器 所以两个M均为256 因为定时器 计数器是作 加1 计数 并在计数满溢出时产生中断 因此初值X可以这样计算 X M N 12 fosc 其中N为定时时间 fosc为晶振频率 在实际应用中经常采用16位的方式1 下面以16位的方式1说明如何确定初值 例如 T0选用方式1用于定时 外接晶振频率为12MHz 定时时间为10ms 计算过程如下 方式1时 M 65536 定时时间N 10 10 3s fosc 12MHz 12 106HzX M N 12 fosc 65536 10 10 3 12 12 106 65536 10000 55536拆分X的高八位送TH0 低八位送TL0 MOVTH0 0D8H MOVTL0 0F0H 6 2 1定时器 计数器应用步骤经过以上学习我们知道要想使用定时 计数器必须先对其进行初始化 流程图如图4 项目6 2电子钟的制作及应用 图4定时 计数器初始化流程 定时器 计数器初始化函数及中断服务函数格式 T0方式1 以10ms定时时间 12MHz晶振为例ORG0000HLJMPSTARTORGOO13HLJMPINTT0ORG0040HLCALLCSH SJMP ORG0100HCSH MOVEA 01H MOVET0 01H MOVTMOD 01H MOVTH0 0D8H MOVTL0 0F0H MOVTR0 01H RETORG0200HINTT0 MOVTH0 0D8H MOVTL0 0F0H RETI 6 2 2电子钟系统制作分析1 任务要求六位数码显示 采用动态扫描方式 两位显示时位 两位显示分位 两位显示秒位 初始时间为23点58分46秒 如图5所示 图5数字钟电路图 2 任务分析在本任务中要解决两个问题 一个是显示问题 一个是定时问题 断码显示器的使用在之前的学习中我们已经掌握了 在本任务中我们要同时显示六位不同的数字 但是80C51单片机只有4组I O驱动引脚 无法同时对六位断码显示器输出显示数据 这就需要用到动态扫描的方法来完成显示功能 下面以两位数显示为例来说明动态扫描在断码显示中的应用 电路图如图6所示 图6动态扫描显示电路 ORG0000HLJMPSTARTORG0030HSTART MOVR0 40H 40H 41H是显示缓冲区 依次存放十 个位MOVA 06H 十位MOV R0 A INCR0 个位MOVA 00HMOV R0 ADS1 MOVR0 40H 置显示缓冲区首址MOVR2 02H 置扫描初值 点亮最左边的LED6DS2 MOVA R0 得到的段显码输出到段数据口ACALLTABLEMOVP0 AMOVA R2 向位数据口P1输出位显码CPLAMOVP2 A MOVR3 0ffH 延时一小段时间DEL NOPDJNZR3 DELINCR0 显示缓冲字节加一CLRCMOVA R2RRCA 显码右移一位MOVR2 A 最末一位是否显示完毕 如无则JNZDS2 继续往下显示MOVA TBFMOVB 10DIVABMOV40H AMOVA BMOV41H ASJMPDS1TABLE INCA 取与数字对应的段码MOVCA A PCRETDB0EDH 48H 0E6H 6EH 4BHDB2FH 0AFH 68H 0EFH 6FHEND 图中使用两位共阳极段码显示器 P1口用来提供显示断码 P2 0 P2 1两位引脚用来提供显示器位选择码 在显示时 先由P2 0引脚输出高电平 P2 1引脚输出低电平选择个位显示器工作 这时让P1口输出 0 的断码使各位显示内容为 0 这时开始一小段时间的延时 在视觉残留允许范围内 如10ms 之后改变P2 0 P2 1 P1的值使十位显示器工作 并显示 6 再加入一小段时间的延时 这时只要重复上面的过程就可以让两位显示器交替显示 达到同时显示 60 的动态显示效果了 程序如下 在动态扫描显示的时候 程序进入了无限循环的状态 无法在进行其他的工作了 要想完成一秒钟的定时以及到时后的显示内容修改工作就要中断当前的循环工作进程 在1S到时的时候进行中断 处理完显示内容修改后再返回动态扫描的显示程序中 这样就可以实现任务要求的数字钟设计了 下面以60S倒计时为例 编程实现动态扫描与定时 计数器中断的使用方法 BUFEQU23H 存放计数值TBFEQU22H 存放显示值ORG0000HLJMPSTARTORG000BHLJMPCLOCKORG0030HSTART MOVR0 40H 40H 41H是显示缓冲区 依次存放十 个位MOVA 06H 十位MOV R0 A INCR0 个位MOVA 00HMOV R0 AMOVTMOD 01H 定时器0初始化为方式1MOVTH0 0D8H 置时间常数 延时0 1秒MOVTL0 0F0HMOVBUF 00H 置0MOVTBF 60SETBET0SETBEASETBTR0DS1 MOVR0 40H 置显示缓冲区首址MOVR2 02H 置扫描初值 点亮最左边的LED6DS2 MOVA R0 得到的段显码输出到段数据口ACALLTABLEMOVP0 A MOVA R2 向位数据口P1输出位显码CPLAMOVP2 AMOVR3 0ffH 延时一小段时间DEL NOPDJNZR3 DELINCR0 显示缓冲字节加一CLRCMOVA R2RRCA 显码右移一位MOVR2 A 最末一位是否显示完毕 如无则JNZDS2 继续往下显示MOVA TBFMOVB 10DIVABMOV40H AMOVA BMOV41H ASJMPDS1 TABLE INCA 取与数字对应的段码MOVCA A PCRETDB0EDH 48H 0E6H 6EH 4BHDB2FH 0AFH 68H 0EFH 6FHCLOCK MOVTL0 0D0H 置时间常数MOVTH0 0F0HPUSHPSWPUSHACCINCBUF 计数加一MOVA BUF 计到10否 没有则转到QUIT退出中断CJNEA 02H QUITMOVBUF 00H 置初值MOVA TBFDECA MOVTBF ACJNEA 00H QUITCLRTR0QUIT POPACCPOPPSWRETI 中断返回END 6 2 3编制程序将这样的动态扫描内容进行扩充即可实现六位数的动态扫描显示效果 在上一节两位数码显示中已经学习了如何显示 如何产生1秒计时 数字钟在此基础上又增加了分位和时位 我们知道当秒位计够60秒时 自身归0 同时让分位上加1 当分位计够60时 分为归0 时位加1 当时位计够24时 时位归0 数字钟的程序就是按照这样的逻辑关系进行编写的 BUFEQU23H 存放计数值SBFEQU22H 存放秒值MBFEQU21H 存放分值HBFEQU20H 存放时值CSEGAT0000HLJMPSTARTCSEGAT01BHLJMPCLOCKCSEGAT0030HSTART MOVR0 40H 40H 45H是显示缓冲区 依次存放时分秒MOVA 02H 时高位MOV R0 A INCR0 时 底位MOVA 03HMOV R0 AINCR0 分高位MOVA 05HMOV R0 AINCR0 存分低位MOVA 08HMOV R0 AINCR0 秒高位MOVA 04HMOV R0 AINCR0 秒低位MOVA 06HMOV R0 A MOVTMOD 10H 定时器1初始化为方式1MOVTH1 0D8H 置时间常数 延时0 1秒MOVTL1 0F0HMOVBUF 00H 置0MOVHBF 23MOVSBF 58MOVMBF 46SETBET1SETBEASETBTR1DS1 MOVR0 40H 置显示缓冲区首址MOVR2 20H 置扫描初值 点亮最左边的LED6DS2 MOVA R0 得到的段显码输出到段数据口ACALLTABLEMOVP0 AMOVA R2 向位数据口P1输出位显码CPLAMOVP1 A MOVR3 0FFH 延时一小段时间DEL NOPDJNZR3 DELINCR0 显示缓冲字节加一CLRCMOVA R2RRCA 显码右移一位MOVR2 A 最末一位是否显示完毕 如无则JNZDS2 继续往下显示MOVR0 45HMOVA SBF 把秒值分别放于44H 45H中ACALLGETMOVA MBF 把分值分别放入40H 41H中ACALLGETMOVA HBFACALLGETSJMPDS1 转DS1从头显示起 TABLE INCA 取与数字对应的段码MOVCA A PCRETDB3FHDB06HDB5BHDB4FHDB66HDB6DHDB7DHDB07HDB7FHDB6FHDB40HGET MOVR1 A 把从时 分或秒字节中取来的值的高ANLA 0FH 位屏蔽掉 并送入缓冲区MOV R0 ADECR0MOVA R1 把时 从分或秒字节中取来的值的低SWAPA 位屏蔽掉 并送入缓冲区ANLA 0FHMOV R0 ADECR0 R0指针下移一位RET CLOCK MOVTL1 0D8H 置时间常数MOVTH1 0F0HPUSHPSWPUSHACCCPLP1 0CPLP1 1CPLP1 2CPLP1 3INCBUF 计数加一MOVA BUF 计到10否 没有则转到QUIT退出中断CJNEA 0AH QUITMOVBUF 00H 置初值MOVA SBFINCA 秒值加一 经十进制调整后放入DAA 秒字节MOVSBF ACJNEA 60H QUIT 计到60否 没有则转到QUIT退出中断MOVSBF 00H 是 秒字节清零 MOVA MBFINCA 分值加一 经十进制调整后放入DAA 分字节MOVMBF ACJNEA 60H QUIT 分值为60否 不是则退出中断MOVMBF 00H 是 清零MOVA HBFINCADAAMOVHBF ACJNEA 24H QUITMOVHBF 00HQUIT POPACCPOPPSWRETI 中断返回END 6 2 4系统调试在Proteuse软件上自行设计电路图 并根据自己设计的电路图在Keilc软件中编译程序进行调试 观察仿真运行结果 在程序中修改使数字钟的显示初始值为18点26分56秒 在进行运行观察变化 6 3 1电路原理分析及设计抢答器可同时供不大于8名选手或8个代表队参加比赛 各用一个抢答按钮 按钮的编号与选手的编号是相对应的 分别是S1 S2 S3 S4 S5 S6 S7 S8 给节目主持人设置二个控制按钮开关 用来控制系统的清零和抢答的开始 抢答开始后 若有选手按动抢答按钮 在数码管上显示出选手的编号 同时蜂鸣器给出音响提示 禁止其他选手抢答 优先抢答选手的编号一直保持到主持人将系统清零为止 当节目主持人启动 开始 键后 要求定时器立即减计时 并用显示器显示 同时蜂鸣器发出短暂的声响 声响持续时间0 5S 参赛选手在设定的时间内抢答有效 定时器停止工作 显示器上显示选手的编号和抢答时刻的时间 并保持到主持人将系统清零 如果定时抢答的时间不大于5S后 却没有选手抢答时 系统持续报警 直到定时抢答的时间为零 本次抢答无效 并封锁输入电路 禁止选手超时后抢答 时间显示器上显示FFF犯规处理 如果主持人没按 开始 键 就有选手抢答 则显示选手编码 并持续报警 如果已经有选手抢答了 别的选手则按键无效 直到主持人重新复位按下开始键为止 电路图如图8所示 项目6 3智能抢答器的制作及应用 图8抢答器电路 6 3 2硬件系统制作分析在制作硬件电路时应注意各元件的工作电压以及工作电流条件 在相应的电路中应添加适当的限流电阻 同时要注意P0引脚在使用时应连接上拉电阻 为了使蜂鸣器具有足够的驱动电流 在P3 7引脚增加了三极管做电流放大 同时为了使设计电路图符合实际电路需求 在电路图中增加了上拉电阻及缓存器 6 3 3编制程序ORG0000HLJMPSTARTORG0003HLJMPESS 跳转到外部中断0中断子函数ORG00A0HSTART SETBEASETBEX0SETBIT0 外部中断初始化LP MOVR2 00HINCR2JBP1 0 LP1LCALLLOPLP1 INCR2JBP1 1 LP2LCALLLOPLP2 INCR2JBP1 2 LP3LCALLLOPLP3 INCR2JBP1 3 LP4LCALLLOPLP4 INCR2JBP1 4 LP5LCALLLOPLP5 INCR2JBP1 5 LP6LCALLLOPLP6 INCR2JBP1 6 LP7LCALLLOPLP7 INCR2JBP1 7 LP8LCALLLOPLP8 LJMPLP 按键判断 LOP MOV56H 02HLP16 MOV51H 10DMOV52H 10HCLRP3 7 蜂鸣器报警LP10 LCALLDELAYDJNZ51H LP10SETBP3 7 蜂鸣器结束报警LP15 LCALLDELAYDJNZ52H LP15DJNZ56H LP16MOVDPTR TABMOVA R2MOVCA A DPTRLP11 MOVP2 01HMOVP0 ALJMPLP11RETESS MOVP2 00HCLRP3 7MOVTMOD 00000001BMOVR3 0AHL12 MOVR4 14HL11 MOVTH0 3CHMOVTL0 0B0HMOVDPTR TABSETBTR0 定时 计数器0初始化MOVA R3MOVB 0AHDIVABMOVCA A DPTRMOVP2 01HMOVP0 ALCALLDLAYMOVA BMOVCA A DPTRMOVP2 02HMOVP0 ALCALLDLAY L10 JNBTF0 L10 查询方式进行定时 计数器中断处理CLRTF0SETBP3 7DJNZR4 L11DECR3CJNER3 0FFH L19LJMPL18L19 CJNER3 00H L12MOV51H 50DCLRP3 7L15 LCALLDELAYDJNZ51H L15SETBP3 7MOVP2 00HLJMPL18L18 RETIDLAY MOV53H 05HL14 MOV54H 0F0HL13 MOVR2 00HINCR2JBP1 0 L1LCALLLOOP L1 INCR2JBP1 1 L2LCAL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西贺州市平桂高级中学2026届化学高三第一学期期末统考模拟试题含解析
- 2025高中化学课堂教学评价方案
- 华为技术有限公司2022-2023ESG实践报告
- 2025年可穿戴医疗设备在慢性疼痛治疗监测中的市场需求与技术发展报告
- 2026届山东青岛市化学高二上期中质量检测试题含解析
- 供水管网改造过程中的噪音与振动控制
- 储能设备出入库与库存管理方案
- 2025年城市更新背景下的历史文化街区保护与特色商业开发研究报告
- 基于2025年大数据的特色农产品电商平台用户画像研究评估报告
- 水上灌注桩施工技术方案范本
- 《生产部月报模板》课件
- 医疗器械市场开发的成功案例分析
- 2024近场电商行业白皮书-凯度x淘宝买菜-202401
- 医院感染控制标准执行案例分析及改进
- 部编版四年级上册道德与法治《我们班四岁了》说课教学复习课件
- 设备采购 投标方案(技术方案)
- 班主任微创意:59招让班级管理脑洞大开
- 数字经济与人工智能
- 晚期胃癌患者护理查房
- 业务员代理协议合同
- 航空发电机市场需求分析报告
评论
0/150
提交评论