PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   MPASM (http://www.picvietnam.com/forum/forumdisplay.php?f=34)
-   -   !!!thắc mắc một tí về tập lệnh của Pic!!!! (http://www.picvietnam.com/forum/showthread.php?t=2397)

doremino 19-05-2008 07:14 PM

!!!thắc mắc một tí về tập lệnh của Pic!!!!
 
anh à!cho em hỏi đoạn chương trình sau có vài chỗ em không hiểu lắm(trích từ chương trình khởi đầu cho interrupt của Falleaf)
Code:

MOVWF        W_SAVE                  ;W_SAVE(bank unknown!) = W
                                SWAPF          STATUS,        W
                                CLRF            STATUS                  ; force bank 0 for remainder of handler

em không hiểu mình đảo 4 bit cao với 4 bit thấp của thanh ghi STATUS để làm gì ?
tiện thể cho em hỏi lệnh
Code:

MOVF 
với lệnh  MOVWF khác nhau như thế nào


namqn 19-05-2008 10:46 PM

Trích:

Nguyên văn bởi doremino (Post 16349)
anh à!cho em hỏi đoạn chương trình sau có vài chỗ em không hiểu lắm(trích từ chương trình khởi đầu cho interrupt của Falleaf)
Code:

MOVWF        W_SAVE                  ;W_SAVE(bank unknown!) = W
                                SWAPF          STATUS,        W
                                CLRF            STATUS                  ; force bank 0 for remainder of handler

em không hiểu mình đảo 4 bit cao với 4 bit thấp của thanh ghi STATUS để làm gì ?
tiện thể cho em hỏi lệnh
Code:

MOVF 
với lệnh  MOVWF khác nhau như thế nào


Lý do của việc dùng lệnh SWAPF trong code của chương trình xử lý ngắt: ngắt có thể xảy ra bất kỳ lúc nào, tại bất kỳ vị trí nào của chương trình, do đó cần lưu các thanh ghi sẽ bị chương trình xử lý ngắt thay đổi trạng thái. Tối thiểu là các thanh ghi W, STATUS cần được lưu trước khi thực hiện những chức năng khác trong chương trình xử lý ngắt, và chỉ phục hồi ngay trước khi trở về từ ngắt. Lệnh MOVWF không ảnh hưởng đến bất cứ cờ nào trong thanh ghi STATUS, do đó có thể được sử dụng một cách an toàn để lưu thanh ghi W vào một ô nhớ nào đó, nhưng lệnh MOVF để sao chép một ô nhớ đến một ô nhớ khác (bao gồm cả thanh ghi W) sẽ ảnh hưởng đến cờ Z của thanh ghi STATUS. Do đó trong code trên, sau khi lưu thanh ghi W vào ô nhớ W_TEMP thì thanh ghi STATUS sẽ được (hoán vị và) sao chép vào thanh ghi W bằng lệnh SWAPF. Lệnh SWAPF cũng không ảnh hưởng đến các cờ trong thanh ghi STATUS. Do đó lệnh SWAPF STATUS, W được dùng để sao chép nội dung thanh ghi STATUS vào thanh ghi W, và sau đó vào ô nhớ STATUS_TEMP mà không làm thay đổi thanh ghi STATUS.

Ở cuối chương trình xử lý ngắt, quá trình phục hồi thanh ghi STATUS chỉ diễn ra theo trình tự ngược với quá trình lưu nó, nhưng với thanh ghi W thì cần phải dùng hai lệnh SWAPF để phục hồi thanh ghi W từ ô nhớ W_TEMP, vì không thể dùng lệnh MOVF để chép nội dung của W_TEMP (sẽ làm ảnh hưởng cờ Z trong thanh ghi STATUS vừa được phục hồi). Code mẫu trong các datasheet cho quá trình lưu ngữ cảnh khi xử lý ngắt là rất chuẩn, không có cách nào hiệu quả hơn.

Trong phần giải thích trên đã đề cập đến sự khác biệt giữa MOVF và MOVWF (MOVF dùng để sao chép thanh ghi F vào chính nó hay vào W, MOVWF để sao chép thanh ghi W vào F, nếu địa chỉ của F là 0 là lệnh sẽ sao chép thanh ghi W vào chính nó).

Thân,


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam