Em mới chập chững học C# cũng tham khảo nhiều luồng thì viết được một chương trình gửi 3 giá trị chứa trong 3 biến từ vdk lên C#. e mã hóa theo dạng
: 0XFD 0XDF /7bytedata/ byte end.
code vdk:
void senddata(){
unsigned int temp;
unsigned char i;
unsigned char dat[7];
adc=read_adc(0);
dat[0]=Cbluuluong>>24;
dat[1]=Cbluuluong>>16;
dat[2]=Cbluuluong>>8;
dat[3]=Cbluuluong;
dat[4]=Cbtiemcan;
dat[5]=adc>>8;
dat[6]=adc;
putchar(0xFD);
putchar(0xDF);
// putchar('@');
temp=0;
for(i=0;i<7;i++){
putchar(dat[i]);
temp+=dat[i];
}
putchar(temp%0x80);
//putchar('@');
//putchar(0xFF);
}
unsigned int timeCb=0;
unsigned char dem;
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if(++dem>9) {dem=0; senddata();}
if(!Cbtiemcan) timeCb++;
else timeCb=0;
}
code C#:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
size = serialPort1.BytesToRead;
data = new byte[1];
for (byte i = 0; i < size; i++)
{
serialPort1.Read(data, 0, 1);
buff[j] = data[0];
if (j > 0)
{
if ((buff[j - 1] == 0xFD) && (buff[j] == 0xDF))
{
buff[0] = 0xFD;
buff[1] = 0xDF;
j = 1;
}
}
j++;
if (j == 8)
{
Checs = 0;
for (int inc = 2; inc < 7; inc++) Checs += buff[inc];
Checs %= 0x80;
if (buff[7] == (byte)Checs)
{
cbLuuluong = (((int)buff[2]) << 24 | ((int)buff[3]) << 16 | ((int)buff[4]) << 8 | (int)buff[5]);
Cbtiemcan = buff[6];
j = 0;
}
}
else if (j > 8)
{
if ((buff[j - 1] != 0xFD) || (j > 10)) j = 0;
}
}
E viết như thế nó truyền nhận được nhưng mà cập nhật giá trị rất chậm có khi phải đến 1p mới cập nhật được giá trị một lần mà trong khi đó e dùng timer để truyền liên tục data lên. . E nghe nói C# truyền nhận UART khó phải dùng đa luồng có phải không các bác. Có bác nào có kinh nghiệm về cái này giúp em với.
: 0XFD 0XDF /7bytedata/ byte end.
code vdk:
void senddata(){
unsigned int temp;
unsigned char i;
unsigned char dat[7];
adc=read_adc(0);
dat[0]=Cbluuluong>>24;
dat[1]=Cbluuluong>>16;
dat[2]=Cbluuluong>>8;
dat[3]=Cbluuluong;
dat[4]=Cbtiemcan;
dat[5]=adc>>8;
dat[6]=adc;
putchar(0xFD);
putchar(0xDF);
// putchar('@');
temp=0;
for(i=0;i<7;i++){
putchar(dat[i]);
temp+=dat[i];
}
putchar(temp%0x80);
//putchar('@');
//putchar(0xFF);
}
unsigned int timeCb=0;
unsigned char dem;
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if(++dem>9) {dem=0; senddata();}
if(!Cbtiemcan) timeCb++;
else timeCb=0;
}
code C#:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
size = serialPort1.BytesToRead;
data = new byte[1];
for (byte i = 0; i < size; i++)
{
serialPort1.Read(data, 0, 1);
buff[j] = data[0];
if (j > 0)
{
if ((buff[j - 1] == 0xFD) && (buff[j] == 0xDF))
{
buff[0] = 0xFD;
buff[1] = 0xDF;
j = 1;
}
}
j++;
if (j == 8)
{
Checs = 0;
for (int inc = 2; inc < 7; inc++) Checs += buff[inc];
Checs %= 0x80;
if (buff[7] == (byte)Checs)
{
cbLuuluong = (((int)buff[2]) << 24 | ((int)buff[3]) << 16 | ((int)buff[4]) << 8 | (int)buff[5]);
Cbtiemcan = buff[6];
j = 0;
}
}
else if (j > 8)
{
if ((buff[j - 1] != 0xFD) || (j > 10)) j = 0;
}
}
E viết như thế nó truyền nhận được nhưng mà cập nhật giá trị rất chậm có khi phải đến 1p mới cập nhật được giá trị một lần mà trong khi đó e dùng timer để truyền liên tục data lên. . E nghe nói C# truyền nhận UART khó phải dùng đa luồng có phải không các bác. Có bác nào có kinh nghiệm về cái này giúp em với.