蓝桥杯 — 串口通信(UART)

1、串口通信概念说明 

串口通信解释
通信方式 分为半双工、单工、全双工
数据传输 一位一位的接收或发送
波特率 每秒钟传输的位数
TH1和TL1 设置波特率参数
TMOD 设置定时器1的工作方式
SCON 串行接口控制寄存器
SBUF 串行接口数据发送与接收缓冲器

 

 串行通信可以与外部建立起数据传输渠道,串口中断配置只需记住几个寄存器就行了。

 \bullet SCON寄存器

蓝桥杯 — 串口通信(UART)_第1张图片

  内部请求源:

  • TI、RI:串行口发送、接收中断

蓝桥杯 — 串口通信(UART)_第2张图片

 \bullet IE:中断允许寄存器

    \bullet  EA:中断总控制位。EA=1,CPU开放所有中断;EA=0,CPU禁止所有中断。
    \bullet  ES:串行口中断控制位。ES=1,允许串行口中断;ES=0,屏蔽串行口中断。
    \bullet  ET1:定时/计数器TI中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
    \bullet  EX1:外部中断1中断控制位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
    \bullet  ET0:定时/计数器T0中断控制位。ET0=1,允许T0中断;ET0=0,禁止T0中断。
    \bullet​​​​​​​  EX0:外部中断0中断控制位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0断。

\bullet TCON寄存器

低4位给外部中断请求源使用,高4位给内部中断请求源定时器T0 T1使用

内部请求源:

  • TF0:定时/计数器T0溢出中断标记,当T0产生溢出时,TF0置位。当CPU响应中断后,硬件将TF0复位
  • TR0:T0的开闭控制位,TR0=1时定时计数器打开,TR0=0时定时计数器关闭
  • TF1、TR1与TF0、TR0相似。

初始化:

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、AUXR寄存器

蓝桥杯 — 串口通信(UART)_第3张图片

    上述两幅图比较清楚的看出寄存器各个位的功能;按照设计的要求,为寄存器赋值不同的值;

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 系统驱动程序

       当安装完成后可以打开设置——设备——其它设备。

蓝桥杯 — 串口通信(UART)_第4张图片

 

 3.3 串口调试助手

       设置波特率、串口:

蓝桥杯 — 串口通信(UART)_第5张图片

        输出显示为:

蓝桥杯 — 串口通信(UART)_第6张图片

4、串口通信实例二

 4.1 通过输入单个数值控制数码管显示数字

#include "reg51.h"
#include "intrins.h"

#define FOSC 11059200L
#define BAUD 115200

sfr AUXR=0x8e;	  //辅助寄存器

bit busy;

void SendData(unsigned char dat);
void allinit();

void main()
{	allinit();
	SCON=0x50;
	AUXR=0x40;	 //设置定时器T1为1T,即一个机器周期模式
	TMOD=0x20;
	TL1=(256-(FOSC/32/BAUD));
	TH1=(256-(FOSC/32/BAUD));
	TR1=1;
	ES=1;
	EA=1;
	SendData(0X08);
	while(1){
	
}
}
void Uart() interrupt 4 using 1
{
	if(RI)
	{
		RI=0;
		P0=SBUF;
	}
	if(TI)
	{
		TI=0;
		busy=0;
	}
}
void SendData(unsigned char dat)
{
	while(busy);
	busy=1;
	SBUF=dat;
}

void allinit(){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
}

 4.2 串口数据输入

蓝桥杯 — 串口通信(UART)_第7张图片

  可以观察数码管DS1第一个位置显示数字9。 

你可能感兴趣的:(【蓝桥杯单片机组】)