串口发送,接收

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

本文链接:https://www.aiunk.com/4046/

“我来做最不想做的事情了。”

—— 未知《22/7》
本站内容来源于互联网,所有转载、引用的文章、图片、视频等素材均来自网络公开渠道。我们对所转载的内容的版权和合法性不做任何保证。如果原作者或版权方认为本站内容侵犯其合法权益,敬请原作者或版权方及时联系我们,我们将在第一时间进行核实和处理,必要时删除相关内容。 本站的所有内容仅供个人学习与研究之用,不得用于任何商业用途。如需使用本站内容进行商业用途,请与原作者或版权所有者联系获取授权。 如有任何疑问或建议,请联系我们。