1. 程式人生 > >PC機串列埠除錯助手與微控制器通訊字元問題

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; }