Tôi khuyên bạn nên collect 256 bits là tối ưu nhất thay vì 400 để đảm bảo với thời gian 10us, vì với 256 bits có thể dùng 1 byte để count và việc shift bit có thời gian thực thi nhanh hơn rất nhiều:
Code:
...
#define BITS_COUNT 256
int8 count=0; // Bat dau tai vi tri byte 0
int8 buff[BITS_COUNT/8]; // Dung mat 32 Bytes
....
void SetBitData(int1 value) // Goi ham moi 10us de luu gia tri cua bit doc duoc
{
// Gan lan luot tung bit (5 bits cao xac dinh byte va 3 bits thap xac dinh bit)
if(value==1) buff[count>>3]|=(1<<(count&0x07));
else buff[count>>3]&=(~(1<<(count&0x07)));
if(++count==0){
// Nhan du 256 bits va thuc hien truyen du lieu 32 bytes ve may tinh
// Khong can reset count ve 0 vi tu dong tran so 1 byte
}
}
...