Với đoạn code lệnh như sau đc viết trong ngắt ngoài của PIC/ AVR:
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.
Code:
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; }
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.
Comment