单片机串口通信,向单片机发送字符串"#01",单片机向PC回传"Hello World",怎么写程序? 51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆...

作者&投稿:校邵 (若有异议请与网页底部的电邮联系)
#include <reg52.h>
#include <intrins.h>
#include <string.h>
sbit D0=P2^0;
sbit D1=P2^1;
sbit D2=P2^2;
sbit D3=P2^3;
sbit D4=P2^4;
#define uchar unsigned char
uchar i=0;
uchar j=0;
uchar flag=0;
uchar temprx,temptx;
char str[15]="";
char src[15]="";
char cmpStr[15]={"#01"};
uchar sendstr[15]={"Hello World\r\n"};

void Delay500ms() //@11.0592MHz
{
unsigned char ii, jj, k;
_nop_();
ii = 4;
jj = 129;
k = 119;
do
{
do
{
while (--k);
} while (--jj);
} while (--ii);
}
void Delay100ms() //@11.0592MHz
{
unsigned char m, n;
m = 180;
n = 73;
do
{
while (--n);
} while (--m);
}

void init_uart(void)
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TL1=0xfd;
TH1=0xfd;
TR1=1;
EA=1;
ES=1;
}
void main(void)
{
Delay500ms();
init_uart();
while(1)
{
if((strcmp(str,cmpStr)==0)&&(i>=2))
{

for(j=0;j<strlen(sendstr);j++)
{
ES=0;
SBUF=str[j];
while(!TI);
TI=0;
ES=1;
}
i=0;
}
}
}
void serial() interrupt 4
{
if(RI)
{
RI=0;
ES=0;
str[i]=SBUF;
i=i+1;
ES=1;
}
}

话说···这程序俺看不出来在哪儿发送的 Hello World。。。

已经定义的全局变量:
char str[15]="";
char src[15]="";
char cmpStr[15]={"#01\0"};
uchar sendstr[15]={"Hello World\r\n"};

可在main 函数内和函数外,都没看到sendstr再出现过。。。
你确认你这程序能发出去什么东西?

单片机串口通信问题。当我在电脑上用串口助手向单片机发送一串字符串以后,我希望单片机用一个变量把字符~

通信双方,需要制定一个协议。

字符串开始符、结束符,校验码...,都要协商好。

简单例程:

http://blog.163.com/asm_c/blog/static/248203113201311711560166/

参考。

像这种发送字符串的,需要有一个字符串结束标志,不能用0作为字符串结束标志了!这里以回车作0xd为结束标志!
#include
typedef unsigned char uint8;
bit flag = 0;
uint8 idata buf[30];
uint8 ct;


void InitUART(void) //串口初始化 9600bps
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}

void Send(uint8 c)
{
SBUF = c;
while(!TI);
TI = 0;
}

void main(void)
{
char j;
InitUART();
while(1)
{
if(flag) //是否接收到回车 字符串发送完
{
flag = 0;
for(j = ct ; j > 0 ; j--)
{
Send(buf[j-1]);
}
}
}
}

void UARTInterrupt(void) interrupt 4
{
static uint8 i = 0;
if(RI)
{
RI = 0;
buf[i++] = SBUF;
if(SBUF == 0x0d) //接受到回车
{
ct = i-1 ;
flag = 1;
i = 0;

}
}
else
TI = 0;
}

仿真结果
程序作为参考 希望 你自己能理解程序!只有自己掌握了才能很好地用!

单片机串口通信,向单片机发送字符串"#01",单片机向PC回传"Hello World...
答:include <reg52.h> include <intrins.h> include <string.h> sbit D0=P2^0;sbit D1=P2^1;sbit D2=P2^2;sbit D3=P2^3;sbit D4=P2^4;define uchar unsigned char uchar i=0;uchar j=0;uchar flag=0;uchar temprx,temptx;char str[15]="";char src[15]="";char cmpStr[15]=...

单片机与上位机进行串口通信,pc连续给单片机发oxbb直到收到0xaa,单片...
答:代码没写好嘛,当你的单片机接收到0xbb,发送一个0xaa给PC,这时应该清除你的单片机接收缓存,不然单片机接收的缓存一直是0xbb,当上位机还没接收代码的时候,单片机接收到0xbb的这个语句一直在执行嘛,单片机里代码执行了2遍了嘛。上位机的代码也是如此。看的懂?一句话就是应该用了就清除缓存。

用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显...
答:ES=1;//开串行口中断 delay(1000);D0=0;while(1){ while(flag){ y=0;while(a[y]!='\0'){ fasong(a[y]);a[y]='\0'; //清空字符,方便下次接收 y++;} y=0;flag=0;} } } void jsfs() interrupt 4 { c=0;u=1000;ES=0;while(u--) //一直接收 直到字符串接收完毕 ...

如何使用stc串口助手向单片机发送数据
答:选择串口或者USB转串口,选择合适的波特率,输入要发送的字符,选单个发送或循环发送,单片机有相应的设置,就可收到数据

...通过串口助手向单片机发送小写字母,单片机接收到后向PC机回送对应大...
答://单片机晶振用11.0592MHz,串口波特率用9600bps #include <reg51.h>void InitUART(void){ TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1;}void SendOneByte(unsigned char c){ SBUF = c; while(...

我想利用串口,向单片机的P1.0发送一串字节,比如00 E0 1C 1C E0 F8...
答:仅仅一个P1.0恐怕不行,还需要一个时钟CLK口 才比较好控制。不然会有一定误差产生误码。如果仅仅是P1.0的话,可以用定时器来做,因为波特率是9600,所以每一位信号占用时间约为是104us,因此编程如下:KEYSTA EQU P3.0 KEYEND EQU P3.1 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG ...

求一个“串口调试助手发送字符串到单片机“的程序
答:单片机串口通信的程序?ORG 0000H AJMP MAIN ORG 0023H AJMP RECEIVE ;跳转到接收中断入口 ORG 0030H MAIN: MOV TMOD,#20H ;T1工作方式2 MOV TH1,#0FDH ;波特率9600 MOV SCON,#50H ;传口工作方式1,允许中断接受 SETB EA ;打开总中断 SETB ES ;打开串口中断 SETB TR1 ...

51单片机中,用串口通信助手向单片机发送数据时,不用16进制的话,发送1...
答:发送的时候选择16进制发送,否则按字符发送,就是发送ASCII码,1的ASCII码是49,16进制就是31.具体百度一下ASCII

pc机与单片机串口通信问题
答:这个完全可以。利用串口助手,发送16进制数据,单片机接收到后进行译码,然后送到io口上显示出来就行了。但是不能直接发送汉字,因为汉字的编码不在ascii中,所以要想显示汉字,需要先取模,然后发送字模,这样就可以显示了。如果你的程序已见雏形,我可以帮你调试!

pc给51单片机串口发字符001a,单片机接到后返回001a01,pc发字符001b,单...
答:以下是51串口中断子程序,60H~65H存接收和发送数据,我大概写了下,没校验,你自己试一试吧 int_ser: clr es clr timebit setb tr0 setb et0 mov a,sbuf mov 60h,a mov r0,#61h mov r4,#3 clr ri ser1_1: jbc ri,ser1_2 mov c,timebit jnc...