标题:
关于串口收发多字节
[打印本页]
作者:
yzcook
时间:
2018-6-6 15:16
标题:
关于串口收发多字节
我想把它改成 我在串口助手发多少个字节 它就接收多少个字节并返回到串口助手上 返回的格式为
发送 1 2 3 返回 31 32 33
现在这个程序是必须要每次发送四个字节才行,如果每次发送一个字节 则要发送四次才能接收
作者:
yzcook
时间:
2018-6-6 15:17
程序如下 麻烦大神帮我想想
#include <stc12c5a32s2.h>
#include "usart.h"
#include "delay.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar num = 0;
uchar flag=0;
uchar i;
uchar n;
uchar RBuf[4];
/*------------------主程序--------------------*/
void main(void)
{
// uchar key ;
Delay1ms();
ConfigUART();
lcd_init();
lcd_clr();
// key = Key_Scan();
dprintf(16,0,"欢 迎 光 临",0);
while(1)
{
if(flag == 1)//当接收到数据
{
ES = 0;//关闭串口中断
for(i=0;i<4;i++)
{
SBUF = RBuf[i];
while(!TI); TI = 0;
}
ES = 1;
flag = 0;
num = 0;
}
}
void Uart_Isr() interrupt 4 using 1
{
if(RI)
{
RBuf[num] = SBUF;
while(!RI);
RI = 0;
num++;
}
if(num == 4) flag = 1;
}
作者:
liyu123
时间:
2018-6-6 16:17
串口接收,必须把缓存的数据读出,然后下个数据才能发送, 你可以有数据发送过来就直接接收,然后数据满4个再进行数据处理
作者:
wulin
时间:
2018-6-6 21:11
yzcook 发表于 2018-6-6 15:17
程序如下 麻烦大神帮我想想
#include <AT89X52.H>
#define uint unsigned int
#define uchar unsigned char
uchar flag; //接收完成标志,
uchar a; //收发变量
void main()
{
TMOD=0x20;//定时器1方式2(8位重载)
TH1=0xfd; //波特率9600
TL1=0xfd; //波特率9600
TR1=1; //开定时器1
REN=1; //允许串行接收
SM0=0; //设置串口方式1(8位UART波特率可变)
SM1=1; //设置串口方式1(8位UART波特率可变)
// PCON=0x80; //波特率加倍9600*2
EA=1; //总中断开
ES=1; //串口中断开
while(1)
{
if(flag==1) //接收完成标志为1
{
ES=0; //关串口中断
flag=0; //接收完成标志清0
SBUF=a+'0'; //发送数据
while(!TI); //等待发送中断请求标志位为1
TI=0; //发送中断请求标志位清0
ES=1; //开串口中断
}
}
}
void ser() interrupt 4
{ //当接收完成发生中断请求RI由硬件置1
RI=0; //接收中断请求标志位清0,必须软件清0
a=SBUF;//获取SBUF接收到的数据
flag=1;//接收完成标志置1
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1