PC機串列埠除錯助手與微控制器通訊字元問題
阿新 • • 發佈:2019-01-01
在利用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;
}