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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 19-05-2008, 10:46 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 doremino View Post
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,
__________________
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
 


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


Múi giờ GMT. Hiện tại là 03:03 PM.


Đượ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