View Single Post
Old 17-04-2008, 09:37 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Đú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';

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,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn