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,
|