串口通信问题帮忙看看,在调试助手收到的是空格,怎么回事?另外可否说明一下如何发一个字符串,返回一个
#include<reg51.h>voidInitUART();//串口初始化函数voidUART_Send(charc);//串口发送函数voidINT_UART();...
#include <reg51.h>
void InitUART(); //串口初始化函数
void UART_Send(char c); //串口发送函数
void INT_UART();//串口中断函数
void InitUART()
{
SCON=0x50;//8-bitUART使能接受
TMOD=0x02;//选择模式1,数据位为8位
TH1=0xFD;//设置波特率为9600
TR1=1; //定时器模式为1
EA=1;//开中断,允许
}
void UART_Sendchar(char c)
{
SBUF=c;
while(!TI);
TI=0;//清零
}
void UART_Sendstring(unsigned char *s)
{
while(s!='\0')
{UART_Sendchar(*s);
s++;}
}
void INT_UART() interrupt 4
{
unsigned char temp;
if(RI)
{
RI=0; //判断接受中断标志
temp=SBUF;//读取数据放入缓存区
P1=temp;//输出到P1口,便于观察
SBUF=temp;//返回数据到串口助手
}
if(TI)
TI=0; //判断发送中断标志,1表示已发送
}
void main()
{
InitUART();
UART_Sendstring("Hello UART!");
ES=1;//打开串口中断
}
另外可否说明一下如何实现发一个字符串,返回一个另一个字符串,谢谢啦! 展开
void InitUART(); //串口初始化函数
void UART_Send(char c); //串口发送函数
void INT_UART();//串口中断函数
void InitUART()
{
SCON=0x50;//8-bitUART使能接受
TMOD=0x02;//选择模式1,数据位为8位
TH1=0xFD;//设置波特率为9600
TR1=1; //定时器模式为1
EA=1;//开中断,允许
}
void UART_Sendchar(char c)
{
SBUF=c;
while(!TI);
TI=0;//清零
}
void UART_Sendstring(unsigned char *s)
{
while(s!='\0')
{UART_Sendchar(*s);
s++;}
}
void INT_UART() interrupt 4
{
unsigned char temp;
if(RI)
{
RI=0; //判断接受中断标志
temp=SBUF;//读取数据放入缓存区
P1=temp;//输出到P1口,便于观察
SBUF=temp;//返回数据到串口助手
}
if(TI)
TI=0; //判断发送中断标志,1表示已发送
}
void main()
{
InitUART();
UART_Sendstring("Hello UART!");
ES=1;//打开串口中断
}
另外可否说明一下如何实现发一个字符串,返回一个另一个字符串,谢谢啦! 展开
4个回答
展开全部
收到空字符,也许是晶振用错了,可以检查一下你的晶振是12.000还是11.059
程序给上,自己写的,很稳定。有疑问找我
//串口通信初始设定
void serialcom_init(void)
{
SCON = 0x50; //UART为模式1,8位数据,允许接收
TMOD |= 0x20; //定时器1为模式2,8位自动重装
//PCON |= 0x80; //SMOD=1;
TH1 = 0xFD; //Baud:9600 fosc="11.0592"MHz
TL1 = 0xFD;
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while (TI==0);
TI=0 ;
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI=0;
ch=SBUF;
read_flag=1 ; //就置位取数标志
}
}
程序给上,自己写的,很稳定。有疑问找我
//串口通信初始设定
void serialcom_init(void)
{
SCON = 0x50; //UART为模式1,8位数据,允许接收
TMOD |= 0x20; //定时器1为模式2,8位自动重装
//PCON |= 0x80; //SMOD=1;
TH1 = 0xFD; //Baud:9600 fosc="11.0592"MHz
TL1 = 0xFD;
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while (TI==0);
TI=0 ;
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI=0;
ch=SBUF;
read_flag=1 ; //就置位取数标志
}
}
展开全部
检查下波特率等配置,然后以十六进制发送、接收,看看收到的是什么。
建议使用 超级终端 或者 友善串口调试助手 试下
建议使用 超级终端 或者 友善串口调试助手 试下
追问
不能发送,以十六制接受总为00
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
发送的和返回的是需要特定的字符串么?还是随便返回一个字符串。
如果发送和返回是特定的字符串需要对收到的字符串进行判断。strcmp这个函数不错,可以直接用!
如果发送和返回是特定的字符串需要对收到的字符串进行判断。strcmp这个函数不错,可以直接用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-04-05
展开全部
在数字或者变量后面加个‘0’,亲测有效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询