学习STC51单片机10(芯片为STC89C52RC)
我们来做做案例将定时器的作用放到实际单片机上面看看
/*通过定时器0,控制LED亮一秒,灭一秒,晶振11059200Hz*/
大家有没有想过为什么会认识TF0等等呢
TF0 是定时器 0 的溢出标志位
TR0是定时器 0 的运行控制位
定时器 0 是一个 16 位计数器,由 TH0(高 8 位)和 TL0(低 8 位)组成
TL0(Timer 0 Low Byte)是定时器 0 的低 8 位寄存器,用于存储定时器 0 的计数值的低 8 位。它与TH0(定时器 0 的高 8 位寄存器)共同组成一个 16 位的计数器。
在回顾一下reg52.h文件的作用
reg52.h 是用于 51 单片机(特别是 80C52 等型号 )开发的 C 语言头文件,主要作用如下:
1. 寄存器定义
51 单片机内部有许多特殊功能寄存器(SFR),用于控制单片机的各种功能,像定时器、串口、中断系统等。reg52.h 中用 sfr 关键字对这些特殊功能寄存器进行了定义,确定了它们在单片机内存中的地址,比如:
sfr P0 = 0x80; // 定义P0口寄存器,地址为0x80
sfr TMOD = 0x89; // 定义定时器模式控制寄存器,地址为0x89
这样在程序里就能直接通过名字(如 P0、TMOD )来操作这些寄存器,方便对单片机硬件进行控制 。
2. 位定义
单片机中很多寄存器的位具有特定功能,reg52.h 利用 sbit 关键字把寄存器中的某些位定义成独立变量,便于单独操作。例如:
sbit TF0 = TCON^5; // 定义定时器0溢出标志位,是TCON寄存器的第5位
sbit TR0 = TCON^4; // 定义定时器0运行控制位,是TCON寄存器的第4位
通过这种定义,在程序中可以直接对 TF0、TR0 等位进行读写操作,像检测定时器是否溢出(查看 TF0 状态 )、启动或停止定时器(设置 TR0 ) 。
3. 简化编程
有了 reg52.h 头文件,不用去记忆每个寄存器及其位的具体地址,直接使用定义好的名称编写代码,提高了编程效率,也增强了代码的可读性和可维护性 。比如要设置定时器 0 工作模式,直接写 TMOD = 0x01; ,而不用关心 TMOD 寄存器在内存中的具体地址是多少 。
4. 支持扩展功能
相较于 reg51.h (用于标准 8051 单片机 ),reg52.h 针对 8052 等扩展型单片机,额外定义了一些扩展功能相关的寄存器和位。比如 8052 单片机比 8051 多了定时器 T2,reg52.h 中就有对定时器 T2 相关寄存器(如 TH2、TL2 等 )的定义,使程序能对这些扩展功能进行控制 。