intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Mô phỏng vi điều khiển - Nguyễn Phương Quang

Chia sẻ: Tieppham Tieppham | Ngày: | Loại File: PDF | Số trang:141

131
lượt xem
27
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mời các bạn tham khảo Tài liệu Mô phỏng vi điều khiển do Nguyễn Phương Quang trình bày để cùng tìm hiểu các kiến thức cơn bản về nhập môn lập trình vi điều khiển, bài tập cơ bản, bài tập nâng cao. Hi vọng tài liệu này sẽ đáp ứng hiệu quả nhu cầu học tập của các bạn. 

 

 

Chủ đề:
Lưu

Nội dung Text: Mô phỏng vi điều khiển - Nguyễn Phương Quang

  1. Mô phỏng vi điều khiển Biên tập bởi: Nguyễn Phương Quang
  2. Mô phỏng vi điều khiển Biên tập bởi: Nguyễn Phương Quang Các tác giả: Nguyễn Phương Quang Phiên bản trực tuyến: http://voer.edu.vn/c/481ec957
  3. MỤC LỤC 1. Nhập môn Lập trình Vi điều khiển 2. Bài tập Cơ Bản 2.1. Bài tập 1 2.2. Bài tập 2 2.3. Bài tập 3 2.4. Bài tập 4 2.5. Bài tập 5 2.6. Bài tập 6 2.7. Bài tập 7 2.8. Bài tập 8 2.9. Bài tập 9 2.10. Bài tập 10 2.11. Bài tập 11 3. Bài Tập Nâng cao 3.1. Bài tập nâng cao 1 3.2. Bài tập nâng cao 2 3.3. Bài tập nâng cao 3 3.4. Bài tập nâng cao 4 3.5. Bài tập nâng cao 5 3.6. Bài tập nâng cao 6 3.7. Bài tập nâng cao 7 4. Phụ Lục 4.1. Phụ lục A 4.2. Phụ lục B 4.3. Phụ lục C Tham gia đóng góp 1/139
  4. Nhập môn Lập trình Vi điều khiển Giáo trình này chỉ chú trọng đến phần thực hành lập trình trên vi điều khiển nên không có phần lý thuyết về vi điều khiển mà thay vào đó là nhập môn lập trình vi điều khiển. Trong phần này, giáo trình sẽ trình bày những vấn đề lý thuyết cơ bản nhất về hệ 80x86, vừa đủ cho người học giải quyết các bài tập cơ bản trong chương trình. Sau khi đã vững phần cơ bản, người học sẽ nâng cao hơn các hiểu biết về vi điều khiển thông qua các bài tập nâng cao. 1. Tổ chức hệ vi điều khiển : 1.1. Giới thiệu hệ vi điều khiển dùng trong phần mềm mô phỏng: Như đã giới thiệu ở phần trước hệ vi xử lý dùng trong chương trình mô phỏng này và hệ vi điều khiển thực tế nói chung bao gồm ba phần chính : bộ vi xử lý (CPU); bộ nhớ và thiết bị xuất nhập (I/O). Cụ thể trình bày trên hình 2-1. Bộ mô phỏng bao gồm khối xử lý trung tâm (CPU), 256 byte của bộ nhớ truy xuất ngẫu nhiên (RAM) và 16 cổng vào ra nhưng chỉ sử dụng 6 port (từ port 0 đến port 5)? 2/139
  5. Hình 2-1: Hệ thống vi điều khiển dùng trong phần mềm. Chương trình mô phỏng có thể lập trình để chạy nhiều chương trình khác nhau. Trong thực tế, bộ nhớ RAM được thay thế bằng ROM. Ở đây có hàng trăm thí dụ về các hệ thống như : điều khiển đèn giao thông, các trò chơi giải trí đơn giản, điều khiển ti vi từ xa, định thời gian cho lò viba, hệ thống điều khiển động cơ xe hơi, bộ điều khiển lò gia nhiệt, các hệ thống điều khiển môi trường. Tất cả tuỳ thuộc vào sự uyển chuyển của giáo viên giảng dạy. 1/ Khối xử lý trung tâm: Khối xử lý trung tâm là " bộ não" của máy vi tính. Tất cả các sự tính toán, quyết định và việc dịch chuyển dữ liệu đều được thực thi ở đây. CPU dùng các vị trí lưu trữ tạm thời được gọi là thanh ghi, thanh ghi chỉ nhớ dữ liệu có dung lượng thấp và sẽ mất dữ liệu khi mất điện nếu mạch không có back up ( mạch làm nhiệm vụ liên tục cấp điện cho CPU ). Nó chứa khối số học và logic (viết tắt là ALU) khối này thực hiện việc xử lý. Dữ liệu được lấy từ các thanh ghi, được xử lý và kết quả sau khi xử lý xong được đưa trở lại các thanh ghi. Lệnh Move (MOV) được sử dụng để dịch chuyển dữ liệu giữa vùng nhớ RAM và các thanh ghi. Ở đây ta có rất nhiều lệnh, mỗi lệnh thì có một chức năng riêng. Tập hợp các lệnh này được gọi là tập lệnh. 2/ Các thanh ghi đa năng: CPU có bốn thanh ghi mục đích chung gọi là AL, BL, CL và DL. Những thanh ghi này chứa 8 bít hay 1 byte. Các thanh ghi quản lý số không dấu trong vùng từ 0 đến 255 và ô có dấu vùng từ - 128 đến + 127 : ở đây các thanh ghi này sử dụng như vùng nhớ lưu trữ tạm thời. Các thanh ghi được sử dụng ưu tiên đối với vùng nhớ RAM bởi vì nó cần 1 khoảng thời gian tương đối dài để chuyển dữ liệu giữa RAM và CPU. Nhìn chung máy vi tính có tốc độ xử lý nhanh hơn nếu thanh ghi hay bộ nhớ có dung lượng lớn hơn trong CPU. Các thanh ghi được gọi tên là AL, BL, CL và DL vì phiên bản 16 bit của CPU này có nhiều thanh ghi gọi là AH, BH, CH và DH . Chữ "L" có nghĩa là thấp (Low) và chữ "H" có nghĩa là cao (High). Ở đây, 2 chữ cuối L và H trong các thanh ghi trên chính là 8 bít thấp và 8 bít cao của thanh ghi 16 bit. 3/ Các thanh ghi chuyên dùng : Các thanh ghi chuyên dùng trong hệ vi điều khiển dùng trong phần mềm mô phỏng là IP, SR và SP. a) Con trỏ lệnh IP 3/139
  6. Thanh ghi này chứa địa chỉ lệnh đang được hiện hành. Khi việc thực thi hoàn thành, IP được giảm xuống và chỉ tới lệnh kế tiếp. Khi bộ nhớ RAM hiển thị, thì con trỏ lệnh được làm nổi rõ bằng màu đỏ trên nền chữ vàng. b) Thanh ghi trạng thái SR Thanh ghi này chứa các cờ để báo cáo về trạng thái CPU. Cờ zero "Z" được thiết lập bằng 1 nếu việc tính toán có kết quả bằng 0. Cờ dấu "S" được thiết lập bằng 1 nếu việc tính toán có kết quả âm. Cờ tràn "O"được thiết lập nếu kết quả trong thanh ghi lớn hơn 255 (tràn số). Ngắt "I" được thiết lập nếu các lệnh ngắt được cho phép. c) Con trỏ ngăn xếp SP Ngăn xếp là 1 vùng của tổ chức bộ nhớ sử dụng qui tắc vào sau ra trước (LIFO: Last In First Out). Con trỏ ngăn xếp chỉ tới ô nhớ ngăn xếp chồng kế tiếp. Ngăn xếp trong bộ mô phỏng bắt đầu tại địa chỉ BF. Ngăn xếp tăng theo hướng địa chỉ 0, dữ liệu được cất vào ngăn xếp và lưu giữ cho lần sử dụng sau. Dữ liệu được lấy ra khỏi ngăn xếp khi cần đến. Con trỏ ngăn xếp quản lý nơi ngăn xếp cất và lấy dữ liệu ra . Khi hiển thị trong RAM, con trỏ ngăn xếp được tô sáng bằng màu xanh trên nền chữ vàng. 4/ Bộ nhớ RAM : Bộ mô phỏng có 256 byte RAM, có địa chỉ từ 0 đến 255 ( số thập phân) hay từ 00 đến FF (số Hex). Ðịa chỉ của RAM thường được đặt trong dấu ngoặc vuông ví dụ như [7C] trong đó 7C là số Hex. [7C] đọc là dữ liệu cất tại ô nhớ 7C. Trong thực tế, đây chính là? ROM nhưng nói chung chương trình chính sẽ được lưu trữ tại đây. 4/139
  7. 5/ Các BUS (Busline: luồng liên lạc): Các BUS là một tập hợp các dây dẫn được sử dụng để mang tín hiệu đi trao đổi thông tin giữa các thiết bị trong hệ vi xử lý. Chúng thường được in như các đường song song trong board mạch điện. Khe cắm là các ổ cắm cho phép card có thể kết nối với hệ thống thông qua các BUS. Ðiển hình một máy tính 8 bit có các thanh ghi với độ rộng 8 bit và 8 đường trong 1 BUS dữ liệu. Một máy tính 16 bit có các thanh ghi 16 bit, BUS dữ liệu có 16 đường v..v.Có thể dùng hình tượng xa lộ để minh họa các BUS ( Hình 2-2): trên xa lộ có nhiều địa điểm như A, B, C, D. . . Nếu chỉ dùng dây điện để nối (nối cứng) ta phải tốn rất nhiều đường dây để liên kết giữa các địa điểm lại với nhau nhưng trên xa lộ này lái xe dù không thông thạo vùng này cứ đi dọc xa lộ là có thể tìm đến địa điểm cần đến. Rõ ràng với một BUS ta có thể liên kết nhiều thiết bị trong hệ vi xử lý lại với nhau (mỗi thiết bị có thể xem như một địa điểm trên xa lộ còn xe mang thông tin trao đổi giữa các thiết bị trong hệ thống) . 5/139
  8. Hình 2-2 : Minh họa BUS thông qua hình tượng xa lộ. Dựa vào tính chất thông tin tải trên Bus, người ta phân làm ba loại chính: a) Bus dữ liệu : được sử dụng để mang dữ liệu giữa CPU, RAM và port nhập / xuất (I/O). Bộ mô phỏng này có bus dữ liệu 8 bit. b) Bus địa chỉ: được sử dụng để xác định địa chỉ của bộ nhớ RAM hay port I/O được sử dụng. Bộ mô phỏng này có 8 bit địa chỉ. c) Bus điều khiển: xác định RAM hay khối I/O được truy xuất. Nó cũng xác định việc đọc hay viết dữ liệu. Dữ liệu được viết vào hay xuất ra trên CPU đến RAM hay cổng I/ O cũng do bus điều khiển này. 6/ Các yếu tố phụ trợ khác: a) Ðồng hồ hệ thống (clock): là đường mang những xung có tần số ổn định để các bộ phận trong hệ vi xử lý có thể làm việc đồng bộ với nhau, các lệnh trong bộ vi xử lý thực thi cũng dựa vào các chu kỳ xung này. Do vậy tốc độ hệ vi xử lý bị ảnh hưởng rất nhiều bởi tần số xung clock. Tốc độ xung clock hiện nay đã đạt đến vài tỉ chu kỳ mỗi giây (vào năm 2002). Bộ mô phỏng trong phần mềm có thể điều chỉnh được tần số xung clock nên tốc độ thực thi lệnh cũng điều chỉnh được trong một khoảng khá rộng và trơn mà không cần chọn thay đổi thạch anh dao động. b) Ngắt cứng: hệ thống cần có ít nhất 1 đường ngắt giúp CPU đáp ứng được các yêu cầu của phần cứng như máy in đang chạy nhưng hết giấy, nhấn nhả phím, rê chuột... CPU sẽ xử lý chương trình phục vụ ngắt để trả lời lệnh ngắt trên. Khi hoàn thành chương trình ngắt, nó sẽ tiếp tục các thao tác đang làm trước khi nhu cầu ngắt xuất hiện. Phần 6/139
  9. mềm mô phỏng này có sẵn một đường ngắt và bộ định thời tạo xung ngắt tạo ra những xung ngắt có tần số điều chỉnh được (xem ví dụ 11 phần cơ bản). 1?2 . Nguyên lý làm việc của hệ vi điều khiển trong phần mềm: Hoạt động bên trong của vi điều khiển rất phức tạp, nó điều khiển hoạt động của mọi thành phần trong hệ thống. Nhưng thật ra vi điều khiển chỉ lập đi lập lại chu kỳ đón và thực thi lệnh (còn gọi là chu kỳ tìm nạp + giải mã + thi hành lệnh) thực hiện theo từng bước sau : * Tìm nạp lệnh tiếp theo từ bộ nhớ vào thanh ghi lệnh IR. Trong chương trình này CPU tìm nạp lệnh theo địa chỉ mà IP chỉ tới: đón hay tìm nạp lệnh. * Ðịnh loại lệnh vừa tìm nạp, nếu lệnh dùng dữ liệu trong bộ nhớ thì CPU sẽ tìm đến và nạp vào thanh ghi bên trong CPU: giải mã lệnh. * Thi hành lệnh vừa giải mã xong và lưu kết quả ở nơi thích hợp: thi hành lệnh. Sau khi thực hiện xong 3 bước này CPU lại tìm đến lệnh tiếp theo trong chương trình để tuần tự thực hiện lặp lại 3 bước trên. Có thể minh họa bằng hình 2-3. Hình 2-3 : CPU liên tục tìm nạp và thi hành lệnh 7/139
  10. Như vậy dù cho chương trình CPU thì rất phức tạp nhưng về cơ bản nó cũng chỉ thực hiện 2 hoạt động: tìm lệnh, thi hành, tìm lệnh, thi hành.và cứ như thế mà tiếp diễn. CPU sẽ thực thi được toàn bộ chương trình. Cụ thể hơn ta quan sát một ví dụ sau trong chương trình mô phỏng. Mở bài tập về động cơ bước ở phần bài tập cơ bản trong đĩa CD này, bạn sẽ gặp giao diện của bài tập như sau: 8/139
  11. Trên màn hình hiển thị chương trình điều khiển động cơ bước quay theo một chiều cố định. Nhấp chuột vào Step , vi điều khiển sẽ thực hiện lệnh MOV AL,1. Màn hình sau sẽ diễn tả tác động của lệnh này lên vi điều khiển như sau: 9/139
  12. 10/139
  13. Ta thấy số hexa 1 đã được nạp vào thanh ghi AL, thanh ghi IP (con trỏ lệnh) chỉ ra địa chỉ kế tiếp của lệnh mà vi điều khiển sắp thực hiện (OUT 05) nằm ở ô nhớ 03. Các thanh ghi khác không tham gia vào lệnh này nên không có thay đổi gì. Tiếp tục nhấp Step , ta thấy: Lệnh OUT 05 xuất dữ liệu chứa trong thanh ghi AL (là 01) sang port 05 điều khiển động cơ bước cho phép nhóm cuộn dây đầu tiên trong 4 nhóm có điện (có thể xem chi tiết hơn về động cơ bước trong phần giới thiệu của đĩa CD này). Con trỏ lệnh IP tự động tăng thêm 2 đơn vị (do lệnh OUT 05 chiếm đến 2 byte nhớ trong RAM) chỉ ra địa chỉ kế tiếp 11/139
  14. của lệnh mà vi điều khiển sắp thực hiện (MOV AL,2) nằm ở ô nhớ 05. Cũng giống như trên các thanh ghi khác không tham gia nên không thay đổi dưới tác động của lệnh này. Tiếp tục nhấp vào Step , ta nhận thấy: Tương tự trên, số hexa 2 được nạp vào thanh ghi AL và con trỏ IP tăng lên 08 chỉ ra lệnh kế tiếp là OUT 05 nằm ở địa chỉ 08 trong RAM. Tiếp tục nhấp Step , ta thấy: Tương tự, như trên ta thấy tác động của lệnh OUT 05 làm động cơ bước quay đi một góc 10o . Tiếp tục nhấp Step và cứ như thế tiếp tục cho đến lệnh cuối cùng JMP start. 12/139
  15. 13/139
  16. Nếu như từ đầu đến đây vi điều khiển thực hiện tuần tự từng lệnh từ trên xuống thì đến đây vi điều khiển thực hiện một bước nhảy. Nó sẽ nhảy đến nơi có chứa nhãn start, trong chương trình này nhãn start ở ngay đầu chương trình nên giá trị con trỏ lệnh IP là 00 . Nhấp Step. 14/139
  17. Nếu bạn nhấp Run hay F9 chương trình mô phỏng sẽ liện tục lặp lại các bước vừa nêu. Qua ví dụ đơn giản vừa nêu ở trên, ta thấy bình thường vi điều khiển sẽ thực hiện tuần tự từng lệnh một từ điểm xuất phát được định ra bởi người lập trình chỉ khi nào gặp các lệnh nhảy, gọi chương trình con (nhấp vào đây để xem minh hoạ : chương trình con một cấp; chương trình con đa cấp), gọi chương trình ngắt...thì tính tuần tự trên mới tạm thời bị gián đoạn. Từ đây ta có thể nhận thấy, với cùng một yêu cầu đặt ra cho hệ thống vi xử lý sẽ có nhiều chương trình cùng thoả mãn được yêu cầu trên, chương trình này thì dài còn chương trình kia thì lại ngắn, điều này tuỳ thuộc vào nhiều yếu tố như khả năng của người lập trình, cấu trúc phần cứng của hệ thống.. . 2. Trình tự lập trình vi điều khiển 15/139
  18. Chương trình vi điều khiển là tập hợp các lệnh xắp xếp theo một trình tự nhất định, các lệnh này được lấy trong tập lệnh của bộ vi điều khiển (Microcontroller) đang sử dụng trong hệ thống. Bộ vi điều khiển sẽ thực hiện các lệnh nàỵ để đạt được một số kết qủa mà chương trình đặt ra. Do vậy, lập trình là tuỳ vào yêu cầu của bài toán thiết kế, người lập trình sẽ viết ra một chương trình chạy được trên hê vi điều khiển đang sử dụng đưa hệ thống vào làm việc đúng theo yêu cầu của bài toán đã đặt ra. Ðể thiết kế chương trình một cách chính xác, ta cần thực hiện những bước sau: 2.1 Phân tích các yêu cầu của đề bài. 2.2 Xây dựng lưu đồ giải thuật. 2.3 Thiết kế chương trình 2.4 Viết chương trình 2.5 Biên dịch chương trình 2.6 Thưc hiện gỡ rối chương trình 2.7 Nạp chương trình vào phần cứng và kiểm tra kết quả. Thực hiện đúng quy trình trên sẽ giúp giảm thiểu thời gian kiểm tra cũng như phát hiện kịp thời những thiếu sót khi thực hiện. 16/139
  19. Bài tập Cơ Bản Bài tập 1 Viết chương trình thực hiện các phép tính số học. Mục đích-yêu cầu: • Làm quen với các lệnh tính toán số học. • Hiểu cách định vị địa chỉ bộ nhớ. • Hiểu cách đưa dữ liệu vào thanh ghi. • Thực tập cộng giá trị trong 2 thanh ghi. Kiến thức nền : Chương trình là tập hợp của các lệnh được sắp xếp theo một trình tự cụ thể nhằm giúp vi điều khiển, vi xử lý thực hiện các công việc cụ thể nào đó. Các lệnh trong chương trình được lấy từ tập lệnh (Instruction Set) của họ vi điều khiển, vi xử lý đang sử dụng. Tập lệnh là tập hợp của các lệnh được cung cấp bởi nhà sản xuất vi điều khiển, vi xử lý. Ví dụ: Lệnh MOV AL,m : chuyển m vào thanh ghi AL. Vi xử lý, vi điều khiển sẽ tuần tự thực hiện các lệnh để thực hiện các công việc cụ thể mà chương trình yêu cầu giúp hệ thống làm việc theo một chương trình được định trước. Lệnh CLO: Lệnh CLO là lệnh chỉ dùng một lần trong toàn bộ chương trình. CLO đóng tất cả các cửa sổ không cần thiết trong lúc chương trình đang chạy. Lệnh này làm cho dễ dàng hơn để viết các chương trình thể hiện tốt. Sử dụng CLO cũng tránh việc đóng các cửa sổ hướng dẫn. Lệnh MOV: Lệnh MOV là từ viết tắt của Move. Trong ví dụ này các số được chép vào thanh ghi mà ở đó các phép tính số học có thể thực hiện được. Lệnh MOV chép dữ liệu từ ô nhớ này sang ô nhớ khác, mà dữ liệu trong ô nhớ không bị mất. Các thanh ghi: 17/139
  20. Các thanh ghi là nơi 8 bit nhị phân được lưu giữ tạm thời. Ðơn vị xử lý trung tâm trong chương trình mô phỏng này có 4 thanh ghi mục đích gọi là AL, BL, CL và DL trong các CPU sau này, các thanh ghi có thể đến 16, 32 hay 64 bit... Các thanh ghi cùng tên sẽ có cùng chức năng nhưng trong cùng một lúc thanh ghi 64 bit sẽ xử lý được nhiều dữ liệu hơn thanh ghi 8 bit vì thế tốc độ của CPU có thanh ghi 64 bit xử lý nhanh hơn CPU có thanh ghi 8 bit. Các thanh ghi có dung lượng lớn có thể chứa số nguyên lớn. Việc này sẽ đơn giản hóa các thao tác lập trình. Ba thanh ghi khác là SP, IP và SR sẽ được mô tả ở bài sau. Số Hex: Trong lệnh MOV AL,2 với 2 là số Hex. Hệ thống số Hex được sử dụng trong việc lập trình cấp thấp vì như vậy quá trình chuyển đổi giữa số nhị phân và số Hex thuận lợi hơn . Ðể lập trình được tốt, bạn cần nắm vững hệ thống số Hex và số nhị phân. Các lệnh số học : Lệnh ADD được sử dụng để cộng 2 thanh ghi với nhau. Một cách cộng khác của lệnh cộng là được dùng để cộng 1 số vào 1 thanh ghi. Bạn có thể xem hướng dẫn qua các lệnh ADD, SUB, MUL và DIV bằng việc chọn lấy lệnh và nhấn F1. Lệnh END: Lệnh END là lệnh cuối cùng trong chương trình. Bất kỳ lệnh nào sau lệnh End sẽ được bỏ qua. Chương trình: ; Chương trình cộng 2 số Hex ----------------------------------------- CLO MOV AL,2 MOV BL,2 ADD AL, BL END ; kết thúc chương trình. 18/139
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2