目录
1.简介
作用:设备间数据通讯的方式
分类:协议分为RS-232、RS-422(速度不同) 电平分为:UART电平1为-3~-15V的电压, 逻辑0为3~15V。TTL电平:高电平>=2.4V,输出低电平<=0.4V
使用:1.接线方式 RXD:数据输入引脚 TXD:数据发送引脚
2.代码方式:想要接收数据 char data = SBUF 想要发送数据 SBUF = data
3.配置波特率和串口助手
2.使用串口—单片机接受字符
#include "reg52.h" //超声波控制LED
sfr AUXR=0x8e;
void UartInit(void);
void Delay500ms();
void main(void)
{
char data1='a';
UartInit();
while(1){
Delay500ms();
SBUF= data1;
}
}
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器时钟12T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
3.串口寄存器配置
作用:配置相同的波特率
方式1:使用串口助手配置
方式2:手动配置(查看单片机手册)
采用 8 4 2 1法配置。
SCON=0x50; //采用工作方式1进行通讯
PCON &= 0x7F; //要清0就 &上0
ET1=0;//串口用的定时器1,关闭中断。配置相同的波特率
//TCON 定时器控制寄存器
TR1=1; //打开定时器1
//TMOD 定时器模式寄存器
TMOD &=0x0F; //&0就清0
TMOD |=0x20; // |1就变1
TH1=0xFD; //高位 自动重装时TH1将自动装入TL1
TL1=0xFD; //低位
手动配置串口寄存器的代码:
#include "reg52.h" //超声波控制LED
sfr AUXR=0x8e;
void Delay500ms();
void main(void)
{
char data1='a';
SCON=0x50;//采用工作方式1进行通讯
PCON &= 0x7F; //要清0就 &上0
ET1=0;//串口用的定时器1,关闭中断。配置相同的波特率
//TCON 定时器控制寄存器
TR1=1; //打开定时器1
//TMOD? 定时器模式寄存器
TMOD &=0x0F; //&0就清0
TMOD |=0x20; // |1就变1
TH1=0xFD; //高位? ? ? 自动重装时TH1将自动装入TL1
TL1=0xFD; //低位
while(1){
Delay500ms();
SBUF= data1;
}
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
4.串口发送字符串
复习了一下:字串初始化和打印、指针、数组指针
#include "reg52.h" //超声波控制LED
sfr AUXR=0x8e;
void Delay500ms();
void init_usb(void);
void main(void)
{
char *data1="hello world \r\n";
char *p=data1;
init_usb(); //串口初始化
while(1){
p=data1;
Delay500ms();
while(*p!='\n'){
SBUF= *(p++);
while(!TI);
TI=0;
}
}
}
void init_usb(void)
{
SCON=0x50;//采用工作方式1进行通讯
PCON &= 0x7F; //要清0就 &上0
ET1=0;//串口用的定时器1,关闭中断。配置相同的波特率
//TCON 定时器控制寄存器
TR1=1; //打开定时器1
//TMOD? 定时器模式寄存器
TMOD &=0x0F; //&0就清0
TMOD |=0x20; // |1就变1
TH1=0xFD; //高位? ? ? 自动重装时TH1将自动装入TL1
TL1=0xFD; //低位
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
5.串口接受数据
不使用中断接受数据缺点是:不能及时相应,有延迟
使用中断接受数据,没有延迟:
#include "reg52.h" //超声波控制LED
sfr AUXR=0x8e;
sbit led1=P3^6;
sbit led2=P3^7;
void Delay500ms();
void init_usb(void);
void sendmesege(char *p);
void main(void)
{
char data2;
init_usb(); //串口初始化
while(1){
p=data1;
Delay500ms();
Delay500ms();
sendmesege("hello world");
data2=SBUF; //接受外部数据后产生中断 进入interrupt 4
}
}
void sendmesege(char *p)
{
char *data1=p;
while(*data1 != '\0'){
SBUF= *(data1++); //发送完成后产生中断 进入interrupt 4
while(!TI);
TI=0;
}
}
void UART_Pountine(void) interrupt 4
{
if(TI){
//Delay500ms();
led2=~led2; //每次发送完一个字符h e l就进入一次,因为太快,所以感觉一直亮着
}
if(RI){
RI=0;
led1=~led1;
}
}
void init_usb(void)
{
SCON=0x50;//采用工作方式1进行通讯
PCON &= 0x7F; //要清0就 &上0
ET1=0;//串口用的定时器1,关闭中断。配置相同的波特率
//TCON 定时器控制寄存器
TR1=1; //打开定时器1
//TMOD? 定时器模式寄存器
TMOD &=0x0F; //&0就清0
TMOD |=0x20; // |1就变1
TH1=0xFD; //高位? ? ? 自动重装时TH1将自动装入TL1
TL1=0xFD; //低位
//TI 中断请求标志位 RI中断请求标志位
EA=1;ES=1; //总中断允许位 串口中断允许位
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
6.串口支持 字符串-单词的指令控制
原理是:接受到的字符存放在字符串里,然后和设定字符串比较,执行相应操作
注意点:不同的串口助手可能不兼容,这个单片机使用6.86的串口助手正常识别字符,6.91的不行
#include "reg52.h" //超声波控制LED
#include "string.h"
sfr AUXR=0x8e;
sbit led1=P3^6;
sbit led2=P3^7;
void Delay500ms();
void init_usb(void);
void main(void)
{
char *data1="hello world \r\n";
char *p=data1;
init_usb(); //串口初始化
while(1){
p=data1;
Delay500ms();
Delay500ms();
while(*p != '\0'){
SBUF= *(p++); //发送完成后产生中断 进入interrupt 4
while(!TI);
TI=0;
}
//data2=SBUF; //接受外部数据后产生中断 进入interrupt 4
}
}
void UART_Pountine(void) interrupt 4
{
static int i=0;
static char cmd[12];
if(TI){
//Delay500ms();
led2=~led2; //每次发送完一个字符h e l就进入一次,因为太快,所以感觉一直亮着
}
if(RI){ //接受外部数据后产生中断 进入interrupt 4
RI=0;
cmd[i]=SBUF;
i++;
if(strstr(cmd,"en")){
led1=0;
i=0;
memset(cmd,'\0',12);
}
if(strstr(cmd,"cl")){
led1=1;
i=0;
memset(cmd,'\0',12);
}
if(i==12){
i=0;
}
}
}
void init_usb(void)
{
SCON=0x50;//采用工作方式1进行通讯
PCON &= 0x7F; //要清0就 &上0
ET1=0;//串口用的定时器1,关闭中断。配置相同的波特率
//TCON 定时器控制寄存器
TR1=1; //打开定时器1
//TMOD? 定时器模式寄存器
TMOD &=0x0F; //&0就清0
TMOD |=0x20; // |1就变1
TH1=0xFD; //高位? ? ? 自动重装时TH1将自动装入TL1
TL1=0xFD; //低位
//TI 中断请求标志位 RI中断请求标志位
EA=1;ES=1; //总中断允许位 串口中断允许位
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
7.蓝牙串口通讯
1.接线
2.下载HC-08APP手机串口助手,就和电脑一样操作
今天的文章串口 蓝牙_spp蓝牙串口「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83101.html