51单片机——串口通信

51单片机——串口通信,第1张

#include    
#include   
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:附上一张接线图,总之串口通信还是挺简单的,可以作为一个调试结果的小助手。

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/797784.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存