×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-31 发布时间:
|

串口发送,接收

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


#include  

//stdio.h,string.h用于printf函数原型  

#include  


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  

//stdio.h,string.h用于printf函数原型  

#include  


static unsigned long int SysTick = 0;



#define S_RECEVIER_SIZE  32

unsigned 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;  // 清发送中断

}

关键字:C51  串口收发  printf  接收字符串

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法