51单片机串口通讯使用

 全双工:通信双方可以在同一时刻互相传输数据

半双工:通信双方可以互相传输数据,但必须分时复用一条数据线

单工:通信只能有一方发送到另一方,不能反向传输

异步:通信双方各自约定通信速率

同步:通信双方靠一根时钟线来约定通信速率

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流) 

使用stc-isp软件中的波特率计算器生成指定函数,配置如下:

#include <REGX52.H>
#include "Delay.h"

unsigned char Sec;

//使用波特率计算器生成的函数
void UartInit(void)		//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}


//是一个子函数,串口发送一个字节,Byte
void UART_SendByte(unsigned char Byte){
	SBUF=Byte;	//发送数据
	while(TI==0); //检查是否发送成功,发送成功TI=1;否则一直发送
	TI=0;	//发送成功后进行软件复位,TI=0
}

void main(){
	//在main函数中进行调用,初始化
	UartInit();
	while(1){
		
		UART_SendByte(Sec);
		Sec++;
		Delay(1000);
	}
}

 接收发送

#include <REGX52.H>
#include "Delay.h"

unsigned char Sec;

//使用波特率计算器生成的函数
void UartInit(void)		//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率,这里0x50可以实现接收数据
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;		//启动所有中断
	ES=1;		//启动串口中断
}

//是一个子函数,串口发送一个字节,Byte
void UART_SendByte(unsigned char Byte){
	SBUF=Byte;	//发送数据
	while(TI==0); //检查是否发送成功,发送成功TI=1;否则一直发送
	TI=0;	//发送成功后进行软件复位,TI=0
}


void main(){
	//在main函数中进行调用,初始化
	UartInit();
	while(1){

	}
}

//中断函数,后面有interrupt 4才是中断函数,当出现中断号4时就会执行当前函数
//当发送数据时,就会执行中断函数 
void UART_Routine() interrupt 4{
	// 需要判断一下,因为接收和发送占用同一条线,接收为RI,发送为TI
	if(RI==1){	//接收中断
			P2=~SBUF;	
			UART_SendByte(SBUF);	//把接收到的数据再发送出去
			RI=0;	//最后需要要复位
	}
}

在这里进行发送数据,这里发送就不需要在前面加上0x了 

当接收位置为文本模式的时候: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值