1、串口通信相关概念说明
通信方式 | 分为半双工、单工、全双工 |
数据传输 | 一位一位的接收或发送 |
波特率 | 每秒钟传输的位数 |
TH1和TL1 | 设置波特率参数 |
TMOD | 设置定时器1的工作方式 |
SCON | 串行接口控制寄存器 |
SBUF | 串行接口数据发送与接收缓冲器 |
串行通信可以与外部建立起数据传输渠道,串口中断配置只需记住几个寄存器就行了,
初始化:SCON =0x50; //串口配置成模式1 ;
TMOD |=0x20;//定时器1,方式2,8位自动重装
TH1=256-(unsigbedchar)(SYSTEMCLOK/BAUDRATE/384+0.5);//定时初值
ES=1; //串口中断打开
TR1=1; //启动定时器1
EA=1; //总中断打开
在51单片机中需要使用定时器1来产生波特率,因此,如果使用串口通信,则定时器1就不能做其他用途,在初始化串行接口模块的时候,除了要配置SCON寄存器之外,还有根据波特率参数设置定时器1的技术初值。
2、SCON与AUXR寄存器说明
上述两幅图比较清楚的看出寄存器各个位的功能;按照设计的要求,为寄存器赋值不同的值;
3、相关例子
3.1 题目:接收一段字符串;
#include "reg52.h"
#include "intrins.h"
#define BAUD 2400 //波特率
#define SYSTEMCLOCK 11059200L //系统时钟频率
sfr AUXR = 0x8e; //新增辅助寄存器
void uart_sendstring(unsigned char *str);
//延时函数delay();
void delay()
{
unsigned char i, j;
for(i=0;i<180;i++)
for(j=0;j<200;j++);
}
void main(void)
{
SCON = 0x50; //串口参数为模式1和允许接收
AUXR = 0x40;
TMOD = 0x00;
TL1 = (65536 - (SYSTEMCLOCK/4/BAUD));
TH1 = (65536 - (SYSTEMCLOCK/4/BAUD))>>8;
TR1 = 1; //启动定时器1
EA=1; //使能总中断
ES=1; //使能串口中断
while(1){
uart_sendstring("Hello,World.\r\n"); //接受到的数据
delay();
}
}
void uart_sendstring(unsigned char *str)
{
unsigned char *s;
s = str;
while(*s != '\0')
{
SBUF = *s; //将数据放进SBUF缓冲器
while(TI == 0); //等待发送数据完成
TI = 0; //清除发送完成标志
s++;
}
}
3.2 USB—驱动程序
1-在windows 7及以上操作系统中安装驱动程序,需以管理员模式运行驱动文件。
2-驱动安装完成后,连接CT107D竞赛板 和 PC机,可在设备管理器中查看相应串口。
3-驱动安装选择
X86文件夹中为32位windows 系统驱动程序
X64文件夹中为64位windows 系统驱动程序
当安装完成后可以打开设置——设备——其它设备。
3.3 串口调试助手
设置波特率、串口:
输出显示为: