2024年最全C51--定时器_c51单片机计数器应用,物联网嵌入式开发面试题集2024版

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

一、定时器

1、概念
C51中的定时器和计数器是同一硬件电路支持的,通过寄存器配置不同,就可以当作定时器或者计数器使用。
定时器:用内部的震荡电路数数。每过一个机器周期,计数存储器的值就加 1 。
计数器:读取针脚的数据(每来一个负跳变信号就加1,完成计数)
信号输入的引脚:P3.4、P3.5
标准的C51有两个定时器/计数器:T0和T1,两个使用方法一致
C52相比于C51,多了一个T2

定时器和计数器,电路一样。
定时器或计数器的本质就是让单片机某个部件数数
当定时器用时,靠内部震荡电路数数
当计数器用时,数外面的信号,读取针脚的数据

2、定时器如何定时
本质原理:每过一个机器周期,就加一,在寄存器中加

2.1、晶振
晶振(晶体振荡器)又称数字电路的心脏
振荡电路由晶振提供。11.0592MHz波特率比较稳定
2.2、时钟周期
时钟周期也称为震荡周期,定义为时钟频率的倒数-------11.0592MHZ的倒数(1/11059200s)。
是计算机中最基本的、最小的时间单位。在一个时钟周期内,cpu仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率。
2.3、机器周期
机器周期也称为cpu周期,在计算机中,为方便管理常把一条指令的执行过程划分为若干个阶段(取值、译码、执行等),每一个阶段完 成一个基本操作。每完成一个基本操作所需要的时间称为机器周期。
一个机器周期由若干个时钟周期组成。
机器周期 = N个时钟周期 = N个晶振频率倒数
机器周期 = 12x时钟周期 = 12x(1/11059200s) = 12000000/11059200um = 1.085微秒

2.4、STC89C51RC/RD+系列有两种计数速率:
12T模式——每12个时钟加1,与传统8051单片机相同;
6T模式,每6个时钟加1,速度是传统8051单片机2倍;
可以在stc-isp中设置。

二、寄存器

1、寄存器
sfr是Special Function Register(特殊功能寄存器)的缩写。用来管理定时器。
是用来对片内各种功能模块进行管理、控制、监视、的控制寄存器和状态寄存器,是一个特殊功能的RAM区。
存储二进制代码0/1,暂存指令数据地址。
2、TCON
TCON为定时器 / 计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求中断源等。

TR0:定时器T0运行控制位,B4,开始数数。
从TCON寄存器的B4(bit4)可以知道,通过编程让这个位TR0为 1 的时候,开始计时,相当于按下闹钟。TR0 = 1。
TF0:定时器T0溢出中断标志,B5,爆表
从TCON寄存器的B5(bit5)可以知道爆表,当爆表的时候,硬件会修改bit5位的数据为:1(置 1),TF0=1。
如果不用中断,TF0要手动清0。如果用中断,硬件会自动置零。
TR1:定时器T1运行控制位,B6
TF1:定时器T1溢出中断标志,B7

AUXR降低单片机对外界的电磁干扰,没影响可以不用配置。
TMOD定时器模式寄存器,选择工作方式1,TMOD的bit0、bit1配置成0,1——16位定时器功能。

两位寄存器,有4种模式(M1,M0(bit1,bit0))
00——13位定时器,TL0用低5位,TH0用8位
01——16位定时器,TL0、TH1全用
10——8位自动重装载定时器,溢出时TH0值自动装入TL0(用的少)
11——双8位定时器,TL0和TH0分别作为1个8位计时器。

TL0和TH0初始化配置(可用程序员计算器来计算出来)
TL0/TH0分别为8位(低8位+高8位),加起来为16位
TL1/TH1分别为8位,加起来为16位

2^8=256 次溢出爆表。
2^16=65536次溢出爆表。
65536*1.085=71107us=71ms爆表
如果要数20ms出来,需要从71-20=51ms开始数,51为初始值
(10ms,数一下用时1.085us,共数10ms/1.085us=9216下)
65536-9216=56320,从56320开始,不断+1,到65536

56320转换
HEX(十六进制):DC00
DEC(十进制):56320
OCT(八进制):156000
BIN(二进制):1101 1100 0000 0000

十六进制为:DC00,所以TL0 为:00 ;TH0为:DC

void Timer0Init(void) //10微秒@11.0592MHz
{		//0x十六进制
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}

/\*
1、配置一个定时器0工作模式16位计时:TMOD = 0x01;
2、给初值,定一个10ms : TL0 = 0x00; TH0 = 0xDC; 
3、开始计时 :TR0 = 1
4、爆表,累积到 1s 再操作LED
 爆表了,变量加一,加100次就是 1s,每隔 1s转换LED状态
 TF0 == 1
\*/


#include "reg52.h"

sbit led = P3^6;

void main()
{
	int cnt = 0;
	led = 1;
	
	TMOD = 0x01;		//配置
	TL0 = 0x00;		  //给初值
	TH0 = 0xDC;
	TR0 = 1;		    //开始计时
	TF0 = 0;
	
	while(1){
		if(TF0 == 1){		//当爆表的时候,硬件会修改bit5位的数据为:1(置 1),TF0=1。
			TF0 = 0;	    //如果不用中断,TF0要手动清0。如果用中断,硬件会自动置零。
			cnt++;				//统计报表的次数
			TL0 = 0x00;		//重新给初值
			TH0 = 0xDC;
			if(cnt == 100){ //爆表100次,经过1s
				cnt = 0;			//100次表示1s,重新计算cnt
				led = !led;		//每经过1s,翻转LED状态
			}
		}


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/f33793d108d7e4fc4fb05155817a578f.png)
![img](https://img-blog.csdnimg.cn/img_convert/a0a8d417f2d4374e8d2a0df4bcc61220.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

)]

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值