View Single Post
Old 13-02-2007, 09:17 AM   #11
hungpq
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 19
:
Báo cáo với bác namqn là cái datasheet mà tôi tham khảo là DS39582B. Còn đoạn code đầy đủ của nó tôi đã đưa lên nhờ bác xem giúp rồi đó.

Code:
 LOOP..... 
      .
      .
      INCF            EEADR,F
      MOVF           EEADR,W
      ANDLW         0X03
      XORLW         0X03
      BTFSC          STATUS,Z
      GOTO           LOOP
Đây chính là đoạn code mà nó bị sai các bác ah. Ở đây có hai cái sai chính.
- Thứ nhât: Giá trị thanh ghi EEADR được tăng trước khi nó được kiểm tra, cho nên nó không bao giờ tăng đủ giá trị cần thiết cả (tăng 4 địa chỉ so với địa chỉ ban đầu).
- Thứ hai: Khi dùng câu lệnh
BTFSC STATUS,Z
GOTO LOOP
Đoạn code này chỉ được thực hiện một lần duy nhất. Trong khi đó để ghi vào bộ nhớ Flash thì cần phải thực hiện ghi dữ liệu vào 4 thanh ghi đệm của nó ( Đoạn code trên cần phải được thực hiện 4 lần).
Tôi đã thực hiện sửa lại đoạn code trên một cách đơn giản như sau:

Code:
LOOP..... 
      .
      .
      MOVF           EEADR,W
      ANDLW         0X03
      XORLW         0X03
      BTFSC          STATUS,Z
      RETURN
      INCF            EEADR,F 
      GOTO           LOOP
Tôi đã thử thấy nó cũng ghi vào được bình thường.

thay đổi nội dung bởi: namqn, 13-02-2007 lúc 09:22 PM.
hungpq vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn