蓝桥杯单片机-串行接口

本文介绍了蓝桥杯单片机比赛中串行接口的应用,包括SCON寄存器的工作模式设置,如何配置串口波特率,以及如何编写串行通信的相关函数。重点讲解了SBUF在数据传输中的角色,强调了TI和RI标志位的管理,同时提供了SBUF写入数据的技巧,以及发送字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

串行口控制寄存器SCON  (一般用01模式)

SM0

 SM1

 SM2

REN

TB8

 RB8

TI

RI

 1

   0

  1

  0 

 0 

 0

 0

        SM0和SM1设置工作方式;

SM0

SM1

功能

波特率

0

0

8位同步移位寄存器

晶振频率/12

0

1

10位UART

可变

1

0

11位

f/64  or  f/32

1

1

11位

可变

        SM2与多机通信有关,用不到赋0;

        REN使能;

        TB8与RB8是配合方式2和方式3使用的;

        TI为发送中断标志位,初始化时设置为0;

        TI=1时会向CPU发送(串口)中断请求,须在(串口中断服务函数中或if判断数据发送完成后手动置0)。数据发送完成后TI会被自动置1;(串口中断服务函数一般用来对发来的数据进行处理)

        RI同理

 

二、应用

1、将AUXR的地址赋值给某变量

sfr AUXR=0X8E;    //NOTES:sbit是位操作,用于将某个sfr中具体位赋值给一个变量

2、用STC-IAP软件生成串口波特率发生函数(默认数据即可,无需更改)

7fd593d4b512a9c0186762075adf84c2.png

3、手写相关函数(3个)

void SendBit(unsigned char i)
{
	SBUF=i;
	while(TI==0);		
	TI=0;
}

void SendString(unsigned char *i)
{
	while(*i!='\0')
	{
		SendBit(*i++);
	}
}

unsigned char ReserveBit(void)
{
	unsigned char num=0;
	while(RI==0);
	num=SBUF;
	RI=0;
	return num;
}


char putchar(char i)
{
	SendBit(i);
	return i;
}

NOTES:

1、SBUF数据传输

 通过KEIL直接给SBUF赋值(单片机发送);通过串口调试助手给SBUF赋值(单品机接收);
            若TI=0,则单片机会不断的发送数据。
            若RI=0,则单片机会不断的接受数据。

        (二者没有冲突,SBUF有两个地址,一个存将发送的数据,一个存接收到的数据)

数据的发送通常采用查询的方式(if),而数据的接收常采用(串口)中断。

2、SBUF写入数据

        SBUF可以写入16进制的数据(如SBUF=0X01),也可以写入ASKLL码(如SBUF='A')

        若令SBUF=55,则MCU会将55判断为10进制,然后转化成16进制发送。

        若想直接发送十进制的数据,可以将十进制数据赋值给变量,然后加上ASKLL码的0,如SBUF=dat+'0'

3、关于发送字符串

  • 定义的字符数组应为unsigned char或char类型的数据。
  • 发送的格式为:SendByte("hello");

 

▲文中不足之处请大家指正

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值