您的位置:首页 > 其它

PC机串口调试助手与单片机通信字符问题

2017-08-13 22:06 246 查看
在利用PC机的串口调试助手与单片机通信时,单片机与PC机是以ASCII码的形式通信的,比如发送1,其实发送的是字符1,如果在接收区以十六进制显示的话,是31(1的ASCII码)。具体如下:

1. 十六进制发送与十六进制显示都为选中,发送与接收的都是字符的形式;

2.如果以十六进制发送或者十六进制显示的话,就是以十六进制的ASCII码的形式发送或显示。

如果在串口调试助手中发送十六进制数字,以单片机的数码管显示的话,把十六进制ASCII码,换算成十进制ASCII码,然后显示在数码管上。以下是程序示例:(单片机开发板为普中科技的HC6800-EM3 v3.0)

/*************************
* 目标:以16进制发送一个1-255之间的任一数,当单片机收到后在数码管上动态显示出来
* 作者:panda
* 日期:2017/08/13
*************************/

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
u16 temp;
u8 bai,shi,ge;
sbit a_138=P1^0; //138译码器的A,B,C端,用于控制数码管的位端
sbit b_138=P1^1;
sbit c_138=P1^2;
u8 code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};

void delay(u16 z)
{
u8 x,y;
for(x=0;x<100;x++)
for(y=0;y<z;y++);
}

void wei2()
{
a_138=1;
b_138=0;
c_138=0;
}

void wei3()
{
a_138=0;
b_138=1;
c_138=0;
}

void wei4()
{
a_138=1;
b_138=1;
c_138=0;
}

void display(u8 bai,u8 shi,u8 ge)
{
wei4();
P0=table[ge];
delay(1);

wei3();
P0=table[shi];
delay(1);

wei2();
P0=table[bai];
delay(1);
}

void init()
{
bai=16;
shi=16;
ge=16;
TMOD=0x20; //计数器工作在方式2,8位自动重装
PCON=0x00; //SMOD=0; 不倍频(不使波特率增倍) SMOD不可位寻址
TH1=0xf3;
TL1=0xf3; //波特率为2400
TR1=1;
SCON=0x50;
//	SM0=0;
//	SM1=1;
//	SM2=0;
//	REN=1; //允许串行接收位打开

EA=1; //开总中断
ES=1; //开串行口中断

}

int main()
{
init();
while(1)
{
display(bai,shi,ge);
}

return 0;
}

void ser() interrupt 4
{
RI=0;
temp=SBUF;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  串口通信 ascii