c51的串口通讯字符串发送常见错误(蓝桥杯)

看芯片图观看串口通讯的寄存器
在这里插入图片描述
从上往下来观看芯片图进行配置
SCON配置

  1. SCON如下介绍,其中看到只有含有定时器溢出率的才是可调波特率所以一般就选方式1和方式3.
  2. 这里选用方式1,计算得出9600=(1/32)x(115200/12x(256-TH1)){这里的9600时=是自己设置的,而SYSclk为115200},计算出TH1为253,换成十六进制为0xFD,这里的TL1为0x00或0xFD都行 .
  3. 然后这里来进行位的配置,通过一下来看之需要B7为1,B6为0,REN一定要置为1,SCON需要先配置为0x1000 0000即可,这里其他不用管直接清0也行所以就直接配置就行即SCON=0x50即可

SBUF配置
这个就是来进行数据交换的。

PCON配置
多机才会使用现在不用配置

在这里插入图片描述

常见错误

  1. 首先AURX寄存器需要定义地址,并且配置时赋予0x00就行不然会出现一些bug
  2. 配置的定时1记得打开即TR1=1,SCON配置一般就是0x50
  3. 记得两个寄存器,TI是发送数据时为0,结束为1需要清0。RI是接受过程为0,结束为1记得清0。
  4. 发送字符串关于指针的理解就是,指针指向字符串时就是代表该字符串的第一个字符的首地址,每次加一地址移动一位,发送时需要用*取内容,最后判断一下为\0就是退出发送即可。
#include<reg52.h>
#include<intrins.h>

sfr AURX=0x8e;

unsigned char str[]="Welcome to my world\r\n";
unsigned char buf;

void Dis_74HC53(unsigned char i);

//=================================串口通信========
void Init_Usart(void)
{
  TMOD|=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1; 
	
  SCON=0x50;//寄存器配置错误,串口是选择方式一波特率可变 
  AURX=0x00;
  ES=1;
  EA=1;
 	
}

void Uasrt_Rountine() interrupt 4
{
  if(RI==1)
  {
	  buf=SBUF;
	  Dis_74HC53(4);
    P0=buf;
		
    RI=0;		
	}  			
}
//====================================================

void send_buf(unsigned char send)
{
   SBUF=send;
	 while(TI==0);//传送数据中TI为0,传送完毕此循环退出
	 TI=0;//该寄存器必须手动清0
}

void Send_Information(unsigned char * sendbuf)
{
	
	
  while(*sendbuf!='\0')
	{	 
		 send_buf(*sendbuf);
		 sendbuf++;
	}
}

void Delay1000us()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}




void Init_Bsp()
{
	 Dis_74HC53(5);
	 P0=0x00;
	 
   Dis_74HC53(4);
	 P0=0xff;
  
}
void main(void)
{  
	 Init_Usart();
	 Init_Bsp();
	 Send_Information(str);
   while(1);
}

void Dis_74HC53(unsigned char i)
{
    switch(i)
   {
		 case 4: P2=(P2&0x1f)|0x80;break;
		 case 6: P2=(P2&0x1f)|0xc0;break;
		 case 7: P2=(P2&0x1f)|0xe0;break;
		 case 5: P2=(P2&0x1f)|0xa0;break; 		 
	 
	 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值