Ky Thuat Bang(PIC) - Pdf 37

Kỹ thuật bảng 0) Kiến thức cần biết

- Tập lệnh
- Bộ nhớ dữ liệu và bộ nhớ chương trình (Kiến trúc Harvard)
- Con trỏ chương trình
- Tổ chức bộ nhớ của PIC (các BANK)
- Khái niệm Stack

1) Giới thiệu về kỹ thuật bảng

Để hiểu về kỹ thuật bảng, trước tiên chúng ta xem ví dụ sau:

Giả
sử chúng ta cần xuất dữ liệu ra màn hình LCD với dãy chữ : “PIC_Tutorial”. Ở
đây, chúng ta không cần quan tâm đến hoạt động của LCD và hình thức xuất dữ liệu
như thế nào. Chỉ cần các bạn nắm được rằng, để xuất dữ liệu như trên ra, chúng ta
phải xuất tuần tự các ký tự “P, I, C, _, T, u, t, o, r, i, a, l” ra. Vậy làm thế nào để xuất
được các chữ này ra?

Ở đây có hai vấn đề, vấn đề thứ
nhất là làm sao lưu trữ được các giá trị này, vấn đề
thứ hai là làm sao sắp xếp thứ tự các chữ cái này để chúng ta gọi chúng ra một cách
tuần tự.

Trước tiên, chúng ta giải quyết vấn đề thứ hai trước, bởi vì nó rất đơn giản. Cách giải
quyết là thay vì chúng ta phải tìm các chữ cái trong bảng chữ cái (cả chữ in lẫn chữ
thường) để gọi ra vào đúng thời điểm cần xuấ
t các chữ cái này ra, chúng ta sẽ đánh

Từ ý tưởng này, có thể có rất nhiều cách lập trình truy xuất dữ liệu bảng. Tuy nhiên,
do sự giới hạn của tài liệu này, chúng tôi chỉ trình bày kỹ thuật bảng tiêu biểu nhất, và
cũng tốt nhất, đồng thời sử dụng tài liệu application note AN556 của Microchip như
một tài liệu tham khảo chính.

Dưới đây là một đoạn code điể
n hình sử dụng kỹ thuật bảng trong AN556
Trong ví dụ này, chúng ta sẽ phân tích và thấy rằng, từ nhãn [Table] con trỏ chương
trình được cộng với giá trị nằm trong thanh ghi W và lưu lại vào con trỏ chương trình.
Như vậy, vị trí con trỏ chương trình hiện tại đang nằm ở dòng lệnh

addwf PCL, F

Sau khi thực hiện lệnh này PCL = W + PCL
Tiếp theo đó, con trỏ chương trình được tăng thêm một đơn vị; vì mặc định, cứ mỗi
lần th
ực hiện xong một lệnh, con trỏ chương trình sẽ tăng lên một đơn vị để thực hiện
lệnh tiếp theo.

Giả sử rằng, giá trị nằm trong thanh khi W trước khi nhảy đến nhãn [Table] đang là 1.
Như vậy, con trỏ chương trình sẽ là PCL = 1 + PCL. Có nghĩa là con trỏ chương
trình sẽ nhảy đến dòng lệnh

retlw ‘A’

Tuy nhiên, sau đó, nó mặc định cộng thêm một đơn vị để th
ực hiện lệnh tiếp theo, và

nào để lấy được giá trị của bảng ra.

Kiến thức về con trỏ chương trình rất cần thiết trong phần này. Do vậy, chúng tôi đề
nghị các bạn xem lại chương về con tr
ỏ chương trình. Ở đây, chúng ta chỉ nhắc lại
rằng, con trỏ chương trình gồm 2 thành phần, PCL và PCH. Trong đó, PCL là 8 bit
thấp, có thể ghi và đọc, còn PCH là 5 bit cao, không thể ghi và đọc, mà chỉ có thể
tương tác một cách gián tiếp qua thanh ghi PCLATH.

Do vậy, khi thay đổi, PCL chỉ có thể mang giá trị từ 0 đến 255 (0x00 đến 0xFF). Nếu
bảng được lập ra mà độ dài bảng lớn hơn 255 thì chúng ta không thể truy xuất được
giá trị cuối cùng trong bảng. Tương tự nh
ư vậy, nếu một bảng có độ dài ngắn hơn,
nhưng vị trí bắt đầu của bảng nằm trong vùng từ 0 đến 255, còn vị trí cuối cùng của
bảng lại nằm ngoài 255, thì điều này cũng không thực hiện được.

Khi độ dài bảng, hoặc yêu cầu trình bày chương trình một cách rõ ràng, khiến các bạn
không thể đặt bảng trong bộ nhớ chương trình từ 0 đến 255, các bạn bắt buộc ph
ải
xây dựng 2 bảng riêng biệt.

Trước tiên, chúng ta thực hiện việc gọi bảng thông thường, khi giá trị của bảng nằm
trong vùng từ 0 đến 255 trong bộ nhớ chương trình.
Các bạn vừa làm gì? Các bạn vừa đưa một giá trị được xác định trước từ biến “offset”
vào thanh ghi W. Sau đó các bạn gọi bảng [Table]. Điều đó có nghĩa là các bạn đưa
chỉ số vào trong bảng và gọi bảng.



a) Xây dựng bảng

Các bạn thấy rằng, khi xây dựng bảng, điều cần thiết nhất là biết được bảng mình xây
dựng ra nằm ở vị trí nào trong bộ nhớ chương trình,
để đến khi gọi và viết chương
trình được thuận tiện hơn. Do vậy, điều cần thiết là các bạn phải đánh dấu vị trí bắt
đầu của bảng bằng cách dùng directive ORG 0xAAAA, như ví dụ sau:

ORG 0x80
Table
ADDWF PCL, F
RETLW ‘A’
RETLW ‘B’
RETLW ‘C’
.
.

Như vậy, chúng ta biết được vị trí đầu của bảng, và vị trí cuối của bảng một cách rõ
ràng.

Lời khuyên: Không nên xây dựng bảng nằm ngoài PAGE 0, vì phải mất vài l
ệnh khác
để điều khiển PCH rồi mới gọi bảng. Trong trường hợp bất khả kháng, nên đặt bảng
trong cùng một PAGE.

b) Gọi bảng

Có chủ yếu ba hình thức gọi bảng. Chúng ta có thể gọi bảng trong PAGE hiện hành
(thường là PAGE 0). Các bạn phải phân biết khái niệm BANK và khái niệm PAGE


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status