STC89C52RC的定时器/计数器

这篇具有很好参考价值的文章主要介绍了STC89C52RC的定时器/计数器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、STC89C52RC的定时器/计数器

二、定时器/计数器的工作方式如何选择

三、使用Timer0实现1秒定时

四、使用Timer1实现计数器功能

一、STC89C52RC的定时器/计数器

STC89C52RC芯片内置了2个定时器/计数器(Timer0和Timer1),这两个模块可以用于实现定时和计数功能。

这两个定时器/计数器模块的主要特性如下:

定时器和计数器模式可选,可通过软件控制模式选择。

可以设置计数/定时的初值和重装载值,通过设置初值和重装载值可以实现不同的计数/定时功能。

可以通过软件或硬件触发启动定时器/计数器,并可以根据需要启用或禁用定时器/计数器中断。

可以设置定时器/计数器的时钟源和分频系数,以适应不同的应用场景。

需要注意的是,在使用Timer0和Timer1时,需要根据具体的应用需求设置不同的定时器/计数器模式、时钟源、分频系数和初值等参数。并且,在启用定时器/计数器中断时,还需要设置相应的中断向量表和中断服务程序。

二、定时器/计数器的工作方式如何选择

STC89C52RC芯片中的定时器/计数器共有四种工作方式,分别是模式0、模式1、模式2和模式3,下面分别介绍它们的工作方式及适用场景:

模式0:13位定时器模式

在模式0下,定时器/计数器的计数值为TH0和TL0组成的13位数值,当计数器溢出时,TH0和TL0将重新装载初值。在这种模式下,定时器/计数器的计数精度相对较低,适用于计数范围比较小的场合。

模式1:16位定时器模式

在模式1下,定时器/计数器的计数值为TH0和TL0组成的16位数值,当计数器溢出时,TH0和TL0将重新装载初值。在这种模式下,定时器/计数器的计数精度较高,适用于计数范围比较大的场合。

模式2:8位自动重装载定时器模式

在模式2下,定时器/计数器的计数值为TH0组成的8位数值,当计数器溢出时,TH0将重新装载初值,并置位TF0标志位。在下一个计数周期,定时器/计数器将继续计数,直到再次溢出,重复上述操作。在这种模式下,定时器/计数器的计数精度较高,同时能够自动重新装载初值,适用于需要周期性定时的场合。

模式3:16位自动重装载定时器模式

在模式3下,定时器/计数器的计数值为TH0和TL0组成的16位数值,当计数器溢出时,TH0和TL0将重新装载初值,并置位TF0标志位。在下一个计数周期,定时器/计数器将继续计数,直到再次溢出,重复上述操作。在这种模式下,定时器/计数器的计数精度较高,同时能够自动重新装载初值,适用于需要周期性定时的场合,计数范围较大。

三、使用Timer0实现1秒定时

在STC89C52RC芯片中,Timer0可以用来实现定时功能。具体步骤如下:

将TMOD寄存器的低四位设置为0001,表示使用Timer0的模式1,即16位定时器模式。

设置Timer0的初值,即将TL0和TH0寄存器清零,并将计数值赋给TH0寄存器。

开始计时,即打开定时器中断开关(ET0)和总中断开关(EA)。

在中断服务程序中,每当Timer0计数到0时,重新设置初值,并执行定时操作。

下面是一段示例代码,实现每隔1秒LED闪烁一次的功能:
 

#include <reg52.h>

sbit led = P1^0; // LED连接到P1.0

void timer0_isr() interrupt 1 { // Timer0中断服务程序
    TH0 = 0xFC; // 重新设置初值
    TL0 = 0x66;
    led = ~led; // LED翻转
}

void main() {
    TMOD = 0x01; // 设置Timer0为模式1
    TH0 = 0xFC; // 设置Timer0的初值为65536-110592/12/2=252,即0xFC
    TL0 = 0x66;
    EA = 1; // 打开总中断开关
    ET0 = 1; // 打开Timer0中断开关
    TR0 = 1; // 启动Timer0
    while(1) {}
}


在上述代码中,TH0和TL0寄存器的初值为252,即0xFC。这是因为STC89C52RC的时钟频率为11.0592MHz,而Timer0的计数时钟频率为时钟频率的1/12,即921.6kHz。当计数器达到0时,计数器的值为65536,即0x10000,需要重新设置初值为252,这样定时时间就是1秒。由于定时器中断的时间精度和系统时钟频率有关,可能存在一定的误差,实际应用中需要根据需要进行调整。

四、使用Timer1实现计数器功能

在STC89C52RC芯片中,Timer1可以用来实现计数器功能。具体步骤如下:

将TMOD寄存器的高四位设置为0010,表示使用Timer1的模式2,即8位自动重装计数器模式。

设置Timer1的初值,即将TL1和TH1寄存器清零,并将计数值赋给TH1寄存器。

开始计数,即打开定时器中断开关(ET1)和总中断开关(EA)。

在中断服务程序中,每当Timer1计数到0时,将计数器的值加1。

下面是一段示例代码,实现每隔1秒计数器加1,当计数器的值达到10时,停止计数:

#include <reg52.h>

sbit led = P1^0; // LED连接到P1.0
unsigned char counter = 0; // 计数器

void timer1_isr() interrupt 3 { // Timer1中断服务程序
    TH1 = 0x3C; // 重新设置初值
    TL1 = 0xAF;
    counter++; // 计数器加1
    if(counter == 10) { // 计数器达到10时停止计数
        ET1 = 0; // 关闭Timer1中断开关
        led = 0; // 关闭LED
    }
}

void main() {
    TMOD = 0x20; // 设置Timer1为模式2
    TH1 = 0x3C; // 设置Timer1的初值为15536
    TL1 = 0xAF;
    EA = 1; // 打开总中断开关
    ET1 = 1; // 打开Timer1中断开关
    TR1 = 1; // 启动Timer1
    while(1) {
        led = 1; // 点亮LED
    }
}


在上述代码中,TH1和TL1寄存器的初值为15536,即0x3CAF。这是因为STC89C52RC的时钟频率为11.0592MHz,而Timer1的计数时钟频率为时钟频率的1/12,即921.6kHz。当计数器达到0时,计数器的值为65536,即0x10000,需要重新设置初值为0x3CAF,这样计数器的溢出时间就是1秒。文章来源地址https://www.toymoban.com/news/detail-469682.html

到了这里,关于STC89C52RC的定时器/计数器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • STC89C52RC单片机原理图详解

    STC89C52RC单片机原理图详解

    目录 1、单片机整体模块 2、 LED模块 3、独立按键模块 4、数码管模块 5、LCD1602模块 6、矩阵按键模块​编辑 7、串口通信模块 8、LED点阵屏模块 单片机使用的是TTL电平(一种电平的规范),规定为0V为低电平,5V为高电平; 字母上有一横,意为低电平有效。 单片机上电时,所有

    2024年02月05日
    浏览(10)
  • 基于STC89C52RC设计的心形流水灯设计

    基于STC89C52RC设计的心形流水灯设计

    基于STC89C52RC设计的心形流水灯设计 一·硬件设计分析 1.1 主控电路 主控单片机选择为STC89C52RC的 LQFP-44(10x10)封装 注意: 使用51单片机需要注意,如果需要使用的单片机的P0口,则需要在P0的IO口上接上一个4.7K-10K左右的上拉电阻。   上拉电阻的作用: 给单片机的I/O口拉高电平

    2024年02月08日
    浏览(7)
  • 单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    目录 1.独立按键控制LED灯亮灭 2.独立按键控制LED灯状态 3.独立按键控制LED灯显示二进制 4.独立按键控制LED灯位移 5.附录 独立按键控制LED灯状态,在独立按键按下时,LED灯点亮,松手后LED灯熄灭。独立按键按下为0,松开为1,在STC89C52RC芯片上,P2为LED灯IO口,P2_0表示第一个LED灯

    2024年02月01日
    浏览(17)
  • 基于STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计

    基于STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计

    一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅。 AD9851.c AD9851.h LCD12864.c LCD12864.h EC11.c EC11.h main.c

    2024年02月05日
    浏览(9)
  • STC89C52原理

    STC89C52单片机介绍 STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核 标准功能 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计

    2024年02月08日
    浏览(9)
  • 89C52RC烧录程序记录

    89C52RC烧录程序记录

    首先打开STC-ISP烧录软件 把USB转TTL的线连接好,把USB转TTL的跳线帽调到5V的一边,USB转TTL的RXD接51单片机的P3.1TXD端口,USB转TTL的TXD接51单片机的P3.0RXD端口,USB转TTL的GND接51单片机的随意一个GND端口,USB转TTL的5V接51单片机的VCC端口(随意一个),至此连线全部完成。 我的单片机

    2024年02月08日
    浏览(5)
  • 89C52RC普中单片机

    89C52RC普中单片机

    资料下载 普中科技--各型号产品资料下载链接 - STM8单片机 - 普中开源电子分享网 - Powered by Discuz! (prechin.net) 2023-06-28  1.开发板    2.软件 keil,stc-isp。 1.点亮led 89C52RC芯片LED模块是P2口。       2.led1一秒闪烁  3.LED流水灯  4.独立按键控制led亮灭(按下key1亮,松手灭) 5.独立按键

    2024年02月11日
    浏览(12)
  • 什么是STC89C52单片机

    什么是STC89C52单片机

    STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功

    2024年02月13日
    浏览(14)
  • 【STC89C52】独立键盘和矩阵键盘

    【STC89C52】独立键盘和矩阵键盘

    今天我分享的是基于STC89C52的独立键盘与矩阵键盘实验的学习笔记。希望对你有所帮助! 目录 一、原理图分析  二、独立键盘 三、矩阵键盘 键盘在现实生活中很常见,手机的虚拟键盘,电脑的实体键盘。 键盘是由一个个按键构成,按键常态下与两端触点断开,按下时与两端

    2023年04月12日
    浏览(5)
  • 【mcuclub】STC89C52单片机最小系统讲解

    【mcuclub】STC89C52单片机最小系统讲解

        3.1、主芯片 STC89C52是STC公司生产的一种低功耗、高性能8位微控制器 器件参数: 1、增强型8051单片机,指令代码完全兼容传统8051 2、工作电压:5.5V~3.3V 3、工作频率范围:0~40MHz,实际工作频率可达48MHz 4、用户应用程序空间为8K字节(程序空间) 5、片上集成512 字节RAM(

    2024年02月03日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包