[問題] 請問使用C#寫的RS232程式寫入8051SoC後再讀出的結果不一致?
8051 code(SoC用的是STC)
/******************************************************************/
/* Uart中斷程序 */
/******************************************************************/
void UART_SER (void) interrupt 4 //Uart中斷服務程序
{
unsigned char Temp; //定義臨時變量
unsigned char i;
if(RI) //判斷是接收中斷產生
{
RI=0; //標誌位清零
Temp=SBUF; //讀入緩沖區的值
new_word[i]=Temp;
i++;
if(i==16) //連續接收16個字符信息
{
i=0;
SetFlag=1; //接收完成標誌位置1
}
SBUF=Temp; //把接收到的值再發回電腦端
}
if(TI) //如果是發送標誌位,清零
TI=0;
}
C# code
/*寫入按鈕事件*/
private void btn_write_Click(object sender, EventArgs e)
{
try
{
/*寫入資料*/
byte[] RSdata = new byte[16] { 0x30, 0x31, 0x32, 0x33, 0x34,
0x35, 0x36, 0x37, 0x38, 0x39,
0x41, 0x42, 0x43, 0x44, 0x45,
0x46 };
serialPort1.Write(RSdata,0,16);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤訊息", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
/*讀取按鈕事件*/
private void btn_read_Click(object sender, EventArgs e)
{
/*讀取輸入緩衝區資料*/
Byte[] RSdata =new Byte[16];
serialPort1.Read(RSdata,0,16);
string s="";
for (int i = 0; i < 16; i++)
s += ":0x" + RSdata[i].ToString("X2");
txt_read.Text = s;
/*顯示目前輸入緩衝區的剩餘位元組數*/
lbl_inputlen.Text = serialPort1.BytesToRead.ToString();
}
執行結果分別如下:
第1次
0xA0:0xB1:0xB2:0xB3:0xB4:0xB5:0xB6:0xB7:
0xB8:0xB9:0xC1:0xC2:0xC3:0xC4:0xC5:0xC6
第2次
0xF0:0xB1:0xB2:0xB3:0xB4:0xB5:0xA6:0xB7:
0xB8:0xB9:0xC1:0xC2:0xC3:0xC4:0xC5:0xC6
第3次
0xB0:0xB1:0xB2:0xB3:0xB4:0xB5:0xA6:0xB7:
0xB8:0xB9:0xC1:0xC2:0xC3:0xC4:0xC5:0xC6
都非寫入的
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46
請問各位高手 有誰知道原因嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.0.180
推
05/04 00:47, , 1F
05/04 00:47, 1F
→
05/04 00:47, , 2F
05/04 00:47, 2F
推
05/04 00:51, , 3F
05/04 00:51, 3F
推
05/04 01:41, , 4F
05/04 01:41, 4F
→
05/04 01:41, , 5F
05/04 01:41, 5F
→
07/01 01:58, , 6F
07/01 01:58, 6F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章