51单片机——串口通信

#include<reg52.h>    
#include<stdio.h>   
char putchar(char c);
void SendStr(unsigned char *s);
void SendByte(unsigned char dat);
void InitUART (void);
/*--------------------------------------------------------------
更改波特率或许可以用到此函数,调试的时候注释了,有需要可以自己用着试试
--------------------------------------------------------------*/   
//void InitUART  ( unsigned char baud)
//{
// 
//    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 始能接收 
//    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
//    TH1=256-11059200/32/12/baud;
//    TL1=TH1;	//11.0592MHZ 
//	
//    TR1   = 1;                  // TR1:  timer 1                         
//    ES    = 1;        
//	  EA    = 1;        
	PCON|=0x80; //SMOD置1,波特率倍增为19200	
//            
//}   

/*------------------------------------------------
                串口初始化
------------------------------------------------*/                         
void InitUART (void)
{
 
    SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 始能接收 
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
   	TH1=0xfd;
    TL1=TH1;	//11.0592MHZ 
	
    TR1   = 1;                  // TR1:  timer 1                         
    ES    = 1;        
	  EA    = 1;        
//	PCON|=0x80; //SMOD置1,波特率倍增为19200	
            
} 

void main (void)
{
  
	InitUART();
	printf("hellow word \r\n");	 
	SendStr("The UART test \r\n");             
		while (1)                       
    {
    
    }
}
 
/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
		 SBUF = dat;
		 while(!TI);
					TI = 0;
}
/*------------------------------------------------
                发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
 while(*s!='\0')
  {
		SendByte(*s);
		s++;
  }
}

/*------------------------------------------------
                串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 
{
    unsigned char Temp;        
 
   if(RI)                        //判断是否接收中断产生
   {
	     RI=0;                      //标志位清零
		 Temp=SBUF;                 //读入缓冲区的值
       SendByte(SBUF);
      SBUF=Temp;                 //把接收到的值再发回电脑端
 }
   if(TI)                        //如果是发送标志位,清零
     TI=0;
} 
 

char putchar(char c)  //重写此函数才能用printf输出函数
 {
	 SendByte(c);
	 return c;
 }

接收结果(下载程序成功之后记得按一下板子上的下载键)

 发送结果(发送的时候点HEX模式接收)

 当为文本模式的时候(发出的数据会自动转换成ASCII码表上16进制对应的数)

 PS:附上一张接线图,总之串口通信还是挺简单的,可以作为一个调试结果的小助手。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cx&h

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

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

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

打赏作者

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

抵扣说明:

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

余额充值