![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
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 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 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 !!!!! |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
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,
__________________
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 |
![]() |
![]() |
![]() |
#3 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
Cái hình của em đây:
|
![]() |
![]() |
![]() |
#4 |
Trưởng lão PIC bang
|
À, 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,
__________________
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 |
![]() |
![]() |
![]() |
#5 | |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
Trích:
|
|
![]() |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
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)
|
![]() |
![]() |
![]() |
#8 | |
Trưởng lão PIC bang
|
Trích:
- 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,
__________________
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 |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
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.
|
![]() |
![]() |
![]() |
#10 | |
Trưởng lão PIC bang
|
Trích:
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,
__________________
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 |
|
![]() |
![]() |
![]() |
#11 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
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.
|
![]() |
![]() |
![]() |
|
|