串口调试助手发送给51单片机的数据无显示?

调试助手界面上接收端没有显示在发送端发送的数据。不知道到底是什么原因??有大神知道话求帮忙啊!!#include<reg52.h>//单片机52头文件,存放着单片机的寄存... 调试助手界面上接收端没有显示在发送端发送的数据。不知道到底是什么原因??有大神知道话求帮忙啊!!

#include <reg52.h> //单片机52头文件,存放着单片机的寄存器
#include <stdio.h>
#define uint unsigned int //宏定义
#define uchar unsigned char

uchar uart_flag,a,i;
uchar code table[]={"$>0053.5p,-.80507,0,00.00u,2,00.00u,2,000.0u,2,000.0u,2,12210005332210<$"};

void UART_Init(void); //声明串口初始化函数
void UART_Send_Byte(uchar byte); //声明串口发送单字节函数
void SendAll(uchar *value); //声明串口发送一组数据函数
void Delay(uint delay_time); //声明延时函数

void main(void) //主函数
{

UART_Init(); // 串口初始化
while(1) //死循环
{
// SendAll(table);
// Delay(1000);
if(uart_flag==1) //接收到串口数据
{
ES=0; //关串口中断
UART_Send_Byte(a); //发送接收到的字符
ES=1; //允许串口中断
uart_flag=0; //中断标志位置0
}
}
}

//定义UART_Init函数
void UART_Init(void)
{
SCON = 0x50; // 设定串行口工作方式,8位数据位,允许接收
T2CON = 0x34; //设置定时器2,作为波特率发生器
RCAP2L = 0XD9; //9600波特率的低8位
RCAP2H = 0XFF; //9600波特率的高8位

ES = 1; //允许串口中断
EA = 1; //允许总中断
REN=1; //串口是否接收数据的开关
TR1=1; //启动定时器
}

//定义UART_Send_Byte函数
void UART_Send_Byte(uchar byte)
{
SBUF=byte; //缓冲区装载要发送的字节数据
while(TI==0){}; //等待发送完毕,TI标志位会置1
TI=0; //清零发送完成标志位
}

//定义SendAll函数
void SendAll(uchar *value)
{
while((*value) != '\0') //如果没有发送完毕就继续发
{
UART_Send_Byte(*value); //发送1字节数据
value++; //指向下1个字节
}
}

//定义Delay延时函数
void Delay(uint delay_time)
{
uint j,k;
for(j=0;j<delay_time;j++);
for(k=0;k<50000;k++)
{}
}

//串口接收中断服务程序
void UART(void) interrupt 4
{
if(RI) //检测接收完成标志位置1
{
RI = 0; //清零接收完成标志位
a=SBUF; //读取接收到的数据
uart_flag = 1; //中断标志位置1
}
}
展开
 我来答
nuaabob
2014-02-28 · TA获得超过126个赞
知道小有建树答主
回答量:255
采纳率:50%
帮助的人:79.3万
展开全部

楼主做的是Proteus仿真吧?有没有用虚拟串口呢?如果没有的话请参考我的附图。

追问
嗯,有用到虚拟串口的呢,不过问题解决了,谢谢哈~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
INCS7
2014-09-04
知道答主
回答量:1
采纳率:0%
帮助的人:1346
展开全部
楼主!我用的是protues 和虚拟串口加串口调试助手仿真的,你的这个问题是怎么解决的,我现在是串口调试助手发送数据给单片机,单片机没反应。帮忙看看那儿的问题。这是我的程序,
#include <reg51.h>
#include <string.h>
#define INBUF_LEN 4 //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
int flag= 0 ;
char a;

void InitUART (void)
{ TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
EA = 1; //打开总中断
PS=1; //设计串行口中断优先级
ES = 1; //打开串口中断
}
void main()
{
int Temp;
InitUART();
while(1)
{
if(RI)
{
Temp=SBUF;
P1=Temp^0xFF;//求反,LED灯亮的为1不亮为0
RI=0;
}
}}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宁采臣p
2014-02-25
知道答主
回答量:30
采纳率:0%
帮助的人:9.9万
展开全部
使用串口收发数据时的晶振不能是12M的,必须换成11.0592的那个,都则数据发送全部失真。你可以试试。
更多追问追答
追问
proteus仿真中C52单片机默认的晶振是12M,要改为11.0592M?
追答
你是做实物还是在仿真啊,仿真有很多情况与实际是有出入的,实际使用时这个是必须要换的,否则数据时错误的,乱码,软件仿真中也许都行,不是那么严谨,但是实际中查那么一点是不行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5922771321
2014-02-24 · TA获得超过1438个赞
知道小有建树答主
回答量:1410
采纳率:100%
帮助的人:375万
展开全部
把串口调试助手那个自动清空的复选框勾掉!!!
看看好用不?有问题继续问!
更多追问追答
追问
自动清空选择框勾选是满屏后清空,够不勾选对存在问题无关紧要。帮我看看是程序问题么?
追答
RCAP2L = 0XD9;   //9600波特率的低8位
RCAP2H = 0XFF; //9600波特率的高8位
51单片机里面有这个寄存器吗?

ES = 1; //允许串口中断
EA = 1; //允许总中断
最好先开总中断再开串口中断
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式