作者kimo (芒果义式低脂冰淇淋)
看板C_Sharp
标题[问题] 请问使用C#写的RS232程式写入8051SoC後再读出的结果不一致?
时间Wed May 4 00:34:47 2011
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;
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