Trích:
Nguyên văn bởi 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,
|
Em đã chỉnh như ý 1 ở trên trong tut em gởi rồi còn ý 2 thì quả thật em có sai sót thật không chịu đọc kĩ cứ tưởng LCD_cmd là không vấn đề gì.
Cám ơn anh rất nhiều ,em sẽ mail cho Nigel biết lỗi này.
Có 1 điều em thắc mắc là theo Nigel viết thì ông ta đã kiểm tra trên mạch thật rồi nhưng mắc lỗi vậy sao mà chạy được.Theo em nghĩ có lẽ ông ta muốn người đọc phải tự tìm lỗi sai trong tut ( bởi vì em cũng tìm ra 1 số lỗi nữa trong các chương trước ).Nếu vậy thì đây quả là ý tường rất hay của Nigel.