定时器:属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
1.用于计时系统,可以实现软件计时,或者程序每隔一段固定时间完成一项操作
2.替代长时间的delay,提高cpu的运行效率和处理速度
定时器个数:3个 T0 T1 T2 前两个是传统单片机都有的,最后一个是stc89c52rc此型号增加的资源
不同型号的定时器个数可能不同
定时器执行原理:类似于单片机内部的一个小闹钟,根据时钟的输出信号每隔一个固定的时间,计数单元就会增加一个,当计数单元增加到设定的闹钟提醒时间时,计数单元就会向中断系统发出中断申请产生响铃提醒,使程序跳转带中断服务函数执行
STC89C52RC的T0和T1有四种工作模式
模式0:13位定时器/计数器
模式1:16位定时器/计数器(最常用的一种模式)
模式2:8位自动重载模式
模式3:两个8位计数器
51单片机时钟sysclk 也就是晶振周期 本芯片是12mhz
中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。
cpu正在处理某件事请的时候外部发生了紧急事件的请求,要求cpu暂停当前的工作转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
CPU总是先相应优先级别最高的中断请求
STC89c52rc
中断源个数:8个(外部中断0,定时器0中断,外部中断1,定时器1中断,串口中断 ,外部中断2,外部中断3)
中断优先级个数:4个
中断号
注意:中断的资源和单片机型号是关联在一起的,不同型号可能会有不同中断资源,例如中断源个数不同,中断优先级个数不同
寄存器是软硬件连接的媒介,在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另外一方面,每一个寄存器背后都连接着一根导线,控制电路的连接方式,寄存器相当于一个复杂的机器的操作按钮。
#include <REGX52.H>
#include "Delay.h" //包含Delay头文件
void Time0_Init(){
TMOD=0x01;//00000001
//TCON中可位寻址就是可以单独给每一位赋值,反之只能整体赋值也就是不可位寻址
TF0=0;//tf是中断溢出标志位,防止他一开始就中断,先赋值为0
TR0=1;//定时器设置开始 每隔1us计数加1 0-65535 赋值初值为61535
TH0=64535/256;//两个八位 因为这个是十六进制的 因此分成两个八位的 高位对256 低位对256取余
TL0=65535%256;
ET0=1;
EA=1;
PT0=0;
}
void main(){
Time0_Init();
while(1){
}
}
void Timer0_Routine() interrupt 1
{
P2_0=0;//进入中断该灯就会被点亮
}
ET0=1;
EA=1;
PT0=0;
再加上这三个即可
串口通信:是一种十分广泛的通讯接口,串口成本低,容易使用,通信线路简单,可以实现两个设备的相互通信
51单片机自带UART通用异步收发器,可以实现单片机的串口通信
单片机用的就是TTL电平:+5V表示1 0V表示0
RS232电平:-3V~15V表示1 +3-15表示0
RS485电平:两线压差+2-+6表示 1 -2到-6表示0
UART TXD RXD 全双工 异步通信 点对点通信
I2C SCL SDA 半双工 同步 可以挂载多个设备
SPI sclk mosi miso cs 全双工 同步 可以挂载多个设备
1 wire DQ 半双工 异步 可以挂载多个设备
此外还有CAN 和 usb
UART有四种工作模式
模式0:同步移位寄存器
模式1:8位uart 波特率可以变 (常用)
模式2:9位uart 波特率固定
模式3:9位uart 波特率可变
波特率:串口通信速率
检验位:用于数据验证
停止位:用于数据帧间隔
SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同地址,写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器