11-03-2013, 11:12 AM
|
#1
|
Member
Tham gia ngày: May 2012
Bài gửi: 45
Online Status:
|
Thí nghiệm nho nhỏ với PIC/ AVR với RF
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>
|
|
|