Đăng nhập
Tìm kiếm
Chào mừng bạn đến với Chợ thông tin Thiết bị điện Việt Nam.
» Nếu đây là lần đầu tiên bạn tham gia diễn đàn, xin mời bạn xem phần hỏi/đáp để biết cách dùng diễn đàn.
» Để có thể tham gia thảo luận, các bạn phải đăng ký làm thành viên, click vào đây để đăng ký.
Vui lòng nhấn để đăng ký.
Trả lời
 
Công cụ bài viết Kiểu hiển thị
  #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


CHUYÊN MỤC ĐƯỢC TÀI TRỢ BỞI
Trả lời


Công cụ bài viết
Kiểu hiển thị

Quyền viết bài
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is Mở
Mặt cười đang Mở
[IMG] đang Mở
HTML đang Mở
Chuyển đến

SangNhuong.com


Múi giờ GMT +7. Hiện tại là 06:05 PM