mcs51单片机计数器/定时器工作方式3 编程举例

发布者:Susan苏最新更新时间:2017-10-12 来源: eefocus关键字:mcs51  单片机  计数器  定时器  工作方式3 手机看文章 扫描二维码
随时随地手机看文章

2个8位方式。工作方式3只适用于定时器0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。 
当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源。TH0只能用作定时器,并使用T1的控制位TRl、回零标志TFl和中断源,见下图。


通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器(见1.4),TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。



 


这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。


理解内容


定时器/计数器与中断综合应用举例  内

例题:时钟计时程序设计。 


所谓时钟计时,就是以秒、分、时为单位进行的计时。可以把该程序看成是定时器/计数器与中断应用的典型代表,就算是对这两部分内容的复习。


⑴ MCS-51单片机实现时钟计时显示的基本方法 内

 

① 首先要计算计数初值


时钟计时的关键问题是秒的产生,因为秒是最小时钟单位,但使用MMCS-51的定时器/计数器进行定时,即使按工作方式1,其最大定时时间也只能达到131毫秒,离1秒还差好远。为此,我们把秒计时用硬件定时和软件计数相结合的方法实现,即:把定时器的定时时间定为125毫秒,这样当计数溢出8次就可得到1秒,而8次计数可用软件方法实现。

 

为得到125ms定时,我们可使用定时器/计数器0,以工作方式1进行,当设定单片机为6MHz晶振,设计数初值为X,则有如下等式:


(216-X)×2us=125000us 


计算得计数初值X=3036,

 

二进制表示为0000101111001101,十六进制表示为0BCDH。


② 定时器定时采用中断方式完成,以便于通过中断服务程序进行溢出次数(每次125毫秒)的累计,计 满8次即得到秒计时。

  

③ 通过在程序中的数值累加和数值比较来实现从秒到分和从分到时的计时 


④ 设置时钟显示及显示缓冲区

 


假定时钟时间在六位LED数码管(LED5~LED0)上进行显示(时、分、秒各占两位)。为此,要在内部RAM中设置显示缓冲区,共6个单元(79H~7EH),与数码管的对应关系为:

 

      LED5→7EH、LED4→7DH、LED3→7CH、LED2→7BH、LED1→7AH、LED0→79H。


即显示缓冲区从左向右依次存放时、分、秒的数值。 内容来自单片机之家www.dpj100.com

⑤ 假定已有LED显示程序为SMXS可供调用


⑵ 程序流程


① 主程序(MAIN)

 

主程序的主要功能是进行定时器/计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。

 

② 中断服务程序(PIT0)


中断服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了8次,不满8次表明还没达到最小计时单位秒,中断返回;如满8次则表明已达到最小计时单位秒,程序继续向下执行,进行计时操作


③ 加1子程序(DAAD1)


加1子程序用于完成对秒、分和时的加1操作,中断服务程序中在秒、分、时加1时共有三处调用此子程序。加1操作共包括以下三项内容: 

 

合数


 

由于每位LED显示器对应一个8位的缓冲单元,因此由两位BCD码表示的时间值各占用一个缓冲单元,且只占其低4位。为此在加1运算之前需把两个缓冲单元中存放的数值合并起来,构成一个字节,然后才能进行加1运算。合字之说由此而来。

 

十进制调整 

    对加1并进行十进制调整

 


分数 

    把加1后的时间值再拆分成两个字节,送回各自的缓冲单元中。 

  

⑶ 程序清单

    整个参考程序清单如下:


                 ORG       8000H

 

 START:AJMP     MAIN


                ORG        800BH 

 

                AJMP     PITO 


                ORG        8100H 

  

 MAIN: MOV        SP, #60H    ;确立堆栈区 


              MOV        R0, #79H     ;显示缓冲区首地址 

 

              MOV        R7, #06H     ;显示位数


 ML1:    MOV        @R0, #00H   ;显示缓冲单元清0 


              INC           R0


              DJNZ        R7, ML1


              MOV        TMOD, #01H  ;定时器0,工作方式1

 

              MOV        TL0, #0CDH   ;装计数器初值


              MOV        TH0, #0BH 


              SETB        8CH         ;TR0置1,定时开始


              SETB        AFH         ;EA置1,中断总允许


              SETB        A9H         ;ET0置1,定时器0中断允许

 

              MOV       30H, #08H   ;要求的计数溢出次数,即循环次数

 

 ML0:   LCALL     SMXS       ;调用显示子程序


              SJMP       ML0 


PITO:   PUSH       PSW         ;中断服务程序,现场保护 


             PUSH       ACC

 

             SETB       PSW.3       ;RS1RS0=01,选1组通用寄存器


             MOV     TL0, #0CDH   ;计数器重新加载

 

             MOV     TH0, #0BH


             MOV     A, 30H       ;循环次数减1


             DEC      A

 

            MOV      30H, A

 

            JNZ        RET0         ;不满8次,转RET0返回

 

            MOV     30H, #08H   ;满8次,开始计时操作


             MOV     R0, #7AH    ;秒显示缓冲单元地址

 

           ACALL  DAAD1      ;秒加1


           MOV      A, R2        ;加1后秒值在R2中


           XRL        A, #60H     ;判是否到60秒


           JNZ         RET0         ;不到,转RETO返回 

 

           ACALL   CLR0       ;到60秒显示缓冲单元清0 


           MOV       R0, #7CH    ;分显示缓冲单元地址



           ACALL   DAAD1      ;分加1 


           MOV       A, R2 


           XRL         A, #60H     ;判是否到60分

 

           JNZ          RET0 


           ACALL    CLR0       ;到60分,分显示缓冲单元清0


           MOV        R0, #7EH    ;时显示缓冲单元地址



           ACALL    DAAD1      ;时加1



            MOV       A,R2] 

 

            XRL        A, #24H     ;判是否到24时


           JNZ         RET0


           ACALL    CLR0           ;到24时,时显示缓冲单元清0

 

 RET0:POP         ACC             ;现场恢复


            POP         PSW


           RETI                              ;中断返回 


DAAD1:MOV    A, @R0       ;加1子程序,十位数送A 

 


           DEC         R0 



           SWAP     A                   ;十位数占高4位 


           ORL         A, @R0        ;个位数占低4位


           ADD        A, #01H     ;加1


           DA           A                  ;十进制调整


           MOV        R2, A            ;全值暂存R2中


           ANL        A, #0FH     ;屏蔽十位数,取出个位数


           MOV       @R0, A      ;个位值送显示缓冲单元

 

           MOV        A,R2


           INC          R0


           ANL        A, #F0H     ;屏蔽个位数取出十位数


           SWAP    A                   ;使十位数占低4位

  

           MOV       @R0, A        ;十位数送显示缓冲单元

 

           RET                               ;返回


      CLR0:CLR    A            ;清缓冲单元子程序


           MOV        @R0, A      ;十位数缓冲单元清0 

 

           DEC         R0


           MOV        @R0, A      ;个位数缓冲单元清0


关键字:mcs51  单片机  计数器  定时器  工作方式3 引用地址:mcs51单片机计数器/定时器工作方式3 编程举例

上一篇:MCS-51单片机驱动步进电机的程序设计
下一篇:编写单片机计数器程序对脉冲进行计数程序

推荐阅读最新更新时间:2024-03-16 15:40

16-基于51单片机的烟雾和温湿度检测控制系统仿真
具体实现功能 由STC89C52单片机+LCD1602液晶显示屏+ADC0832模块+蜂鸣器+DHT11温湿度传感器 +烟雾传感器+LED+按键构成。 具体功能: 1、LCD1602液晶第一行显示当前的烟雾值,第二行显示当前的温度和湿度值; 2、可以设置烟雾、温湿度上下限报警值。共4个按键:复位按键、减键、加键、设置键;设定的参数具有掉电保存,保存在STC单片机的内部,上电无需重新设置; 3、当烟雾值高于设定的报警值或温度湿度超出上下限范围,蜂鸣器和指示灯会发出声光报警; 4、当温湿度值低于或高于设定的范围时,相应的指示灯亮,蜂鸣器报警; 5、当同时满足烟雾过高、温度过高、湿度过低三个条件时,控制继电器吸合
[单片机]
16-基于51<font color='red'>单片机</font>的烟雾和温湿度检测控制系统仿真
51单片机之数码管显示实验
/* 名称:51单片机之数码管显示实验 说明:对于数码管来说,其本质上可以理解为按照一定规则组合的多个二极管。其使用只需按照特定规则显示对应的二极管即可。要稍微注意一点的就是多个数码管的显示分为静态显示和动态显示。静态显示就是每个二极管显示的内容是一样的,通过片选信号来决定是哪个二极管该显示。动态数码管,即利用人眼的视觉停留效果,快速扫描,快速显示每个数码管的内容,使得每个数码管看起来好像是一起显示的一样。 本实验编写了几个数码管显示的简单程序。在此不做赘述了。 */ #include reg52.h #define uchar unsigned char //共阳极段码(a在高位,dp在低位) uchar
[单片机]
关于飞思卡尔S12系列单片机SPI通信MODRR配置
MODRR为模块路径选择寄存器,作为CAN0/4与SPI0/1/2映射引脚。 例如选择CAN0为PM0/1引脚,则配置MODRR_MODRR0&1=0.当MODRR_MODRR4=0时,SPI0选择PS4/5/6/7.
[单片机]
关于飞思卡尔S12系列<font color='red'>单片机</font>SPI通信MODRR配置
51单片机控制的微波炉定时程序
//免责声明:这是微波炉的定时功能 纯为技术交流、学习之用。 //转载、使用者切莫用于不正当的用途,一切后果由转截/使用者自行负责 //按下独立键盘RD按键,每按一次增加60秒,按下INT1启动,按下INT0停止 //我们知道微波炉是不会自动运行的,得手动启动 #include reg52.h #define uint unsigned int #define uchar unsigned uchar sbit duan=P2^5; sbit wei=P2^6; const unsigned char table ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x88,
[单片机]
单片机控制红外线通信接口电路设计
0 前言   热误差是数控机床的最大误差源,数控机床的温度测试为机床热误差的补偿提供依据。传统的测温方案是将模拟信号通过电缆远距离传输至数据采集卡进行A/D转换并处理,实用中必须解决长线传输和模拟量传感器布线等问题。本文介绍了一种新型的设计方案,控制器采用SAMSUNG公司的32位ARM微控制器S3C44BOX,温度传感器采用单总线数字温度传感器DS18B20。采用数字温度传感器即在测试点完成了信号的数字化,提高了传输的可靠性,同时简化了外围电路,也便于传感器在机床上的布置安装。ARM处理器控制数字温度信号的采集,并与上位PC机通讯,同时其他硬件资源提供热补偿系统其他功能。本文在介绍数字温度传感器DS18B20的基础上,给出了系统
[单片机]
用<font color='red'>单片机</font>控制红外线通信接口电路设计
串口通信的单片机程序
beep bit p3.7 ;蜂鸣器定义 org 00h jmp main org 23h ;串行中断入口地址 jmp com_int ;串行中断服务程序 ;*********** 主程序开始 ******************* org 30h main: mov sp,#30h ;设置堆栈 lcall rest ;初始化 lcall comm ;串口初始化 jmp $ ;原地等待 ; ************* 初始化 **
[单片机]
基于DS1620和AT89C2051的数字温度计
1 DS1620芯片介绍      DS1620是一片8引脚的片内建有温度测量并转换为数字值的集成电路,他集温度传感、温度数据转换与传输、温度控制等功能于一体。测温范围:-55~+125℃,精度为0.5℃。该芯片非常容易与单片机连接,实现温度的测控应用,单独做温度控制器使用时,可不用外加其他辅助元件。   引脚功能及排列如图1所示。   其中:RST,CLK/CONV及DQ为三线串行通信线;DQ为数据输入输出端。当RST保持高电平,对应CLK/CONV时钟脉冲的上升沿处,DQ可按位输入各种控制指令及数据,在CLK/CONV时钟脉冲的下降沿处开始按位输出9 B温度值,分2个字节输出,最低位(LSB)在最先输出,先输出的
[应用]
基于C8051F040的压力机控制系统设计
   1 引言   压(拉)力机是用于检测建材及某种产品强度的机械。它根据工作方式分为压和拉两种,其工作力均由油泵产生,因此统称压力机。压力系统由机械结构和控制柜组成,工作时先安装试件,人工手动按下开始按钮,观察压力值,根据不同材料相应调节加压速度,使其到达额定压力,进而进入保压期,由于同时还需记录数据,因此要求熟练人员操作。   为了减轻操作人员的工作强度,提高实验精度,这里给出一种智能压力机控制系统设计方案。该系统工作时操作人员用鼠标选择材料,并按下开始试验按钮,计算机则按照预定方案自动操作,操作完成后可打印出试验曲线和结论报表。    2 控制器硬件组成   该系统在原压力机的基础上增加控制器和计算机,其组成如图l所
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved