Tôi không dùng CCS C, nhưng đọc qua code của bạn, tôi có cảm giác không ổn. Theo tài liệu của CCS C, #INT_EEPROM là ngắt xảy ra khi việc ghi EEPROM hoàn tất. Những gì bạn viết trong trình xử lý ngắt #INT_RDA có thể hiểu được, nhưng những gì bạn viết trong trình xử lý ngắt #INT_EEPROM thì khó hiểu.
Theo cách bạn viết, khi nhận được ký tự, và ký tự đó có giá trị 255 thì bạn sẽ thực hiện việc ghi vào EEPROM. Tuy nhiên, chương trình con mà bạn gọi ở trình xử lý ngắt #INT_RDA lại là trình xử lý ngắt #INT_EEPROM, điều này có thể gây ra rắc rối, vì chương trình xử lý ngắt sẽ trở về bằng lệnh RETI, còn chương trình con bình thường sẽ trở về bằng lệnh RETURN hay RETLW.
Điểm thứ hai, ngắt #INT_EEPROM xảy ra khi việc ghi 1 ô nhớ EEPROM hoàn tất, khi đó, trong chương trình xử lý ngắt #INT_EEPROM của bạn, bạn lại yêu cầu ghi vào EEPROM nữa, vì khi động tác ghi này hoàn tất, nó sẽ sinh ra một ngắt #INT_EEPROM nữa. Trong khi đó, bạn vẫn chưa hoàn tất vòng lặp ghi một mảng giá trị vào EEPROM. Thực sự tôi cũng không hiểu chương trình này sẽ vận hành như thế nào, vì tôi không bao giờ viết code kiểu như vậy.
Thân,
|