标题:
求一个PC发送一条字符串单片机收到后原样返回
[打印本页]
作者:
lify5288
时间:
2017-11-21 20:30
标题:
求一个PC发送一条字符串单片机收到后原样返回
就是PC发送一条字符串,单片机收到后又把收到的那条字符串原样的返给PC,单片机是15W4K56S4,,,串口1。要用定时器2
作者:
wulin
时间:
2017-11-21 20:30
//这是我给坛友修改的程序片段,你可以参考一下。
//串口助手发送0x7E xx yy 0x0D,0x7E是数据头,0x0D是数据尾,xx yy是有效数据
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 rec_buf[4];//接收数据缓存
bit flag=0; //接收完成标志
void InitUART()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFA;
TL1 = TH1;
PCON = 0x80;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(u8 c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main()
{
u8 i;
InitUART();
while(1)
{
if(flag==1)
{
ES=0; //关串口中断
flag=0;
if(rec_buf[3]==0x0D)//验证数据尾,否则返回无效信息
{
for(i=0;i<4;i++)
SendOneByte(rec_buf[i]);
}
else SendOneByte(0xFF);
ES=1; //开串口中断
}
}
}
void UARTInterrupt() interrupt 4
{
static u8 num=0; //静态变量
RI=0; //接收中断请求标志位清0
rec_buf[num]=SBUF; //保存SBUF接收到的数据
if(rec_buf[0]==0x7E) //验证数据头,否则放弃
{
num++;
if(num>=4)
{
flag=1; //接收完成标志置1
num=0;
}
}
}
作者:
HC6800-ES-V2.0
时间:
2017-11-22 08:39
呵呵,算你运气好,我正好做过这个STC15串口的程序,和你的片子一样——STC15W4K58S4。
看看我的程序:
#include <STC15F2K60S2.H>
#include <intrins.h>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50;
AUXR = 0x40;
TMOD &= 0x00;
TL1 = 0xE0;
TH1 = 0xFE;
ET1 = 0;
TR1 = 1;
ES=1;
EA=1;
}
void main(void)
{
P0M1 = 0; P0M0 = 0; //设置为准双向口
P1M1 = 0; P1M0 = 0; //设置为准双向口
P2M1 = 0; P2M0 = 0; //设置为准双向口
P3M1 = 0; P3M0 = 0; //设置为准双向口
P4M1 = 0; P4M0 = 0; //设置为准双向口
P5M1 = 0; P5M0 = 0; //设置为准双向口
UartInit();
while(1)
{
}
}
void Usart() interrupt 4//串口中断
{
unsigned char receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI);//等待发送数据完成
TI=0;//清除发送完成标志位
}
作者:
lify5288
时间:
2017-11-22 22:59
HC6800-ES-V2.0 发表于 2017-11-22 08:39
呵呵,算你运气好,我正好做过这个STC15串口的程序,和你的片子一样——STC15W4K58S4。
看看我的程序:
# ...
可能是我没说清楚吧,我想要它先临时做存一下,等到串口收到下一条字符串过后,再两条字符串是一样的就给我返回来
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1