View Single Post
Old 22-03-2008, 07:11 PM   #2
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
Cách tốt nhất là bạn tham khảo ví dụ ghi EEPROM của CCS C và chỉnh sửa lại cho phù hợp với yêu cầu của bạn.

Lấy ví dụ đơn giản, bạn có chuỗi 1 sẽ được ghi vào EEPROM. Ở đầu hàm viet_eeprom(), bạn đã cấm ngắt toàn cục. Khi thực hiện ghi chuỗi 1, bạn gọi hàm write_eeprom(b1, s) để ghi lại giá trị của s. Về nguyên tắc, hàm write_eeprom() của CCS C dùng khả năng ghi vào EEPROM của phần cứng bên trong PIC, do đó sẽ kích hoạt cờ EEIF khi đã ghi xong byte s đó vào b1. Theo yêu cầu của phần cứng, có lẽ hàm write_eeprom() của CCS C sẽ xóa cờ EEIF trong trường hợp polling và để nguyên nó nếu bạn có dùng #INT_EEPROM (để trình phục vụ ngắt #INT_EEPROM có thể xử lý như thiết kế).

Vì ngắt toàn cục đã bị cấm, hàm viet_eeprom() của bạn tiếp tục chạy đến vòng lặp để ghi chuỗi vào vùng nhớ add1. Như đã nói ở trên, cứ sau mỗi lần ghi được 1 byte vào EEPROM, cờ EEIF sẽ được bật, và có lẽ sẽ không được xóa vì bạn đã khai báo có dùng #INT_EEPROM. Tôi không rõ hàm write_eeprom() sẽ làm gì trong trường hợp này (đây cũng là một trong những lý do khiến tôi không thích những hàm built-in của CCS C, vì hành vi của chúng không được giải thích rõ ràng).

Hành vi của hàm viet_eeprom() của bạn phụ thuộc vào hành vi không được biết rõ của hàm write_eeprom(). Và cách viết code của bạn là không thân thiện với cấu trúc ngắt của PIC.

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