51单片机-串口

文章介绍了串行接口(串口)的基本概念,包括异步串行通信UART,TTL和RS232电平标准。串口通信中,数据通过SBUF寄存器进行发送和接收,并且在UART中,通信双方需约定波特率。文章还提供了一个简单的应用示例,展示如何通过单片机控制LED灯并与PC端进行串口通信。
摘要由CSDN通过智能技术生成

1.串口基本认知

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(全双工),可以直接利用电话线作为传输线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢.

2.异步串行是什么

异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送,

UART包含TTL电平的串口和RS232电平的串口.

  • TTL

TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计算机处理器控制的设备

内部各部分之间通信的标准技术。TTL电平信号应用广泛,是因为其数据表示采用二进制规定,

+5V等价于逻辑“1”,0V等价于逻辑“0”.

数字电路中,由TTL电子元器件组成电路的电平是个电压范围,规定:

输出高电平>=2.4V,输出低电平<=0.4V;

输入高电平>=2.0V,输入低电平<=0.8V;

  • RS232

RS232也称标准串口,最常用的一种[串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率20kb/s

,RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其传送距离最大为约15米。所以RS-232适合本地设备之间的通信.

3.串口通信

  • USB转TTL模块

该模块使用ch340通信

  • 串口通信接线方式

  • 串口通信中数据接收与发送过程

输入/输出数据缓冲器都叫做SBUF, 地址为99H,实际是两个独立的8位寄存器(缓冲器)

数据传输代码体现为:

想要接收数据: char data = SBUF

想要发送数据: SBUF = data

  • 注意

UART是异步串行接口,通信双方使用的时钟不同,因为双方硬件配置不同,但是需要约定通信

速度,即使用配置统一波特率.

4.串口通信的简单应用

  • 实现单片机向PC端发送一个字符串

当单片机发送字母l,点亮LED1,发送字母m关闭LED1.

  • 示例代码如下

#include "reg52.h"
#include "intrins.h"
sfr AUXR = 0x8E; //定义SBUF缓存器地址
sbit LED1 = P3^7;
char cmd;

void UartInit(void) //9600bps@11.0592MHz
{
AUXR = 0x01;
SCON = 0x50; //配置串口工作方式1,REN使能接收
TMOD &= 0x0F;
TMOD |= 0x20;//定时器1工作方式位8位自动重装
TH1 = 0xFD;
TL1 = 0xFD;//9600波特率的初值
TR1 = 1;//启动定时器1
EA = 1;//开启总中断
ES = 1;//开启串口中断
}

void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
           do
        {
    do
{
while (--k);
        } while (--j);
    } while (--i);
}

void sendByte(char data_msg)
{
SBUF = data_msg;
while(!TI);
    TI = 0;
}

void sendString(char* str)
{
while( *str != '\0'){ //\0字符串结束标志
sendByte(*str);
    str++; //指针
    }
}

void main()
{
    LED1 = 1;
//配置C51串口的通信方式
UartInit();
while(1){
Delay1000ms();
//往发送缓冲区写入数据,就完成数据的发送
sendString("hello world\r\n"); //    \r\n换新行
    }
}

void Uart_Handler() interrupt 4    //串口中断
{
if(RI)//中断处理函数中,对于接收中断的响应
{
    RI = 0;//清除接收中断标志位
    cmd = SBUF;
if(cmd == 'l'){
    LED1 = 0;//点亮LED1
}
if(cmd == 'm'){
    LED1 = 1;//熄灭LED1
    }
}
if(TI);//中断处理函数中,对于发送中断的响应
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucas.1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值