C51单片机从串口接收数据多个字节的数据的C语言程序,谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C51单片机从串口接收数据多个字节的数据的C语言程序,谢谢相关的知识,希望对你有一定的参考价值。

#include<reg52.h>
unsigned char code table[] =" ";
unsigned char code table1[]=" : ";
sbit rs=P1^2;
sbit lcden=P1^0;
unsigned char flag,m;
void delay(int xms)

int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);

void write_com(unsigned char com)
//写液晶命令函数
rs=0;
lcden=0;
P2=com;
delay(3);
lcden=1;
delay(3);
lcden=0;

void write_date(unsigned char date)
//写液晶数据函数
rs=1;
lcden=0;
P2=date;
delay(3);
lcden=1;
delay(3);
lcden=0;

void init()
//初始化函数
unsigned char num;
lcden=0;
rs=0;
write_com(0x38);//1602液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)//写入液晶固定部分显示

write_date(table[num]);
delay(3);

write_com(0x80+0x40);
for(num=0;num<5;num++)

write_date(table1[num]);
delay(3);


void write_dianya(unsigned char add,unsigned char date)
//1602液晶刷新时分秒函数4为时,7为分,10为秒
unsigned char bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);

void main ()

init();
TMOD=0x20; //设置定时器1工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //设置串行口工作方式
SM0=0;
SM1=1;
EA=1; //中断设置
ES=1;
while(1)

if(flag==1)

ES=0;
SBUF=m;
while(!TI);
TI=0;
ES=1;





void ser() interrupt 4

RI=0;
m=SBUF;
write_dianya(5,m);
flag=1;
参考技术A #include<reg52.h>
unsigned
char
code
table[]
="
";
unsigned
char
code
table1[]="
:
";
sbit
rs=P1^2;
sbit
lcden=P1^0;
unsigned
char
flag,m;
void
delay(int
xms)

int
i,j;
for(i=xms;i>0;i--)
//i=xms即延时约xms毫秒
for(j=110;j>0;j--);

void
write_com(unsigned
char
com)
//写液晶命令函数
rs=0;
lcden=0;
P2=com;
delay(3);
lcden=1;
delay(3);
lcden=0;

void
write_date(unsigned
char
date)
//写液晶数据函数
rs=1;
lcden=0;
P2=date;
delay(3);
lcden=1;
delay(3);
lcden=0;

void
init()
//初始化函数
unsigned
char
num;
lcden=0;
rs=0;
write_com(0x38);//1602液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)//写入液晶固定部分显示

write_date(table[num]);
delay(3);

write_com(0x80+0x40);
for(num=0;num<5;num++)

write_date(table1[num]);
delay(3);


void
write_dianya(unsigned
char
add,unsigned
char
date)
//1602液晶刷新时分秒函数4为时,7为分,10为秒
unsigned
char
bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);

void
main
()

init();
TMOD=0x20;
//设置定时器1工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
//设置串行口工作方式
SM0=0;
SM1=1;
EA=1;
//中断设置
ES=1;
while(1)

if(flag==1)

ES=0;
SBUF=m;
while(!TI);
TI=0;
ES=1;



void
ser()
interrupt
4

RI=0;
m=SBUF;
write_dianya(5,m);
flag=1;
参考技术B 只是一个接收功能吗?追问

恩,接受多个字符的功能,大侠有吗,给一个吧,谢谢了,murennan@163.com

单片机STM32 串口一次能发和接收几个字节数据?大神正解

USART没有FIFO,一次只能发一个字节。USART1-USART4支持DMA,USART5不支持DMA。 参考技术A 串口都是一次一个字节啊,发多少就无所谓了 参考技术B 可以调节发送字节数,貌似有有最多的限制,好久没动了,有点模糊了 参考技术C 为什么不去csdn论坛看看,这里知道这个的少。

以上是关于C51单片机从串口接收数据多个字节的数据的C语言程序,谢谢的主要内容,如果未能解决你的问题,请参考以下文章

单片机STM32 串口一次能发和接收几个字节数据?大神正解

AT89C51单片机进行多机通信等问题求教大神!!明天考试!!在线高分求高人

c语言 让计算机像单片机一样接收串口发来的数据

Arduino和C51之串口通信

stm32串口通信,只能接收到第一个字节。。。急!!!

单片机模拟串口通讯,将串口接收到的数据原样发送,收到的数据长度不同。怎样判断数据接收完毕?