Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về truyền số từ AVR lên C#

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Cần giúp đỡ về truyền số từ AVR lên C#

    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.
    Dùng thử website bán hàng chuyên nghiệp hoàn toàn miễn phí :

    Liên hệ ngay: 01649440 năm một năm

Về tác giả

Collapse

manh_a2k46 Tìm hiểu thêm về manh_a2k46

Bài viết mới nhất

Collapse

Đang tải...
X