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
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 ...
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 ...
Gợi ý tài liệu liên quan:
-
Giáo trình Vi điều khiển (Nghề: Cơ điện tử - Trình độ: Cao đẳng) - Trường Cao đẳng nghề Ninh Thuận
127 trang 279 0 0 -
Báo cáo môn học vi xử lý: Khai thác phần mềm Proteus trong mô phỏng điều khiển
33 trang 182 0 0 -
Giáo trình Vi điều khiển (Nghề: Điện công nghiệp - Cao đẳng) - Trường Cao đẳng Cơ giới (2022)
144 trang 155 0 0 -
Đề cương chi tiết học phần Vi điều khiển
15 trang 140 0 0 -
Ứng dụng vi điều khiển PIC 16F877A trong thí nghiệm vật lí phổ thông
12 trang 120 0 0 -
Bài tập lớn môn Vi xử lý, vi điều khiển: Thiết kế bộ điều khiển tốc độ của động cơ điện một chiều
27 trang 117 0 0 -
Giáo trình Kỹ thuật vi điều khiển
121 trang 113 0 0 -
Tài liệu thực hành Vi điều khiển 8051
55 trang 105 0 0 -
Đồ án vi xử lý đề tài : nghiên cứu thiết kế mạch đo khoảng cách sử dụng vi điều khiển Pic 16F887
45 trang 97 1 0 -
Luận văn: Xây dựng mô hình điều khiển động cơ DC servo bằng vi điều khiển
85 trang 96 0 0