学习日志-C51-串口通信

学习日志-C51-串口通信
串口控制LED灯亮灭
1.常见通信串口比较
在这里插入图片描述
分类1:
单工:只能由甲向乙传输信号,一根传输线。
半双工:数据可以在双方传输,但同一时刻只能单方传输,发送数据的同时不能接收数据,一根传输线。
全双工:数据可以在双方传输,发送数据的同时也能接收数据,需两根传输线。
分类2:
同步:双方都有时钟引脚,双方的时钟引脚连接在一起,信息帧为一次通信传送的数据,传输效率高。
异步:无CLK引脚,以固定格式的数据帧进行传输,一帧一帧进行传输,要求双方为相同的传输速度。以0为起始位,1为停止位,需要多用两位进行传输,有效传输效率为80%,因而传输效率低。
传输速度:
波特率:单位时间传输多少码元.
比特率:单位时间传输了多少个二进制位数。
2.初始化配置
(1) SCON
在这里插入图片描述
在这里插入图片描述
SCON为串行控制寄存器,初始化时选择模式1,TI、RI置0,因而SCON设置为0100 0000。
使用串行通信模式1时,其波特率可变,可变的波特率由定时器1提供,因而也需要对定时器1进行初始化,其初始化可参考定时器一节。
(2)PCON
在这里插入图片描述
(3)配置
可直接使用STC-ISP的串口波特率计算器得到代码。
在这里插入图片描述
按照开发板晶振标注配置系统频率,可按照图示进行配置。由于需使用定时器1,因而初始化函数加上语句EA=1;ES=1;将中断允许总开关和串口中断允许开关打开即可。
3.代码实现
该代码可实现串口输入控制LED亮灭。
(1)串口初始化函数

#include <REGX52.H>
void Uart1_Init()	//4800bps@11.0592MHz
{
	PCON &= 0x7F;		//首位置0,不加倍
	SCON = 0x50;		//工作方式1,并置REN为1,为串行允许接收状态
	TMOD &= 0x0F;		//设置定时器1模式
	TMOD |= 0x20;		//0010 0000,模式2
	TL1 = 0xFA;			//设置初值
	TH1 = 0xFA;			//设置初值
	ET1 = 0;		//定时器禁止中断	
	TR1 = 1;	//定时器开启
EA=1;    //中断允许总开关开启
ES=1;	//允许串口中断
}
void UART_SendByte(unsigned char Byte)//由串口发送一个字节数据
{
	SBUF=Byte;//令SBUF读入Byte的值,将数据写入SBUF即可发出
	while(TI==0);//由TI发送完成标志位进行检测,发送完成跳出循环
	TI=0;//让TI置0,复位
}

(2)主函数

#include <REGX52.H>
#include "UART.h"
void main()
{
	Uart1_Init();//初始化
	while(1)
	{
	}


}
void UART_Routine() interrupt 4//中断程序
{
	if(RI==1)					//接收标志位为1
	{
		P2=~SBUF;	//接收为1,则接收数据,由于P2口为0时灯亮,因而取反			
		UART_SendByte(SBUF);	//将收到的数据返回串口
		RI=0;					//接收标志位复位
	}
}

在这里插入图片描述
串口助手区如上图所示,选取对应串口与波特率,输入AA,取反则LED8~LED1为0101 0101(低电平点亮)。
在这里插入图片描述

  • 17
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值