View Single Post
Old 14-02-2007, 06:57 PM   #14
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
Trích:
Nguyên văn bởi hungpq View Post
Trời ơi bác namqn bác tính lại đi, vòng lặp này của nó chỉ chạy được 3 vòng thôi. Tôi nghĩ rằng đây là vấn đề đơn giản nên không giải thích rõ.

Giá trị ban đầu của hai bit D1, D0 của thanh ghi EEADR là '00'. Ta tạm gán cho nó 1 cái tên V, gái trị ban đầu V = 00.

- Lần 1: V = 00 -> V tăng lên 1 -> V = 01 -> kiểm tra V, lúc này V = 01 => Tiếp tục vòng lặp.

- Lần 2: V = 01 -> V tăng lên 1 -> V = 10 -> kiểm tra V, lúc này V = 10 => Tiếp tục vòng lặp.

- Lần 3: V = 10 -> V tăng lên 1 -> V = 11 -> kiểm tra V, lúc này V = 11 => Thoát khỏi vòng lặp và kết thúc.

Như vậy vòng lặp này chỉ chạy được 3 vòng và không bao giờ ghi được vào đủ 4 thanh ghi đệm.
Vâng, bạn nói vòng lặp này chỉ chạy được 3 vòng thì đúng, tôi không chú ý lắm đến nó vì không viết vòng lặp theo kiểu như vậy. Có lẽ chỉ là lỗi đánh máy của lập trình viên thôi. Nếu sửa lệnh XORLW thành XORLW 0x00 thì ok.

Trước đó bạn nói vòng lặp chỉ chạy được 1 lần nên tôi mới khẳng định là nó chạy được nhiều lần.

Phân tích kỹ hơn thì có thể thấy là lệnh XORLW bị thừa, vì khi ANDLW với 0x03 thì đồng thời đã che các bit cao và kiểm tra 2 bit thấp có bằng '00' luôn rồ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

thay đổi nội dung bởi: namqn, 14-02-2007 lúc 07:08 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn