Xem bài viết riêng lẻ
  #1  
Cũ 16-04-2013, 10:39 AM
phuongpt phuongpt đang online
Junior Member
 
Tham gia ngày: Jun 2012
Bài gửi: 3
Mặc định Nhận dữ liệu từ UART theo frame truyền cho AVR

Hệ thống quảng cáo SangNhuong.com

Nhận dữ liệu từ UART theo frame truyền cho AVR


Xin giới thiệu các bạn một thuật toán bắt tín hiệu truyền RS232 trong Vi Điều Khiển để tránh nhầm và lỗi dữ liệu, đây là code thường xuyên được sử dụng, nên chạy ổn định.
Một số lưu ý:
1. Định nghĩa: VD ta cần nhận một dữ liệu có độ dài 6Byte, trong đó có 2byte header, 1Byte check sum,
- Mặc định truyền 1byte liên tiếp : 0xAA là file header
- checksum = 0xAA+0xAA+data_1+data_2+data_3.
- su dung ngat UART.
2. Các biến sử dụng.
char rx_map[3] // 3Byte cần nhận
temp[4] // nhận tạm dữ liệu khi chưa lọc ;
char header=0x00 ,header_old=0x00 ,index=0x00 ,check_sum=0x00 ; bit sync=0; //Kiem tra trang thai cua du lieu, khi nhan 2 file lien tiep dang 0xAA va 0xAA thi sync=1
3. Code

Mã:
// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) PARITY_ERROR else { if (sync==true) { //Nhan du lieu tu UART vao mang,nhan 4byte (3byte data+1checksum) temp[index]=data; //Kiem tra xem Frame nhan dc co dung ko if (index>= 3 ) { check_sum=temp[0]+temp[1]+temp[2]; if(check_sum==temp[3]) { rx_map[0]=temp[0]; rx_map[1]=temp[1]; rx_map[2]=temp[2]; init_rx(); } sync=false; index=0; } index++; } } header_old=data; }; }
Với các VXL khác có thể làm tương tự.
Trả lời với trích dẫn