Đúng vậy, for (i=0; i<8; i++) thì mới đúng. Tôi đã không kiểm tra cận.
Code đúng là tạo ra LSB nằm trước MSB, nhưng có thể in MSB trước hay sau đều được, tùy vào đoạn code in dữ liệu thôi. Tôi chỉ gợi ý cách giải quyết yêu cầu của thuật toán, còn thuật toán là do tác giả chọn.
Việc chọn lựa giữa
Code:
if (x & (0x80 shr i)) a[i] = '1'; else a[i] = '0';
và
Code:
if (x & mask[i]) a[i] = '1'; else a[i] = '0';
còn tùy theo PIC được dùng. Nếu PIC không có lệnh dịch nhiều bit một lúc (PIC16F877A rơi vào trường hợp này) thì các lệnh dịch với i tăng dần sẽ kém hiệu quả hơn lệnh tra bảng. Tất nhiên dùng bảng thì sẽ tốn thêm 8 word cho bảng, nhưng chưa hẳn mã máy cho lệnh dịch sinh ra đã ngắn hơn mã máy cho lệnh tra bảng. Những điều này để cho người dùng CCS C đánh giá, còn tôi không dùng CCS C nên không đánh giá được.
Bạn đã đánh sai username của tôi.
Thân,