历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2018年12月19日 | C51 串口收发,printf, 接收字符串

2018-12-19 来源:eefocus

串口发送,接收

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

}

推荐阅读

史海拾趣

Cellergy公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Cellergy公司深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产加工再到产品出厂,每一个环节都严格把关。这种对品质的执着追求使得Cellergy公司的电容器产品在市场中获得了良好的口碑,赢得了客户的信赖和支持。

ETERNA公司的发展小趣事

ETERNA公司起源于1856年,由格斯塔夫·罗斯切尔德和约翰·乌尔里希在瑞士的圣伊米尔创立。自成立之初,ETERNA便以精湛的制表工艺和不懈的创新精神闻名于世。公司不断推出具有划时代意义的腕表产品,其中最具代表性的是其“五点星座”设计,这一设计成为了品牌的象征,并引领了制表业的新潮流。ETERNA通过不断的技术创新和设计突破,逐渐在电子行业中崭露头角。

CalRamic Technologies Llc公司的发展小趣事

随着科技的进步,客户对电子元器件的性能要求也越来越高。CalRamic Technologies意识到,要想在激烈的市场竞争中脱颖而出,必须不断进行技术创新。因此,公司投入大量资源进行产品研发,特别是在陶瓷电容器领域取得了显著的技术突破。他们开发的新型陶瓷电容器不仅体积更小,性能也更加稳定,很快就受到了市场的热烈欢迎。

Anritsu公司的发展小趣事

随着科技的进步,客户对电子元器件的性能要求也越来越高。CalRamic Technologies意识到,要想在激烈的市场竞争中脱颖而出,必须不断进行技术创新。因此,公司投入大量资源进行产品研发,特别是在陶瓷电容器领域取得了显著的技术突破。他们开发的新型陶瓷电容器不仅体积更小,性能也更加稳定,很快就受到了市场的热烈欢迎。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:进入数字化时代,企业面临着前所未有的挑战和机遇。Hisetec Electronic Co Ltd公司深知数字化转型的重要性,开始积极探索数字化转型之路。

发展:公司引入了先进的智能制造系统和大数据分析技术,实现了生产过程的智能化和精细化管理。同时,公司还建立了数字化营销平台,通过精准营销和个性化服务提升客户满意度。数字化转型的成功实施,使Hisetec公司在激烈的市场竞争中保持了领先地位。

General Instrument Optoelectronics公司的发展小趣事
如果电源适配器损坏或输出电压不稳定,应更换为符合要求的适配器。

问答坊 | AI 解惑

库房、机房温湿度、漏水、电源掉电监测典型系统方案

在信息化程度越来越高的今天,担当信息处理与交换重任的机房是整个信息网络工程的数据传输中心、数据处理中心和数据交换中心。为保证机房设备正常运行及工作人员有一个良好的工作环境,对机房温湿度的监测是必不可少的,合理正常的温湿度环境是机 ...…

查看全部问答>

用万用表怎样进行PCB抄板!!!!

请问有谁用万用表抄过PCB电路板,不是用抄板软件!如果有的话,能否告知小弟,可以把经验分享一下吗?…

查看全部问答>

大家来讨论一下今年的全国大学生电子设计大赛吧

本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 听说NEC公司送了芯片,可是为什么有的学校拿到了,有的学校没拿到呢?  …

查看全部问答>

MT8888与电话线接口

哪位大侠提供MT8888与电话线的接口电路…

查看全部问答>

测量皮肤某处的温度用什么传感器比较好?接触or非接触?

如果需要测量皮肤某处的温度,用什么温度传感器比较好呢?红外的?还是其他什么? 如果是用接触的,测量结果会不会因为身体皮肤出汗或者其他什么受到影响?如果用红外的,精度怎么样?我的测量距离大概也就1厘米!测某一点或者直径为1厘米的区域都可以!我需 ...…

查看全部问答>

MPC下的中断问题

我在做关于MPC8260的工作.目前,我想为DMA加入中断处理程序.MPC8260的参考手册中 说,IDMA1的中断号是6,我使用如下函数: intConnect(INUM_TO_IVEC(6),dma_isr,0); 连接中断处理程序与中断源.但是一旦DMA结束,BC中断到来之后,整个EP8260板子就死掉 ...…

查看全部问答>

CSR蓝牙开发:Bluelab 3.6.2

我刚开始接触蓝牙开发,现在在学习Bluelab 3.6.2提供的Demo code,有做过相关蓝牙开发的吗,提供一下学习方法,适合入门,谢谢!…

查看全部问答>

EMI/EMC设计秘籍

详细的分析EMI/EMC设计技巧…

查看全部问答>

怎么实现PWM信号五分频

各位高手,帮帮小弟吧!怎么才能实现占空比可变的PWM信号五分频。单片机输出的最低频率是3.9KHz,现在需要降低到500Hz左右,怎么样才能实现呢?不胜感激…… [ 本帖最后由 daijianguo28 于 2011-7-10 12:23 编辑 ]…

查看全部问答>

ARM学习全集书籍资料免费下载

ARM学习全集1书籍资料免费下载 [ 本帖最后由 謃塰 于 2011-8-12 16:27 编辑 ]…

查看全部问答>