STC 51单片机52——自发自收串行通信

STC 51单片机52——自发自收串行通信_第1张图片

 STC 51单片机52——自发自收串行通信_第2张图片

 

#include
unsigned char ch=0;

/*    初始化函数    */
void uart_init()
{
        TMOD=0x20;                    //T1为方式2
        TL1=0xfd; TH1=0xfd;    //波特率为9600的计数初值
        SCON=0x50;                    //串口工作在方式1。允许接收
        PCON=0x00;                    //SMOD=0
        TR1=1;
        ES=1; EA=1;                     //开串口中断
}
/*    串行通信中断服务程序;     */
void receive(void) interrupt 4 using 0
{
    if(RI)
    {
        ch=SBUF;                  //读取接收的数据
        RI=0;
        P2=ch;    //    用接收到数据控制LED
        SBUF=ch;
    }
    if(TI)
        TI=0;
}
void delay(){
  unsigned char i,j;
    for(i=0;i<250;i++)
        for(j=0;j<250;j++)
            ;
    
}

void SendByte(unsigned char data1)
{  
     SBUF = data1;     //发送数据
     while(!TI);     //等待发送完成
     TI=0;     //清零发送标志位        
}

void Show_u16(unsigned int kk)    //显示16位无符号整数
{
 unsigned char a,b,c,d,e;

  e=kk%10+0x30;   //将每一位转换成ASCII码
  d=(unsigned char)(( kk/10 )%10)+0x30;
  c=(unsigned char)(( kk/100 )%10)+0x30;
  b=(unsigned char)(( kk/1000 )%10)+0x30;
  a=(unsigned char)(( kk/10000 )%10)+0x30;

  SendByte(a);  SendByte(b);  SendByte(c);  SendByte(d); SendByte(e);
  SendByte('\r'); //发送回车
  SendByte('\n');    
}

void SendString(unsigned char *pstr)
{
     while(*pstr!='\0')         //字符串是否发完
     {
         SendByte(*pstr);    //发送字符串数据
         pstr++;         //指向下一个字符
     }
    SendByte('\r'); //发送回车
  SendByte('\n');    
}
unsigned char Hello[]="Welcome to China! ";


/*    主程序    */
void main()
{    
    unsigned int temp=0x3214;
    uart_init();                    //调用初始化函数    
    ES=0;
    while(1){
        Show_u16(temp);
        delay();
      SendString(Hello);
      delay();
    } ;

}

 

你可能感兴趣的:(STC单片机,51单片机,嵌入式硬件,单片机,C51)