看板 ASM 關於我們 聯絡資訊
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
WolfLord:are sure your buad rate and data width and stop bit 05/04 00:47
WolfLord:all are crrorect ? 05/04 00:47
WolfLord:看起來很像用7BIT收8BIT DATA (Bit7 永遠等於1) 05/04 00:51
ruemann:在中斷裡面那個i要改成全域或static 05/04 01:41
ruemann:不過主要的原因可能是一樓說的 (資料SHIFT後長得蠻像的 05/04 01:41
markov:糾個錯 SHOULD YOUR ... ALL ARE CORRECT 不要兩次動詞跟錯 07/01 01:58