PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-02-2007, 09:17 AM   #1
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
Old 13-02-2007, 09:29 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
Trích:
Nguyên văn bởi hungpq View Post
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.
Vòng lặp trong ví dụ của Microchip đã viết đúng, bạn hiểu không chính xác rồi.

Theo điều kiện đã ghi chú thì ở đầu vòng lặp phải có 2 bit thấp nhất của EEADR là '00', như vậy thì ghi dữ liệu trước rồi tăng địa chỉ sau là đúng. Và các giá trị lần lượt của 2 bit thấp nhất đó sẽ là 00, 01, 10, và 11, khi đó đến lần tăng thứ năm thì 2 bit đó sẽ về lại '00', và chúng ta đã ghi đủ giá trị vào 4 thanh ghi đệm.

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
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Chuỗi được lưu trong Flash bien_van_khat Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 24 15-12-2010 09:43 AM
về Pickit 1 FLASH Starter Kit hawinter Cơ bản về vi điều khiển và PIC 2 19-12-2006 01:16 AM


Múi giờ GMT. Hiện tại là 08:40 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam