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

发布者:MysticalEssence最新更新时间:2018-12-19 来源: eefocus关键字:C51  串口收发  printf  接收字符串 手机看文章 扫描二维码
随时随地手机看文章

串口发送,接收

在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  接收字符串 引用地址:C51 串口收发,printf, 接收字符串

上一篇:C51 ADC0804LCN 应用
下一篇:C51 特殊功能寄存器SFR的名称和地址

推荐阅读最新更新时间:2024-03-16 16:20

N76E003 串口的时候用和printf初始设置
N76E003的共两个串口。每个串口有多种工作模式。具体可以看规格书以及BSP包例程。为方便日后使用。做简要的总结。 1.初始化 开发中。常用的是串口模式1.其初始化代码如下: 因为串口的发送需要用到定时器(产生波特率需要用到)。UART0可选择有TIMER1和timer3。UART1只有TIMER3 UART0 void InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1 void InitialUART0_Timer3(UINT32 u32Baudrate); //Timer3 as Baudrate, SMOD=1, Prescale=0
[单片机]
N76E003 <font color='red'>串口</font>的时候用和<font color='red'>printf</font>初始设置
C51教程 第四个51程序:中断控制--外部中断0
内部资源之外部中断 中断类型 中断入口地址 中断序号 外部中断0(INT0)P3.2 0003H 0 外部中断1(INT1)P3.3 0013H 2 定时计数器0(T0) 16bit 000BH 1 定时计数器1(T1) 001BH 3 定时计数器2(T2) 002BH 5 异步串行通信口(UART) 0023H 4 CPU外围模块的掌握方法: (1)相关口线 (2)相关控制字 (3)模块的工作方式 一、外部中断 (1)相关口线 P3.2:int0,外部
[单片机]
<font color='red'>C51</font>教程 第四个51程序:中断控制--外部中断0
c51中定时器工作时如何使用T0脚输入脉冲信号?
嵌入式系统中,定时器是一种常用的设备,可以实现各种时间控制功能,如计时、计数、产生中断等。8051单片机中有两个定时器:T0和T1,其中T0定时器主要用于计时和计数操作,可以通过T0脚输入脉冲信号来控制定时器的工作。 T0脚是单片机的P3.4口,既可以作为普通的输入输出口,也可以作为T0定时器的外部输入引脚。当T0脚作为定时器的外部输入引脚时,可以通过输入的脉冲信号来控制定时器的计数。在使用T0脚输入脉冲信号时,需要采取一些措施来确保信号的稳定性和正确性。 首先,需要确定输入脉冲信号的频率。在使用T0脚输入脉冲信号时,需要将信号的频率与定时器的工作频率相匹配。具体来说,当定时器使用外部时钟源时,其工作频率为外部时钟源频率的一半,因
[单片机]
C51/C52的串口原理及参考代码
一、什么是串口(RS232 9针串口) 串口是我们的大多数微控制单元(MCU)都具有的基本的外部接口,一般串口最基本的功能就是调试,又能做数据通信的接口(数据量要小一些)。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 二、串口通信原理 一条信息的各位数据按位依次顺序的通信方式称为串行通信,传信通信可以是串口也可以是
[单片机]
<font color='red'>C51</font>/C52的<font color='red'>串口</font>原理及参考代码
printf in KEIL C51 使用注意事项
在keil中使用printf()函数的要点 在网上找资料时找到一篇介绍在keil中使用printf()函数的文章,copy到这里,作为备忘。 在keil中printf默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化串口,否则可能引起死机的情况,并且在printf之前应该先将TI置位,摘抄原因如下: 1.printf函数是调用putchar函数输入的,而putchar应该是先判断ti是否为1,不为1则等待为1。如果为1则清0,然后送出一 个字符。因此你如果直接使用printf函数,你的程序就会在putchar函数中等待ti为1。这时你的程序就相当于直接死掉了。你可以通过改写 putchar函数实现自己的目的的
[单片机]
矩阵键盘加电子时钟(c51
//矩阵键盘扫描和可调的电子时钟 //采用翻转识别法(相对代码少一些)处理矩阵键盘, //在按下15号键的时候处理电子时钟,然后可以启动12号键 //用来调节时间 #include reg52.h #define uchar unsigned char //类型重定义 #define uint unsigned int uchar key=0; uchar count=0; int second=40,minute=59,hour=23; int second_shi=0,second_ge=0,minute_shi=0,minute_ge=0,hour_shi=0,hour_ge=0; uchar
[单片机]
矩阵键盘加电子时钟(<font color='red'>c51</font>)
51单片机之实现流水灯
在实现流水灯之前,我们有必要提一点,C51代码在写之前,要参考电路图来写。拿流水灯来说,我们来看图二,LED灯,也就是二极管,八只LED的正极通过一根总线接在+5V的电压上,再看图一,可知八只LED灯的负极接在LED、P2的8个I/O口上。根据二极管的导通条件可知,在单片机的IO口输出低电平时,才能点亮LED灯。 下面贴上代码: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3;
[单片机]
51单片机之实现流水灯
1602液晶相关c51编程
1、写数据和指令需在LCDEN电平上升沿,为实现其应该:在程序执行其他指令时保证LCDEN=0; 在完成执行读写数据和指令之后必须立刻拉低LCDEN电平; 保证在执行写数据指令子函数前LCDEN=0例如: …… LCDEN=0; …… void write_dat(char a) { char e=1; while(e)e=read(); RS=1; RW=0; P0=a; LCDEN=1; for(e=127;e 0;e--); LCDEN=0; } 不能只在写数据指令子函数中执行拉高LCDEN电平之前进行LCDEN电平拉低操作而不进行延时, 例如这是错的: void write_cmd(char a) { char e=1;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved