C51 串口收发,printf, 接收字符串

来源:互联网 发布:java计算器布局 编辑:程序博客网 时间:2024/06/05 00:24

串口发送,接收

在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;}

#include<reg51.h>  //stdio.h,string.h用于printf函数原型  #include<stdio.h>  void delay(unsigned int z)  {      unsigned int x,y;      for(x=z;x>0;x--)          for(y=110;y>0;y--);  }void uart_init(void)  {      TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2      TH1=0xe6;//设置波特率为2400  24M      TL1=0xe6;      TR1=1;//启动定时器/计数器1      SCON=0x50; //0101 0000.串口工作方式1,允许串行控制      PCON=0x00;//设置SMOD=0      IE=0x90; //CPU允许中断,串行允许中断      TI=1;//直接使用printf必须加入此句才能实现发送      RI=1;}  int main(void)  {      int a=99;      char *string="abde";      uart_init();     printf("hello system is restart\n");    while(1)      {          //puts("abcd");        //printf("%d  %x  %c  %s  %p\n",a,a,(char)a,string,string);        delay(1000);      }      return 0;  }  void uart_receiver(void) interrupt 4 //串口中断{    unsigned char temp; //临时变量,用于缓冲收发数据    if(RI)  // 判断是串口接收产生中断    {        RI = 0;       // 清接收中断标志        temp = SBUF;  // 接收到的数据写入缓冲BUF        SBUF = temp;  // 将收到的数据发回给电脑端    }    if (TI)    // 判断是串口发送产生中断        TI = 0;  // 清发送中断}

C51串口接收字符串:

#include<reg51.h>  //stdio.h,string.h用于printf函数原型  #include<stdio.h>  static unsigned long int SysTick = 0;#define S_RECEVIER_SIZE  32unsigned char RevBuffer[S_RECEVIER_SIZE];int revDataCount = 0;int revTempLength = 0;void delay(unsigned int z)  {      unsigned int x,y;      for(x=z;x>0;x--)          for(y=110;y>0;y--);  }void uart_init(void)  {      TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2      TH1=0xe6;//设置波特率为2400  24M      TL1=0xe6;      TR1=1;//启动定时器/计数器1      SCON=0x50; //0101 0000.串口工作方式1,允许串行控制      PCON=0x00;//设置SMOD=0      IE=0x90; //CPU允许中断,串行允许中断      TI=1;//直接使用printf必须加入此句才能实现发送      RI=1;}  int main(void)  {      int a=99;      char *string="abde";      uart_init();     printf("hello system is restart\n");    while(1)      {          //puts("abcd");        //printf("%d  %x  %c  %s  %p\n",a,a,(char)a,string,string);        delay(1000);      }      return 0;  }  void uart_receiver(void) interrupt 4 //串口中断{    unsigned char temp; //临时变量,用于缓冲收发数据    if(RI)  // 判断是串口接收产生中断    {        RI = 0;       // 清接收中断标志        temp = SBUF;  // 接收到的数据写入缓冲BUF        //SBUF = temp;  // 将收到的数据发回给电脑端        if (temp != '/n') // 以‘/n’做为接收字符串结束标志         {            RevBuffer[revDataCount] = temp;            revDataCount++;        }         else        {                 printf("%s\n", &RevBuffer[0]);            revTempLength = revDataCount;            revDataCount = 0;        }     }    //if (TI)      // 判断是串口发送产生中断    //  TI = 0;  // 清发送中断}
原创粉丝点击