Xem bài viết riêng lẻ
Cũ 11-03-2013, 11:12 AM   #1
psmvn
Member
 
Tham gia ngày: May 2012
Bài gửi: 45
Online Status: psmvn đang online
Mặc định Thí nghiệm nho nhỏ với PIC/ AVR với RF

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

Với đoạn code lệnh như sau đc viết trong ngắt ngoài của PIC/ AVR:
Mã:
if((13*T_T)>>2 <=RF_time_copy && RF_time_copy< (15*T_T)>>2 && RF_check_start_bit==0)// 3.5bit { RF_check_start_bit=1;//Bao da nhan dc bit start RF_number_recive=0;//Dem so lan nhan data RF_shift_data=0;//Bat dau tinh so lan dich bit } //_____________________Vi tri bat dau o cuoi(1.5bit)____________________________________________ else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy < (7*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_end==0) { RF_end=1;//Xung canh len dau tien o vi tri end RF_middle=0; RF_number_recive=1; } //____________________Vi tri bat dau o giua(2bit)________________________________ else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_middle==0) { RF_middle=1;//Xung canh len dau tien o vi tri middle RF_end=0; RF_number_recive=1; } //_______________________________________________________________________ else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_end==1)//Neu do rong bit=1bit va bat dau la vi tri end { if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x00; RF_shift_data++;//Dem so lan dich bit } RF_end=1;//Xung canh len sau do o vi tri end RF_middle=0; } else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_middle==1)//Neu do rong bit=1bit va bat dau la vi tri middle { if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x01; RF_shift_data++;//Dem so lan dich bit } RF_middle=1;//Xung canh len sau do o vi tri middle RF_end=0; } //_______________________________________________________________________ else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_end==1)//Neu do rong bit=1.5bit va bat dau la vi tri end { if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x00; RF_shift_data++;//Dem so lan dich bit } RF_middle=1;//Xung canh len sau do o vi tri middle RF_end=0; } else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_middle==1)//Neu do rong bit=1.5bit va bat dau la vi tri middle { if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x01; RF_shift_data++;//Dem so lan dich bit } if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep RF_shift_data++;//Dem so lan dich bit } RF_end=1;//Xung canh len sau do o vi tri end RF_middle=0; } //_______________________________________________________________________ else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_middle==1)//Neu do rong bit=2bit va bat dau la vi tri middle { if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x01; RF_shift_data++;//Dem so lan dich bit } if(RF_shift_data<8) { RF_data_in=RF_data_in<<1;//Dich trai 1 bit RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep RF_shift_data++;//Dem so lan dich bit } RF_middle=1;//Xung canh len sau do o vi tri middle RF_end=0; } else if((9*T_T)>>2 <=RF_time_copy && RF_time_copy< (11*T_T)>>2)// Neu co Byte Stop// 2.5bit { if(RF_shift_data==8)//Neu du 8bit { //RF_data=RF_data_in;//Copy du lieu_Dam bao an toan du lieu da nhan duoc RF_Buffer[RF_counter]=RF_data_in; RF_data=RF_data_in; RF_counter++;// Overlow Buffer if(RF_counter==4)// Neu nhan du 4 gia tri { RF_Buffer_Overlow=1;// Overlow Buffer RF_counter=0; } } //RF_data_in=0;//Xoa du lieu nhan RF_shift_data=0; RF_middle=0; RF_end=0; RF_time=0; RF_enable_time=1; RF_number_recive=0; RF_check_start_bit=0; } else//Neu du lieu nhan ko dung ma manchester { RF_data_in=0;//Xoa du lieu nhan RF_shift_data=0; RF_middle=0; RF_end=0; RF_time=0; RF_enable_time=1; RF_number_recive=0; RF_check_start_bit=0; RF_time_copy=0; }
Mọi người đừng quan tâm code viết gì_Mà chỉ quan tâm viết như thế nào thôi nhé( Ko bàn tính tối ưu ở đây nhé)
Chú ý màu xanh đậm, nếu viết dạng biểu thức thì PIC887 ko giải mã đc, AVR vẫn ok. Nếu mình tính toán hộ Pic887 thì Pic887 giải mã đc.
Kết quả:
AVR( Mega8) giải mã tốt với code trên.
PIC 16F887 ko giải mã đc theo code trên.
Anh em cứ chém tẹt ga để mọi người thêm kinh nghiệm và lựa chọn.=D>
  Trả lời với trích dẫn


CHUYÊN MỤC ĐƯỢC TÀI TRỢ BỞI