Bàn đọc và truy cập chương trình

T

Tarts

Guest
Chào
Tôi muốn tìm từ trong bảng pic16f887, nhưng có vẻ như là máy tính tràn và tôi không thể đọc được bảng đúng với các lệnh sau:
movfw offsetvalue
Gọi bảng
...
bàn
addwf PCL
retlw x
retlw y
...
Vì vậy, tôi đọc tài liệu này: http://ww1.microchip.com/downloads/en/AppNotes/00556e.pdf
và thêm vào những (chữ đậm) hai dòng

org 0x80

movlw HIGH Bảngmovwf PCLATH

movlw offset
Gọi Bảng
.
.
.
org 0x320
Bảng:
addwf PCL, F
retlw 'A'
retlw 'B'

có vẻ như để làm việc tốt đẹp miễn là các máy tính truy cập không overroll ở giữa bảng.ví dụ cuối cùng trong tài liệu này không có vẻ làm việc ở tất cả các ví dụ (5)

Mã số:

org 0x80

movlw LOW bàn; lấy thấp 8 bit của địa chỉ

addwf bù đắp, F; làm một 8-bit, thêm vào hoạt động

movlw HIGH bàn; lấy 5 bit cao của địa chỉ

btfsc status, c; trang vượt qua?

addlw 1; có địa chỉ sau đó tăng cao

movwf PCLATH; tải địa chỉ cao trong chốt

movf bù đắp, w; tải tính toán bù đắp trong reg w

Gọi Bảng

.

.

org 0x9FD

Bảng:

movwf PCL, F; tải tính toán bù đắp trong PCL

retlw 'A'; trả lại char ASCII A

retlw 'B'; trả lại char ASCII B

retlw 'C'; trả lại char ASCII C

.

.

.
 
Tôi nghĩ rằng bảng nên bắt đầu với byte thấp lúc 0.
IE: org 0x900.

Nếu bảng bắt đầu tại 0x9fd, bạn chỉ có ba địa điểm trước khi tràn byte thấp.

 
Tôi nghĩ rằng điều này là điểm của mã này.Nó sẽ làm việc ngay cả khi máy tính tràn.

 
Hey thanks.the location of my table( I taught these were added just to show where the instructions are located in the above example)

Tôi đã không nhận ra tôi thực sự có thể viết org 0xyyy trong mã của tôi và thay đổi vị
trí của bảng của tôi (tôi đã dạy những đã được thêm vào chỉ để hiển thị, nơi các hướng dẫn nằm trong ví dụ trên)
Mã công việc của tôi bây giờ gây ra các bit thấp không tràn (bảng không phải là dài hơn 255 dòng)

Bây giờ vấn đề là tôi chỉ có thể sử dụng các địa điểm trong trang đầu tiên.Ngay sau khi tôi sử dụng các địa điểm lớn hơn 800h (đó là nơi trang 1 bắt đầu) nó không hoạt động nữa.16f887 có 4 trang của bộ nhớ flash.Làm thế nào tôi có thể sử dụng bộ nhớ flash 3 trang khác không?Tôi đang đọc 5 bit trên có hai lệnh:
movlw HIGH bảng
movwf PCLATH
Và sau đó tôi sẽ gọi bảng.Tôi đang làm gì vậy?

 
Tôi đã thử nghiệm đoạn code và nó làm việc ok?
Mplab sử dụng SIM và đặt PCL và PCLATH trong cửa sổ xem.
Bước qua mã và bạn sẽ thấy whats đi sai.

 
Ok Tôi đã cố gắng để mô phỏng.
Tôi đặt bàn của tôi tại địa chỉ 0x1800 (vào đầu Trang 3)

Bảng movlw CAO -----> làm việc ok.nó nạp 11.000 đăng ký tại w (bit 3 và 4 được thiết lập bởi vì các bit xác định số trang. 11 nghĩa trang 3)

movwf PCLATH -------> viết dữ liệu chính xác vào đăng ký PCLATH

Sau đó, tôi gọi cho bảng

addwf PCL -----> PCL bằng 00 đó là chính xác

Bây giờ khi PCLATH bảng thoát vẫn còn 11.000 cho thấy có nghĩa là nó vẫn còn trên trang 3.
Trong mô phỏng, mã giữ chạy đúng, nhưng trong Proteus nó mang lại cho stack underflow lỗi trong khi thực hiện RETLW giảng dạy.
có vẻ như là hai bit trên của PCH không được xóa.

Tôi cố gắng để xóa các bit bằng tay và nó đã giúp.nhưng điều này có nghĩa là tôi phải viết hai cuộc gọi hướng dẫn để có thể rõ ràng các bit trước khi nó trở về
Mã số:

org 0x1800

bàn

Gọi tab

bcf PCLATH, 4

bcf PCLATH, 3

trở vềtab addwf PCL

retlw 0x3e

retlw 0x51

...
 
Tôi đã có một chơi với mã và tốt nhất tôi có thể đến với là phải có một nhãn sau khi gọi bảng, lưu kết quả của việc nhìn lên bảng, và sau đó thiết lập các bit PCLATH đến đúng trang.
Sự trở lại của bảng này ok làm việc.
Không lý tưởng, nhưng bạn chỉ có một cuộc gọi.

Mã số:movf bù đắp, w; tải tính toán bù đắp trong reg w

Gọi bàn; gọi nhìn lên bảng

movwf lưu; lưu kết quả

setpage:

setpage movlw CAO; khôi phục trang chọn

movwf PCLATHgoto bắt đầu, tiếp tục chương trình

 
Bạn không chắc chắn nếu tôi hoàn toàn hiểu mã của bạn.

the call look up instruction?

Bạn đang tiết kiệm cao hơn 5 bit của PC sau khi
xem xét gọi lên chỉ dẫn?Làm thế nào bạn có thể tra từ bảng tại nơi đầu tiên?

 
Tôi chỉ cho thấy rằng bit mattered?
Đây là mã tôi đã chơi với.

Mã số:bù đắp EQU 0x7E

lưu EQU 0x7dorg 0x80

bắt đầu:

movlw 1

movwf offsetmovlw LOW bàn; lấy thấp 8 bit của địa chỉ

addwf bù đắp, F; làm một 8-bit, thêm vào hoạt động

movlw HIGH bàn; lấy 5 bit cao của địa chỉ

btfsc STATUS, C; trang vượt qua?

addlw 1; có địa chỉ sau đó tăng cao

movwf PCLATH; tải địa chỉ cao trong chốt

movf bù đắp, w; tải tính toán bù đắp trong reg w

Gọi bàn; gọi nhìn lên bảng

movwf lưu; lưu kết quả

setpage:

setpage movlw CAO; khôi phục trang chọn

movwf PCLATH

goto bắt đầu, tiếp tục chương trìnhorg 0x1800

Bảng:

movwf PCL, F; tải tính toán bù đắp trong PCL

retlw 1; trở về 1

retlw 2; trở về 2

retlw 3; trở lại 3END

 
Nó cũng không làm việc cho tôi.Vấn đề không phải là chỉ đạt bảng nhưng trở về từ nó.Bạn cần phải chỉnh sửa các trang bit chọn trong PCLATH trước khi bạn quay trở lại.

Bạn có chắc là tác phẩm của bạn mã số trong thực tế đời sống?Nó rất có thể sẽ làm việc tại MPLab sim, nhưng có bạn thử nghiệm nó trong Proteus ví dụ.

 
Nó hoạt động tốt bằng cách sử dụng Mplab Sim.Tải nó lên và bước qua mã.
Mplab là một giả lập rất tốt và mạnh mẽ.Tôi đã luôn luôn thấy rằng nếu nó hoạt động trong Mplab Sim nó sẽ làm việc trong phần cứng.

Tôi không sử dụng Proteus vì vậy tôi không thể kiểm tra nó tại đó.

 
Có nó trở về từ bảng không có vấn đề trong Mplab Sim, nhưng bạn nhận thấy rằng 3-thứ và thứ 4-bit của PCLACH vẫn đặt sau khi trở về từ bảng?Đây là lý thuyết, không có.Những bit phải được dọn sạch bằng cách nào đó để trở về trang 0.

 
'wreg tải' retlw '' với giá trị trả lại sau đó hiện ra phía trên cùng của ngăn xếp vào chương trình truy cập cho trả lại.Phía trên cùng của ngăn xếp chứa các địa chỉ gọi 1 để nó có thể trở lại.Xem hướng dẫn cài đặt tham khảo hướng dẫn sử dụng.
Bạn không cần phải điều chỉnh các bit trang cho một ngày trở lại một cuộc gọi qua ranh giới của trang.

Chương trình truy cập tách biệt với PCLATH.
PCLATH chỉ được chuyển đến các chương trình truy cập vào một goto hoặc chỉ lệnh gọi.

Proteus là sai!

 
Ok, tôi không có thật để kiểm tra nó ra, bạn có thể được ngay.

Trích:

Thực hiện các chỉ dẫn với đăng ký PCL như là

đồng thời nguyên nhân đích của Chương trình

Số lượt truy cập PC <12:08> bit (PCH) để được thay thế bằng

nội dung của đăng ký PCLATH.
 

Welcome to EDABoard.com

Sponsor

Back
Top