2018/3/2651单片机1.说在前面今天,将 51一些最基础的功能全部速通了一遍,问我有什么感受嘛,单片机的确挺好玩的,用心去钻研才最重要,当然,对于51而言,点一个灯,按一个键并不是终点,51还有很多可以玩的地方,等待去探索;
2.串口通信1.为什么要实现串口通信对于单片机而言,串口通信相当于单片机的交流工具,使用单片机的串口通讯可以让单片机和直连的电脑连接,或者和一些无线模块(esp8266,HC06)进行连接,达到近程或者远程的连接2.串口通信的一些基础知识1.同步通信:需要实现发送方对接收方时钟的直接控制,位和字符均同步2.异步通信:每个字符要附加两到三位的起止位和校验位,操作方便但是传输效率不高3.比特率(波特率):每秒传输二进制代码的位数4.寄存器SCON:1.八位寄存器,用来设定串行口的工作方式,设置状态(主要对SM0和SM1进行设置)在51单片机的工作方式中,采用10位异步收发器的时候较多(8位数据)2.TI为发送中断位,当发送数据停止时,内部硬件设TI为1,然后用软件再次将其清零,取消中断申请3.RI为接受中断位,当接受数据停止时,内部硬件设RI为1,然后用软件再次将其清零,取消中断申请PCON在PCON的第七位,存在波特率放大设备,当置于1,波特率放大;
3.串口的使用(设置串口初始化函数)1.确定T1的工作方式(对寄存器TMOD进行编程),设置定时器2.计算T1的初值(波特率),确定波特率一置3.启动定时器4.确定串行口的控制(SCON)5.注意中断控制(启动中断器)6.SBUF代表着数据的缓冲区,可以暂时用来存储数据
4.由此看来,串口通信和定时器和中断器可以一起使用的 //实现串口通讯
//确定T1的工作方式(TMOD)
//计算TH1和TL1的初值(高四位和低四位)
//启动串口工具 (启动T1)编程TCON的TR1位置
//确定串行口的控制
//中断控制
#include
typedef unsigned int u16;
typedef unsigned char u8;
void initusart()
{
TMOD=0X20;//0010 0000控制m1 mo为10,表示8位有效数字定时器
//设置波特率
TH1=0xf3;
TL1=0xf3;
PCON=0x80;//设置波特率翻倍
TR1=1;//设置中断开关
SCON=0X50;//设置单片机的模式:10位异步收发(常用)
ES=1;//串口中断
EA=1;//设置总中断
}
void main()
{
initusart();
while(1);//循环
}
void usart() interrupt 4//注意设置中断号
{
u8 recdata=SBUF;//接受缓冲区
RI=0;//由于硬件将电位拉高,中断,软件可以重新拉低
SBUF=recdata;
while(!TI);
TI=0;//重新将中断标志位变为0;
}
