单片机发送数字到PC,在串口调试助手上为什么不用十六进制显示就是乱码?

以下是我的程序#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharucharRData=0xff... 以下是我的程序
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar RData=0xff;
uchar Sensor=0;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;

void delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void main()
{
uchar i,j;
P0 = 0x00;
SCON = 0x50;//设置串口通讯方式
TMOD = 0x20;//设置T1工作方式为方式2
PCON = 0x00;
TH1=0xfd; //给定时器高位装初值
TL1=0xfd; //给定时器低位装初值
EA = 1; //开启总中断
ES = 1; //允许串行口中断
TR1 = 1;
while(1)
{
if((P1&0x0f)!=0x0f) //判断是否有传感器信号
{
delay(20); //延时,防止误判
if((P1&0x0f)!=0x0f) //判断是否有传感器信号
{
Sensor=0; //传感器信号个数清零
j=P1&0x0f; //读取传感器信号
for(i=0;i<4;i++) //读取4次,判断传感器信号的个数
{
if((j&0x01)==0) Sensor++; //依次判断每个传感器的状态,如果信号为0,传感器有效信号个数加1
j>>=1; //读取到的传感器信号右移1位
}
}
}
delay(200); //延时200ms
}
}
void Serial_INT() interrupt 4 //串口接收中断
{
uchar c;
if(RI==0) //判断是否接收成功,没成功跳出
return;
ES = 0; //暂时不允许串行口中断
RI = 0; //清除接收成功标志
c = SBUF; //保存接收到的数据到变量c
if(c=='0' ) //判断接收到的数据是否为0
{
SBUF = Sensor; //发送传感器数值到PC
while(TI == 0); //等待发送完成
TI = 0; //清除发送完成标志
}
ES = 1;//回复允许串行口中断
}
展开
 我来答
百度网友5a45a47
2014-09-11 · TA获得超过136个赞
知道答主
回答量:71
采纳率:0%
帮助的人:63.9万
展开全部
1.波特率有没一致
2、SBUF = Sensor;在发送的时候有没将Sensor转换为ASCII编码。
追问
那应该怎么转化成ASCII码呢?
追答
1、假若小于10,0到9,直接在后面加上0x30,即0对应的ascii 就是0x30+0
2、如果大于10,那就得一位一位发送啦 假若是10的话,先发送十位,就是1+0x30,;
再发送个位,0+0X30啦

你可以试一下SBUF=1;和 SBUF=1+0X30 的区别
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式