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

在利用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;			 
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值