Mô phỏng vi điều khiển

141
Mô phỏng vi điều khiển Biên tập bởi: Nguyễn Phương Quang

Transcript of Mô phỏng vi điều khiển

Page 1: Mô phỏng vi điều khiển

Mô phỏng vi điều khiển

Biên tập bởi:Nguyễn Phương Quang

www.princexml.com
Prince - Non-commercial License
This document was created with Prince, a great way of getting web content onto paper.
Page 2: Mô phỏng vi điều khiển

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

Page 3: Mô phỏng vi điều khiển

MỤC LỤC

1. Nhập môn Lập trình Vi điều khiển2. Bài tập Cơ Bản

2.1. Bài tập 12.2. Bài tập 22.3. Bài tập 32.4. Bài tập 42.5. Bài tập 52.6. Bài tập 62.7. Bài tập 72.8. Bài tập 82.9. Bài tập 92.10. Bài tập 102.11. Bài tập 11

3. Bài Tập Nâng cao3.1. Bài tập nâng cao 13.2. Bài tập nâng cao 23.3. Bài tập nâng cao 33.4. Bài tập nâng cao 43.5. Bài tập nâng cao 53.6. Bài tập nâng cao 63.7. Bài tập nâng cao 7

4. Phụ Lục4.1. Phụ lục A4.2. Phụ lục B4.3. Phụ lục C

Tham gia đóng góp

1/139

Page 4: Mô phỏng vi điều khiển

Nhập môn Lập trình Vi điều khiểnGiá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ôngcó 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ữngphầ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àitậ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àyvà 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ấtngẫ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

Page 5: Mô phỏng vi điều khiển

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. Trongthự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ò gianhiệ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áoviê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ấtdữ 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ệncho 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ữavù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ứcnă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 thanhghi 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 đến255 và ô có dấu vùng từ - 128 đến + 127 : ở đây các thanh ghi này sử dụng như vùngnhớ 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ởivì 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ìnchung máy vi tính có tốc độ xử lý nhanh hơn nếu thanh ghi hay bộ nhớ có dung lượnglớ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àycó 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ỏnglà IP, SR và SP.

a) Con trỏ lệnh IP

3/139

Page 6: Mô phỏng vi điều khiển

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ếtlậ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ếuviệ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ớnhơ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ếptrong 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ănxế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ểnthị 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ế, đâychính là? ROM nhưng nói chung chương trình chính sẽ được lưu trữ tại đây.

4/139

Page 7: Mô phỏng vi điều khiển

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 đổithông tin giữa các thiết bị trong hệ vi xử lý. Chúng thường được in như các đường songsong 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 8bit và 8 đường trong 1 BUS dữ liệu. Một máy tính 16 bit có các thanh ghi 16 bit, BUSdữ liệu có 16 đường v..v.Có thể dùng hình tượng xa lộ để minh họa các BUS ( Hình2-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ốicứ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ưngtrê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 tintrao đổi giữa các thiết bị trong hệ thống) .

5/139

Page 8: Mô phỏng vi điều khiển

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 địnhviệ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 haycổ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ácbộ 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ấtnhiều bởi tần số xung clock. Tốc độ xung clock hiện nay đã đạt đến vài tỉ chu kỳ mỗigiâ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ố xungclock 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ơnmà 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ácyê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ươngtrì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

Page 9: Mô phỏng vi điều khiển

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ữngxung 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ọithà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ừngbướ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 CPUtì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 đếnvà 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

Page 10: Mô phỏng vi điều khiển

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ựchiệ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. CPUsẽ 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ề độngcơ 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

Page 11: Mô phỏng vi điều khiển

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 sausẽ diễn tả tác động của lệnh này lên vi điều khiển như sau:

9/139

Page 12: Mô phỏng vi điều khiển

10/139

Page 13: Mô phỏng vi điều khiển

Ta thấy số hexa 1 đã được nạp vào thanh ghi AL, thanh ghi IP (con trỏ lệnh) chỉ ra địachỉ 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 thanhghi 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 , tathấ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 độngcơ 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ơnvề độ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ăngthê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

Page 14: Mô phỏng vi điều khiển

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ỉ ralệ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ộtgó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

Page 15: Mô phỏng vi điều khiển

13/139

Page 16: Mô phỏng vi điều khiển

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, trongchươ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

Page 17: Mô phỏng vi điều khiển

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ầntự 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áclệnh nhảy, gọi chương trình con (nhấp vào đây để xem minh hoạ : chương trình con mộtcấ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ờibị 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 vixử 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ăngcủ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

Page 18: Mô phỏng vi điều khiển

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) đangsử 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ếtkế, 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áthiện kịp thời những thiếu sót khi thực hiện.

16/139

Page 19: Mô phỏng vi điều khiển

Bài tập Cơ BảnBà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ằmgiú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ươngtrì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ànghơ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 thanhghi 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

Page 20: Mô phỏng vi điều khiển

Các thanh ghi là nơi 8 bit nhị phân được lưu giữ tạm thời. Ðơn vị xử lý trungtâ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 ghicù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ý đượcnhiều dữ liệu hơn thanh ghi 8 bit vì thế tốc độ của CPU có thanh ghi 64 bit xử lý nhanhhơ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ẽ đơngiả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àisau.

Số Hex:

Trong lệnh MOV AL,2 với 2 là số Hex. Hệ thống số Hex được sử dụng trongviệ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ậnlợ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áccủ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ẫnqua 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 Endsẽ đượ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

Page 21: Mô phỏng vi điều khiển

;-------------------------------------------------------------------------

Xem phim

Nhấn nút Play để xem.

Tải file phim từ đây

Bài tập củng cố: 1.1/ Viết chương trình sử dụng lệnh SUB. 1.2/ Viết chương trình sửdụng lệnh MUL. 1.3/ Viết chương trình chia 2 số sử dụng lệnh DIV. 1.4/ Viết chươngtrình chia cho 0 .

19/139

Page 22: Mô phỏng vi điều khiển

Bài tập 2

Viết chương trình xuất dữ liệu.

Mục đích - yêu cầu:

• Làm quen với chức năng các lệnh nhảy, lệnh xuất dữ liệu.• Hiểu cách đưa dữ liệu vào điều khiển đèn giao thông từ đó sinh viên có thể

thiết kế điều khiển đèn giao thông trong thực tế.

Kiến thức nền :

1/ Chương trình sử dụng các lệnh : CLO, MOV, OUT, JMP và END

Hệ thống đèn giao thông trong chương trình mô phỏng được điều khiển bằng cách gởidữ liệu xuất ra port 1.

Có sáu đèn được điều khiển chia làm hai hệ thống. Màu đỏ, vàng, xanh là màu mỗi hệthống đèn. Ðể điều khiển 2 hệ thống đèn ta có thể thực hiện bằng cách gởi 1 byte dữliệu nhưng 2 bit thấp của byte dữ liệu đó không dùng đến. Một đèn chỉ sáng khi chânnối đến lên bit 1, do đó muốn điều khiển tín hiệu đèn giao thông bạn chỉ cần thay đổi dữliệu truyền đến Port 1.

Ở đây có chương trình ví dụ : baitap02.asm. Ta có thể chép chương trình từ trang giúpđỡ và dán vào trong trình đang soạn thảo. Ðể chạy chương trình, ta click vào biểu tượngStep lập lại nhiều lần để chạy từng bước hay nhấn vào Run để chạy trọn vẹn chươngtrình. Ðể ngừng chương trình ta click vào stop. Khi chương trình đang chạy, click vàoRAM - Source hay RAM - Hex hay RAM - ASCII . Ở đó ta sẽ thấy được sự thay đổiluân phiên các nội dung của việc truy xuất bộ nhớ RAM. Nhấn vào tab List - file để thấymã máy được biên dịch bởi chương trình mô phỏng .

2/ Các nhãn và lệnh JMP:

Nhãn đánh dấu các vị trí thì được sử dụng bởi các lệnh nhảy. Tất cả các lệnh trongchương trình này được lập lại liên tục cho đến khi nhấn Stop. Tên nhãn phải bắt đầu với1 chữ cái hay 1 ký tự. Tên nhãn không được bắt đầu bằng 1 ký số.

JMP Start làm cho chương trình nhảy về và làm lại các lệnh từ lúc đầu. Cuối nhãn phảicó dấu 2 chấm . Ví dụ: Start :

3/ Ðiều khiển các đèn giao thông:

20/139

Page 23: Mô phỏng vi điều khiển

Nếu bạn quan sát kỹ các đèn giao thông được hiển thị, bạn có thể thấy được mỗibóng đèn được điều khiển bởi một bit tương ứng. Ta có thể tìm ra các bit 0 hay 1 đểthiết lập trạng thái của bóng đèn. Sử dụng bảng số Hex và số nhị phân để tìm ra số Hextương ứng . Ðưa số Hex này vào thanh ghi AL.

4/ Lệnh OUT 01 (xuất ra P.01) :

Lệnh này dùng để chuyển nội dung của thanh ghi AL ra Port 1. Vì hệ thống đèngiao thông được nối với port 1, nên ta có thể điều khiển các bóng đèn giao thông theonội dung trên thanh ghi AL. Số 1 làm cho bóng đèn sáng, số 0 làm cho bóng đèn tắt.

Chương trình:

; chương trình điều khiển đèn giao thông --------------------------------------

CLO ; đóng tất cả các cửa sổ không cần đến

Start: ; tắt tất cả đèn giao thông

MOV AL,0 ; chuyển 00h vào thanh ghi AL

OUT 01 ; sáng tất cả đèn giao thông

MOV AL, FC ; chuyển 11111100 (hay FCh) vào thanh ghi AL

OUT 01 ; gửi dữ liệu trong AL ra port 1

JMP Start ; nhảy về nhãn start để thực hiện lại chương trình

END ; kết thúc chương trình .

;-----------------------------------------------------------------------------------

Bài tập 02. Nhấn nút Play để xem.

Tải file phim về ở đây.

2.1/ Tìm ra những số Hex xuất ra trên port 01, sẽ làm hoạt động của đèn thay đổi theotừng bóng đèn (xanh, đỏ, vàng). Từ đó hãy sửa đổi chương trình của đèn giao thông đểhoạt động theo trình tự trong thực tế.

21/139

Page 24: Mô phỏng vi điều khiển

Bài tập 3

Viết chương trình truyền dữ liệu.

Mục đích - yêu cầu:

• Nghiên cứu sâu hơn trong việc sử dụng lệnh MOV và các biến thể của lệnhMOV, JMP, INC.

• Làm quen với việc copy dữ liệu từ RAM tới thanh ghi và từ thanh ghi đếnRAM.

• Hiểu được các loại địa chỉ để sử dụng trong viết chương trình.

Kiến thức nền:

Chương trình sử dụng 5 biến thể của lệnh MOV, INC và JMP.

Ðịnh vị địa chỉ là cách thức mà vi xử lý, vi điều khiển sử dụng toán hạng (xem ở phầnnhập môn trong mục 2?4) của một lệnh (ví dụ: như một dữ liệu hay một địa chỉ).

1/ Ðịa chỉ tức thời:

Là 1 số Hex được copy (đưa) vào 1 thanh ghi

Ví dụ :

MOV AL,15 ; Chuyển 15h vào thanh ghi AL

MOV BL,40 ; Chuyển 40h vào thanh ghi BL

MOV CL,50 ; Chuyển 50h vào thanh ghi CL

MOV DL,60 ; Chuyển 60h vào thanh ghi DL

2/ Ðịnh vị địa chỉ gián tiếp (indirect addressing):

Một giá trị được đưa tới hay từ RAM đến. Ðịa chỉ của RAM được coi là 1 số giống như[22] trong dấu ngoặc vuông.

Ví dụ:

MOV [A0], AL ; chuyển giá trị trong AL tới vị trí [40] của RAM.

MOV BL,[40] ; chuyển giá trị trong RAM [A0] vào BL.

22/139

Page 25: Mô phỏng vi điều khiển

3/ Ðịnh vị địa chỉ gián tiếp qua thanh ghi (Register Indirect Addressing):

Là việc copy giá trị từ RAM đến thanh ghi hay copy giá trị từ thanh ghi tới RAM. Ðịachỉ RAM được chứa trong thanh ghi thứ 2 nằm trong dấu ngoặc vuông.

Ví dụ :

MOV [CL], AL

MOV BL,[CL]

;chuyển giá trị trong AL đến vị trí của RAM mà CL chỉ đến

;chuyển vị trí trong RAM mà CL chỉ vào thanh ghi BL

Chương trình:

; chương trình giải thích lệnh MOV ------------------------------------------------

CLO

; chuyển tức thời (Immediate Moves)

MOV AL,15 ; Chuyển 15h vào thanh ghi AL

MOV BL,40 ; Chuyển 40h vào thanh ghi BL

MOV CL,50 ; Chuyển 50h vào thanh ghi CL

MOV DL,60 ; Chuyển 60h vào thanh ghi DL

FOO :

INC AL ; tăng AL lên 1

; chuyển gián tiếp (Indirect moves)

MOV [A0], AL ; chuyển giá trị trong AL tới vị trí RAM [40]

MOV BL,[40] ; chuyển giá trị trong RAM [A0] vào BL

; truyền dữ liệu gián tiếp qua thanh ghi (Register indirect moves)

MOV [CL], AL

23/139

Page 26: Mô phỏng vi điều khiển

MOV BL,[CL]

JMP FOO ;nhảy về nhãn FOO

;nhấn ESC để ngừng chương ;trình

END

;----------------------------------------------------------------------------------------

Bài tập 03. Nhấn nút Play để xem.

Tải file phim về ở đây.

3.1/ Viết chương trình hiển thị chữ HELLO. Hãy tra bảng mã ASCII (trong phần phụlục) của các mẫu tự H,E,L,L,O và copy những giá trị này vào bộ nhớ C0, C1,C2,C3,C4.Ðây là một bài tập đơn giản, chủ ý giúp người học làm quen trong việc sắp xếp bộ nhớđể hiển thị.

24/139

Page 27: Mô phỏng vi điều khiển

Bài tập 4

Viết chương trình đếm lên

Mục đích -yêu cầu:

• Trong bài tập này ta hiểu được nhãn, việc tràn bộ nhớ và thanh ghi trạng tháiSR.

• Hiểu được lệnh tăng INC, lệnh nhảy JMP và con trỏ lệnh IP.• Làm quen với các chu kỳ tìm nạp - thi hành lệnh (Fetch Execute Cycle).• Thực hiện được các chương trình đếm thông dụng.

Kiến thức nền:

1/ Lệnh MOV BL,40:

Câu lệnh cho ta biết được địa chỉ đầu của thanh ghi BL là 40.

2/ Nhãn Rep trong chương trình :

Rep là 1 nhãn, các nhãn được sử dụng với lệnh Jump. Nó là vị trí để các chương trìnhcó thể nhảy lùi hay nhảy tới để tiếp tục thực thi. Ðây là cách thức các số được lưu giữ,ngoài ra ta có những bước nhảy rộng hơn từ -178 đến +127. Các nhãn phải được bắt đầuvới mẫu ký tự hay ký tự. Nhãn có thể chứa các mẫu tự, ký số và ký tự. Cuối nhãn đíchphải có dấu 2 chấm (:).

3/ Lệnh INC BL:

Ðây là lệnh cộng thêm 1 vào thanh ghi BL. Thanh ghi BL sẽ đếm lên từ 40h sau 49h.

3/ Tràn bộ nhớ (overflow) :

Khi BL đạt đến 7FH hay 127 trong hệ thập phân, thì số kế tiếp phải đến 128, nhưng docác số này là số nhị phân nên số tiếp theo sau phải là -128. kết quả này được gọi là trànbộ nhớ.

Tràn bộ nhớ là tình trạng xảy ra khi 1 chương trình cố đưa quá nhiều dữ liệu vào 1 khuvực nhớ so với sức chứa của nó, do đó sẽ sinh ra 1 thông báo lỗi.

4/ Thanh ghi trạng thái SR (Status Register):

25/139

Page 28: Mô phỏng vi điều khiển

Thanh ghi trạng thái SR chứa cờ 4 bit cho biết thông tin về trạng thái của CPU. Ở đâycó 3 cờ cho biết có hay không việc tính toán tràn bộ nhớ, nếu cho kết quả âm hay chokết quả bằng 0 thì việc tính toán thiết lặp các cờ này.

? S : Cờ dấu cho biết kết quả (-)

? O : Cờ tràn cho biết có tràn bộ nhớ

? Z : Cờ zero cho biết kết quả = 0

Cờ thứ tư

? I : là cờ cho phép ngắt

? STI : cho phép mở thanh ghi trạng thái

? CLI : cho phép tắt thanh ghi trạng thái

Các cờ này sẽ được mô tả chi tiết ở phần sau .

5/ Lệnh JMP Rep:

Lệnh này làm cho đơn vị xử lý trung tâm (CPU) nhảy lùi và lập lại những lệnh trước đóhay nhảy tới và bỏ qua 1 vài lệnh.

6/ Con trỏ lệnh:

Con trỏ lệnh IP chứa địa chỉ của lệnh đang thi hành. Ðiều này được cho biết bởi vị trínổi bật trong chương trình mô phỏng. Mỗi lệnh trong CPU làm cho IP được tăng thêm1,2 hay 3 tuỳ thuộc vào độ dài của lệnh. Khi hiển thị RAM, con trỏ làm nổi rõ màu đỏvới nền chữ vàng.

NOP ; tăng IP =1

INC BL ; tăng IP =2

ADD AL,BL ; tăng IP =3

JMP Rep ; cộng hay trừ giá trị từ IP để nhảy đến 1 phần mới của chương trình .

7/ Chu kỳ đón - thực thi lệnh (Fetch Execute Cycle):

Chu kỳ đón - 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 :

26/139

Page 29: Mô phỏng vi điều khiển

* Tìm nạp lệnh tiếp theo từ bộ nhớ vào IR. Trong chương trình này CPU tìm nạplệ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à 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.

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ựchiệ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. CPUsẽ thực thi được toàn bộ chương trình.

Chương trình:

; Chương trình đếm lên -------------------------------------------MOV BL,40 ; giá trịđầu được lưu trong BLRep :INC BL ??? ; cộng 1 vào BLJMP Rep ; nhảyvề nhãn RepEND ; kết thúc chương trình

;---------------------------------------------------------------------

Bài tập 04. Nhấn nút Play để xem.

Tải file phim về ở đây.

Bài tập củng cố: 4.1/ Viết chương trình đếm lùi lại sử dụng DEC BL. 4.2/ Viết chươngtrình đếm lên 3 sử dụng lệnh Add BL,3. 4.3/ Viết chương trình đếm 1,2,4,8,16 sử dụnglệnh MUL BL,2. 4.4/ Viết chương trình đếm theo dãy số sau 0 1 1 2 3 5 8 13 21 34 5589 tràn bộ nhớ. Ðây là một chương trình khó đối với các bạn mới bắt đầu học lập trình,mỗi số trong chương trình này là tổng của 2 số liền trước. Bạn cần sử dụng 2 thanh ghivà 2 vị trí RAM để tạm thời cất giữ giá trị của các số đang tính. Bạn nên nhớ rằng kếtquả sẽ bị tràn khi nó đếm đến 127 và các số hiển thị trong chương trình đều viết dướidạng số hexa.

27/139

Page 30: Mô phỏng vi điều khiển

Bài tập 5

Nhập phím nhấn từ bàn phím cho đến khi phím Enter được nhấn

Mục đích-yêu cầu:

• Làm quen với lệnh nhập IN.• Hiểu được lệnh so sánh CMP, và lệnh nhảy có điều kiện JNZ.• Sử dụng bàn phím để nhập mã số mở máy.

Kiến thức nền:

1/ Lệnh IN 00:

Là lệnh nhập từ port 0. Trong chương trình mô phỏng, port 0 được nối tới phần cứngbàn phím. Chương trình mô phỏng đợi cho phím nhấn và copy mã ASCII của phím nhấnvào thanh ghi AL.

2/ Lệnh CMP AL,0D:

Dùng để so sánh thanh ghi AL với mã ASCII của phím Enter. Mã ASCII của phím Enterlà 0Dh

CMP AL, BL được thực hiện như sau : trong bộ xử lý sẽ có sự so sánh giữa AL và BL

? Nếu kết quả bằng 0 thì cờ "Z" trong thanh ghi trạng thái SR được thiết lập.

? Nếu kết quả là (-) thì cờ "S" được thiết lập.

? Nếu kết quả là (+) thì không có cờ nào được thiết lập.

? Cờ "Z" được thiết lập nếu AL và BL ngang nhau.

? Cờ "S" được thiết lập nếu BL lớn hơn AL. không có cờ nào được thiết lập nếu ALlớn hơn BL .

3/ Lệnh JNZ Rep:

JNZ là từ viết tắt của JUMP NOT ZERO . Lệnh này sẽ nhảy nếu cờ "Z" khôngđược thiết lập. Chương trình sẽ nhảy về phía trước hay lùi về phía sau tới địa chỉ mànhãn Rep đánh dấu.

28/139

Page 31: Mô phỏng vi điều khiển

Lệnh có liên quan là JZ, là từ viết tắt của Jump Zero. Lệnh này sẽ thực hiện 1 bướcnhảy nếu cờ Zero được thiết lập. Trong chương trình này, lệnh CMP sẽ thiết lập các cờ.Lệnh số học cũng thiết lập cờ trạng thái.

4/ Lệnh MOV [C0], AL:

Lệnh này sẽ chuyển nội dung của AL tới địa chỉ [C0]. Ðơn vị hiển thị trực quan làm việcvới địa chỉ từ [C0] tới [FF]. Ðiều này cho phép hiển thị với 4 hàng và 6 cột trên VDU.Ðịa chỉ của [C0] là địa chỉ trên đầu góc trái của màn hình.

5/ Lệnh MOV [BL], AL:

Câu lệnh này thì chép nội dung AL tới địa chỉ mà BL chỉ đến. BL được tạo để chỉ đếnmàn hình VDU tại địa chỉ [C0] bằng cách sử dụng lệnh MOV BL,C0. Ngoài ra BL cònđược dùng để chỉ mỗi vị trí trên màn hình bằng việc sử dụng INC BL.

Chương trình:

; Nhập phím nhấn từ bàn phím cho đến khi phím enter được nhấn ------------

CLO

Rep :

IN 00 ; đợi phím nhấn và cất nó vào AL

CMP AL,0D ; so sánh xem có nhấn phím enter chưa?

JNZ Rep ; nếu không có phím enter thì nhảy về nhãn Rep

; nếu có thì nhảy xuống END để kết thúc chương trình .

END

;------------------------------------------------------------------------------------

Bài tập 05. Nhấn nút Play để xem.

Tải file phim về ở đây .

Bài tập củng cố: 5.1/ Viết chương trình hiển thị mỗi ký tự tại vị trí đầu bên trái của mànhình VDU bằng việc copy tất cả chúng tới địa chỉ [C0}. 5.2/ Viết chương trình sử dụngthanh ghi BL để chỉ tới địa[C0] và tăng BL sau mỗi lần phím nhấn theo thứ tự để thấyđược văn bản bạn gõ. 5.3/ Viết chương trình nhập mã số để mở máy với yêu cầu cụ thể

29/139

Page 32: Mô phỏng vi điều khiển

như sau: khi chương trình đã khởi động muốn thoát khỏi chương trình phải tuần tự gõđúng thứ tự ba chữ cái A,N,H (đúng cả thứ tự); nếu gõ sai chương trình cứ chạy lòngvòng không thoát ra được.

30/139

Page 33: Mô phỏng vi điều khiển

Bài tập 6

Viết thủ tục định thời

Mục đích-yêu cầu:

• Giúp cho sinh viên hiểu về thủ tục định thời.• Tìm hiểu kỹ về các lệnh POP, PUSH, POPF, PUSHF, RET.• Làm quen với các lệnh gọi CALL, ngăn xếp và địa chỉ bắt đầu của thủ tục làm

trễ.

Kiến thức nền:

1/ Lệnh MOV AL,8:

Con số 8 là giá trị được cất trong thanh ghi AL trước khi gọi thủ tục delay. Giá trị nàyxác định thời gian trễ của việc trì hoãn.

2/ Lệnh CALL 30:

Trong lập trình thường gặp những đoạn lệnh được dùng đi dùng lại nhiều lần trongchương trình. Lúc này người lập trình chỉ viết một lần đoạn chương trình đó rồi dùnglệnh CALL để chuyển việc thực hiện chương trình tới chương trình cần lập đi lập lạinày. Lệnh CALL 30 gọi thủ tục tại địa chỉ [30] và thay đổi con trỏ lệnh IP đến địa chỉ[30] và chương trình tiếp tục thi hành từ địa chỉ đó. Ðịa chỉ quay về này được lưu trongngăn xếp. Bạn hãy nhấp vào đây để xem minh họa cách gọi chương trình con. Trongđoạn phimbạn vừa xem mỗi khi lệnh được thực hiện nó sẽ nhấp nháy. Như vậy, nhờ vàosử dụng chương trình con, chương trình chính đơn giản đi rất nhiều.

Khi một chương trình con được gọi đến, địa chỉ trở về được tự động cất vào ngăn xếp.Cuối chương trình con, khi gặp lệnh RET địa chỉ trở về được tự động lấy ra từ ngănxếp. Chính nhờ cấu trúc này, chương trình cho phép sử dụng nhiều mức chương trình: chương trình con này gọi được chương trình con khác. Ðể hiểu rõ hơn bạn hãy nhấpvào.

3/ Ngăn xếp (stack):

Ðây là một vùng bộ nhớ mà ở đó giá trị được lưu và cất giữ lại. Ngăn xếp sử dụng quytắc vào sau ra trước (LIFO). Ðể dễ hiểu hơn, có thể xem ngăn xếp như một chồng tàiliệu đặt trong hộc tủ. Khi các tập (tệp) tài liệu được xếp lần lượt vào hộc thì tập tài liệuđược cất vào cuối cùng có thể lấy ra trước tiên : nghĩa là vào sau ra trước. Với cấu trúcLIFO, vị trí chính xác nơi cất giữ dữ liệu không quan trọng bằng trật tự mà dữ liệu được

31/139

Page 34: Mô phỏng vi điều khiển

cất. Lệnh Call lưu địa chỉ quay về vào ngăn xếp. Lệnh Ret lấy lại giá trị lưu từ ngăn xếpvà nhảy đến địa chỉ bằng việc thiết lập con trỏ lệnh IP.

Con trỏ ngăn xếp SP (Stack Pointer) được dùng để trỏ vào ô vừa được dùng đến củangăn xếp. Chương trình mặc định trong phần mềm dành các ô nhớ từ ô BF trở đi làmngăn xếp. Nội dung của con trỏ ngăn xếp sẽ tự động giảm mỗi khi có một byte mới đượccất vào ngăn xếp.

4/ Lệnh ORG 30:

Là lệnh bắt đầu từ địa chỉ 30. ORG xác định lại những gì mà mã máy phát ra. Thủ tụcđịnh thời được cất tại địa chỉ 30.

5/ Lệnh PUSH AL:

Ðược dùng để lưu giá trị của AL vào ngăn xếp con trỏ ngăn xếp SP chỉ tới vị trí ngănxếp trống kế tiếp và lệnh PUSH cất giá trị tại vị trí này. Sau đó SP được di chuyển đếnô nhớ kế tiếp. Trong chương trình mô phỏng, ngăn xếp tăng lên hướng về địa chỉ zero.Ngăn xếp sẽ bị tràn nếu chứa nhiều hơn so với bộ nhớ sẵn có.

6/ Lệnh PUSHF:

Dùng để cất các cờ của CPU trong thanh ghi trạng thái SR vào ngăn xếp. Ðiều này bảođảm rằng các cờ có thể đặt lại như cũ khi thủ tục hoàn thành. Con trỏ ngăn xếp được lùilại một khoảng trống.

7/ Lệnh DEC AL:

Giảm giá trị trong AL đi một đơn vị. Lệnh này thiết lập cờ Z nếu kết quả là 0 hay cờ Snếu kết quả có giá trị (-) .

8/ Lệnh JNZ REP:

JNZ nhảy tới địa chỉ mà Rep đánh dấu. Nhảy nếu cờ Z không được set.

9/ Lệnh POPF:

Dùng để khôi phục các cờ CPU từ ngăn xếp. Tăng con trỏ ngăn xếp lên 1.

10/ Lệnh POP AL:

Dùng khôi phục thanh ghi AL từ ngăn xếp. Ðiều này được làm bởi việc di chuyển contrỏ ngăn xếp ban đầu tới một nơi phía trước và chép giá trị tại vị trí ngăn xếp vào thanhghi AL.

32/139

Page 35: Mô phỏng vi điều khiển

11/ Lệnh RET:

RET được đặt tại cuối chương trình con để CPU lấy lại địa chỉ trở về ( địa chỉ tiếp theolệnh CALL trong chương trình chính), địa chỉ này được tự động cất khi gọi chươngtrình con. Thủ tục định thời có thể được tái sử dụng nhiều lần, gọi là sử dụng lặp lại(recursion). Ðây là một kỹ thuật mạnh nhưng dễ làm rối loạn chương trình, nếu bạnkhông hiểu những gì đang xảy ra. Sự lặp ngẫu nhiên hay không điều khiển được làmcho ngăn xếp tăng lên cho đến khi nó ghi đè lên ngăn xếp hay bị tràn.

Chương trình:

;Chương trình chính ----------------------------------------------------------------

Start:

MOV AL,8 ;một trì hoãn ngắn

CALL 30 ;gọi thủ tục tại địa chỉ 30

MOV AL,10 ;một trì hoãn trung bình

CALL 30

MOV AL,20 ;một trì hoãn dài

CALL 30

JMP Start ;nhảy về Start

;Thủ tục delay được lưu ở địa chỉ 30 ---------------------------------------------

ORG 30 ;khởi đầu thủ tục từ địa chỉ [30]

PUSH AL ;lưu AL từ ngăn xếp

PUSHF ;lưu các cờ CPU vào ngăn xếp

Rep:

DEC AL ;giảm AL đi 1

JNZ Rep ;nhảy đến nhãn Rep nếu AL khác ;0

POPF ;khôi phục các cờ CPU từ ngăn ;xếp

33/139

Page 36: Mô phỏng vi điều khiển

POP AL ;khôi phục AL từ ngăn xếp

RET ;trở về lại chương trình chính (từ chương trình con)

END

;--------------------------------------------------------------------------------------

Bài tập 06. Nhấn nút Play để xem.

Tải file phim về ở đây

34/139

Page 37: Mô phỏng vi điều khiển

Bài tập 7

Chương trình đọc một chuỗi văn bản và cất vào RAM

Mục đích-yêu cầu:

• Làm quen với địa chỉ bắt đầu của chương trình dịch hợp ngữ.• Hiểu cách dùnh lệnh HALT, phân biệt với lệnh END.• Phân biệt cách dùng lệnh RET trong mỗi phần của chương trình.• Hiểu được các lệnh PUSH, POP, PUSHF, POPF, JZ, JMP, CALL trong bài tập.

Kiến thức nền :

1/ Lệnh MOV BL,70 :

Chép 70 vào thanh ghi BL, đây là địa chỉ mà thủ tục sẽ nhập văn bản vào RAM. Ví dụnày nói về tham số trung gian sử dụng thanh ghi. Chương trình có khả năng nhận đượcmột số từ một phần của một chương trình đến một chương trình khác.

2/ Lệnh INC BL :

Ðây là lệnh cộng 1 vào BL. Kết quả này làm cho BL chỉ tới vị trí bộ nhớ kế tiếp để sẵnsàng cho các ký tự văn bản kế tiếp đã được cất giữ.

3/ Lệnh CALL 10 :

Lệnh gọi thủ tục tại địa chỉ 10. Ðiều này được thực hiện bằng việc thiết lập con trỏ lệnhIP của CPU đến địa chỉ [10].

4/ Lệnh RET:

Tại điểm kết thúc của thủ tục, lệnh RET xác lập lại con trỏ lệnh IP về đến lệnh ngay saulệnh CALL được gọi. Ðịa chỉ này được cất trên ngăn xếp bởi lệnh CALL.

5/ Lệnh HALT :

Ta không nên lẫn lộn lệnh HALT và lệnh END. Lệnh END kết thúc chương trình hợpngữ. Lệnh HALT thì phát ra các mã máy 00 làm cho CPU tạm dừng. Có thể có một vàilệnh HALT trong chương trình nhưng chỉ có một lệnh END.

6/ Lệnh ORG 10:

35/139

Page 38: Mô phỏng vi điều khiển

Con số 10 là giá trị của địa chỉ bắt đầu của chương trình.

7/ Lệnh PUSH AL và POP AL:

Cất giá trị của AL vào ngăn xếp. Ðây là một vùng nhớ ở trong RAM bắt đầu tại địa chỉBF. Ngăn xếp tiến về 0. Việc hiển thị RAM cho thấy con trỏ ngăn xếp có màu xanhđược làm nổi bật với nền chữ vàng. Lệnh PUSH và POP dùng chung với nhau giúp chocác ngắt có thể thực hiện dễ dàng ngay cả trong thủ tục ngắt (một ngắt thứ hai có thểxuất hiện trong khi yêu cầu ngắt thứ nhất đang thực hiện). Thủ tục hay ngắt có thể thayđổi các thanh ghi CPU nhưng nó sẽ được khôi phục lại được giá trị cũ của chúng khi trởvề chương trình chính.

8/ Lệnh PUSHF và POPF:

Lệnh PUSHF lưu các cờ của CPU vào ngăn xếp. Lệnh POPF khôi phục lại các cờ CPUđến các giá trị đầu của chúng. Ðiều này có thể làm cho các thủ tục và ngắt được hữudụng trong công việc mà không làm ảnh hưởng tới chế độ nghỉ lại của chương trình.

9/ Lệnh IN 00:

Nhập từ port 0. Port này được kết nối với bàn phím. Phím nhấn được lưu trong thanhghi AL.

10/ Lệnh CMP AL,0D :

Ðây là lệnh so sánh thanh ghi AL với số 0Dh. 0D là mã ASCII của phím Enter. Khichạy chương trình thì trên màn hình sẽ xuất hiện dòng chữ "Phím ENTER được nhấnchưa?" ("Was the Enter key pressed?"). CMP làm việc bằng cách trừ 0D từ AL. Nếuchúng bằng nhau thì việc trừ cho kết quả zero. Ðây là lý do cờ "Z" được thiết lập.

11/ Lệnh JZ Stop :

Lệnh này cho phép nhảy đến nhãn stop nếu cờ "Z" được thiết lập. JZ là lệnh nhảy cóđiều kiện.

12/ Lệnh MOV [BL],AL :

Di chuyển phím nhấn được cất trong AL vào ô nhớ RAM mà [BL] chỉ tới. INC BL đượcsử dụng để làm cho BL chỉ tới vị trí RAM kế tiếp.

13/ Lệnh JMP Rep :

JMP cho phép nhảy về nhãn Rep, đây là lệnh nhảy không điều kiện. Nó luôn nhảy vàcác cờ CPU được bỏ qua.

36/139

Page 39: Mô phỏng vi điều khiển

14/ Lệnh RET :

Lệnh RET này là lệnh quay về từ thủ tục đến địa chỉ được cất trong ngăn xếp. Ðiều nàyđược làm bởi việc thiết lập con trỏ lệnh IP trong CPU.

Chương trình:

; Chương trình chính ------------------------------------------------------------------

MOV BL,70 ;[70] là địa chỉ mà ở đó văn bản được lưu giữ

CALL 10 ;thủ tục tại địa chỉ [10] đọc văn bản và đặt nó bắt đầu từ địa chỉtrong BL

CALL 40 ;thủ tục này không làm gì cho đến khi bạn viết nó, nó sẽ hiển thị vănbản.

HALT ;phát ra mã 00 làm CPU ngừng không sử dụng lệnh END ở đây vì sẽ bịlỗi.;Thủ tục đọc văn bản

ORG 10 ;mã bắt đầu từ địa chỉ [10]

PUSH AL ;lưu AL trong ngăn xếp

PUSH BL ;lưu BL trong ngăn xếp

PUSHF ;lưu cờ CPU vào ngăn xếp

Rep:

IN 00 ;nhập từ port 00 (bàn phím)

CMP AL,0D ;so sánh xem có nhấn phímEnter chưa?

JZ Stop ;nếu có thì chương trình sẽ nhảy đến nhãn Stop

MOV [BL],AL ;chuyển phím nhấn tới RAM tại vị ;trí [BL]

INC BL ;tăng BL, BL chỉ tới vị trí kế tiếp

JMP Rep ;nhảy về nhãn Rep nhận ký tự kế

37/139

Page 40: Mô phỏng vi điều khiển

Stop:

MOV AL,0 ;giá trị null(=0) kết thúc vạch dấu

MOV [BL],AL ;chuyển đến [BL]

POPF ;khôi phục các cờ từ ngăn xếp

POP BL ;khôi phục BL từ ngăn xếp

POP AL ;khôi phục AL từ ngăn xếp

RET ;kết thúc chương trình con

;-----------------------------------------------------------------------------------------

;Thủ tục hiển thị văn bản trên màn hình mô phỏng

ORG 40 ;địa chỉ bắt đầu của thủ tục hiển ;thị là [40]

HERE:

MOV CL,C0 ;địa chỉ cơ bản của RAM VDU

MOV BL,03 ;khoảng chừa trống của chuỗi văn ;bản

START: ;nhập văn bản vào VDU

MOV AL,[BL] ;đưa con trỏ văn bản vào AL

CMP AL,0

JZ END ;so sánh nhảy khỏi vòng lặp

MOV [CL],AL ;đưa AL vào bộ nhớ VDU

INC CL ;vị trí kế tiếp trên VDU

INC BL ;ký tự văn bản kế tiếp

JMP START ;quay về chương trình chính

38/139

Page 41: Mô phỏng vi điều khiển

END1

RET

END ; kết thúc chương trình

;---------------------------------------------------------------------------------------

Bài tập 07. Nhấn nút Play để xem.

Tải file phim về ở đây

39/139

Page 42: Mô phỏng vi điều khiển

Bài tập 8

Chương trình điều khiển đèn giao thông sử dụng bảng dữ liệu.

Mục đích-yêu cầu:

• Giúp sinh viên hiểu về bảng dữ liệu và cách sử dụng bảng trong viết chươngtrình.

Kiến thức nền:

1/ Lệnh DB 84 :

DB là chữ viết tắt của Define Byte. Lệnh này khai báo số 84H được cất trong RAM tạiđịa chỉ [02]. Ðịa chỉ [00] và [01] dành cho mã máy của lệnh JMP Start. 84H đổi sangsố nhị phân là 1000 0100. Số 0 và 1 này có thể dùng để bật sáng đèn đỏ bên trái và đènxanh bên phải trong bài thí nghiệm.

2/ MOV BL,02:

Chuyển 02 vào thanh ghi BL. [02] là địa chỉ RAM bắt đầu của bảng dữ liệu. BL đượcsử dụng như là một con trỏ để chỉ đến bảng dữ liệu.

3/ MOV AL,[BL]:

[BL] chỉ đến bảng dữ liệu. Lệnh này chuyển một giá trị từ bảng dữ liệu vào thanh ghiAL.

4/ Lệnh OUT 01:

Dùng để gởi nội dung của thanh ghi AL tới port 01. Port 01 được kết nối với đèn giaothông.

5/ CMP AL,58:

58 là địa chỉ truy xuất cuối cùng của bảng dữ liệu. Nếu AL chứa 58, nó cần để reset BLchỉ lại về đầu bảng và sẵn sàng để lập lại trình tự. Nếu AL = 58, cờ "Z" trong CPU sẽđược thiết lập.

6/ Lệnh JZ Start:

Dùng để nhảy về lại nhãn start nếu cờ "Z" trong CPU được set.

40/139

Page 43: Mô phỏng vi điều khiển

7/ Lệnh INC BL:

Tăng BL lên 1 để BL chỉ tới địa chỉ kế tiếp trong bảng dữ liệu.

Chương trình

;Chương trình điều khiển đèn giao thông -----------------------------------------

JMP Start ; nhảy đến nhãn Start bỏ qua bảng dữ liệu

DB 84 ;bảng dữ liệu bắt đầu

DB C8 ;các dữ liệu này điều khiển đèn ;giao thông

DB 31 ;trình tự này được đơn giản hóa

DB 51

Start:

MOV BL,02 ;02 là địa chỉ bắt đầu của bảng dữ ;liệu

Rep:

MOV AL,[BL] ;chuyển dữ liệu từ bảng đến AL

OUT 01 ;xuất từ thanh ghi AL đến port 1

CMP AL,58 ;so sánh địa chỉ cuối trong bảng ;dữ liệu

JZ Start ;nếu có thì nhảy đến nhãn start

;nếu không thì BL chỉ đến mục kế tiếp

INC BL

JMP Rep ;nhảy về lại nhãn Rep

END ;kết thúc chương trình

;--------------------------------------------------------------------------------------

Bài tập 08. Nhấn nút Play để xem.

41/139

Page 45: Mô phỏng vi điều khiển

Bài tập 9

Sử dụng tham số trung gian

Mục đích-yêu cầu:

• Thông qua việc thực hiện các phép toán cộng để sử dụng các thanh ghi, vị trí ônhớ trên RAM và ngăn xếp.

• Sử dụng được các thanh ghi, vị trí ô nhớ trên RAM và ngăn xếp trong lập trìnhvi xử lý.

Kiến thức nền:

Các tham số đưa vào chương trình có thể thông qua trong 3 cách:

? Các thanh ghi CPU.

? Các vị trí RAM.

? Ngăn xếp.

Trong ví dụ dưới đây sử dụng 3 cách giải khác nhau để cộng 2 số.

Chương trình:

; Nhảy qua bảng thông số ----------------------------------------------------

JMP Start

DB 00

DB 00

Start:

MOV AL,5 ;giữ 1 byte của RAM tại địa chỉ 02

MOV BL,4 ;giữ 1 byte của RAM tại địa chỉ 03

43/139

Page 46: Mô phỏng vi điều khiển

CALL 30 ;gọi thủ tục thứ nhất

;sử dụng vị trí RAM để đưa các tham số vào trong 1 thủ tục

MOV AL,3

MOV [02],AL

MOV BL,1

MOV [03],BL

CALL 40 ;gọi thủ tục thứ hai

;sử dụng ngăn xếp để đưa tham số vào 1 thủ tục

MOV AL,7

PUSH AL

MOV BL,2

PUSH BL

CALL 60 ;gọi thủ tục thứ ba

POP BL

POP AL

JMP Start ;trở về nhãn Start để thực hiện

;Thủ tục để cộng 2 số (cách 1) -----------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng AL và BL

;Kết quả đưa vào AL

;Ðây là phương pháp đơn giản nhưng không hay lắm vì có nhiều thamsố

ORG 30 ;bắt đầu tại địa chỉ 30

ADD AL,BL ;cộng BL với AL, kết quả lưu ;trong AL

44/139

Page 47: Mô phỏng vi điều khiển

RET ;kết thúc chương trình con, quay trở về từ thủ tục

;Thủ tục để cộng 2 số (cách 2) -----------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng vị trí RAM

;Kết quả lưu vào vị trí RAM

;Phương pháp này thì phức tạp hơn và không giới hạn số tham số

ORG 40 ;bắt đầu tại địa chỉ 40

PUSH CL ;lưu các thanh ghi và các cờ vào ngăn xếp

PUSH DL

PUSHF

MOV CL,[02] ;tìm nạp tham số từ RAM

MOV DL,[03] ;tìm nạp tham số từ RAM

ADD CL,DL

MOV [02],CL ;cất kết quả trong RAM

POPF ;khôi phục lại thanh ghi ban đầu và giá trị cờ

POP DL

POP CL

RET ;kết thúc chương trình con

;Thủ tục cộng 2 số (cách 3) ---------------------------------------------------

;Số được cộng bên trong ngăn xếp

;Lấy tham số ra ngăn xếp

;Thực hiện việc cộng

;Ðẩy kết quả vào lại ngăn xếp

45/139

Page 48: Mô phỏng vi điều khiển

;Phần lớn thủ tục gọi trong thời gian thực đều được sử dụng ngăn xếp

ORG 60 ;mã bắt đầu tại địa chỉ 60

POP DL

POP BL

POP AL

ADD AL,BL ;đặt trở lại ngăn xếp như trước đó

PUSH AL

PUSH DL

END ;kết thúc chương trình

;-----------------------------------------------------------------------------------

Bài tập 09. Nhấn nút Play để xem.

Tải file phim về ở đây .

46/139

Page 49: Mô phỏng vi điều khiển

Bài tập 10

Chương trình ngắt mềm

Mục đích-yêu cầu:

• Làm quen với ngắt mềm và nhận ra sự khác nhau giữa ngắt mềm và gọi thủ tục.• Hiểu về bảng vectơ ngắt và cách gọi ngắt mềm như thế nào?• Sử dụng ngắt mềm trong trao đổi dữ liệu.

Kiến thức nền:

1/ Ngắt và thủ tục:

Tính ưu việt của hệ vi xử lý trong điều khiển hệ thống đó là tính uyển chuyển (flexible):dễ dàng thay đổi chương trình để thích nghi với môi trường làm việc. Muốn vậy, khi cótín hiệu cần trao đổi với hệ thống, CPU phải tạm dừng công việc hiện tại để phục vụviệc trao đổi dữ liệu. Sau khi hoàn thành việc trao đổi dữ liệu, CPU lại quay về làm tiếpcông việc đang làm dở dang. Cách làm việc kiểu này gọi là ngắt CPU. Ngắt là một đoạnmã ngắn cung cấp các dịch vụ hữu ích có thể sử dụng bằng các chương trình khác nhau.Chương trình ngắt điển hình như thi hành các phím nhấn, sự di chuyển chuột, nút nhấn,màn hình soạn thảo, đọc đĩa, viết .

Ngắt mềm bản chất là một lệnh CALL đặt biệt, nó được gọi một cách chủ độngtheo nhiều cách thông qua chương trình của người lập trình nghĩa là nó được viết tại mộtvi trí cố định trong chương trình và nhờ vào vector ngắt chỉ đến chương trình phục vụngắt cụ thể. Nếu nhìn một cách hời hợt từ bên ngoài, ta dễ nhầm lẫn giữa gọi thủ tục vàngắt mềm, thực ra chúng vẫn có điểm khác: nếu như gọi thủ tục là việc gọi đi gọi lạimột đoạn chương trình nào đó bất kỳ (do người lập trình lập ra) thì ngắt mềm lại gọi mộtđoạn chương trình đa số được chuẩn hoá cho việc ngắt, ví dụ: khi giao tiếp CPU tronghệ thống với cổng RS232 của máy tính ta chỉ cần dùng lệnh INT 21 máy sẽ hiểu và thựcthi ngay lệnh ngắt này. Tuy vậy vẫn có thể dùng CALL thay cho ngắt mềm, vì thế tronghọ vi điều khiển 8051 người ta không dùng ngắt mềm mà chỉ dùng ngắt cứng do ứngdụng cục bộ của vi điều khiển, trong khi vi xử lý có ứng dụng rộng lớn hơn nhiều.

Ngắt cứng được gây ra bởi tín hiệu điện tới CPU từ các thiết bị phần cứng.Ngắt này xảy ra ở một thời điểm nào đó bất kỳ mà người lập trình không thể biết được,ví dụ như khi hết giấy trong khay máy in, chuyên gia lập trình của Microsoft không thểbiết ! nhưng họ có thể lường trước được khả năng này do vậy tín hiệu hết giấy trên đượcchuyển thành tín hiệu điện truyền đến CPU, người lập trình nhờ vào vector ngắt chỉ đến

47/139

Page 50: Mô phỏng vi điều khiển

đoạn chương trình phục vụ ngắt để giải quyết vấn đề trên. Như vậy, một thủ tục phục vụngắt có thể xuất hiện bất cứ lúc nào trong khi chương trình đang chạy, trong khi đó cácthủ tục thông thường chỉ xuất hiện ở những vị trí cố định trong chương trình.

Cũng giống như ở thủ tục, trước khi thực hiện chương trình phục vụ yêu cầu ngắt, địachỉ trở về cần được cất vào ngăn xếp.

Khi hoạt động ở cơ chế ngắt thiết bị ngoại vi chủ động phát tín hiệu ngắt cho hệ vi xửlý qua chân INT (Interrupt). CPU có phương thức kiểm tra sự xuất hiện của tín hiệu yêucầu ngắt này và sẽ đáp ứng khi có thể.

Hình 4.1: Cơ chế ngắt

2/ Ngắt mềm:

Là ngắt được gọi bằng một lệnh ở trong chương trình. Lệnh đó là INT kèm theo số hiệungắt n, ví dụ: lệnh gọi ngắt số 5 được viết là INT 5. Các ngắt mềm này cho phép gọi trựctiếp các thủ tục (chương trình con) phục vụ ngắt có trong chương trình.

3/ Bảng vectơ ngắt (Interrupt Vector Table):

48/139

Page 51: Mô phỏng vi điều khiển

Khi một ngắt được chấp thuận, giá trị của địa chỉ bắt đầu của chương trình phục vụ ngắtgọi là vectơ ngắt. Các số hiệu ngắt n đều tương ứng với các địa chỉ xác định của ô nhớcó chứa địa chỉ đầu tiên của chương trình con phục vụ ngắt chứa trong bảng vectơ ngắt.Nói cụ thể hơn : đối với các nguyên nhân ngắt khác nhau thì CPU sẽ thực thi các mãlệnh khác nhau để gọi cho ngắt ấy một chương trình ngắt tương ứng, địa chỉ đầu tiên củachương trình này được xác định qua bảng vector ngắt. Trong các máy IBM, bảng nàynằm trong bộ nhớ trung tâm bắt đầu tại địa chỉ 0 đến 1024.

3/ Gọi lệnh ngắt (calling an interrupt) :

Ðây là một việc làm phức tạp. Lệnh INT 02 làm CPU gọi ra nội dung chứa trong RAMtại địa chỉ 02. Sau khi lưu địa chỉ trở về trong ngăn xếp, con trỏ lệnh IP được chỉ tới vịtrí này. Mã ngắt khi ấy được thực hiện. Khi hoàn thành lệnh IRET làm cho chương trìnhquay trở về từ lệnh ngắt đó. Con trỏ lệnh IP được đặt tới địa chỉ đã được lưu trong ngănxếp ban đầu.

Chương trình:

;Chương trình ngắt phần mềm-------------------------------------------------------

JMP Start ;nhảy qua bảng của vectơ ngắt

DB 51 ;vectơ tại địa chỉ 02 chỉ tới địa chỉ 51

DB 71 ;vectơ tại địa chỉ 03 chỉ tới địa chỉ 71

Start:

INT 02 ;ngắt 02

INT 03 ;ngắt 03

JMP Start

;----------------------------------------------------------------------------------------

ORG 50

DB E0

;---------------đảo các bit trong ô nhớ 50-------------------

MOV AL,[50]

49/139

Page 52: Mô phỏng vi điều khiển

NOT AL

MOV [50],AL

;------------------------------------------------------------

OUT 01 ;Sáng tất cả bóng đèn của đèn giao thông bên phải

IRET

;--------------------------------------------------------------------------------------- ORG70 ;chuyển các bit từ RAM vào AL

DB 0

MOV AL,[70]

NOT AL ;đảo các bit trong AL

AND AL,FE ;Bắt buộc bít bên phải ngoài cùng bằng 0

MOV [70],AL ;chuyển các bit đã đảo lại vào RAM

OUT 02 ;hiển thị số 8 trên Led 7 đoạn bên trái

IRET

END

;---------------------------------------------------------------------------------------

Bài tập 10. Nhấn nút Play để xem.

Tải file phim về ở đây.

50/139

Page 53: Mô phỏng vi điều khiển

Bài tập 11

Chương trình ngắt cứng và gọi thủ tục ngắt

Mục đích-yêu cầu:

• Bài tập này giới thiệu ngắt cứng và cách gọi thủ tục ngắt.• Sử dụng ngắt cứng trong trao đổi dữ liệu.

Kiến thức nền:

1/ Ngắt cứng:

Ngắt cứng là yêu cầu ngắt CPU do các tín hiệu điện đến từ chân INTR và NMI ( ngắt cóche và không che). Khác với ngắt mềm, ngắt cứng không được khởi động bởi chươngtrình mà bởi các thiết bị có trong phần cứng. Loại ngắt này là một chế độ đặc biệt rấthiệu quả được trang bị để tạo cơ chế điều khiển mềm dẻo và linh hoạt (flexible) khi hệcó nhiều thiết bị ngoại vi. Bình thường CPU tiến hành công việc theo chế độ chính làchế độ làm việc theo chương trình, chỉ khi nào có sự tác động bởi tín hiệu điện từ phầncứng gởi đến CPU mới tạm dừng công việc hiện tại để phục vụ yêu cầu của thiết bịngoại vi đó. Tín hiệu từ các thiết bị phần cứng gởi đến thì không biết trước về mặt thờigian, ví dụ như khi nhấn hay nhả một phím nhấn thì ngắt bàn phím sẽ được kích hoạt,nó sẽ gởi tín hiệu đến CPU. CPU tạm dừng công việc đang thực hiện và xử lý việc ngắt: cụ thể là chuyển ký tự này vào vùng nhớ đệm. Khi việc xử lý này hoàn thành thì CPUmới quay trở lại chương trình chính nơi mà trước đó chương trình tạm dừng.

Ngắt cứng trong ví dụ trên có thể bị che chắn lại khi cờ I trong thanh ghi trạng tháikhông được thiết lập cụ thể bằng lệnh CLI (Clear Interrupt Flag) : nghĩa là sự xuất hiệncủa lệnh này khiến cho không có ký tự nào được nhập từ bàn phím nữa mặc dù vẫn cònxuất hiện ngắt (phím vẫn được nhấn hay nhả). Ðể huỷ bỏ chế độ cấm ngắt trên ( thiếtlập lại cờ I), ta dùng lệnh STI (Set Interrupt Flag), nó cho phép các ngắt bị che tác độngtrở lại bình thường.

Các ngắt truyền qua chân NMI không hề bị che chắn :luôn được thực hiện, kể cả khingắt này được gọi ngay sau lệnh CLI.

Ngoài hai loại ngắt vừa nêu trên, CPU còn có ngắt cứng bên trong. Những ngắt nàykhông bị kích hoạt bởi thiết bị ngoại vi mà bởi chính các IC bổ trợ nằm trong hệ vi xửlý.

51/139

Page 54: Mô phỏng vi điều khiển

Khác với ngắt mềm, ngắt cứng không được kích hoạt bởi chương trình phần mềm màdo các thiết bị tham gia trong phần cứng của hệ vi xử lý tác động. Ví dụ: khi phím đượcnhấn, hết giấy máy in, thao tác trên chuột, đưa dĩa mềm vào máy tính .

Khi có nhiều yêu cầu ngắt thuộc các loại ngắt khác nhau cùng lúc đòi hỏi CPU phục vụthì CPU sẽ thực hiện xử lý yêu cầu ngắt theo thứ tự ưu tiên với nguyên tắc ngắt nào cómức ưu tiên cao nhất sẽ được CPU nhận biết và phục vụ trước. Ngắt được phân côngưu tiên như ổ đĩa thì được ưu tiên trước máy in...Trong chương trình mô phỏng này ngắtcứng chính là INT 02. Nó được tạo ra bởi một bộ định thời. Tín hiệu ngắt được phát ramột cách đều đặn, khoảng cách giữa hai ngắt có thể đặt trước trong Configuration Tab.Ðể chỉnh khoảng thời gian xuất hiện giữa hai lần tín hiệu ngắt INT 02, chọn View >Configuration.

Chọn Increase (tăng) hay Reduce (giảm) để chỉnh tần số xuất hiện của lệnh INT 2. Lưuý do ở đây là chỉnh chu kỳ nên muốn tăng tần số xuất hiện lệnh ngắt phải giảm thời gianchu kỳ.

52/139

Page 55: Mô phỏng vi điều khiển

Bạn phải đặt một vectơ ngắt tại địa chỉ 02 để chỉ đến mã ngắt của bạn tại một địa chỉ nàođó trong RAM, khi có tín hiệu ngắt chương trình phục vụ ngắt của bạn sẽ thực thi. Hãyxem ví du minh hoạ ở phần sau. Trong chương trình mà bạn đã soạn thảo, dù lệnh ngắtcó hay không thì CPU vẫn liên tục thăm dò xem trạng thái của các thiết bị phần cứng, cụthể với chương trình mô phỏng này lệnh ngắt INT 02 liên tục được phát ra nhưng thựcthi hay không là tuỳ thuộc vào chương trình của bạn.

2/ Gọi thủ tục ngắt:

Lệnh ngắt INT 2 dù do phần cứng hay phần mềm tác động, CPU sẽ lấy ra nội dung củaRAM tại địa chỉ 02. Sau khi lưu địa chỉ quay lại trên ngăn xếp, con trỏ lệnh IP được chỉđến địa chỉ được xác định trong RAM. Sau đó mã ngắt được thực hiện. Khi hoàn thànhlệnh IRET, chương trình quay trở về chương trình chính. Con trỏ lệnh IP của CPU đượcđặt đến địa chỉ được lưu trên ngăn xếp trước đó.

Ngắt cứng có khác đôi chút so với ngắt mềm. Ngắt mềm được gọi với một lệnh giốngnhư INT 02 và trở về ở lệnh ngay sau nó. IP+2 được cất vào ngăn xếp. Ngắt cứng khôngđược gọi bởi một lệnh trong chương trình vì thế địa chỉ quay về không cần phải qua lệnhgọi. Nội dung trong IP được cất lên trên ngăn xếp.

Chương trình:

;-----------------------------------------------------------------------------------

; ví dụ này sử dụng ngắt cứng cho phép điều khiển song hành động cơ bước lẫn đèn giaothông

JMP Start ;nhảy đến nhãn Start (bảng của vectơ ngắt)

53/139

Page 56: Mô phỏng vi điều khiển

DB 50 ;vectơ tại địa chỉ 02 chỉ tới địa chỉ 50

Start:

STI ;set cờ I

MOV AL,11

Rep:

OUT 05 ;điều khiển động cơ bước

ROR AL ;xoay bit trong AL sang phải

JMP Rep

JMP Start

;----------------------------------------------------------------------------------------

ORG 50

PUSH AL ;lưu AL vào ngăn xếp

PUSH BL ;lưu BL vào ngăn xếp

PUSHF ;lưu các cờ vào ngăn xếp

JMP Pastdata

DB 84 ;đỏ 1 + xanh 2

DB C8 ;đỏ 1 + vàng 1 + vàng 2

DB 30 ;xanh 1 + đỏ 2

DB 58 ;vàng 1 + đỏ 2 + vàng 2

DB 57 ;sử dụng kiểm tra tiến trình qua bảng

Pastdata:

54/139

Page 57: Mô phỏng vi điều khiển

MOV BL,[5B] ;BL chỉ đến bảng dữ liệu

MOV AL,[BL] ;dữ liệu từ bảng đến AL

OUT 01 ; điều khiển đèn giao thông

;Gửi dữ liệu trong AL ra đèn

CMP AL,58 ;địa chỉ cuối trong bảng

JZ Reset ;nếu địa chỉ cuối được chỉ đến thì nhảy đến Reset

INC BL ;tăng BL lên 1, BL chỉ đến địa chỉ kế tiếp trongbảng

MOV [5B],BL ;lưu con trỏ vào trong Ram

JMP Stop ;nhảy về nhãn Stop

Reset:

MOV BL,57 ;chỉ đến địa chỉ bắt đầu bảng dữ ;liệu

MOV [5B],BL ;lưu con trỏ vào trong Ram

Stop:

POPF ;khôi phục các cờ tới vị trí liền ;trước

POP BL ;khôi phục BL tới giá trị liền ;trước

POP AL ;khôi phục AL tới giá trị liền ;trước

IRET

END

; Lưu ý : để dễ quan sát kết quả, nên kết hợp chỉnh tần số xung Ck của CPU với tần sốxuất hiện lệnh ngắt.

;-------------------------------------------------------------------------------------

Bài tập 11. Nhấn nút Play để xem.

Tải file phim về ở đây .

55/139

Page 58: Mô phỏng vi điều khiển

Bài Tập Nâng caoBài tập nâng cao 1

Viết chương trình điều khiển đèn giao thông có thời gian trễ như thực tế sử dụng 3 cách:

BÀI TẬP 1.1: Sử dụng vòng lập.

BÀI TẬP 1.2: Sử dụng thủ tục định thời.

BÀI TẬP 1.3: Sử dụng bảng dữ liệu.

56/139

Page 59: Mô phỏng vi điều khiển

Bài tập nâng cao 2

Viết chương trình điều khiển việc hiển thị trên VDU.

BÀI TẬP 2.1:

Viết chương trình nhập chuỗi văn bản bằng bàn phím và hiển thị trên màn hìnhVDU. Chương trình nhập ký tự sẽ dừng lại khi nhấn phím Esc.

BÀI TẬP 2.1:

Viết chương trình cho phép hệ thống hiển thị trên màn hình củaVDU một chuỗi vănbản được định từ trước, ta có thể thay đổi một cách dễ dàng, sau đó chương trình tự xoáchúng đi... quá trình cứ như thế mà tiếp diễn. Bạn thử thay đổi đoạn văn bản trên theo ýbạn xem!

57/139

Page 60: Mô phỏng vi điều khiển

Bài tập nâng cao 3

Chương trình điều khiển động cơ bước.

BÀI TẬP 3.1:

Viết chương trình điều khiển động cơ bước quay thuận với mỗi bước quay là 5 độ (quay1/2 bước).

BÀI TẬP 3.2:

Viết chương trình điều khiển động cơ bước quay thuận 90 độ; nghịch 35 độ sau đó dừnglại.

58/139

Page 61: Mô phỏng vi điều khiển

Bài tập nâng cao 4

Viết chương trình điều khiển rắn chạy trong mê cung.

BÀI TẬP 4.1:

Sử dụng bảng dữ liệu và vòng lập, viết chương trình điều khiển rắn chạy thoát khỏimê cung.

BÀI TẬP 4.2:

Sử dụng các ngắt cứng viết chương trình điều khiển rắn chạy thoát khỏi mê cungvà đóng điện lò sấy chạy song hành.

59/139

Page 62: Mô phỏng vi điều khiển

Bài tập nâng cao 5

Chương trình điều khiển thang máy

Hãy viết chương trình điều khiển thang máy chuyển động theo các nút nhấn lênxuống có trong giao diện phần cứng ở port 06.

60/139

Page 63: Mô phỏng vi điều khiển

Bài tập nâng cao 6

Chương trình không chế nhiệt độ lò sấy.

Hãy viết chương trình không chế nhiệt độ lò sấy theo nguyên lý so sánh cửa sổ đểnhiệt độ lò được không chế ở 20 độ C.

Gợi ý : Khống chế nhiệt độ, độ ẩm, điện áp ... theo nguyên lý so sánh cửa sổ (cònđược gọi là khống chế ON-OFF) là một hình thức khống chế rất thông dụng trong thựctế. Trong dạng khống chế này người ta liên tụ?c đóng cắt nguồn nhiệt, ẩm, điện áp ...đểgiử giá trị trung bình của tín hiệu là hằng số.

61/139

Page 64: Mô phỏng vi điều khiển

Bài tập nâng cao 7

Chương trình điều khiển hiển thị LED 7 đoạn.

BÀI TẬP 7.1:

Thiết kế chương trình đếm tuần tự liên tục từ 0 đến 9 hiển thị trên LED 7 đoạn bên phải.

BÀI TẬP 7.2

Thiết kế hai chương trình đếm độc lập nhau :

• LED trái hiển thị theo số xung Clock của CPU.• LED phải hiển thị theo số xung phát ra bởi bộ định thời ngắt phần cứng.

62/139

Page 65: Mô phỏng vi điều khiển

Phụ LụcPhụ lục A

Mã ASCII có 128 kí tự chuẩn và hơn 128 mở rộng, chỉ sự chuyển đổi giữa các máy vớinhau, giữa các nước với nhau.

Mã ASCII thay thế cho mã 16 bit với 65536 kí tự mà mỗi kí tự tuơng ứng với các cáchsử dụng.

128 kí tự đầu tiên :

DEC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

HEX 0 1 2 3 4 5 6 7 8 9 A B C D E F

000 00 Nul

016 10

032 20 Spa ! " # $ : & ? ( ) * + , - . /

048 30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

064 40 @ A B C D E F G H I J K L M N O

080 50 P Q R S T U V W X Y Z [ \ ] ^ _

096 60 ` a b c d e f g h y z k l m N o

112 70 p q r s t u v w x y z { | } ~ Nul

Các mã từ 128 đến 255:

Các mã này được sử dụng với DOS, máy in, hoặc màn hình ANSI

0 Nul Kí tự NULL ( kết thúc một chuỗi )

63/139

Page 66: Mô phỏng vi điều khiển

7 Bel Kí tự Bell hoặc Beep

8 Bak Kí tự delete hoặc Backspace

9 Tab Kí tự Tab

10 Lf Lime Feed (bắt đầu một dòng mới)

13 Cr Mã Carriage Return

26 Eof Mã Dos End Of File

27 Esc Mã Escape

32 Spa Kí tự Space

255 Nul Thêm 1 ký tự Null

Chuyển đổi giữa nhị phân và hex :

CPU làm việc với mã nhị phân, có thể tạo ra số nhị phân bằng cách dùng công tắc điềuchỉnh nút ON và OFF, nhị phân gồm số 0 và số 1. Bit đơn hoặc Bit nhị phân đượcchuyển đến CPU. Thông thường dữ liệu gồm 1 byte hay nhiều byte, 1 byte gồm 8 bit.

Ví dụ : 1byte gồm 8 bit chỉ có số 0 và số 1 : 0100 1011

Cách sử dụng hệ thập lục phân trong việc đọc, nói,viết thì không tiện lợi bằng cách sửdụng hệ nhị phân, việc chuyển đổi giữa số nhị phân và số hex thì rất đơn giản, 1 byte sẽđược chia thành hai nhóm, mỗi nhóm gồm 4 bit.

Ví dụ :

Byte 01001011 được chia thành hai hóm bit : 0100 và 1011.

Hệ thống số :

64/139

Page 67: Mô phỏng vi điều khiển

Nhị phân(Binary) Thập lục phân (Hexadecimal) Thập phân (Decimal)

0000 0 0

0001 1 1

0010 2 2

0011 3 3

0100 4 4

0101 5 5

0110 6 6

0111 7 7

1000 8 8

1001 9 9

1010 A 10

1011 B 11

1100 C 12

1101 D 13

1110 E 14

1111 F 15

Ví dụ 1: phân chia 1 byte thành hai :

Kết quả là 4Bhex : 4 B

Ví dụ 2 : chuyển E7 thập phân sang nhị phân

7 ----------------------- 0111

65/139

Page 68: Mô phỏng vi điều khiển

Vậy : E7 -----------------------1110 01112

Bao gồm : lệnh số học, lệnh jump, lệnh move, lệnh compare, lệnh stack, procedures vàinterrupts, lệnh xuất - nhập, và các lệnh khác.

Các thanh ghi của CPU :

Gồm 4 thanh ghi được được dùng cùng một mục đích là AL, BL, CL và DL.

IP là con trỏ lệnh.

SP là con trỏ ngăn xếp.

SR là thanh ghi trạng thái, thanh ghi này gồm các loại cờ : I, S, O và Z.

Các loại cờ :

Dùng để biểu thị ngõ ra của máy tính thông qua CPU. Các bit đơn trong thanh ghi trạngthái được sử dụng làm các cờ. Trong bộ mô phỏng này sử dụng các loại cờ :

Cờ S: là một cờ được đặt vào nếu việc tính toán đưa ra kết quả là(-)

Cờ O: là một cờ tràn, cờ này được đặt vào nếu kết quả đưa ra lớn hơn 8 bit.

Cờ Z : là cờ O, được đặt vào nếu kết quả đưa ra lớn hơn 8 bit.

Cờ I : là việc ngắt phần cứng.

Trên thực tế thì CPU có hơn 4 loại cờ kể trên.

Thanh ghi và các mã máy :

Các loại thanh ghi và các mã máy tương ứng như sau :

66/139

Page 69: Mô phỏng vi điều khiển

Tên thanh ghi : AL BL CL DL

Mã máy : 00 01 02 03

Ví dụ : Cộng 1 vào thanh CL thì sử dụng lệnh như sau :

Mã biên dịch : INC CL

Mã máy hex : A4 02

Nhị phân : 1010 0100 0000 0010

A4 : chỉ lệnh máy đưa đến lệnh INC

02 : chỉ thanh ghi CL

Trong trình biên dịch không có sự linh hoạt, mov thì tương tự như MOV và Mov. Mãthập lục phân không sử dụng hai mức như nhị phân.

Hệ thống số Hex :

Hệ Hex bao gồm các con số như 15, 3C và FF.Khi biên dịch thì có thể chuyển tất cảcác con số thành hệ hex. Các thanh ghi trong CPU thì sử dụng mã nhị phân, hex và thậpphân, do đó cần xem chi tiết việc chuyển đổi qua lại giữa hex và nhị phân.

Hệ thống số âm :

Ví dụ như FE là 1 số (-).

Trong 1 byte thì 4 bit da số các bit bên trái được sử dụng như 1 bit sign, nó có giá trị là-128 . Các byte có thể thay đổi từ -128 đến 127 ( đối với số - ) và từ 0 đến 255

Lệnh chuyển đổi gián tiếp :

Ðược sử dụng khi cần chyển dữ liệu vào trong RAM, lúc đó dấu ngoặc vuông được baongoài dữ liệu cần chuyển.

Ví du :

[15] : chỉ dữ liệu tại địa chỉ 15 hex được chuyển vào RAM. Khi chuyển dữ liệu vàothanh ghi thì cũng sử dụng dấu ngoặc vuông

67/139

Page 70: Mô phỏng vi điều khiển

Ví du? :

[BL] : đưa dữ liệu có trong thanh ghi BL chuyển vào RAM. Việc chuyển đổi này rấtquan trọng và được sử dụng thường xuyên, thay vì đưa trực tiếp dữ liệu hoặc giá trị vàothanh ghi thì chuyển gián tiếp đến RAM. Việc di chuyển này được sử dụng thông quacon trỏ.

So sánh với chip 80X86 :

Ở một mức độ nhớ các lệnh của hệ mô phỏng này thì được xem như các mã nhớ củatrình biên dịch. Các chương trình trở nên thực tế hơn nhờ việc thực hiện các lệnh, nhưnglệnh set thì không thực hiện được. Trong bộ mô phỏng này thì các lệnh sử dụng theoCPU 8 bit, còn các loại CPU còn lại thì không dùng để mô phỏng. Trong phiên bản cáclệnh CALL, RET, INT, RET và việc ngắt phần cứng không qua các thủ tục và việc ngắtthì vẫn có thể thực hiện được.

Người soạn thảo chương trình mong muốn các lệnh trong bộ mô phỏng này tương tựnhư các lệnh trong chip 80X86, lệnh MUL và DIV thì đơn giản hơn chip 80X86. Sự bấtlợi khi tiếp cận bộ mô phỏng là kết quả tạo ra cờ tràn quá nhiều. Việc sử dụng lệnh ADDvà SUB trong bộ mô phỏng này có thể thực hiện được.

Trong 80X86 thì khi tính toán việc sử dụng lệnh DIV bao gồm cả lệnh DIV và MODnhưng trong bộ mô phỏng thì sử dụng hai lệnh đó riêng biệt nhau.

Việc tạo ra mã máy của chip 80X86 và bộ mô phỏng tương tự nhau, hai loại mã máy thìkhác nhau, mã máy của bộ mô phỏng đơn giản và gọn hơn.

Với loại 80X86, thì lệnh MOV AL, 15 gồm hai byte; byte thứ nhất chứa MOV AL còngiá trị 15 đưa vào một byte khác, điều này tạo ra sự khác nhau khi kết nối các lệnh MOVvới các thanh ghi và nó khác nhiều khi sử dụng mã OP.

Bộ mô phỏng này cần 3 byte, MOV sử dụng 1 byte, loại mã OP, AL sử dụng 1 bytecó mã 00. Dữ liệu 15 được đưa vào 1 byte, việc này tuy không hiệu quả nhưng rất đơngiản.

Các lệnh :

68/139

Page 71: Mô phỏng vi điều khiển

? ADD Cộng

? SUD Trừ

? MUL Nhân

? DIV Chia

? MOD Chia lấy phần dư

? AND Và

? OR Hoặc

? XOR So sánh

? INC Tăng lên 1

? DEC Giảm đi 1

? NOT Phủ định

? ROL Xoay các bit qua trái

? ROR Xoay các bit qua phải

? SHL Dịch chuyển các bit qua trái.

? SHR Dịch chuyển các bit qua phải.

Các ví dụ trực tiếp:

Mã biên dịch Mã máy

ADD AL, BL A0 00 01

SUB CL, DL A1 02 03

69/139

Page 72: Mô phỏng vi điều khiển

MUL AL, CL A2 00 02

DIV BL, DL A3 01 03

MOD DL, BL A6 03 01

AND CL, AL AA 02 00

OR CL, DL AB 02 03

XOR BL, AL AC 01 00

Các ví dụ tức thời :

ADD AL, 15 B0 00 15

SUB BL, 05 B1 01 05

MUL AL, 10 B2 00 10

DIV BL, 04 B3 01 04

MOD DL, 20 B6 03 20

AND CL, 55 BA 02 55

OR CL, AA BB 02 AA

XOR BL, FF BC 01 FF

Ví dụ :

ADD CL, AL ; cộng thanh ghi AL và CL sau đó kết quả đưa vào CL

ADD AL, 22 ; cộng 22 vào thanh ghi AL sau đó kết quả đưa vào AL.

Kết quả sau khi thực hiện phép cộng luôn luôn đưa vào thanh ghi đầu tiên.

70/139

Page 73: Mô phỏng vi điều khiển

DEC BL ; giảm 1 trong thanh ghi BL và kết quả đưa vào BL.

Các cờ :

+ Ðặt cờ Z khi kết quả tính toán ra 0.

+ Ðặt cờ S khi kết quả tính toán ra (-).

+ Ðặt cờ O khi kết quả là tràn.

Việc tràn xảy ra khi kết quả việc tính toán lớn hơn số bit đưa vào thanh ghi. Với thanhghi 8 bit thì số lớn nhất có thể là : -128 đến + 127.

Với tập này, không sử dụng các loại cờ như Z, S hoặc O.

+ Tập lệnh : JMP JZ JNZ JS JNS JO JNO

+ Mã máy tương ứng : CO C1 C2 C3 C4 C5 C6

. JMP Jump : lệnh nhảy không có điều kiện.

. JZ Jump Zero : nhảy nếu cờ Z được đặt vào.

. JNZ Jump Not Zoro : nhảy nếu cờ Z không được đặt vào.

. JS Jump Sign : nhảy nếu có cờ Sign.

. JNS Jump Not Sign : nhảy nếu cờ Sign không đặt vào.

. JO Jump Overflow : nhảy nếu có cờ tràn (O) được đặt vào.

. JNO Jump Not Overflow : nhảy nếu cờ tràn (O) không được đặt vào.

? Ví dụ :

JMP HERE ; mã của trình biên dịch

71/139

Page 74: Mô phỏng vi điều khiển

CO ?? ; đây là mã máy tương ứng

; ?? địa chỉ mà người biên dịch cần tính toán

HERE : ; nhãn mà ngưòi biên dịch sử dụng

; khi việc tính toán đã hoàn chỉnh thì nhảy về địa chỉ

Lệnh JMP là một trong tập lệnh của thanh ghi con trỏ, việc tính toán được thựchiện bởi người biên dịch, dùng lệnh này có thể nhảy tới hoặc nhảy về lại trong độ dài+127 đến - 128 đó chính là nguyên nhân tại sao các con số lớn nhất lại có thể được lưutrữ trong 8 bit của vùng nhớ.

Các lệnh Jump khác thì làm việc tương tự, với điều kiện các cờ được đặt vàohoặc không.

HERE : ; một loại nhãn hợp yêu cầu

HERE : : ; không sử dụng được, chỉ cần một dấu hai chấm

1234 : ; không sử dụng được, nhãn phải là ký tự chữ hoặc là dấu "_".

Lệnh Move thực hiện giữa các thanh ghi với nhau .

Dữ liệu được di chuyển từ thanh ghi này đến thanh ghi khác.

Bộ mô phỏng thì không hỗ trợ loại lệnh này.

Cú pháp của lệnh MOV này :

MOV AL, BL

Lệnh này sử dụng gọn hơn việc sử dụng hai dòng lệnh :

PUSH AL

72/139

Page 75: Mô phỏng vi điều khiển

POP BL

Lệnh Move tức thời :

- Sử dụng khi cần di chuyển một số nào đó vào một thanh ghi.

Ví dụ :

Lệnh : MOV BL, 45

Mã máy : DO 01, 45

Trong đó :

DO : mã máy của lệnh MOVE tức thời

01 : thanh ghi BL

45 : số cần chuyển vào thanh ghi BL

Lệnh Move gián tiếp :

Dữ liệu được chuyển đổi giữa các thanh ghi và các vùng nhớ trong RAM.

Dữ liệu được đưa đến từ thanh ghi hoặc từ RAM, các địa chỉ trong RAM sử dụng lệnhnày, ví dụ :

Lệnh : MOV BL, [15]

Mã máy : D1 01 15.

Trong đó :

D1 : mã máy của lệnh move gián tiếp

01 : thanh ghi BL

15 : địa chỉ RAM

Dữ liệu được chuyển từ địa chỉ [15] trong RAM đến thanh ghi BL.

Ðể chuyển dữ liệu từ 1 thanh ghi vào RAM.

Ví dụ :

73/139

Page 76: Mô phỏng vi điều khiển

Lệnh : MOV [13],BL

Mã máy : D2 13 01

Trong đó :

D2 : chỉ mã máy cho một lệnh Move gián tiếp

01 : thanh ghi BL

13 : địa chỉ RAM

Dữ liệu được di chuyển từ thanh ghi BL vào địa chỉ [13] trong RAM.

Lệnh Move gián tiếp dùng trong thanh ghi :

Một thanh ghi thường chứa các dữ liệu cần chuyển, một thanh ghi khác được lưutrữ trong vùng RAM.

Ví dụ :

Lệnh : MOV DL,[AL]

Mã máy : D3 03 00

Trong đó :

D3 : chỉ mã lệnh của lệnh Move gián tiếp dùng trong thanh ghi.

03 : thanh ghi DL

00 : thanh ghi AL

Thanh ghi AL có dữ liệu được chứa trong RAM, dữ liệu được chuyển từ RAMsang thanh ghi DL.

Dữ liệu cũng có thể di chuyển theo một hướng khác, ví dụ như :

Lệnh MOV [DL], AL

Mã máy D4 03 00

Trong đó :

74/139

Page 77: Mô phỏng vi điều khiển

D4 : mã lệnh của thanh ghi sử dụng lệnh Move gián tiếp.

03 : thanh ghi D2

00 : thanh ghi AL

Thanh ghi DL chứa dữ liệu có địa chỉ trong RAM. Dữ liệu được di chuyển từthanh ghi DL vào RAM

- Khi bộ mô phỏng cần so sánh hai giá trị với nhau thì dùng lệnh CMP.

- Lệnh CMP sẽ thực hiện việc so sánh sau khi trừ hai giá trị đó với nhau.

• Nếu hai giá trị bằng nhau, lúc đo phép trừ có kết quả bằng 0, trường hơp nàycờ Z sẽ được đặt vào.

• Nếu số bị trừ nhỏ hơn số trừ, thì sẽ không đặt cờ vào.• Nếu số bị trừ lớn hơn số trừ, kết quả sẽ ra một số (-), trường hợp này cờ sign

sẽ được đặt vào.

- Có thể sử dụng lệnh JS, JS để kiểm tra lại kết quả khi sử dụng lệnh CMP.

Lệnh so sánh hai thanh ghi : sử dụng hai thanh ghi để so sánh .

Ví dụ :

Lệnh CMP Al, BL

Mã máy DA 00, 01

Trong đó :

DA : mã của lệnh so sánh hai thanh ghi.

00 : thanh ghi AL

75/139

Page 78: Mô phỏng vi điều khiển

01 : thanh ghi BL

. Nếu hai thanh ghi có giá trị bằng nhau, thì đặt cờ Z

. Nếu thanh ghi thứ nhất AL có giá trị lớn hơn thanh ghi thứ hai, thì đặt S

. Các trường hợp còn lại thì sẽ không đặt cờ vào.

Lệnh so sánh tức thời : so sánh giữa thanh ghi với một số bất kỳ.

Ví dụ :

Lệnh CMP AL, 0D

Mã máy DB 00, 0D

Trong đó :

DB : chỉ mã của lệnh CMP

00 : thanh ghi AL

0D : con số cần so sánh

. Nếu giá trị của thanh ghi bằng với số cần so sánh, thì đặt cờ Z.

. Nếu thanh ghi có giá trị lớn hơn số thì đặt cờ S.

. Không đặt cờ cho các trường hợp còn lại.

+ Lệnh so sánh gián tiếp : so sánh thanh ghi với một dữ liệu có địa chỉ chứatrong RAM

Ví dụ :

Lệnh CMP CL, [20]

Mã máy DC 02, 20

Trong đó :

DC : mã lệnh.

02 : thanh ghi CL.

76/139

Page 79: Mô phỏng vi điều khiển

20 : dữ liệu có địa chỉ trong RAM cần so sánh với thanh ghi.

- Nếu thanh ghi có giá trị bằng giá trị của con số, thì đặt cờ Z

- Nếu thanh ghi CL có giá trị lớn hơn giá trị của số cần so sánh thì đặt cờ.

- Các trường hợp còn lại thì không đặt cờ.

Các lệnh này không sử dụng việc đặt cờ Z, S hoặc O

Sau khi đưa các dữ liệu vào ngăn xếp, phải đặt đúng theo thứ tự đã bị đa ngược vìngăn xếp làm việc theo quy tắc xử lý ngõ ra cuối cùng trước sau đó mới đến ngõ ra đầutiên ( quy luật LIFO : last in first out ).

Ngăn xếp được sử dụng để :

+ Lưu nội dung của thanh ghi để sau đó khôi phục lại .

+ Ðưa các tham số vào thủ tục sau đó quay về kết quả

Nội dung của thanh ghi được lưu trữ trong ngăn xếp sau đó sẽ được khôi phục lại, ngănxếp làm việc theo nguyên tắc LIFO ( vào sau cùng ra trước hết)

. Lệnh PUSH : được sử dụng để đặt dữ liệu vào ngăn xếp.

. Lệnh POP : được sử dụng để lấy dữ liệu ra khỏi ngăn xếp.

Ví dụ :

1) Lệnh PUSH BL

Mã máy E0 01

Trong đó : E0 : mã máy của lệnh PUSH

77/139

Page 80: Mô phỏng vi điều khiển

01 : thanh ghi BL

2) Lệnh POP BL

Mã máy E1 01

Trong đó :

E1 : mã lệnh POP

01 : thanh ghi BL

Ngăn xếp có thể lưu trữ và khôi phục lại các cờ của thanh ghi.

Ví dụ :

1) Lệnh PUSHF

Mã máy EA

Trong đó :

EA : mã máy của lệnh PUSHF

2) Lệnh POPF

Mã máy EB

Trong đó : EB mã của lệnh POPF

- Sử dụng các thanh ghi sẵn có.

78/139

Page 81: Mô phỏng vi điều khiển

- Không đặt cờ Z, O, S

Các cờ và thanh ghi được lưu bởi các thủ tục hay ngắt và được khôi phục lại sau khi thủtục hay ngắt hoàn thành công việc của nó.

. Sử dụng lệnh PUSH và PUSHF để lưu

. Sử dụng lệnh POP và POPF để phục hồi.

Cách gọi một thủ tục:

Xem ví dụ sau :

Lệnh CALL 30

Mã máy CA 30

CA : mã lệnh CALL

30 : địa chỉ bắt đầu của thủ tục được gọi

Quay trở lại từ một thủ tục :

Lệnh RET

Mã máy CB

Kết thúc một thủ tục thì sử dụng lệnh RET và quay trở về chương trình tới lệnh sau lệnhCALL. Mã máy của lệnh RET là CB.

Cách gọi lệnh Interrup thông thường :

Lệnh INT 03

Mã máy CC 03

CC : mã lệnh của INT, 03 : địa chỉ của vectơ ngắt sử dụng bởi lệnh INT

03 : vectơ ngắt thuộc vùng lưu trữ RAM, đây là địa chỉ bắt đầu của mã ngắt. Chươngtrình nhảy về địa chỉ của mã ngắt và thực hiện việc ngắt.

Quay trở lại từ một lệnh ngắt :

Lệnh IRET

79/139

Page 82: Mô phỏng vi điều khiển

Mã máy CD

Mã ngắt sau cùng là lệnh IRET, quay trở lại chương trình sử dụng lệnh A. Mã máy củalệnh IRET là CD.

Quay trở lại địa chỉ mà chương trình chuyển đến sau khi thực hiện việc ngắt và lưu trongngăn xếp.

Không đặt các cờ Z, S, O

Các port được nối đến bộ mô phỏng và đưa ra ngoài.

IN 00 : đọc từ bàn phím, nhập từ bàn phím

OUT 01 : xuất dữ liệu ra điều khiển đèn giao thông

Ví dụ :

Lệnh IN 00

Mã máy F0 00

FO : mã máy của lệnh IN, dữ liệu được đưa vào từ 1 port

00 : chỉ số port mã dữ liệu xuất ra.

Bộ mô phỏng gồm có các port : 0HEX đến 0FHEX

Lệnh OUT 01

Mã máy F1 01

F0 : mã máy của lệnh OUT, dữ liệu được đưa ra các port

80/139

Page 83: Mô phỏng vi điều khiển

01 : chỉ vị trí của port

Bao gồm : HALT, MOP, CLO, ORG, DB, CLI, STI

Các lệnh này không đặt các cờ Z, S, O

Chú ý :

CLI : lệnh xóa cờ I

SET : lệnh đặt cờ I

? Lệnh HALT : lệnh dừng chương trình

Lệnh HALT

Mã máy 00

00: mã lệnh của HALT

Chương trình sẽ ngừng nếu gặp lệnh HALT, chương trình sẽ chạy lại nếu hủy bỏlệnh này. Bạn có thể sử dụng một vài lệnh HALT trong một chương trình và chỉ sử dụngđúng một lệnh END.

? Lệnh NOP : không làm gì trong một chu kỳ xung

Lệnh NOP

Mã máy FF

FF : chỉ mã của lệnh NOP.

Chương trình sẽ không làm gì cho một chu kỳ xung clock, sau đó chương trìnhsẽ hoạt động trở lại. NOP được sử dụng như một thủ tục delay cho phép giữa các mạchđiện với CPU và khi đó gọi là "trạng thái chờ ".

81/139

Page 84: Mô phỏng vi điều khiển

? Lệnh CLO : đóng tất cả cửa sổ của các chương trình khác.

Lệnh CLO

Mã máy FE

FE : mã lệnh CLO

Chỉ được sử dụng mã này trong bộ mô phỏng, và dùng để đóng các cửa sổ củachương trình khác. Việc này rất cần thiết vì màn hình lúc đó sẽ không có chương trìnhkhác, không tạo ra sự lẫn lộn.

? Lệnh ORG : Mã gốc

Mã được phát sinh từ một địa chỉ bắt đầu lớn hơn 0, việc này thì hữu dụng để đặt cácthủ tục , các ngắt hay bảng dữ liệu tại địa chỉ trong vùng nhớ.

ORG 30

Không có mã máy nào được phát ra nhưng địa chỉ thường đặt ở dữ liệu bắt đầu là 30

? Lệnh DB : định nghĩa biến kiểu byte hay chuỗi

Là một cách tiện lợi khi đưa chuỗi mã ASCII vào vùng nhớ RAM

DB " HELLO"

Mã ASCII của "H,E,L,L,O" được chuyển vào RAM

DB FF

Ðây cũng là một cách để chuyển giá trị Hex vào RAM.

Có thể sử dụng để nhận biết sự kết thúc của chuỗi với mã ZERO, các vectơ ngắtcó thể được chuyển vào cùng với DB. Bảng dữ liệu của mã Hex cũng được tải vào, mãcủa CPU có thể chuyển mô?t cách trực tiếp, nó làm việc tương tự như cách làm việc màngười biên dịch mong muốn.

? Lệnh CLI : xóa cờ I (xóa cờ cho phép ngắt)

Nếu cờ I bị xóa thì phần cứng bị ngắt. Ðây là trạng thái mặc định trong chương trìnhmô phỏng. Khởi động lại CPU thì cờ I vẫn bị xóa, trong thời gian bị ngắt thì phần cứngkhông làm việc.

82/139

Page 85: Mô phỏng vi điều khiển

? Lệnh STI : thiết lập cờ I (lập cờ cho phép ngắt)

Nếu như cờ I được thiết lập thì bộ mô phỏng sẽ tạo ra lệnh INT 02 tại khoảng thời gianbình thường,việc này rất cần thiết khi có vector ngắt được lưu tại địa chỉ 02 mà chỉ đếnmã điều khiển ngắt ở nơi khác. Nếu việc ngắt xuất hiện nhanh hơn việc xử lý thì việcphá huỷ hệ thống mô phỏng sẽ xảy ra. Ðiều chỉnh tốc độ xung clock CPU và khoảngthời gian để ngăn ngừa trường hợp này.

Dec Hex Dec Hex Dec Hex Dec Hex

-128 80 -127 81 -126 82 -125 83

-124 84 -123 85 -122 86 -121 87

-120 88 -119 89 -118 8A -117 8B

-116 8C -115 8D -114 8E -113 8F

-112 90 -111 91 -110 92 -109 93

-108 94 -107 95 -106 96 -105 97

-104 98 -103 99 -102 9A -101 9B

-100 9C -099 9D -098 9E -097 9F

-096 A0 -095 A1 -094 A2 -093 A3

-092 A4 -091 A5 -090 A6 -089 A7

-088 A8 -087 A9 -086 AA -085 AB

-084 AC -083 AD -082 AE -081 AF

83/139

Page 86: Mô phỏng vi điều khiển

-080 B0 -079 B1 -078 B2 -077 B3

-076 B4 -075 B5 -074 B6 -073 B7

-072 B8 -071 B9 -070 BA -069 BB

-068 BC -067 BD -066 BE -065 BF

-064 C0 -063 C1 -062 C2 -061 C3

-060 C4 -059 C5 -058 C6 -057 C7

-056 C8 -055 C9 -054 CA -053 CB

-052 CC -051 CD -050 CE -049 CF

-048 D0 -047 D1 -046 D2 -045 C3

-044 D4 -043 D5 -042 D6 -041 D7

-040 D8 -039 D9 -038 DA -037 DB

-036 DC -035 DD -034 DE -033 DF

-032 E0 -031 E1 -030 E2 -029 E3

-028 E4 -027 E5 -026 E6 -025 E7

-024 E8 -023 E9 -022 EA -021 EB

-020 EC -019 ED -018 EE -017 EF

-016 F0 -015 F1 -014 F2 -013 F3

-012 F4 -011 F5 -010 F6 -009 F7

-008 F8 -007 F9 -006 FA -005 FB

-004 FC -003 FD -002 FE -001 FF

84/139

Page 87: Mô phỏng vi điều khiển

Dec Hex Dec Hex Dec Hex Dec Hex

+000 00 +001 01 +002 02 +00303

+004 04 +005 05 +006 06 +007 07

+008 08 +009 09 +010 0A +011 0B

+012 0C +013 0D +014 0E +015 0F

+016 10 +017 11 +018 12 +019 13

+020 14 +021 15 +022 16 +023 17

+024 18 +025 19 +026 1A +027 1B

+028 1C +029 1D +030 1E +031 1F

+032 20 +033 21 +034 22 +035 23

+036 24 +037 25 +038 26 +039 27

+040 28 +041 29 +042 2A +0432B

+044 2C +045 2D +046 2E +047 2F

+048 30 +049 31 +050 32 +051 33

+052 34 +053 35 +054 36 +055 37

+056 38 +057 39 +058 3A +059 3B

+060 3C +061 3D +062 3E +063 3F

+064 40 +065 41 +066 42 +067 43

85/139

Page 88: Mô phỏng vi điều khiển

+068 44 +069 45 +070 46 +071 47

+072 48 +073 49 +074 4A +075 4B

+076 4C +077 4D +078 4E +079 4F

+080 50 +081 51 +082 52 +083 53

+084 54 +085 55 +086 56 +087 57

+088 58 +089 59 +090 5A +091 5B

+092 5C +093 5D +094 5E +095 5F

+096 60 +097 61 +098 62 +099 63

+100 64 +101 65 +102 66 +103 67

+104 68 +105 69 +106 6A +107 6B

+108 6C +109 6D +110 6E +111 6F

+112 70 +113 71 +114 72 +115 73

+116 74 +117 75 +118 76 +119 77

+120 78 +121 79 +122 7A +123 7B

+124 7C +125 7D +126 7E +127 7F

86/139

Page 89: Mô phỏng vi điều khiển

Phụ lục B

Giải các bài tập củng cố

BÀI TẬP SỐ 1:

1.1/ Viết chương trình sử dụng lệnh SUB

Tương tự chương trình trên nhưng ta sử dụng lệnh SUB thay cho lệnh ADD để trừ 2 sốvà kết quả được lưu vào thanh ghi AL.

; chương trình trừ 2 số Hex

CLO

MOV AL,2

MOV BL,2

SUB AL, BL

END ; kết thúc chương trình .

1.2/ Viết chương trình sử dụng lệnh MUL

Tương tự chương trình trên nhưng ta sử dụng lệnh MUL để nhân 2 số và kết quả đượclưu vào thanh ghi AL

; chương trình nhân 2 số Hex

CLO

MOV AL,2

MOV BL,2

MUL AL, BL

END ; kết thúc chương trình .

87/139

Page 90: Mô phỏng vi điều khiển

1.3/ Viết chương trình chia 2 số sử dụng lệnh DIV

; chương trình chia 2 số Hex

CLO

MOV AL,2

MOV BL,2

DIV AL, BL

END ; kết thúc chương trình .

1.4/ Viết chương trình chia cho 0

; chương trình chia cho 0

MOV AL,10

MOV BL,0

DIV AL,BL

BÀI TẬP SỐ 2:

Sử dụng help page trong số Hex và số nhị phân. Tìm ra những số Hex sẽ làm hoạt độngcủa đèn thay đổi. Từ đó hãy sửa đổi chương trình của đèn giao thông để hoạt động theotrình tự trong thực tế.

Giảng giải:

Ðể thực hiện chương trình . ta phải xem các bit nào làm cho đèn sáng theo trình tự thựctế thì cho lên 1, các bit còn lại bằng 0, 2 bit LSB không sử dụng thì cho bằng 0. Từ đótìm ra số Hex tương ứng để viết chương trình .

88/139

Page 91: Mô phỏng vi điều khiển

; chương trình điều khiển đèn giao thông thực tế

CLO ; đóng tất cả các cửa sổ không cần thiết

Start :

MOV AL, 84 ; chuyển 84h vào thanh ghi AL

OUT 01 ; xuất ra port 1

MOV AL, 88 ; chuyển 88h vào thanh ghi AL

OUT 01 ; xuất ra port 1

MOV AL,30 ; chuyển 30h vào thanh ghi AL

OUT 01 ; xuất ra port 1

MOV AL,50 ; chuyển 50h vào thanh ghi AL

OUT 01 ; xuất ra port1

JMP Start ; nhảy về nhãn Start để thực hiện lại

END ; kết thúc chương trình

BÀI TẬP SỐ 3:

Viết chương trình hiển thị chữ HELLO.

Hãy tra bảng mã ASCII của các mẫu tự H,E,L,L,O và copy những giá trị này vào bộnhớ C0, C1,C2,C3,C4. Ðây là việc đơn giản và có phần thô trong việc hiển thị văn bản,trong việc sắp xếp bộ nhớ để hiển thị.

Giảng giải:

Ðể viết chương trình trên, đầu tiên ta phải tra cứu mã ASCII của các mẫu tự H,E,L,L,Ovà đưa các mã ASCII đến địa chỉ RAM [C0],[C1],[C2],[C3], [C4]. Chạy chương trìnhvà xem văn bản xuất hiện như thế nào trong việc mô phỏng trên màn hình hiển thị VDU.Ðiều này là những gì xãy ra trong PC của IBM khi đang chạy trong hệ điều hành MSDOS.

89/139

Page 92: Mô phỏng vi điều khiển

Bạn nên làm bài tập này và nếu bạn đang học lập trình ngôn ngữ thấp thì bạn sẽ học cóhiệu quả hơn và có nhiều cách linh động hơn để giải quyết vấn đề.

Chương trình :

CLO ; đóng các cửa sổ không cần thiết

Start:

MOV AL,48 ; đưa 48 vào thanh ghi AL

MOV [C0], AL ; đưa dữ liệu trong AL ra màn hình

MOV AL,45

MOV [C1],AL

MOV AL,4C

MOV [C2],Al

MOV AL,4C

MOV [C3],AL

MOV AL,4F

MOV [C4],AL

END. ; kết thúc chương trình

BÀI TẬP SỐ 4:

4.1/ Viết chương trình đếm lùi lại sử dụng DEC BL.

; chương trình đếm lùi

MOV BL, 40

Rep :

DEC BL ; giảm BL xuống 1

90/139

Page 93: Mô phỏng vi điều khiển

JMP Rep

END

4.2/ Viết chương trình đếm lên 3 sử dụng lệnh Add BL,3

; chương trình đếm lên 3

MOV BL, 40

Rep :

Add BL,3 ; cộng thêm 3 vào BL

JMP Rep

END

4.3/ Viết chương trình đếm 1,2,4,8,16 sử dụng lệnh MUL BL,2

; chương trình đếm 1, 2, 4, 8, 16

MOV BL,01

Rep :

MUL BL,2 ; nhân 2 vào BL

JMP Rep

END

4.4/Viết chương trình đếm theo dãy số sau 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, tràn bộnhớ .

; Ðếm theo dãy số trên kết quả hiển thị trên ô nhớ [40] và [70] trên RAM MOVAL,0 ; Giá trị khởi điểm thứ nhất lưu trong AL MOV BL,1 ; Giá trị khởi điểmthứ hai lưu trong BLRep: MOV [70],AL MOV [40],BL ADD AL,BL

91/139

Page 94: Mô phỏng vi điều khiển

ADD BL,AL JMP Rep ; Lặp lại phép cộngEND ; _____ Kếtthúc chương trình________________________________________

BÀI TẬP SỐ 5

5.1/ Viết chương trình hiển thị mỗi ký tự tại vị trí đầu bên trái của màn hình VDU bằngviệc copy tất cả chúng tới địa chỉ [C0]

Thí dụ ta muốn đưa chữ H ra vị trí đầu bên trái màn hình VDU thì ta phải tra mã ASCIIcủa chữ H và mov vào thanh ghi AL, rồi từ đó copy vào [CO]

Chương trình:

CLO

START :

MOV AL, 48

MOV [C0], AL

END

5.2/ Viết chương trình sử dụng thanh ghi BL để chỉ tới địa[C0] và tăng BL sau mỗi lầnphím nhấn theo thứ tự để thấy được văn bản bạn gõ.

Chương trình:

;Chương trình hiện chữ khi nhấn, nhấn Enter kết thúc chương trình

MOV BL,C0

Start:

IN 00

CMP AL,0D

JZ Stop

92/139

Page 95: Mô phỏng vi điều khiển

MOV [BL],AL

INC BL

JMP Start

Stop:

END

5.3/ Viết chương trình nhập mã số để mở máy với yêu cầu cụ thể như sau: khichương trình đã khởi động muốn thoát khỏi chương trình phải tuần tự gỏ đúng thứ tựba chữ cái A,N,H (đúng cã thứ tự); nếu gỏ sai chương cứ chạy lẩn quẩn không thoát rađược.

; Nhập phím nhấn từ bàn phím cho đến khi phím enter được nhấn ------------

CLO

Rep :

IN 00 ;Kiểm tra có phải chữ A không?

CMP AL,0D

JNZ Rep

IN 00 ; Có phải chữ N không?

CMP AL,0D

JNZ Rep

IN 00 ; Có phải chữ H không?

CMP AL,0D

JNZ Rep

93/139

Page 96: Mô phỏng vi điều khiển

; Nếu đúng là ba chữ A,N,H nhập theo thứ tự thì thoát khỏi chương trình

END

BÀI TẬP SỐ 6:

Viết chương trình đèn giao thông và sử dụng thủ tục này để thiết lập thời gian trì hoãngiống thực tế.

Ðể hiển thị đèn giao thông đúng thực tế ta cho Ðỏ: 10s, Xanh: 8s, Vàng 2s.

;chương trình hiển thị đèn giao thông theo thực tế

CLO

Start:

MOV AL,84 ;đỏ 1 + xanh 2

OUT 01 ;xuất ra port 1

MOV AL,8 ;trì hoãn 8s

CALL 30 ;gọi thủ tục tại địa chỉ [30]

MOV AL,88 ;đỏ 1 + vàng 2

OUT 01

MOV AL,2 ;trì hoãn 2s

CALL 30

MOV AL,30 ;xanh 1 + đỏ 2

OUT 01

94/139

Page 97: Mô phỏng vi điều khiển

MOV AL,8 ;trì hoãn 8s

CALL 30

MOV AL,50 ;vàng 1 + đỏ 2

OUT 01

MOV AL,2 ;trì hoãn 2s

CALL 30

JMP Start ;nhảy về nhãn Start

;thủ tục trì hoãn được lưu ở địa chỉ [30]

ORG 30

PUSH AL

PUSHF

Rep:

DEC AL

JNZ REP

POPF

POP AL

RET

END

BÀI TẬP SỐ 7:7.1/ Viết một chương trình sử dụng 3 thủ tục. Bao gồm thủ tục đọc vănbản từ bàn phím và cất vào RAM, thủ tục thứ 2 nên chuyển đổi trường hợp các ký tựchữ hoa trong văn bản thành chữ thường. Thủ tục 3 nên hiển thị văn bản trên màn hìnhVDU.

95/139

Page 98: Mô phỏng vi điều khiển

; --------------------------------------------------------------; Chương trình chính

MOV BL,70 ; [70]là địa chỉ mã ASCII của ký tự đầu tiên trên VDU.CALL10 ; goi? thủ tục nhập chuỗi ký tựCALL 90 ; goi? thủ tục chuyểnchữ thường thành chữ hoa CALL 40 ; goi? thủ tục hiển thị chuỗi ký tự trênVDUHALT ; không được dùng END tại đây; --------------------------------------------------------------; goi thủ tục nhập chuỗi ký tựORG 10 ; khởi đầu thủ tục tạiđịa chỉ [10]PUSH AL ; lưu trữ trạng thái thanh ghiPUSH BL PUSHF Rep:IN00 ; nhập ký tự từ bàn phímCMP AL,0D ; có phải phím Enter không?JZStop ; nếu phải nhảy đến StopMOV [BL],AL ; Nhập phím nhấn vào RAMtại ô nhớ được chỉ ra bởi BLINC BL ; BL chỉ ra vị trí kế tiếp mà ký tự sẽnhập vàoJMP Rep ; Nhảy về Rep ( chuẩn bị nhập phím kế tiếp)Stop:MOVAL,0 ; Nhập khoảng trắngMOV [BL],AL POPF ; phục hồi trạngthái thanh ghiPOP BL POP AL RET ; kết thúc thủ tục; --------------------------------------------------------------; CHUYỂN CHỮ THƯỜNG THÀNH CHỮ HOAORG90 PUSH AL PUSH BL PUSHFCHUYEN:MOV AL,[BL] ; Có ký tựnào nhập và tại ô nhớ [BL]?

CMP AL,0 ; nếu không thoát ra NGUNGJZ NGUNGSUBAL,20 ;nếu có, chuyển sang chữ hoaMOV [BL],ALINC BLJMPCHUYENNGUNG: POPF ; khôi phục trạng thái thanh ghi POPBL POP ALRET;---------------------------------------------------------------; THỦ TỤCHIỂN THỊ KÝ TỰ TRÊN MÀN HÌNHORG 40 ; HERE:MOV CL,C0 ; XEM CHÚGIẢI Ở BÀI TẬP 7 MOV BL,70 START: MOV AL,[BL] CMPAL,0 JZ END1 MOV [CL],AL INC CL INCBL JMP START END1: ; --------------------------------------------------------------END

BÀI TẬP SỐ :8.1/ Sử dụng bảng dữ liệu viết chương trình điều khiển đèn giao thôngtheo thực tế. Ta phải tìm số nhị phân nào làm cho đèn sáng tương ứng và sau đó đổi quasố hex

Ta có thể quy ước :

Ðỏ 1 - Xanh 2 sáng : 1000 0100

Ðỏ 1 - Vàng 2 sáng : 1000 1000

Xanh 1 - Ðỏ 2 sáng : 0011 0000

Vàng 1 - Ðỏ 2 sáng : 0101 0000

96/139

Page 99: Mô phỏng vi điều khiển

Chương trình:

;đèn giao thông sáng theo thực tế

JMP Start

DB 84

DB 88

DB 30

DB 50

Start:

MOV BL,02

Rep:

MOV AL,[BL]

OUT 01

CMP AL,50

JZ Start

INC BL

JMB Rep

END

8.2/ Viết chương trình điều khiển động cơ bước chạy bước

;động cơ bước chay bước

JMP START

97/139

Page 100: Mô phỏng vi điều khiển

DB 1

DB 3

DB 2

DB 6

DB 4

DB 0C

DB 8

DB 9

START:

MOV BL,02

REP:

MOV AL,[BL]

OUT 05

CMP AL,9

JZ STOP

INC BL

JMP REP

STOP:

END

BÀI TẬP SỐ 9:

9.1/Viết thủ tục nhân đôi một số, cứ một tham số trong thủ tục thì sử dụng 1thanh ghi. Sử dụng cùng thanh ghi để quay trở về lại kết quả.

98/139

Page 101: Mô phỏng vi điều khiển

; Nhảy qua bảng thông số ----------------------------------------------------

JMP Start

DB 00

DB 00

Start:

MOV AL,5 ;giữ 1 byte của RAM tại địa chỉ 02

MOV BL,2 ;giữ 1 byte của RAM tại địa chỉ 03

CALL 30 ;gọi thủ tục nhân đôi

;Thủ tục nhân đôi một số ------------------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng AL và BL

;Kết quả đưa vào AL

ORG 30 ;bắt đầu tại địa chỉ 30

MUL AL,BL ;nhân AL với 2, kết quả lưu trong AL

RET ;kết thúc chương trình con, quay trở về từ thủ tục

END ;kết thúc chương trình

;-----------------------------------------------------------------------------------

9.2/ Viết thủ tục đảo tất cả các bit trong byte (tất cả số 0 thành 1, số 1 thành 0).Chuyển giá trị được xử lý vào thủ tục bằng cách sử dụng vị trí RAM. Quay trở về kếtquả trong cùng vị trí RAM.

; Nhảy qua bảng thông số ----------------------------------------------------

JMP Start

DB 00

99/139

Page 102: Mô phỏng vi điều khiển

Start:

;sử dụng vị trí RAM để đưa các tham số vào trong 1 thủ tục

MOV AL,3

MOV [02],AL

CALL 40 ;gọi thủ tục đảo dấu

;Thủ tục đảo tất cã các bit ---------------------------------------------------

;Các tham số thông qua trong thủ tục sử dụng vị trí RAM

;Kết quả lưu vào vị trí RAM

ORG 40 ;bắt đầu tại địa chỉ 40

PUSH CL ;lưu các thanh ghi và các cờ vào ngăn xếp

PUSHF

MOV CL,[02] ;tìm nạp tham số từ RAM

NOT CL

POPF ;khôi phục lại thanh ghi ban đầu và giá trị cờ

POP CL

RET ;kết thúc chương trình con

END ;kết thúc chương trình

;-----------------------------------------------------------------------------------

BÀI TẬP SỐ 10:

Viết một chương trình ngắt nạp phím nhấn và lưu vào RAM.

; --------------------------------------------------------------; Ngắt mềm

100/139

Page 103: Mô phỏng vi điều khiển

;---------------------------------------------------------------Jmp Start ; nhảy qua bảng dữliệu của ảng vector ngắtDB 51 ; vector tại ô nhớ 02 chỉ tới địa chỉ 51Start:INT02 ; ngắt 02; --------------------------------------------------------------ORG 50DB 70;----------------------------------------------------------------; Nhập văn bảng vào từ bàn phím,việc nhập kết thúc khi nhấn ENTER.; ----------------------------------------------------------------MOV BL,C0 ; định địa chỉ sẽ hiển thị trên VDU (góc trái màn hình)Start1:IN00 ; Nhập từ bàn phím vào thanh ghi AL.CMP AL,0D ; Có phải phímENTER ? JZ Stop ; Nếu phải thì nhảy về Stop.MOV [BL],AL ; Chuyển ký tựvừa nhập trong AL vào VDU ở ; địa chỉ mà BL chỉ đếnINC BL ;BL chỉ ra vị trí kế tiếp trên VDU.JMP Start ; Trở về lại nhãn start.Stop:IRETEND

BÀI TẬP 11

1/ Viết chương trình kiểm tra bộ định thời tạo xung ngắt trong chương trình môphỏng. ; --------------------------------------------------------------; Chương trình minh hoạ sựtác động của bộ định thời tạo tín hiệu ngắt cứng

; Trong Configuration Tab, khoảng thời gian là 5 ; nghĩa là sau mỗi 5 giây sẽ có mộtlệnh INT02 được gọi từ bộ định thời phần

; cứng tác động lên chương trình Jmp StartDB40Start:STIRep:NOPNOPNOPNOPNOPNOPJMP RepORG40NOPNOPNOPNOPNOPNOPIRETEND

2/Dùng lệnh CLI và STI để kiểm tra sự tác động của ngắt cứng lên CPu trong chươngtrình mô phỏng.

; --------------------------------------------------------------; Sử dụng lệnh CLI và STI để xoávà đặt cờ I

; Chương trình kiểm tra chức năng của ngắt cứng 02; --------------------------------------------------------------JMP StartDB 40 ; Vector ngắt tại địa chỉ02Start:nopnopnopclinopnopnopstijmp Start; --------------------------------------------------------------org 40NOPNOPNOPNOPNOPIRET; --------------------------------------------------------------end

;---------------------------------------------------------------

3/Viết chương trình điều khiển đồng thời đèn giao thông khi về khuya (chỉ có đèn vàngở mỗi cột nhấp nháy) cùng mạch đếm từ 0 đến 9 lập đi lập lại nhiều lần, hiển thị kết quả

101/139

Page 104: Mô phỏng vi điều khiển

trên một led 7 đoạn. Nếu bạn muốn phần cứng đếm từ 00 đến 99 thì sử dụng cả 2 ledhiển thị cùng một lúc.

; --------------------------------------------------------------Jmp Start ; nhảy qua bảng dữliệuDB 50 ; vec tơ ngắt cứngDB FA ; Bảng dữ liệu bắt đầu ở địa chỉ [03]DB 0ADBB6DB 9EDB 4EDB DCDB FCDB 8ADB FEDB CE ; dữ liệu cuối cùng trong bảng.DB03 ; Ðịa chỉ bắt đầu của bảng dữ liệu; --------------------------------------------------------------Start:STI ; Cho phép ngắt cứng tác động

Mov BL,03 ; BL chứa địa chỉ khởi đầu của bảng dữ liệuRep:MOV AL,[BL] ; chuyểndữ liệu từ bảng vào ALOUT 02 ; hiển thị LED

CMP AL,CE ; Có phải cuối bảng chưaJZ Start ; Nếu cuối, nhảy đến StartINCBL ; vị trí kế tiếp của bảngJMP Rep ; Nhảy trở về và thực hiện với consố kế tiếpJMP Start; --------------------------------------------------------------ORG 50push al;lưu trữ trạng thái thanh ghipush bl ;pushf ; Jmp PastDataDB 40 ; vàng trái sángDB08 ; vàng phải sángDB 57 ; qua bảngPastData:MOV BL,[59] ; BL chỉ đến bảngdữ liệuMOV AL,[BL] ; chuyển dữ liệu từ bảng vào ALOUT 01 ;hiển thị đèn giao thôngCMP AL,08 ; Có phải dữ liệu cuối cùng của bảngJZReset ; Nếu cuối, đến ResetINC BL ; BL chỉ đến vị trí kếtiếpMOV [59],BL ; Lưu giá trị con trỏ lệnh vào RAMJMP StopReset:MOVBL,57 ; Ðến địa ch3 khởi điểm của bản dữ liệuMOV [59],BL ; Lưu con trỏlệnh vào ô nhớ 54 trên RAM Stop:popf ; phục nguyên trang thái thanhghipop bl pop al IRET; --------------------------------------------------------------END; --------------------------------------------------------------

Lời giải phần bài tập tổng hợp

BÀI TẬP 1.1

Ứng dụng vòng lập.

CLO ; --------------------------------------------------------

Start: MOV AL,84 OUT 01

LOOP1:

INC AL CMP AL,8a JNZ LOOP1 MOVAL,88 OUT 01LOOP2:

102/139

Page 105: Mô phỏng vi điều khiển

INC AL CMP AL,8a JNZ LOOP2 MOVAL,30 OUT 01LOOP3:

INC AL CMP AL,39 JNZ LOOP3 MOVAL,50 OUT 01LOOP4:

INC AL CMP AL,53 JNZ LOOP4 JMP StartEND

;-----------------------------------------------------------------------------------

BÀI TẬP 1.2:

Sử dụng thủ tục định thời.

;chương trình hiển thị đèn giao thông

CLO

Start:

MOV AL,84 ;đỏ 1 + xanh 2

OUT 01 ;xuất ra port 1

MOV AL,8 ;trì hoãn 8s

CALL 30 ;gọi thủ tục tại địa chỉ [30]

MOV AL,88 ;đỏ 1 + vàng 2

OUT 01

MOV AL,2 ;trì hoãn 2s

CALL 30

MOV AL,30 ;xanh 1 + đỏ 2

OUT 01

MOV AL,8 ;trì hoãn 8s

103/139

Page 106: Mô phỏng vi điều khiển

CALL 30

MOV AL,50 ;vàng 1 + đỏ 2

OUT 01

MOV AL,2 ;trì hoãn 2s

CALL 30

JMP Start ;nhảy về nhãn Start

;thủ tục trì hoãn được lưu ở địa chỉ [30]

ORG 30

PUSH AL

PUSHF

Rep:

DEC AL

JNZ REP

POPF

POP AL

RET

END

;------------------------------------------------------------------------------

BÀI TẬP 1.3:

Sử dụng bảng dữ liệu.

Ta có thể quy ước :

104/139

Page 107: Mô phỏng vi điều khiển

Ðỏ 1 - Xanh 2 sáng : 1000 0100

Ðỏ 1 - Vàng 2 sáng : 1000 1000

Xanh 1 - Ðỏ 2 sáng : 0011 0000

Vàng 1 - Ðỏ 2 sáng : 0101 0000

Chương trình:

JMP Start

DB 84

DB 88

DB 30

DB 50

Start:

MOV BL,02

Rep:

MOV AL,[BL]

OUT 01

CMP AL,50

JZ Start

INC BL

JMP Rep

END

BÀI TẬP 2.2:

105/139

Page 108: Mô phỏng vi điều khiển

;GHI VÀO MÀN HÌNH VDU---------------------------------------------

CLO ;đóng các cửa sổ khác lại

JMP HERE ;nhảy qua bảng dữ liệu

DB "HELLO WORLD" ;nạp chuỗi ký tự vào RAM

DB 0 ;kết thúc chuỗi ký tự hiển thị đoạn văn bản

HERE:

MOV CL,C0 ;định ra địa chỉ đầu tiên trên màn hình

MOV BL,03 ;địa chỉ bắt đầu của đoạn văn bản

START:

MOV AL,[BL] ;đưa ký tự trong chuỗi vào AL

CMP AL,0 ;kết thúc chuỗi ký tự chưa?

JZ END ;nếu đã kết thúc nhảy ra khỏi vòng lặp đến END

MOV CL,[AL] ;nếu chưa kết thúc lưu ký tự vừa hiển thị vào VDU

INC CL ;định ra vị trí kế cận ký tự vừa hiển thị xong

INC BL ;đưa ký tự kế tiếp trong chuỗi vào BL

JMP START ;trở về start

END1:

; ----- XOÁ MÀN HÌNH VDU ----------------------------------- MOV CL,C0;định ra địa chỉ đầu tiên trên màn hình VDU MOV BL,0C ; địa chỉ bắt đầuxoá

MOV AL,20 ; chèn khoảng trốngREP: MOV [CL],AL ; Xoá từngchữ

INC CL DEC BL ; Giảm dần BL JNZ REP ; thoátkhi xoá hoàn tất JMP HERE ; trở về lại từ đầu; -------------------------------------------------------------- END; --------------------------------------------------------------

106/139

Page 109: Mô phỏng vi điều khiển

BÀI TẬP 3.1:

Viết chương trình điều khiển động cơ bước quay thuận với mỗi bươc quay là 5 độ (quay1/2 bước).

Start :

MOV AL,1

OUT 05

MOV AL,3

OUT 05

MOV AL,2

OUT 05

MOV AL,06

OUT 05

MOV AL,04

OUT 05

MOV AL,0C

OUT 05

MOV 08

OUT 05

MOV AL,09

OUT 05

JMP Start

END?

107/139

Page 110: Mô phỏng vi điều khiển

Chương trình sẽ ngắn hơn khi sử dụng bảng dữ liệu.

BÀI TẬP 3.2:

Viết chương trình điều khiển động cơ bước quay thuận 90 độ; nghịch 35 độ sau đó dừnglại.

Giải tương tự như bài 3.1 nhưng dừng ở 1/2 bước cuối lúc quay nghịch 35 độ.

BÀI TẬP 4.1:

Ở đây ta sử dụng port 04, gửi giá trị FF đến thanh ghi AL để xác lập lại rắn. Lên,xuống bên trái và bên phải được điều khiển bởi 4 bit trái. Bốn bit phải điều khiển quãngđường di chuyển.

Chương trình:

ORG 30 ;bảng dữ liệu để rắn chạy trong ma trận: thiết bị lái

DB 4F ;xuống 0B

DB 1D ;phải 3

DB 8B ;lên 8

DB 1D ;phải 3

DB 4E ;xuống 6

DB 1E ;phải 3

DB 8E ;lên 9

DB 2F ;trái 5

DB 8C ;lên 3

DB 1F ;phải 8

DB 4E ;xuống 0C

108/139

Page 111: Mô phỏng vi điều khiển

ORG 40 ;bảng dữ liệu để rắn chạy trong ;ma trận: khoảng cách

DB 0B ;xuống 0B

DB 3 ;phải 3

DB 8 ;lên 8

DB 3 ;phải 3

DB 6 ;xuống 6

DB 3 ;phải 3

DB 9 ;lên 9

DB 5 ;trái 5

DB 3 ;lên 3

DB 8 ;phải 8

DB 0C ;xuống 0C

START:

MOV AL,FF

OUT 04

MOV CL,30

MOV DL,40

MORE:

MOV AL,[CL]

MOV BL,[DL]

CMP AL,0

JZ START

109/139

Page 112: Mô phỏng vi điều khiển

REP:

OUT 04

DEC BL

JNZ REP

INC CL

INC DL

JMP MORE

END

BÀI TẬP 4.2

Gợi ý lập trình tương tự bài tập 11.3, thay thế hai chương trình thành phần bằngchương trình điều khiển rắn trong mê cung và đóng điên lò sấy.

BÀI TẬP 5

Hãy viết chương trình đều khển thang máy theo các nút nhấn lên xuống có tronggiao diện phần cứng ở port 06.

;Chương trình điều khiển thang máy

MOV AL,0

OUT 06

LOOP:

IN 06 ;kiểm tra thang máy tại đỉnh hầm thang máy

PUSH AL

110/139

Page 113: Mô phỏng vi điều khiển

POP BL

AND BL,5 ;kiểm tra động cơ và nút nhấn đi lên

CMP BL,5

JZ StopTop

IN 06 ;kiểm tra vị trí dưới hầm thang máy

PUSH AL

POP BL

AND BL,A ;kiểm tra động cơ và công tắc nhấn đi xuống

CMP BL,A

JZ StopBot

PUSH AL

POP BL

AND BL,10 ; kiểm tra nút gọi xuống

JNZ CallDown

PUSH AL

POP BL

AND BL,20 ; kiểm tra nút gọi lên

JNZ CallUp

JMP LOOP

111/139

Page 114: Mô phỏng vi điều khiển

StopTop:

AND AL,DE ; ngừng môtơ và nút gọi

OUT 06

JMP LOOP

StopBot:

AND AL,ED ;ngừng môtơ và nút gọi

OUT 06

JMP LOOP

CallDown:

IN 06 ;thang máy đã sẵn sàng đi xuống chưa?

AND AL,8

CMP AL,8

JZ errDown ;không khởi động môtơ

MOV AL,12

OUT 06

JMP LOOP

errDown:

MOV AL,0

OUT 06

JMP LOOP

CallUp:

IN 06 ; thang máy đã sẵn sàng đi lên chưa?

112/139

Page 115: Mô phỏng vi điều khiển

AND AL,4

CMP AL,4

JZ errUp ; không khởi động môtơ

MOV AL,21

OUT 06

JMP LOOP

errUp:

MOV AL,0

OUT 06

JMP LOOP

END

BÀI TẬP 6

Hãy viết chương trình không chế nhiệt độ lò sấy theo nguyên lý so sánh cửa sổ đểnhiệt độ lò được không chế ở 20 độ C.

;Chương trình bật tắt lò sấy

MOV BL,80

PUSH BL

Main:

POP AL

XOR AL,80

PUSH AL

OUT 03 ; gởi dữ liệu đến lò sấy

113/139

Page 116: Mô phỏng vi điều khiển

MOV AL,30 ; trì hoãn 30 lần

CALL 90 ; gọi thủ tục trì hoãn

;----------------------------------------------------------------------------------------

;chạy vòng lập này 20 lần

MOV CL,20 ;coi thanh ghi CL như một bộ đếm

Bang:

DEC CL

JZ Main

IN 03

CMP AL,80

JZ turnOn

CMP AL,81

JZ turnOff

CMP AL,0

JZ turnOn

turnOff:

MOV AL,0

OUT 03

JMP Bang

turnOn:

MOV AL,80

OUT 03

114/139

Page 117: Mô phỏng vi điều khiển

JMP Bang

;-------------------------------------------------------------------------------------

ORG 90 ; thời gian trì hoãn được định bởi giá trị trong AL

PUSH AL

delay:

DEC AL

JNZ delay

POP AL

RET

;--------------------------------------------------------------------------------------

END

BÀI TẬP 7.1:

Thiết kế chương trình đếm tuần tự liên tục từ 0 đến 9 hiển thị trên LED 7 đoạn bên phải.

BÀI TẬP 7.2

Thiết kế hai chương trình đếm độc lập nhau :

• LED trái hiển thị theo số xung Clock của CPU.• LED phải hiển thị theo số xung phát ra bởi bộ định thời ngắt phần cứng.

; Chương trình hiển thị Led 7 đoạn

Jmp Start ; Nhay qua bang du lieu.

DB 30 ; Vector dinh thoi ngat phan cung

115/139

Page 118: Mô phỏng vi điều khiển

; chi toi ma tai [30]

DB FA ; Bang du lieu bat dau tai dia chi[03]

DB 0A

DB B6

DB 9E

DB 4E

DB DC

DB FC

DB 8A

DB FE

DB CE ; nhap du lieu cuoi vao.

DB 03 ; vi tri RAM nay chi toi bang du lieu Location points to thedata

; ma ngat su dung dia chi nay de kiem tra viec no thuc hiensuot

; bang du lieu .

; --------------------------------------------------------------

; CHUONG TRINH CHINH

Start:

STI ; Cho phep cac ngat dinh thoi phan cung

MOV BL,03 ; BL chua dia chi bat dau cua bang du lieu

116/139

Page 119: Mô phỏng vi điều khiển

Rep:

MOV AL,[BL] ; chuyen du lieu tu bang vao AL

OUT 02 ; chuyen du lieu ra hien thi

CMP AL,CE ; kiem tra gia tri cuoi trong bang

JZ Start ; neu gia tri den cuoi thi nhay ve Start

INC BL ; chi den vi tri ke tiep

JMP Rep ; nhay ve va thuc thi tri so ke

; --------------------------------------------------------------

; INTERRUPT HANDLER.

ORG 30 ; ma bat dau tai dia chi [30]

PUSH AL ; luu AL vao ngan xep

PUSH BL ; luu BL vao ngan xep

PUSHF ; luu co CPU vao ngan xep

MOV BL,[0D] ; vi tri RAM 0D chua con tro chi den bang du lieu

MOV AL,[BL] ; tim du lieu tu bang

OR AL,1 ; thiet lap LSB len 1.

OUT 02 ; chuyen du lieu ra hien thi

CMP AL,CF ; kiem tra gia tri cuoi cung

JZ Reset ; nhay ve reset

117/139

Page 120: Mô phỏng vi điều khiển

INC BL ; vi tri ke tiep trong bang

MOV [0D],BL ; luu vi tri nay vao RAM

JMP Done ; nhay ra khoi vong lap

Reset:

MOV BL,03 ; 03 la dia chi bat dau cua bang

MOV [0D],BL ; luu con tro nay vao RAM

Done:

POPF ; khoi phuc cac co CPU tu ngan xep

POP BL ; khoi phuc BL tu ngan xep

POP AL ; khoi phuc AL tu ngan xep

IRET ; ngat

; --------------------------------------------------------------

END

Sau khi xem qua các bài giải

? CPU:

CPU là nơi thực hiện tất cả các phép toán số học và logic.

CPU là nơi có thể lưu trữ các vùng gọi là các thanh ghi ; CPU chứa các cờ, các cờ nàydùng để xác định kết qủa là số (-), số 0 hoặc số bị tràn, sẽ thu nhận được nhiều tin tứchơn nếu có sự mô tả cấu trúc của hệ thống.

Thanh ghi bao gồm các tên : AL, BL, CD và DL, lần lượt có mã? là 00, 01, 02 và 03.Các thanh ghi được sử dụng để lưu trữ số nhị phân.

118/139

Page 121: Mô phỏng vi điều khiển

Các con số được lưu trữ trong thanh ghi có thể được tạo ra từ phép toán số họcvà logic học, từ đó chuyển các mã nhị phân ra các thiết bị ngoại vi như điều khiển đèngiao thông.

Chú thích: Chương trình khi bắt đầu thường có lời chú thích .

Những lời chú thích được sử dụng như là tài liệu trong một chương trình. Nó tiệních trong các chương trình mới tạo ra vì người viết có thể quên các bước của chươngtrình.

Lời chú thích hay là lời chú thích giải thích tại sao các việc sắp xảy ra, xảy ra nhưthế nào, lời chú thích không hay khi lặp lại qúa nhiều lần một việc vừa đơn giản lại vừadễ hiểu.

Ðịa chỉ RAM: Eg [ 7F ] [ 22 ] [ AL ] [ CL ]

[ 7F ] : có nghĩa là chứa nội dung ô nhớ 7F thuộc RAM .

[ CL ]: có nghĩa lànội dung được chuyển đến từ thanh ghi CL .

AND: nhân hai giá trị nhị phân

Ví dụ:

AND AL,12 ; thực hiện phép AND giữa AL và số 12,kết quả lưu vào AL

AND BL,CL ; thực hiện phép AND giữa CL và BL ,kết quả lưu vào BL

Mã máy tương ứng :

BA 00 12 ;AND 12 vcà Al , kết quả lưu vào AL

AA 00 02 ;AND CL và BL , kết quả lưu vào BL

Qui luật của phép AND :

Chỉ duy nhất trạng thái 1 AND 1 sẽ ra kết quả là 1, các trường hợp còn lại đều ra kết quảlà 0.

Ví du? :

119/139

Page 122: Mô phỏng vi điều khiển

10101010

AND 00001111

Kết quả: 00001010

Lưu ý : 1 AND 1=1,4 bit bên trái sẽ có kết quả là 0

LỆNH CALL VÀ RET: được sử dụng với các thủ tục

Không sử dụng các loại cờ trong CPU .

Ví dụ :

CALL 50 ; gọi thủ tục ở địa chỉ 50

Mã máy tương ứng

CA 50 ; gọi thủ tục ở địa chỉ 50

CPU chuyển lệnh con trỏ có giá trị IP+2 vào ngăn xếp ,sau đó CPU sẽ quay lại địa chỉnày .

Lệnh con trỏ trong CPU sẽ được đặt ở địa chỉ 50, CPU tiếp tục thi hành các lệnh từ50 đến khi gặp lệnh RET, sau đó giá trị được chuyển ra khỏi ngăn xếp bởi lệnh IP rồichuyển đến địa chỉ 50 để tổng kết các công việc đã thực hiện.

LỆNH CLI VÀ STI: được sử dụng với các ngắt

CLI : Xoá cờ "I" trong thanh ghi trạng thái

STI : Ðặt cờ "I" của lệnh ngắt trong thanh ghi trạng thái

Mã máy của CLI là FP ,mã máy của STI là FC

Nếu đặt cờ I thì CPU sẽ thực hiện việc ngắt

Sau đó bộ mô phỏng sẽ thực hiện việc ngắt phần cứng trong khoảng thời gian người viếtchương trình mong muốn

120/139

Page 123: Mô phỏng vi điều khiển

Nếu đặt cờ "I" vào ,tại địa chỉ [02] thực hiện 1 vector ngắt thì CPU sẽ nhảy đến mã - nơicần thực hiện việc ngắt đó.

LỆNH CLO: đóng các cửa sổ không cần thiết

CLO không sử dụng các cờ trong CPU ,mã máy của CLO là FE

CLO không thực hiện được trong chip 86. Khi sử dụng lệnh CLO thì cửa sổ các chuơngtrình không sử dụng đến sẽ được đóng lại thay vì phải dùng chuột để đóng từng cửa sổmột.

LỆNH CMP : so sánh

Lệnh CMP sử dụng các cờ trong CPU

Ví dụ:

CMP AL ,OD ; so sánh AL với OD

Mã máy tương ứng

DB OO OD ; so sánh AL với OD

Nếu các gía trị so sánh có :

• Bằng nhau thì đặt cờ "Z"• AL nhỏ hơn BL thì đặt cờ"S"• AL lớn hơn BL thì không có cờ nào

Ví dụ :

CMP CL,[20] ; so sánh CL với 20

Mã máy tương ứng

DC 02 20

Nếu các gía trị so sánh có :

Bằng nhau thì đặt cờ "Z"

121/139

Page 124: Mô phỏng vi điều khiển

CL có nội dung nhỏ hơn nội dung có trong địa chỉ 20 thì đặt cờ S .

CL có nội dung lớn hơn nội dung có trong địa chỉ 20 thì không đặt cờ.

LỆNH DB: định nghĩa byte

Lệnh DB không sử dụng các cỡ trong CPU.

DB là một cách gởi trực tiếp các giá trị vào RAM, lệnh DB không có mã máy .

Những con số và dòng chữ sau DB điều được chuyển vào RAM.

DB 22 ; Ðây là một bảng dữ liệu được chuyể tủ vào RAM

DB 33

DB 44

DB 0

DB "Hello world"; Mã ASCII của dòng chữ được chuyển vào RAM

DB 0 ; Kết thúc dòng chữ thì sử dụng lên NULL.

Lệnh DEC và INC : Tăng lên 1 và giảm đi 1

Lệnh DEC và INC thiết lập cờ trong CPU

LỆNH DIV VÀ MOD:

Có các lệnh DIV từ chip x86, nhưng lệnh MOD thì không có trong chip x86.

Chip x86 : Lệnh DIV thực hiện cả hai công việc là: Div và MOD, kết qủa x2 lưu vàocác thanh ghi khác nhau. Việc tách và đơn giản đối với 8 bit trong bộ mô phỏng khi sửdụng Mod và Div thì không thể thực hiện được .

8 DIV 3 bằng 3 (nhớ 2 )

122/139

Page 125: Mô phỏng vi điều khiển

8 MOD 3 bằng 2.

Ví dụ:

DIV AL,5 ; chiaAL cho 5; kết qủa lưu vào AL

DIV AL,BL ; chia AL cho BL, kết qủa lưu vào AL

MOD AL,5 ; Mod AL cho 5, kết qủa: phần dư đưa vào AL

MOD AL,BL ; Mod AL cho BL, phần dư chuyển vào AL

Mã máy :

B3 00 05 ; chia AL cho 5, kết quả lưu vào AL

A5 00 01 ; chia AL cho BC, kết quả lưu vào AL

B6 00 05 ; Mod AL cho 5, kết quả lưu vào AL ( phần dư )

A6 00 01 ; Mod AL cho BL, kết quả : phần dư đưa vào AL

LỆNH END : không thiết lập các cờ trong CPU

END : dừng chương trình đang thực hiện. Mã máy của END và HALT là 00. bộ môphỏng thực hiện được việc này do việc sử dụng đến hoạt động ngừng dao động trongCPU. Trình biên dịch sẽ không thực hiện việc biên dịch sau khi gặp lệnh END .

Trong 1 chương trình chỉ sử dụng 1 lệnh END duy nhất.

LỆNH HALT: không thiết lập các cờ trong CPU

HALT : dừng chương trình đang thực hiện, mã máy lệnh HALT là 00. Bộ mô phỏngthực hiện được điều này khi CPU ngừng hoạt động. Có thể sử dụng vào lệnh HALTtrong 1 chương trình.

123/139

Page 126: Mô phỏng vi điều khiển

LỆNH IN VÀ OUT : xuất - nhập

Giao tiếp với thiết bị ngoại vi , không thiết lập các cờ trong CPU

Lệnh xuất - nhập được sử dụng bởi các port

Ví dụ :

MOV AL,55 ; chuyển gia trị 0101 0101 vào AL

IN 01 ; gởi gía trị trên ra port 1

IN 03 ; được đọc từ port 3 chuyển qua AL

IN 00 ; 00 là bàn phím

Mã máy tương ứng :

DO 00 55 ; chuyển 0101 0101 vào AL

F1 01 ; gởi 0101 0101 đến port 1 ( điều khiển đèn giao thông)

FO 03 ; được đọc từ port 3 vào AL

FO 00 ; 00 nhập từ bàn phím

Lệnh INT và IRET : Sử dụng với các ngắt

Lệnh INT và IRET không thiết lập cờ tràn.

Ví dụ:

INT 02 ;gọi lệnh ngắt

;bắt đầu bằng địa chỉ đã được lưu trữ

;tại địa chỉ 02, các địa chỉ 00 đến OF có thể sử ;dụng như vector ngắt

IRET ;quay trở lại vị trí ngắt

Mã máy tương ứng

124/139

Page 127: Mô phỏng vi điều khiển

CC 02 ; gọi việc ngắt.

CD ; quay trở lại việc ngắt.

CPU đẩy gía trị IP + 2 bởi con trỏ lệnh vào ngăn xếp. Sau đó CPU sẽ quay trở lại địa chỉnày. Lệnh con trỏ được đặt vào địa chỉ này đến khi gặp lệnh IRET. CPU sẽ chuyển dữliệu ra khỏi ngăn xếp nhờ lệnh từ địa chỉ này đến khi gặp lệnh IRET. CPU sẽ chuyển dữliệu ra khỏi ngăn xếp nhờ lệnh IP và chuyển đến địa chỉ nơi mà nó đang thực hiện.

Lệnh JMP

Ðặt một giá trị mới vào IP, không thiết lập các cờ trong CPU.

Ví dụ : JMP FOO ; nhảy đến địa chỉ nhãn FOO.

Mã máy tương ứng

CO 12 ; nhảy 12 vị trí .

CO FE ; quay lại 12 vị trí .

Lệnh JMP thực hiện được nhờ việc cộng thêm 1 số vào lệnh IP. Số này có thể nằm trongkhoảng - 128 đến 127, việc này xác định độ dài nhất có thể.

Lệnh JMP : nhảy không điều kiện, JMP không sử dụng trong CPU.

Lệnh JNO: Jmp Not Overflow

JNO không thiết lập cờ CPU.

Ví dụ:

JNO FOO ; nhảy đến địa chỉ có nhản FOO

Mã máy tương ứng

C6 12 ; nhảy 12 khoảng cách

C6 FE ; quay lại 2 khoảng cách

125/139

Page 128: Mô phỏng vi điều khiển

JNO làm việc bằng cách cộng 1 số vào CPU nhờ con trỏ lệnh IP , số này có thể đi từ-128. - . +127. Ðây là khoảng cách lớn nhất mà lệnh nhảy có thể thực hiện

JNO sẽ thực hiện nếu cờ " O" trong CPU không đặt vào.

Lệnh JNS : Jump Not Sign

JNS không thiết lập cờ CPU.

Ví dụ : JNS FOO ; nhảy về địa chỉ có nhãn FOO

Mã máy tương ứng

C4 12 ; nhảy 12 khoảng cách

C4 FE ; quay lại 2 khoảng cách

JNS làm việc bằng cách cộng thêm 1 số vào CPU nhờ con trỏ lệnh, số này có thểchuyển đổi từ -128 đến -127 , đây là khoảng cách lớn nhất có thể nhảy .

Lệnh JNZ : Jump Not Zero

JNZ không thiết lập cờ CPU.

Ví dụ :

JNZ FOO ; nhảy về nhãn FOO

Mã máy tương ứng

C2 12 ; nhảy 12 khoảng cách

C2 FE ; quay lại 2 khoảng cách

JNZ làm việc dựa trên nguyên tắc tăng thêm 1 vào CPU nhờ con trỏ lệnh IP. Con số nàythay đổi từ -128 đến +127, đây là khoảng cách lớn nhất có thể của lệnh nhảy.

JNZ sẽ thực hiện việc nhảy nếu cờ"Z" trong CPU không đặt vào

Lệnh JO :

126/139

Page 129: Mô phỏng vi điều khiển

Nhảy khi gặp sự tràn.

JO không thiết lập cờ CPU.

Ví dụ:

JO FOO ; nhảy đến địa chỉ nhãn FOO.

Mã máy tương ứng :

C5 12 ; nhảy 12 khoảng cách

C5 FE ; quay lại hai khoảng cách.

JO làm việc dự trên nguyên tắc tăng thêm một vào CPU nhờ con trỏ lệnh IP. Consố này thay đổi từ -128 đến +127 , đây là khoảng cách có thể nhảy lớn nhất.

JO sẽ thực hiện việc nhảy nếu trong CPU có đặt cờ "O".

Lệnh JS: Jump Sign

JS không thiết lập cờ CPU.

Ví dụ :

JS FOO ; nhảy đến địa chỉ nhãn FOO

Mã máy tương ứng

C3 12 ; nhảy 12 khoảng cách

C3 FE ; quay về lại hai khoảng cách.

JS làm việc dựa trên nguyên tắc tăng thêm một vào CPU nhờ IP. Con số này thay đổi từ-128 đến +127, đây là khoảng cách lớn nhất có thể nhảy.

Lệnh JZ ( Jump Zero )

JZ không thiết lập cờ CPU.

127/139

Page 130: Mô phỏng vi điều khiển

Ví dụ :

JZ FOO ; nhảy về địa chỉ nhãn FOO

Mã máy tương ứng

C1 12 ; nhảy 12 khoảng cách

C1 FE ; quay lại hai khoảng cách

JZ làm việc dựa trên nguyên tắc tăng thêm một vào CPU, nhờ con trỏ lệnh. Con số nàythay đổi từ -128 đến +127, đây là khoảng cách lớn nhất mà lệnh nhảy có thể thực hiện.

Lệnh JZ sẽ thực hiện việc nhảy nếu cờ Z" được đặt vào CPU.

Lệnh MOV

Chuyển dữ liệu từ nơi này đến nơi khác.

Ví dụ :

MOV AL, 12 ; chuyển 12 hex vào AL

MOV BL, [2F] ; chuyển nội dung trong ô nhớ [2F] vào BL

MOV [33], CL ; chuyển dữ liệu từ thanh ghi CL vào ô nhớ [33]

MOV AL, [DL]; chuyển nội dung trong thanh ghi DL vào một ;vùng nhớ, từvùng nhớ đó chuyển vào AL.

MOV [BL], CL ; chuyển nội dung trong thanh ghi BL vào ô nhớ ;có địa chỉ trongthanh ghi CL.

Mã máy tương ứng

DU 00 12 ; chuyển 12 hex vào AL

D1 01 2F ; chuyển nội dung ô nhớ 2F vào BL

D2 33 02; chuyển dữ liệu từ CL đến ô nhớ [33]

D3 00 03; chuyển dữ liệu từ DL đến ô nhớ, chuyển ô nhớ ; đến AL.

128/139

Page 131: Mô phỏng vi điều khiển

D4 02 03; chuyển dữ liệu từ BL đến ô nhớ, sau đó chuyển ; ô nhớ đến CL.

LỆNH MUL ( NHÂN - MULTIPLY )

Các lệnh MUL khác được thực hiện tại chip X86.

Lệnh X86 Mul đưa kết quả vào nhiều thanh ghi. Bộ mô phỏng không thể thực hiện lệnhMUL 8 bit một cách đơn giản được. Lệnh này bất lợi khi việc xuất hiện cờ tràn quánhiều lần.

Ví dụ :

MUL AL, 5 ; thực hiện nhân AL cho 5, kết qủa chuyển vào thanh ghi AL

Mã máy tương ứng

B2 00 05 ; nhân AL với 5 ,kết quả chuyển vào AL

A2 00 01 ; nhân AL với B2, kết qủa chuyển vào AL.

LỆNH NOP: (No Operation) - Không làm gì.

Khi gặp lệnh này , CPU sẽ ngưng làm việc trong 1 chu kỳ xung. Việc này rất cần thiết vicần có khoảng thời gian để tạo sự đồng bộ giữa CPU và các mạch điện tử . CPU ngưnglàm việc trước khi các mạch điện tử hiểu được câu lệnh . Mã máy của lệnh NOP là FF .

LỆNH NOT

Ðảo ngược tất cả các bit .

Ví dụ:

NOT CL ; đảo ngược các bit trong thanh ghi CL

Mã máy tương ứng

AD 02 ; đảo ngược các bit trong CL

129/139

Page 132: Mô phỏng vi điều khiển

Nếu CL chứa dữ liệu 01010101 trước khi sử dụng lệnh NOT thì không có gì thay đổinhưng khi gặp lệnh NOT nó sẽ trở thành 10101010

LỆNH OR

Dùng để OR 2 giá trị nhị phân.

Ví dụ :

OR AL, 12 ; OR 12 với AL, kết quả đưa vào AL

OR BL, CL ; OR CL với BL, kết quả đưa vào BL

Mã máy tương ứng

BB 00 12 ; OR 12 với AL, kết quả đưa vào AL

AB 01 02 ; OR CL với BL, kết quả đưa vào AL

Quy luật của lệnh OR : hai ngõ vào bằng 0 sẽ đưa ra kết quả là 0, các ngõ vào còn lạiđều cho kết quả bằng 1. Ví dụ :

10101010

or 00001111

kết quả 10101111

0 hoặc 0 = 0 4 bit phải ra kết quả là 1

LỆNH ORG

Ðặt mã gốc

ORG 50 ; mã được phát sinh từ địa chỉ 50

130/139

Page 133: Mô phỏng vi điều khiển

ORG không là một lệnh thuôc CPU. Nó là loại lệnh được đưa ra từ trình biên dịch có mãđược phát sinh từ một địa chỉ đặc biệt, được sử dụng trong thủ tục và ngắt ORG được sửdụng trong các bộ nhớ đặc biệt như bảng dữ liệu, ở bảng dữ liệu thì không có mã máytương ứng.

LỆNH PUSH VÀ POP

Lệnh ngăn xếp.

PUSH dùng lưu trữ một byte vào ngăn xếp, POP lấy ra khỏi ngăn xếp. Ngăn xếp là mộtvùng nhớ tuân theo quy luật LIFO. Nhăn xếp dùng để :

+ Tạo sự quay trở lại của lệnh gọi thủ tục

+ Tạo sự quay trở lại địa chỉ của lệnh ngắt

+ Gởi các tham số vào trong các thủ tục

+ Nhận kết quả được lấy từ các thủ tục

+ Lưu, phục hồi các thanh ghi và các cờ.

+ Ðảo ngược thứ tự của dữ liệu

Ví dụ :

PUSH AL ; lưu AL và đưa vào ngăn xếp

POP AL ; phục hồi AL được đưa ra từ ngăn xếp

Mã máy tương ứng

EO 00 ; lưu AL vào ngăn xếp

E1 00 ; phục hồi AL từ ngăn xếp

LỆNH PUSHF, POPF

PUSHF : không thiết lập cờ CPU.

131/139

Page 134: Mô phỏng vi điều khiển

POPF : thiết lập cờ CPU

Ngăn xếp là vùng nhớ đặc biệt làm việc theo quy luật LIFO. Ngăn xếp có các công dụng:

+ Tạo sự quay lại địa chỉ của lệnh gọi thủ tục.

+ Tạo sự quay lại địa chỉ của lệnh ngắt.

+ Gởi các tham số vào thủ tục.

+ Lưu, phục hồi các thanh ghi và các cờ.

+ Ðảo ngược thứ tự của dữ liệu.

Ví dụ : PUSHF ; lưu cờ trong CPU đưa vào ngăn xếp

POPF ; phục hồi cờ trong CPU đưa vào ngăn xếp

Mã máy tương ứng

EA ; lưu cờ trong CPU chuyển ra ngăn xếp

EB ; phục hồi cờ trong CPU chuyển ra ngăn xếp.

LỆNH ROL và ROR : Rotate all bits to the Right và Left.

Xoay bit sang trái, phải.

Ví dụ :

ROL AL ; xoay trái các bit một vị trí

ROL DL ; xoay phải các bit một vị trí

Mã máy tương ứng

9A 00 ; xoay trái các bit một vị trí

9B 03 ; xoay phải các bit một vị trí

Sau khi xoay xong một bit thì chuyển đến xoay các bit còn lại cho đến hết.

132/139

Page 135: Mô phỏng vi điều khiển

- Trước khi xoay : 10000110

- Sau khi xoay trái : 00001101

- Trước khi xoay : 10000110

- Sau khi xoay phải : 01000011

LỆNH SHL VÀ SHR : Shift (Logically) Right và Left.

Chuyển dịch các bit sang phải, trái .

SHL và SHR thiết lập cờ CPU.

Ví dụ :

SHL AL ; dịch các bit sang trái một vị trí

SHR DL ; dịch các bit sang phải một vị trí

- Trước khi xoay : 10000110

- Sau khi xoay trái : 00001100

- Trước khi xoay : 10000110

- Sau khi xoay : 01000011

LỆNH SUB (Substract)

Trừ 2 toán hạng.

SUB không thiết lập cờ CPU

Ví dụ :

SUB AL, 12 ; trừ 12 trong thanh ghi AL, kết quả lưu vào AL.

133/139

Page 136: Mô phỏng vi điều khiển

Phụ lục C

Giới thiệu các phần mềm mô phỏng vi điểu khiển

Hiện nay trên thị trường phần mềm có rất nhiều phần mềm mô phỏng vi điều khiểnrất hay như UMPS Simulator ... nhưng đa số vẫn là shareware hay trial (các phần mềmquảng cáo hay cho dùng thử), do đó bạn phải đăng ký mới có thể sử dụng lâu dài vàhưởng được đầy đủ các tính năng của chúng. Trong khuông khổ giáo trình này, các phầnmềm được chọn dạng full retail nên bạn có thể sử dụng đầy đủ các tính năng của chúng.

TS CONTROLS EMILATOR 8051

Ðây là phần mềm thiết kế theo chuẩn của các chương trình ứng dụng chạy trên hệ điềuhành Windows, do đó nó một số ưu điểm khá đặc trưng như: thao tác dễ dàng, thuận lợi,hướng dẫn tương đối đầy đủ.. .Phần mềm này mô phỏng một họ vi điều thực tế 8051 nênrất thuận tiện cho sinh viên mô phỏng chương trình chình vi điều khiển trước khi quyếtđịnh ráp mạch. Tuy nhiên so với SIM51, TS Controls Emulator còn khiếm khuyết hơn ởkhâu nạp tập tin nguồn vào phần mềm mô phỏng. Với phần mềm này, giáo trình sẽ giớithiệu các phần sau:

• Cài đặt chương trình.• Màn hình giao diện chính.• Sử dụng chương trình mô phỏng.

SIM51

Ðây là phần mềm mô phỏng vi điều khiển họ 8051 chạy trên môi trường DOS mặc dùgiao diện xấu nhưng đòi hỏi cấu hình máy rất nhẹ thuận tiện cho việc mô phỏng vi điềukhiển trước khi quyết định ráp mạch. Trong phần mềm có trang bị chương trình biêndịch từ mã nguồn sang mã hex hoặc bin rất tiện cho bạn nạp trình cho EPROM hoặc viđiều khiển. Với phần mềm này, giáo trình sẽ giới thiệu các phần sau :

• Màn hình giao diện chính.• Sử dụng SIM51 dịch chương trình nguồn ra mã máy

134/139

Page 137: Mô phỏng vi điều khiển

Tham gia đóng góp

Tài liệu: Mô phỏng vi điều khiển

Biên tập bởi: Nguyễn Phương Quang

URL: http://voer.edu.vn/c/481ec957

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Nhập môn Lập trình Vi điều khiển

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/0c982e5c

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 1

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/fa86d586

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 2

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/68a95c16

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 3

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/3d1f3021

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 4

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/9d02f549

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 5

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/fdb97e28

135/139

Page 138: Mô phỏng vi điều khiển

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 6

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/aec9b1e3

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 7

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/4bfd9c40

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 8

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/7acc391a

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 9

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/c5ce7f5e

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 10

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/ea379b17

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập 11

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/8de9e466

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 1

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/7631c4f0

Giấy phép: http://creativecommons.org/licenses/by/3.0/

136/139

Page 139: Mô phỏng vi điều khiển

Module: Bài tập nâng cao 2

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/e865e34d

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 3

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/0ee4b006

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 4

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/cc1cf5cc

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 5

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/113ac460

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 6

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/93942348

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Bài tập nâng cao 7

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/871e50c1

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Phụ lục A

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/29a457b9

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Phụ lục B

137/139

Page 140: Mô phỏng vi điều khiển

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/bd5fafe2

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Phụ lục C

Các tác giả: Nguyễn Phương Quang

URL: http://www.voer.edu.vn/m/9232c559

Giấy phép: http://creativecommons.org/licenses/by/3.0/

138/139

Page 141: Mô phỏng vi điều khiển

Chương trình Thư viện Học liệu Mở Việt Nam

Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources– VOER) được hỗ trợ bởi Quỹ Việt Nam. Mục tiêu của chương trình là xây dựng khoTài nguyên giáo dục Mở miễn phí của người Việt và cho người Việt, có nội dung phongphú. Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0do đó các nội dung đều có thể được sử dụng, tái sử dụng và truy nhập miễn phí trướchết trong trong môi trường giảng dạy, học tập và nghiên cứu sau đó cho toàn xã hội.

Với sự hỗ trợ của Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) đã trở thànhmột cổng thông tin chính cho các sinh viên và giảng viên trong và ngoài Việt Nam. Mỗingày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, họctập và tải tài liệu giảng dạy về. Với hàng chục nghìn module kiến thức từ hàng nghìntác giả khác nhau đóng góp, Thư Viện Học liệu Mở Việt Nam là một kho tàng tài liệukhổng lồ, nội dung phong phú phục vụ cho tất cả các nhu cầu học tập, nghiên cứu củađộc giả.

Nguồn tài liệu mở phong phú có trên VOER có được là do sự chia sẻ tự nguyện của cáctác giả trong và ngoài nước. Quá trình chia sẻ tài liệu trên VOER trở lên dễ dàng nhưđếm 1, 2, 3 nhờ vào sức mạnh của nền tảng Hanoi Spring.

Hanoi Spring là một nền tảng công nghệ tiên tiến được thiết kế cho phép công chúng dễdàng chia sẻ tài liệu giảng dạy, học tập cũng như chủ động phát triển chương trình giảngdạy dựa trên khái niệm về học liệu mở (OCW) và tài nguyên giáo dục mở (OER) . Kháiniệm chia sẻ tri thức có tính cách mạng đã được khởi xướng và phát triển tiên phongbởi Đại học MIT và Đại học Rice Hoa Kỳ trong vòng một thập kỷ qua. Kể từ đó, phongtrào Tài nguyên Giáo dục Mở đã phát triển nhanh chóng, được UNESCO hỗ trợ và đượcchấp nhận như một chương trình chính thức ở nhiều nước trên thế giới.

139/139