อยากสอบถามเกี่ยวกับ AVR atmega เขียนสื่อสารผ่าน Rs485

รบกวนผู้มีประสบการณ์ด้วยครับ
อยากส่ง data เป็น Hexa ครับ แต่ปัญหาผมคือ ลองเช็ค output ด้วย logic analyzer แล้ว ออกมาไม่ตรงกับ ข้อมูลที่ส่ง เหมือนว่า bit กลับหน้าเป็นหลัง
ส่ง FF FF 03   output เป็น 03 FF FF    แต่พอส่ง 03 FF FF output มันเพี้ยนๆ ไป
ผมใช้ Atmega328p ตัวโค๊ดคราวๆนะครับ

#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <compat/deprecated.h>
#include <util/delay.h>

#define F_CPU 8000000UL

void Init_Serial(unsigned int baudrate);

void put_command(uint8_t c)
{
    while(!(UCSR0A & (1<<UDRE0)));
    UDR0 = c;
}
static void USART_Init(unsigned int baud)
{
    UBRR0H = (unsigned char)(baud>>8);
    UBRR0L = (unsigned char)baud;
    UCSR0B |= (1<<TXEN0);
    UCSR0C=(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|
    (0<<USBS0)|(0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
}
int main(void)
{
    DDRD = 0x05;//DDD1 txd=1 output
    sbi(PORTD,1);
    USART_Init(51); //9600bps
       put_command(0xFF);
       put_command(0xFF);
       put_command(0x03);
       return 0;
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่