PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hỏi về INDF và FSR (http://www.picvietnam.com/forum/showthread.php?t=4025)

thaithien 28-04-2009 06:12 PM

Hỏi về INDF và FSR
 
Mình có đoạn chương trình như sau:
Code:

title "Prog1 Simpple addressing"
LIST P=16F84,F=INHX8M,R=DEC
INCLUDE "p16f84.inc"
;registers
test equ 12
__config _CP_OFF & _WDT_OFF & _RC_OSC
PAGE
;main
        org 0
        clrf test
        movf test,w
        addlw 'A'
        movwf test

        movlw test
        movwf FSR
       
        movf INDF,w
        incf INDF
        movwf INDF
Finished
        goto $
        end

Khi chạy debug thì không hiểu lắm về các kết quả.Cụ thể là có vài câu hỏi thế này :
1. Chỉ thị EQU là gán tên ký hiệu cho một chuỗi hoặc hằng số,vậy nó mang giá trị được gán hay là địa chỉ ?(Mình nghĩ là giá trị được gán,ví dụ test EQU 12 thì test=12).Có phải bất cứ khi nào gọi test thì đều gọi giá trị 12 ?
2. Thanh ghi INDF có chức năng như thế nào vậy ?Công dụng của nó là để làm con trỏ ?
3. Hai dòng lệnh sau đây là như thế nào ?(cũng lấy trong đoạn chương trình trên).TRước dòng lệnh thì test đang giữ giá trị là 0x41 (tức là d65).Ta cho trực hiện 2 lệnh này :
Code:

       
movlw test
movwf FSR

Nhưng kết cục là thanh w mang giá trị 12,mình nghĩ chính là giá trị đã khai báo ở dòng test EQU 12.NHư vậy là sao ?

4. Trong cửa sổ watch có các symbol nhưng mình không hiểu rõ lắm:
Z có phải là cờ zero không ?Lúc đầu thì mình cũng nghĩ vậy nhưng khi cho chạy chương trình từng bước thì nó lại nhảy 1,2,3,4...Nhưng nhìn vào thanh ghi status thì cờ zero vẫn bằng không sau các dòng lệnh.Vậy 2 cái z này khác nhau như thế nào vậy ?

5 Các symbol W,WR,WREG là sao ?Có khác nhau không.Cái nào mới chính là thanh làm việc?(mình nghĩ là WREG).Không biết có phải không nên hỏi cho chắc ăn).

Hy vọng nhận được câu trả lời sớm.Cảm ơn nhiều !!!!!

namqn 28-04-2009 08:22 PM

1. EQU làm cho danh biểu bên trái mang giá trị của biểu thức bên phải. Do đó, lúc nào bạn dùng test, bạn sẽ dùng giá trị 12.

2. INDF dùng để truy xuất nội dung ô nhớ do FSR trỏ đến. Như tên gọi của nó, thanh ghi INDF dùng để truy xuất gián tiếp một thanh ghi (INDirect File).

3. Tôi cho là bạn hiểu nhầm, lúc nào test cũng mang giá trị 12 trong đoạn chương trình đó. Hai lệnh addlw 'A' và movwf test sẽ làm cho ô nhớ có địa chỉ test (tức là ô nhớ 12) mang giá trị 'A' (tức là 0x41). Nếu bạn dùng cửa sổ Watch thì bạn chỉ có thể xem nội dung của test (do đó bạn thấy nó bằng 0x41). Còn lệnh movlw test sẽ dùng giá trị của test (= 12) để ghi vào thanh ghi W, do đó tất nhiên W phải bằng 12 sau lệnh này.

4. Bạn cho cái hình chụp cửa sổ Watch của bạn, vì tôi không thấy Z trong cửa sổ Watch của tôi.

5. Thanh ghi làm việc là W, trong cửa sổ Watch thì nó được ký hiệu là WREG (cách ký hiệu này cũng xuất hiện trong phần mô tả các lệnh hợp ngữ). Bạn cũng cho cái hình chụp của ký hiệu WR, vì tôi không tìm thấy nó ở đâu.

Thân,

thaithien 29-04-2009 12:19 AM

1 Attachment(s)
Cái hình của em đây:

namqn 29-04-2009 12:42 AM

Trích:

Nguyên văn bởi thaithien (Post 25344)
Cái hình của em đây:

À, các symbol mà bạn đang thắc mắc được định nghĩa trong tập tin "p16f84.inc", đã được include vào mã nguồn của bạn ở đầu chương trình.

Như vậy, Z là cờ zero trong thanh ghi STATUS (xem bằng Watch theo cách của bạn thì lại được hiểu là thanh ghi ở địa chỉ 0x02, tức là thanh ghi PCL, nên bạn mới thấy nó thay đổi khi bạn step qua các lệnh của chương trình). Và WR là bit Write của thanh ghi EECON1.

Ngoại trừ các symbol INDF, FSR, test, và WREG trong cửa sổ Watch của bạn, những symbol còn lại được xem theo kiểu của bạn đều mang ý nghĩa khác.

Những thông tin về giá trị của PC, của thanh ghi W, các cờ trạng thái trong thanh ghi STATUS, và bank hiện thời có thể xem ở dòng trạng thái của MPLAB IDE, và nhất thiết không xem theo cách mà bạn đã dùng.

Thân,

thaithien 29-04-2009 01:38 AM

Trích:

Nguyên văn bởi namqn (Post 25345)
À, các symbol mà bạn đang thắc mắc được định nghĩa trong tập tin "p16f84.inc", đã được include vào mã nguồn của bạn ở đầu chương trình.

Như vậy, Z là cờ zero trong thanh ghi STATUS (xem bằng Watch theo cách của bạn thì lại được hiểu là thanh ghi ở địa chỉ 0x02, tức là thanh ghi PCL, nên bạn mới thấy nó thay đổi khi bạn step qua các lệnh của chương trình). Và WR là bit Write của thanh ghi EECON1.

Ngoại trừ các symbol INDF, FSR, test, và WREG trong cửa sổ Watch của bạn, những symbol còn lại được xem theo kiểu của bạn đều mang ý nghĩa khác.

Những thông tin về giá trị của PC, của thanh ghi W, các cờ trạng thái trong thanh ghi STATUS, và bank hiện thời có thể xem ở dòng trạng thái của MPLAB IDE, và nhất thiết không xem theo cách mà bạn đã dùng.

Thân,

Vậy là cách xem của em sai rồi hả ?"nhất thiết không" hay là "không nhất thiết" vậy hả anh ?

namqn 29-04-2009 01:47 AM

Trích:

Nguyên văn bởi thaithien (Post 25349)
Vậy là cách xem của em sai rồi hả ?"nhất thiết không" hay là "không nhất thiết" vậy hả anh ?

Tôi không đánh sai thứ tự đâu, "nhất thiết không xem theo cách mà bạn đã dùng".

Thân,

thaithien 03-05-2009 03:58 AM

Vậy xem các cờ Z,DC,C và PCLATH,PCL như thế nào hả anh ?Thanh status chỉ thấy mỗi pc.Em chọn add SFR,add Symbol của các thanh ghi trên nhưng không xem được.(nó chạy không đúng)

namqn 03-05-2009 04:57 PM

1 Attachment(s)
Trích:

Nguyên văn bởi thaithien (Post 25442)
Vậy xem các cờ Z,DC,C và PCLATH,PCL như thế nào hả anh ?Thanh status chỉ thấy mỗi pc.Em chọn add SFR,add Symbol của các thanh ghi trên nhưng không xem được.(nó chạy không đúng)

Trong hình đính kèm, từ trái sang phải là các field sau:
- Tên công cụ mô phỏng (trong hình là MPLAB IDE)
- Một field trống
- Tên vi điều khiển đang được mô phỏng
- Giá trị của thanh ghi PC
- Giá trị của thanh ghi W
- Giá trị của các cờ trạng thái (Z, C, và DC): chữ thường ứng với trạng thái '0', chữ hoa ứng với trạng thái '1'
- Một field trống
- Tần số xung clock
- Vị trí bank hiện thời
- Vị trí của con trỏ trong cửa sổ soạn thảo
- Và một số field còn lại

Thân,

thaithien 03-05-2009 11:17 PM

Cảm ơn anh Nam nhiều.Mấy cái cờ Z,DC,C là em chưa biết.À,còn cái vụ PCLATH,PCL là mình tính ra từ PC hay là có cách nào khác không ?Em dùng add symbol mà không xem được.

namqn 04-05-2009 06:17 AM

Trích:

Nguyên văn bởi thaithien (Post 25465)
Cảm ơn anh Nam nhiều.Mấy cái cờ Z,DC,C là em chưa biết.À,còn cái vụ PCLATH,PCL là mình tính ra từ PC hay là có cách nào khác không ?Em dùng add symbol mà không xem được.

Bạn có thể dùng "Add SFR" (chứ không phải "Add Symbol") ở cửa sổ Watch, cũng có thể dùng lệnh "Special Function Registers" trong mênu để mở cửa sổ Special Function Registers để xem giá trị của các thanh ghi PCLATH và PCL (cùng các thanh ghi khác) trong đó.

Tất nhiên bạn có thể tự tính ra PCLATH và PCL từ giá trị hexadecimal của PC ở dòng trạng thái của MPLAB IDE.

Thân,

thaithien 04-05-2009 09:14 PM

Cho em hỏi câu nữa nghen,vậy tác dụng của "add symbol" là để làm gì vì em thấy có lúc coi không được.Ắt hẳn phải có công dụng nào đó mà mình chưa biết sử dụng hoặc sử dụng chưa đúng.


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

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