Danh mục

Kỹ thuật bảng - Kiến thức cần biết Tập lệnh Bộ nhớ dữ liệu và bộ nhớ chương trình

Số trang: 7      Loại file: pdf      Dung lượng: 203.53 KB      Lượt xem: 24      Lượt tải: 0    
10.10.2023

Phí tải xuống: 4,000 VND Tải xuống file đầy đủ (7 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Kỹ thuật bảng0) 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 Stack1) 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...
Nội dung trích xuất từ tài liệu:
Kỹ thuật bảng - Kiến thức cần biết Tập lệnh Bộ nhớ dữ liệu và bộ nhớ chương trình Kỹ thuật bảng0) 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 Stack1) 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ệunhư 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 taphả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áchtuầ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ảiquyế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ẽ đánhdấu các chữ cái này với các chỉ số, và khi gọi thì chúng ta chỉ gọi chỉ số đầu tiên là 0(hoặc 1, tuỳ theo sự quy định), sau đó, chúng ta cứ tăng chỉ số này lên 1 đơn vị, vàgọi tiếp chữ cái tiếp theo. Công việc này sẽ dừng lại khi nó đạt đến chỉ số cuối cùng.Tiếp theo, đề giải quyết vấn đề lưu trữ các chữ cái này ở đâu, các bạn cần biết và hiểurõ khái niệm về bộ nhớ dữ liệu và bộ nhớ chương trình (hay bộ nhớ lệnh). Các bạn cóthể tham khảo phần bộ nhớ dữ liệu và bộ nhớ chương trình trong phần kiến trúcHarvard và kiến trúc Von Neumann. Tuy nhiên, chúng ta sẽ nhắc lại rằng, đối với PICdòng Mid Range, bộ nhớ chương trình có 14 bit cho mỗi lệnh, vì vậy, cho dù các bạnthực hiện lệnh nào đi nữa, thì lệnh đó luôn chiếm 14 bit trong bộ nhớ chương trình.Mặt khác, bộ nhớ dữ liệu thì lại bị giới hạn và một lần tương tác với bộ nhớ dữ liệu,các bạn phải thông qua thanh ghi W, như vậy, các bạn tốn thêm ít nhất 2 lệnh choviệc tương tác với thanh ghi W.Kết quả, cách thông minh nhất là lưu các dữ liệu đó vào trong bộ nhớ chương trình,thay vì lưu nó vào trong bộ nhớ dữ liệu. Lại nhắc lại về tập lệnh, nếu các bạn để ý kỹ,các bạn sẽ lại thấy rằng, có một số lệnh cho phép tương tác với giá trị k (8 bit), và giátrị k này không lưu trữ trong bộ nhớ dữ liệu, mà lưu trong bộ nhớ chương trình.Tóm lại, kỹ thuật bảng là kỹ thuật lập trình để truy xuất dữ liệu một cách có thứ tự(thứ tự hiểu theo nghĩa rộng là một quy luật truy xuất nào đó), và khi các dữ liệu đó làhằng số, thì kỹ thuật này cho phép chúng ta lưu trữ các dữ liệu đó trong bộ nhớchương trình, không làm tốn kém bộ nhớ dữ liệu, và việc truy xuất được thực hiệnmột cách nhanh nhất.2) Cách xây dựng bảngTừ ý 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 AN556Trong ví dụ này, chúng ta sẽ phân tích và thấy rằng, từ nhãn [Table] con trỏ chươngtrì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ệnhaddwf PCL, FSau khi thực hiện lệnh này PCL = W + PCLTiếp theo đó, con trỏ chương trình được tăng thêm một đơn vị; vì mặc định, cứ mỗilầ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ệnlệ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ươngtrình sẽ nhảy đến dòng lệnhretlw ‘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ànhư vậy, lúc này con trỏ chương trình sẽ nhảy đến dòng lệnhretlw ‘B’Như vậy, sau khi thực hiện lệnh addwf, lệnh tiếp theo được thực hiện sẽ là lệnh retlw‘B’ mà không phải là lệnh retlw ‘A’.Nhắc lại lệnh RETLW rằng, giá trị k của lệnh sẽ được lưu vào thanh ghi W và sau đócon trỏ chương trình sẽ nhảy về TOS (top of stack).Như vậy, thanh ghi W sau khi nhảy về TOS sẽ mang giá trị ‘B’, và chỉ cần thay đổigiá trị của W trước khi nhảy đến nhãn [Table] chúng ta có thể truy xuất bất kỳ giá trịnào theo ý chúng ta muốn, vì giá trị của W sau khi trả về sẽ là giá trị ở chỉ số tươngứng với W ban đầu. Ở đây, chúng ta thấy, giá trị đầu tiên của bảng là ‘A’ sẽ ứng vớichỉ số 0 của W khi nhảy đến bảng.Chúng ta sẽ gọi giá trị W ban đầu là chỉ số (offset / index) để phân biệt với giá trị Wsau khi trả về. Việc quy định này có thể là hơi muộn trong chương này, nhưng từ nayvề sau, trong các ứng dụng bảng, chúng ta sẽ chỉ quan tâm đến vi ...

Tài liệu được xem nhiều: