51单片机 定时器及其应用

发布者:baiyuguoji最新更新时间:2019-02-18 来源: eefocus关键字:51单片机  定时器 手机看文章 扫描二维码
随时随地手机看文章

89c51单片机内部有两个16位的定时/计数器,即定时器T0和定时器T1,单片机的定时功能其实就是通过计数来实现的,当单片机每一个机器周期产生一个脉冲时,计数器就加一。定时器的应用涉及到中断方面的知识,可以先了解中断的概念再来看定时器


如,一个16位的定时器,它所能计数的范围是0~65535,如果单片机采用的是12M的晶振,那么定时器单次最长的时间为65535*((1/12)*12),因为一个一个机器周期等于12个振荡周期,那么定时器加一所用的时间是1/12M*12是1us,也就是一个12MHz晶振的51单片机单次最长时间约为65ms.


定时器的控制


89c51的定时器由两个寄存器控制,分别是工作模式寄存器TMOD和控制寄存器TCON


工作模式寄存器TMOD是用于控制定时器0/1的工作模式,通过对TMOD进行赋值,则可以改变定时器的工作模式


具体各位的定义如下


当我们使用定时器功能时,就只用设置D0、D1、D4、D5的的值就可以了,其余位置0即可


我们在使用定时器时基本使用的是模式1和模式2,模式0与模式3基本不用,我就不进行描述了。


模式1


当TMOD的D5位置0,D4位置1时,即为定时器T1的模式一,该模式对应的是一个16位的定时器,寄存器TH1和TL1即为T1初值的高8位和低8位,定时时间为:(65536-T1的初值)*振荡周期*12


模式二


当TMOD的D5位置1,D4位置0时,即为定时器T1的模式二,该模式对应的是一个可以自动装载的8位定时器,当定时器计数满了(计数溢出时),会自动把TH1中的内容重新装载到TL1中,那么模式二计数的最长时间即为(257-T1的初值)*振荡周期*12


 定时器的控制寄存器TCON


TCON的各位定义如下



TF1:T1的溢出标志位,当T1溢出时,由硬件自动使TF1位置1,并向CPU申请中断。当CPU响应中断进入中断服务子程序后,TF1又被硬件自动清0,也可以用软件清0.


TF0:T0溢出标志位。其功能和操作情况同TF1


TR1:T1的运行控制位,当该位置1时,即启动定时器1当该位置0时,即关闭


TR0:T0的运行控制位,其功能及操作情况同TR1。


接下来我将用定时器来结合数码管制作一个0-9计时器


具体操作如下(定时器的初始化在程序最下面)


include


void T0INI() ;                           //定时器0初始化函数声明                       

unsigned int temp = 0,i = 0;    //中间变量

unsigned char leddata[]={        //定义一个字符型数组用来存放共阳极数码管数字显示

 

                0xC0,  //"0"

                0xF9,  //"1"

                0xA4,  //"2"

                0xB0,  //"3"

                0x99,  //"4"

                0x92,  //"5"

                0x82,  //"6"

                0xF8,  //"7"

                0x80,  //"8"

                0x90,  //"9"

                0x88,  //"A"

                0x83,  //"B"

                0xC6,  //"C"

                0xA1,  //"D"

                0x86,  //"E"

                0x8E,  //"F"

                0x89,  //"H"

                0xC7,  //"L"

                0xC8,  //"n"

                0xC1,  //"u"

                0x8C,  //"P"

                0xA3,  //"o"

                0xBF,  //"-"

                0xFF,  //熄灭

                0xFF  //自定义

 

                         };


void main()

{

       T0INI();

        while(1)

        {

            P2 = 0x0e;                  //位选段P20置0

            P0 = leddata[i];         //数码管显示

            if(TF0 == 1)             //当定时器计数溢出时

                    {

                            TH0 = 0X3c;           

                            TL0 = 0xb0;            //给定时器高8位和低8位重新赋值

                            temp++;                 //50ms加1

                    }

            

                if(temp == 20)               //计数到20次也就是一秒

                         i++;                      //数码管显示值加一

                    if(i == 10)

                         i = 0;           

        }

}  


void T0INI()    //定时器T0初始化

{

    IE = 0x82;                //cpu开总中断  ,定时器T0溢出中断允许 

    TCON = 0x10;        //打开定时器T0

    TMOD = 0x01;        //设置T0为工作模式1,16位定时计数器

    TH0 = 0X3c;

    TL0 = 0xb0;            //12Mhz定时50ms

}



关键字:51单片机  定时器 引用地址:51单片机 定时器及其应用

上一篇:51单片机数码管的静态与动态显示
下一篇:89c51单片机流水灯操作

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

基于51单片机超声波避障+蓝牙遥控智能小车
单片机源程序如下: #include reg52.h #include intrins.h typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; sbit Sevro_moto_pwm = P2^6; //接舵机信号端输入PWM信号调节速度 sbit ECHO= P1^1; //超声波接口定义 sbit TRIG= P1^0; //超声波接口定义 sbit PWM1 = P2^5; //左电机高电平 sbit PWM2 = P2^
[单片机]
STM32 学习笔记_TIME定时器详解1
STM32 单片机的定时器的确很强大,参考说明书中就占了一百多页,占参考手册1/4 有多了。 STM32的定时器分了好几个类别,各个类别针对功能作用都不大相同。 分有: 一、高级定时器 二、通用定时器 三、基本定时器 四、看门狗定时器 五、SysTick定时器 其中看门狗定时器和SysTick定时器本篇笔记阐述,这里主要记下对平时使用定时器作用的计时计数器的一些自己的理解。 按照参考手册中的定义 高级定时器 通用定时器基本定时器,这三个定时器成上下级的关系,即基本定时器有的功能通用定时器都有,而且还增加了向下、向上/向下计数器、PWM生成、输出比较、输入捕获等等功能;而高级定时器又包含了通用定时器的所有功能,另外还增加了死区互补输
[单片机]
STM32 学习笔记_TIME<font color='red'>定时器</font>详解1
定时器进行计数的一个简单例子
/* 注:该程序主要是如何运用定时器进行计数,体现模块化的子函数,是一个比较浅显的程序 */ #include reg52.h //头文件 #define uchar unsigned char //宏定义 #define uint unsigned int uchar count; //定义全局变量 void display_led() //led显示子函数 { if(count==20) //每隔1S发生变化(晶振为:12MHZ) { count=0; //计数清零,以便下次计数 P2=~P2; //P2的值取反 P2=P2 1; //P2的值左移 P2=~P2; if(P2==0xff) //如果最后一个L
[单片机]
STM32CubeMX之定时器控制微秒延时详解
写在前面的话,为什么另需定时器进行微秒级延时。 1.在HAL固件库中只有使用Systick作为延时计数器,毫秒级延时HAL_Delay()。为了增加精确的微秒级延时,一般都是更改Systick配置参数,但HAL固件库许多地方都使用了HAL_Delay()函数,因此建议大家不要修改系统自动配置的Systick参数; 2.个人觉得到加入操作系统时要占用Systick,而MCU系统自身的时基还要选择其他的定时器,综上所述,对Systick做的更改基本白搭; 因此采用定时器控制微妙延时的方法,是比较灵活的。需要用户增加的代码很少,经济实用,节能环保- -; 步骤1.配置时钟 注意,一定要确定红色部分标记的晶振频率要与实际的晶振保持一致。
[单片机]
51单片机定时器TMOD与TCON、SCON
51单片机中断级别 中断源 默认中断级别 序号(C语言用) INT0---外部中断0 最高 0 T0 ---定时器/计数器0中断 第2 1 INT1---外部中断1 第3 2 T1 ----定时器/计数器1中断 第4 3 TX/RX---串行口中断 第5 4 T2 ---定时器/计数器2中断 最低 5 ———————————————— 定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。 D0~D3为
[单片机]
<font color='red'>51单片机</font><font color='red'>定时器</font>TMOD与TCON、SCON
51单片机控制SL811HS的USB主机底层驱动
引言 基于USB接口的设备使用方便,性价比高,因此在人们的工作和生活中得到了广泛的应用,如U盘,移动硬盘,光驱,USB摄像头,USB鼠标键盘等,同时,51系列单片机以其成熟的技术和高性价比吸引了大量国内用户,被广泛应用于测控和自动化领域,因此,如果在51单片机系统中增加USB主机接口,实现对USB从机设备的控制,则该单片机系统可以充分利用现有的各种USB从机设备,大大扩展单片机系统功能。 本设计实现了在51单片机系统中增加USB主机功能,采用普通51单片机外接专用USB接口芯片的方案,这种方案虽然会使系统传输速度受到限制,而且在稳定性有所欠缺,但此方案设计灵活性高,且易于移植,为低成本产品的开发提供了广阔前景,设计中采用51单
[单片机]
51单片机串口通信的原理实例
一、原理简介 51单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1)
[单片机]
<font color='red'>51单片机</font>串口通信的原理实例
STM32F103标准库开发---定时器中断实验---通用定时器TIM3使用
一、STM32F103定时器 二、STM32F103通用定时器 1. 主要功能 通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括: 位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上); 16位向上、向下、向上/向下自动装载计数器(TIMx_CNT); 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65536之间的任意数值; 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出; 使用外部信号控制定时器和定时器互连的同步电路; 如下事件发生时产生中断/DMA:更新(计数
[单片机]
STM32F103标准库开发---<font color='red'>定时器</font>中断实验---通用<font color='red'>定时器</font>TIM3使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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