Sync bit có tổng là 128a, bao gồm 4a cao và 124a thấp, nếu chia đều ra 32 phần bằng nhau ( mỗi phần 4a) thì xung cao chiếm 1 phần và thấp chiếm 31 phần ( tổng cộng là 32) . Nếu bắt được xung cao và tiếp theo là 31 thấp thì đó chính là sync bit. Và đương nhiên giá trị ( thời gian ) của xung cao đó chính là 4anpha ( trong datasheet người ta vẽ Xung và clock đó ).
Cách bắt xung, đếm thời gian thì đơn giản dùng vòng lặp và loại trừ cũng được : Chẳng hạn ( bắt xung ở chân RA1)
capture_sync :
while(!RA1); // đợi chân A1 lên mức cao ( để bắt xung cao )
timer1_value=0; // reset bộ đếm thời gian .... lúc này bộ đếm thời gian bắt đầu đếm timer1_value từ 0 ---> n
while(RA1); // đợi hết xung cao
xung_cao = timer1_value; // timer1_value là giá trị trong thanh ghi, đếm thời gian
timer1_value=0; // reset bộ đếm thời gian .... lúc này bộ đếm thời gian bắt đầu đếm timer1_value từ 0 ---> n
while(!RA1); // Đợi đến hết xung thấp
xung_thap = timer1_value;
// kiểm tra
if((xung_thap>xung_cao*30)&&(xung_thap<xung_cao*32 )) // nghĩa là tương đương cái xung thấp nó = 31 phần còn xung cao = 1phần
{
- nhận được sync_bit
- giá trị 1 xung cao ( hay 4a ( trong datasheet pt2262 )) = xung_cao;
}
else ////// Không nhận được sync
go to capture_sync; // quay lại và tiếp tục tìm kiếm sync
Khi đã biết giá trị 4a ( lấy ví dụ đếm được 500us ) ta dễ dàng kiểm tra những bit thu nhận là 1 ( 4a cao - 12a thấp - 4a cao - 12a thấp ) hay 0 ( 12a cao - 4a thấp - 12a cao - 4a thấp ) hay là f ( floating ) : 4a cao - 12a thấp - 12a cao - 4a thấp .
Những cái này trong datasheet của PT2262 người ta vẽ Xung và chú thích đầy đủ rồi.
Cách bắt xung, đếm thời gian thì đơn giản dùng vòng lặp và loại trừ cũng được : Chẳng hạn ( bắt xung ở chân RA1)
capture_sync :
while(!RA1); // đợi chân A1 lên mức cao ( để bắt xung cao )
timer1_value=0; // reset bộ đếm thời gian .... lúc này bộ đếm thời gian bắt đầu đếm timer1_value từ 0 ---> n
while(RA1); // đợi hết xung cao
xung_cao = timer1_value; // timer1_value là giá trị trong thanh ghi, đếm thời gian
timer1_value=0; // reset bộ đếm thời gian .... lúc này bộ đếm thời gian bắt đầu đếm timer1_value từ 0 ---> n
while(!RA1); // Đợi đến hết xung thấp
xung_thap = timer1_value;
// kiểm tra
if((xung_thap>xung_cao*30)&&(xung_thap<xung_cao*32 )) // nghĩa là tương đương cái xung thấp nó = 31 phần còn xung cao = 1phần
{
- nhận được sync_bit
- giá trị 1 xung cao ( hay 4a ( trong datasheet pt2262 )) = xung_cao;
}
else ////// Không nhận được sync
go to capture_sync; // quay lại và tiếp tục tìm kiếm sync
Khi đã biết giá trị 4a ( lấy ví dụ đếm được 500us ) ta dễ dàng kiểm tra những bit thu nhận là 1 ( 4a cao - 12a thấp - 4a cao - 12a thấp ) hay 0 ( 12a cao - 4a thấp - 12a cao - 4a thấp ) hay là f ( floating ) : 4a cao - 12a thấp - 12a cao - 4a thấp .
Những cái này trong datasheet của PT2262 người ta vẽ Xung và chú thích đầy đủ rồi.
Comment