em dang lập trình pic làm bộ rf điều khiển tàu ngầm! em truyền dữ liệu nối tiếp dùng module Tx13 và Rx 11 của bác [MENTION=45]queduong[/MENTION], e tìm thấy code bộ phát, bác nào giúp em phần code giải mã machester bên bộ thu được k ạ?
#define ID 0x25
# define TX PB6
unsigned char my_data[4];
unsigned int checksum;
char i,j,ADC_value, Remote_value;
void main()
{
IO_Init(); // khởi tạo chân nào vào ,chân nào ra của MCU ( tùy theo mục đích sử dụng)
ADC_Init ; // khởi tạo ADC
while(1)
{
ADC_value = ADC_read8( channel1); // đọc ADC 8 bit tại kênh ADC1
if (button1_pressed) { Remote_value = 0x01; }
if ( button2........................................... 0x02;}
checksum=0;
my_data[0]=ID;
checksum += my_data[0];
my_data[1] = ADC_value;
checksum += my_data[1];
my_data[2] = Remote_value;
checksum += my_data[2];
my_data[3] = checksum;
for (i=0;i<32;i++) // send preamble
{
TX=1;
Delay_us(416); // Delay 416 uS
TX=0;
Delay_us(416); //
}
Delay_us(1136); // Delay for syn bit
//-----------------
TX=1; // start bit
Delay_us(416);
TX=0;
Delay_us(416);
//-----------------
for (j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
if ((my_data[j] & 0x80) == 0x80)
{
TX=1;
Delay_us(416);
TX=0;
Delay_us(416);
}
else
{
TX=0;
Delay_us(416);
TX=1;
Delay_us(416);
}
my_data[j]=my_data[j]<<1;
}
}
//------ send stop bit -------
TX=1;
Delay_us(416);
TX=0;
Delay_us(416);
Delay_ms(10); // delay gaurd
}
}
#define ID 0x25
# define TX PB6
unsigned char my_data[4];
unsigned int checksum;
char i,j,ADC_value, Remote_value;
void main()
{
IO_Init(); // khởi tạo chân nào vào ,chân nào ra của MCU ( tùy theo mục đích sử dụng)
ADC_Init ; // khởi tạo ADC
while(1)
{
ADC_value = ADC_read8( channel1); // đọc ADC 8 bit tại kênh ADC1
if (button1_pressed) { Remote_value = 0x01; }
if ( button2........................................... 0x02;}
checksum=0;
my_data[0]=ID;
checksum += my_data[0];
my_data[1] = ADC_value;
checksum += my_data[1];
my_data[2] = Remote_value;
checksum += my_data[2];
my_data[3] = checksum;
for (i=0;i<32;i++) // send preamble
{
TX=1;
Delay_us(416); // Delay 416 uS
TX=0;
Delay_us(416); //
}
Delay_us(1136); // Delay for syn bit
//-----------------
TX=1; // start bit
Delay_us(416);
TX=0;
Delay_us(416);
//-----------------
for (j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
if ((my_data[j] & 0x80) == 0x80)
{
TX=1;
Delay_us(416);
TX=0;
Delay_us(416);
}
else
{
TX=0;
Delay_us(416);
TX=1;
Delay_us(416);
}
my_data[j]=my_data[j]<<1;
}
}
//------ send stop bit -------
TX=1;
Delay_us(416);
TX=0;
Delay_us(416);
Delay_ms(10); // delay gaurd
}
}