View Single Post
Old 17-09-2006, 06:39 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
Thật khó tin là Nigel lại mắc lỗi rất tầm thường như vậy, nhưng sự thật thì code trên trang web của ông ta vẫn đang có lỗi đó.

Trong phiên bản có kiểm tra cờ BF, ở chương trình con LCD_Init có lệnh gọi LCD_Busy ở ngay phần đầu. Vấn đề ở đây là LCD_Busy dùng chế độ giao tiếp 4-bit, mà chế độ này lại chưa được thiết lập khi chúng ta bắt đầu thực hiện LCD_Init.

Nếu chương trình vượt qua được lỗi này và chạy đến lệnh LCD_Cmd với W = 0x20 (để thiết lập giao tiếp 4-bit) thì vẫn có vấn đề, vì LCD_Cmd có gọi LCD_Busy trước khi trở về. Và một lần nữa, LCD_Busy lại dùng chế độ giao tiếp 4-bit, là chế độ đang được thiết lập.

Do đó, có 2 điểm cần chỉnh lại trong chương trình của Nigel:

1. Thay lệnh gọi LCD_Busy ở đầu LCD_Init bằng LCD_Delay100
2. Thay lệnh gọi LCD_Busy ở cuối LCD_Cmd bằng LCD_Delay5

Các chương trình con này chỉ để khởi tạo, hay xuất các lệnh điều khiển ít khi được dùng, do đó vẫn không ảnh hưởng đến mục tiêu chính là dùng cờ BF để giảm thời gian chết khi xuất dữ liệu ra LCD (các lệnh xuất dữ liệu ra LCD như LCD_Char, và LCD_CharD vẫn dùng cờ BF).

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