Tải bản đầy đủ (.pdf) (141 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (623.05 KB, 141 trang )

Mô phỏng vi điều khiển
Biên tập bởi:
Nguyễn Phương Quang
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:
/>MỤC LỤC
1. Nhập môn Lập trình Vi điều khiển
2. Bài tập Cơ Bản
2.1. Bài tập 1
2.2. Bài tập 2
2.3. Bài tập 3
2.4. Bài tập 4
2.5. Bài tập 5
2.6. Bài tập 6
2.7. Bài tập 7
2.8. Bài tập 8
2.9. Bài tập 9
2.10. Bài tập 10
2.11. Bài tập 11
3. Bài Tập Nâng cao
3.1. Bài tập nâng cao 1
3.2. Bài tập nâng cao 2
3.3. Bài tập nâng cao 3
3.4. Bài tập nâng cao 4
3.5. Bài tập nâng cao 5
3.6. Bài tập nâng cao 6
3.7. Bài tập nâng cao 7


4. Phụ Lục
4.1. Phụ lục A
4.2. Phụ lục B
4.3. Phụ lục C
Tham gia đóng góp
1/139
Nhập môn Lập trình Vi điều khiển
Giáo trình này chỉ chú trọng đến phần thực hành lập trình trên vi điều khiển nên không
có phần lý thuyết về vi điều khiển mà thay vào đó là nhập môn lập trình vi điều khiển.
Trong phần này, giáo trình sẽ trình bày những vấn đề lý thuyết cơ bản nhất về hệ 80x86,
vừa đủ cho người học giải quyết các bài tập cơ bản trong chương trình. Sau khi đã vững
phần cơ bản, người học sẽ nâng cao hơn các hiểu biết về vi điều khiển thông qua các bài
tập nâng cao.
1. Tổ chức hệ vi điều khiển :
1.1. Giới thiệu hệ vi điều khiển dùng trong phần mềm mô phỏng:
Như đã giới thiệu ở phần trước hệ vi xử lý dùng trong chương trình mô phỏng này
và hệ vi điều khiển thực tế nói chung bao gồm ba phần chính : bộ vi xử lý (CPU); bộ
nhớ và thiết bị xuất nhập (I/O). Cụ thể trình bày trên hình 2-1.
Bộ mô phỏng bao gồm khối xử lý trung tâm (CPU), 256 byte của bộ nhớ truy xuất
ngẫu nhiên (RAM) và 16 cổng vào ra nhưng chỉ sử dụng 6 port (từ port 0 đến port 5)?
2/139
Hình 2-1: Hệ thống vi điều khiển dùng trong phần mềm.
Chương trình mô phỏng có thể lập trình để chạy nhiều chương trình khác nhau. Trong
thực tế, bộ nhớ RAM được thay thế bằng ROM. Ở đây có hàng trăm thí dụ về các hệ
thống như : điều khiển đèn giao thông, các trò chơi giải trí đơn giản, điều khiển ti vi từ
xa, định thời gian cho lò viba, hệ thống điều khiển động cơ xe hơi, bộ điều khiển lò gia
nhiệt, các hệ thống điều khiển môi trường. Tất cả tuỳ thuộc vào sự uyển chuyển của giáo
viên giảng dạy.
1/ Khối xử lý trung tâm:
Khối xử lý trung tâm là " bộ não" của máy vi tính. Tất cả các sự tính toán, quyết

định và việc dịch chuyển dữ liệu đều được thực thi ở đây. CPU dùng các vị trí lưu trữ
tạm thời được gọi là thanh ghi, thanh ghi chỉ nhớ dữ liệu có dung lượng thấp và sẽ mất
dữ liệu khi mất điện nếu mạch không có back up ( mạch làm nhiệm vụ liên tục cấp điện
cho CPU ). Nó chứa khối số học và logic (viết tắt là ALU) khối này thực hiện việc xử
lý. Dữ liệu được lấy từ các thanh ghi, được xử lý và kết quả sau khi xử lý xong được
đưa trở lại các thanh ghi. Lệnh Move (MOV) được sử dụng để dịch chuyển dữ liệu giữa
vùng nhớ RAM và các thanh ghi. Ở đây ta có rất nhiều lệnh, mỗi lệnh thì có một chức
năng riêng. Tập hợp các lệnh này được gọi là tập lệnh.
2/ Các thanh ghi đa năng:
CPU có bốn thanh ghi mục đích chung gọi là AL, BL, CL và DL. Những thanh
ghi này chứa 8 bít hay 1 byte. Các thanh ghi quản lý số không dấu trong vùng từ 0 đến
255 và ô có dấu vùng từ - 128 đến + 127 : ở đây các thanh ghi này sử dụng như vùng
nhớ lưu trữ tạm thời. Các thanh ghi được sử dụng ưu tiên đối với vùng nhớ RAM bởi
vì nó cần 1 khoảng thời gian tương đối dài để chuyển dữ liệu giữa RAM và CPU. Nhìn
chung máy vi tính có tốc độ xử lý nhanh hơn nếu thanh ghi hay bộ nhớ có dung lượng
lớn hơn trong CPU.
Các thanh ghi được gọi tên là AL, BL, CL và DL vì phiên bản 16 bit của CPU này
có nhiều thanh ghi gọi là AH, BH, CH và DH . Chữ "L" có nghĩa là thấp (Low) và chữ
"H" có nghĩa là cao (High). Ở đây, 2 chữ cuối L và H trong các thanh ghi trên chính là
8 bít thấp và 8 bít cao của thanh ghi 16 bit.
3/ Các thanh ghi chuyên dùng :
Các thanh ghi chuyên dùng trong hệ vi điều khiển dùng trong phần mềm mô phỏng
là IP, SR và SP.
a) Con trỏ lệnh IP
3/139
Thanh ghi này chứa địa chỉ lệnh đang được hiện hành. Khi việc thực thi hoàn thành,
IP được giảm xuống và chỉ tới lệnh kế tiếp. Khi bộ nhớ RAM hiển thị, thì con trỏ lệnh
được làm nổi rõ bằng màu đỏ trên nền chữ vàng.
b) Thanh ghi trạng thái SR
Thanh ghi này chứa các cờ để báo cáo về trạng thái CPU. Cờ zero "Z" được thiết

lập bằng 1 nếu việc tính toán có kết quả bằng 0. Cờ dấu "S" được thiết lập bằng 1 nếu
việc tính toán có kết quả âm. Cờ tràn "O"được thiết lập nếu kết quả trong thanh ghi lớn
hơn 255 (tràn số). Ngắt "I" được thiết lập nếu các lệnh ngắt được cho phép.
c) Con trỏ ngăn xếp SP
Ngăn xếp là 1 vùng của tổ chức bộ nhớ sử dụng qui tắc vào sau ra trước (LIFO:
Last In First Out). Con trỏ ngăn xếp chỉ tới ô nhớ ngăn xếp chồng kế tiếp. Ngăn xếp
trong bộ mô phỏng bắt đầu tại địa chỉ BF. Ngăn xếp tăng theo hướng địa chỉ 0, dữ liệu
được cất vào ngăn xếp và lưu giữ cho lần sử dụng sau. Dữ liệu được lấy ra khỏi ngăn
xếp khi cần đến. Con trỏ ngăn xếp quản lý nơi ngăn xếp cất và lấy dữ liệu ra . Khi hiển
thị trong RAM, con trỏ ngăn xếp được tô sáng bằng màu xanh trên nền chữ vàng.
4/ Bộ nhớ RAM :
Bộ mô phỏng có 256 byte RAM, có địa chỉ từ 0 đến 255 ( số thập phân) hay từ 00
đến FF (số Hex). Ðịa chỉ của RAM thường được đặt trong dấu ngoặc vuông ví dụ như
[7C] trong đó 7C là số Hex. [7C] đọc là dữ liệu cất tại ô nhớ 7C. Trong thực tế, đây
chính là? ROM nhưng nói chung chương trình chính sẽ được lưu trữ tại đây.
4/139
5/ Các BUS (Busline: luồng liên lạc):
Các BUS là một tập hợp các dây dẫn được sử dụng để mang tín hiệu đi trao đổi
thông tin giữa các thiết bị trong hệ vi xử lý. Chúng thường được in như các đường song
song trong board mạch điện. Khe cắm là các ổ cắm cho phép card có thể kết nối với hệ
thống thông qua các BUS. Ðiển hình một máy tính 8 bit có các thanh ghi với độ rộng 8
bit và 8 đường trong 1 BUS dữ liệu. Một máy tính 16 bit có các thanh ghi 16 bit, BUS
dữ liệu có 16 đường v v.Có thể dùng hình tượng xa lộ để minh họa các BUS ( Hình
2-2): trên xa lộ có nhiều địa điểm như A, B, C, D. . . Nếu chỉ dùng dây điện để nối (nối
cứng) ta phải tốn rất nhiều đường dây để liên kết giữa các địa điểm lại với nhau nhưng
trên xa lộ này lái xe dù không thông thạo vùng này cứ đi dọc xa lộ là có thể tìm đến địa
điểm cần đến. Rõ ràng với một BUS ta có thể liên kết nhiều thiết bị trong hệ vi xử lý
lại với nhau (mỗi thiết bị có thể xem như một địa điểm trên xa lộ còn xe mang thông tin
trao đổi giữa các thiết bị trong hệ thống) .
5/139

Hình 2-2 : Minh họa BUS thông qua hình tượng xa lộ.
Dựa vào tính chất thông tin tải trên Bus, người ta phân làm ba loại chính:
a) Bus dữ liệu : được sử dụng để mang dữ liệu giữa CPU, RAM và port nhập / xuất
(I/O). Bộ mô phỏng này có bus dữ liệu 8 bit.
b) Bus địa chỉ: được sử dụng để xác định địa chỉ của bộ nhớ RAM hay port I/O
được sử dụng. Bộ mô phỏng này có 8 bit địa chỉ.
c) Bus điều khiển: xác định RAM hay khối I/O được truy xuất. Nó cũng xác định
việc đọc hay viết dữ liệu. Dữ liệu được viết vào hay xuất ra trên CPU đến RAM hay
cổng I/ O cũng do bus điều khiển này.
6/ Các yếu tố phụ trợ khác:
a) Ðồng hồ hệ thống (clock): là đường mang những xung có tần số ổn định để các
bộ phận trong hệ vi xử lý có thể làm việc đồng bộ với nhau, các lệnh trong bộ vi xử lý
thực thi cũng dựa vào các chu kỳ xung này. Do vậy tốc độ hệ vi xử lý bị ảnh hưởng rất
nhiều bởi tần số xung clock. Tốc độ xung clock hiện nay đã đạt đến vài tỉ chu kỳ mỗi
giây (vào năm 2002). Bộ mô phỏng trong phần mềm có thể điều chỉnh được tần số xung
clock nên tốc độ thực thi lệnh cũng điều chỉnh được trong một khoảng khá rộng và trơn
mà không cần chọn thay đổi thạch anh dao động.
b) Ngắt cứng: hệ thống cần có ít nhất 1 đường ngắt giúp CPU đáp ứng được các
yêu cầu của phần cứng như máy in đang chạy nhưng hết giấy, nhấn nhả phím, rê chuột
CPU sẽ xử lý chương trình phục vụ ngắt để trả lời lệnh ngắt trên. Khi hoàn thành chương
trình ngắt, nó sẽ tiếp tục các thao tác đang làm trước khi nhu cầu ngắt xuất hiện. Phần
6/139
mềm mô phỏng này có sẵn một đường ngắt và bộ định thời tạo xung ngắt tạo ra những
xung ngắt có tần số điều chỉnh được (xem ví dụ 11 phần cơ bản).
1?2 . Nguyên lý làm việc của hệ vi điều khiển trong phần mềm:
Hoạt động bên trong của vi điều khiển rất phức tạp, nó điều khiển hoạt động của mọi
thành phần trong hệ thống. Nhưng thật ra vi điều khiển chỉ lập đi lập lại chu kỳ đón và
thực thi lệnh (còn gọi là chu kỳ tìm nạp + giải mã + thi hành lệnh) thực hiện theo từng
bước sau :
* Tìm nạp lệnh tiếp theo từ bộ nhớ vào thanh ghi lệnh IR. Trong chương trình này CPU

tìm nạp lệnh theo địa chỉ mà IP chỉ tới: đón hay tìm nạp lệnh.
* Ðịnh loại lệnh vừa tìm nạp, nếu lệnh dùng dữ liệu trong bộ nhớ thì CPU sẽ tìm đến
và nạp vào thanh ghi bên trong CPU: giải mã lệnh.
* Thi hành lệnh vừa giải mã xong và lưu kết quả ở nơi thích hợp: thi hành lệnh.
Sau khi thực hiện xong 3 bước này CPU lại tìm đến lệnh tiếp theo trong chương trình để
tuần tự thực hiện lặp lại 3 bước trên. Có thể minh họa bằng hình 2-3.
Hình 2-3 : CPU liên tục tìm nạp và thi hành lệnh
7/139
Như vậy dù cho chương trình CPU thì rất phức tạp nhưng về cơ bản nó cũng chỉ thực
hiện 2 hoạt động: tìm lệnh, thi hành, tìm lệnh, thi hành.và cứ như thế mà tiếp diễn. CPU
sẽ thực thi được toàn bộ chương trình.
Cụ thể hơn ta quan sát một ví dụ sau trong chương trình mô phỏng. Mở bài tập về động
cơ bước ở phần bài tập cơ bản trong đĩa CD này, bạn sẽ gặp giao diện của bài tập như
sau:
8/139
Trên màn hình hiển thị chương trình điều khiển động cơ bước quay theo một chiều cố
định. Nhấp chuột vào Step , vi điều khiển sẽ thực hiện lệnh MOV AL,1. Màn hình sau
sẽ diễn tả tác động của lệnh này lên vi điều khiển như sau:
9/139
10/139
Ta thấy số hexa 1 đã được nạp vào thanh ghi AL, thanh ghi IP (con trỏ lệnh) chỉ ra địa
chỉ kế tiếp của lệnh mà vi điều khiển sắp thực hiện (OUT 05) nằm ở ô nhớ 03. Các thanh
ghi khác không tham gia vào lệnh này nên không có thay đổi gì. Tiếp tục nhấp Step , ta
thấy:
Lệnh OUT 05 xuất dữ liệu chứa trong thanh ghi AL (là 01) sang port 05 điều khiển động
cơ bước cho phép nhóm cuộn dây đầu tiên trong 4 nhóm có điện (có thể xem chi tiết hơn
về động cơ bước trong phần giới thiệu của đĩa CD này). Con trỏ lệnh IP tự động tăng
thêm 2 đơn vị (do lệnh OUT 05 chiếm đến 2 byte nhớ trong RAM) chỉ ra địa chỉ kế tiếp
11/139
của lệnh mà vi điều khiển sắp thực hiện (MOV AL,2) nằm ở ô nhớ 05. Cũng giống như

trên các thanh ghi khác không tham gia nên không thay đổi dưới tác động của lệnh này.
Tiếp tục nhấp vào Step , ta nhận thấy:
Tương tự trên, số hexa 2 được nạp vào thanh ghi AL và con trỏ IP tăng lên 08 chỉ ra
lệnh kế tiếp là OUT 05 nằm ở địa chỉ 08 trong RAM. Tiếp tục nhấp Step , ta thấy:
Tương tự, như trên ta thấy tác động của lệnh OUT 05 làm động cơ bước quay đi một
góc 10
o
. 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
13/139
Nếu như từ đầu đến đây vi điều khiển thực hiện tuần tự từng lệnh từ trên xuống thì đến
đây vi điều khiển thực hiện một bước nhảy. Nó sẽ nhảy đến nơi có chứa nhãn start, trong
chương trình này nhãn start ở ngay đầu chương trình nên giá trị con trỏ lệnh IP là 00 .
Nhấp Step.
14/139
Nếu bạn nhấp Run hay F9 chương trình mô phỏng sẽ liện tục lặp lại các bước vừa nêu.
Qua ví dụ đơn giản vừa nêu ở trên, ta thấy bình thường vi điều khiển sẽ thực hiện tuần
tự từng lệnh một từ điểm xuất phát được định ra bởi người lập trình chỉ khi nào gặp các
lệnh nhảy, gọi chương trình con (nhấp vào đây để xem minh hoạ : chương trình con một
cấp; chương trình con đa cấp), gọi chương trình ngắt thì tính tuần tự trên mới tạm thời
bị gián đoạn. Từ đây ta có thể nhận thấy, với cùng một yêu cầu đặt ra cho hệ thống vi
xử lý sẽ có nhiều chương trình cùng thoả mãn được yêu cầu trên, chương trình này thì
dài còn chương trình kia thì lại ngắn, điều này tuỳ thuộc vào nhiều yếu tố như khả năng
của người lập trình, cấu trúc phần cứng của hệ thống .
2. Trình tự lập trình vi điều khiển
15/139
Chương trình vi điều khiển là tập hợp các lệnh xắp xếp theo một trình tự nhất
định, các lệnh này được lấy trong tập lệnh của bộ vi điều khiển (Microcontroller) đang
sử dụng trong hệ thống. Bộ vi điều khiển sẽ thực hiện các lệnh nàỵ để đạt được một số
kết qủa mà chương trình đặt ra. Do vậy, lập trình là tuỳ vào yêu cầu của bài toán thiết

kế, người lập trình sẽ viết ra một chương trình chạy được trên hê vi điều khiển đang sử
dụng đưa hệ thống vào làm việc đúng theo yêu cầu của bài toán đã đặt ra.
Ðể thiết kế chương trình một cách chính xác, ta cần thực hiện những bước sau:
2.1 Phân tích các yêu cầu của đề bài.
2.2 Xây dựng lưu đồ giải thuật.
2.3 Thiết kế chương trình
2.4 Viết chương trình
2.5 Biên dịch chương trình
2.6 Thưc hiện gỡ rối chương trình
2.7 Nạp chương trình vào phần cứng và kiểm tra kết quả.
Thực hiện đúng quy trình trên sẽ giúp giảm thiểu thời gian kiểm tra cũng như phát
hiện kịp thời những thiếu sót khi thực hiện.
16/139
Bài tập Cơ Bản
Bài tập 1
Viết chương trình thực hiện các phép tính số học.
Mục đích-yêu cầu:
• Làm quen với các lệnh tính toán số học.
• Hiểu cách định vị địa chỉ bộ nhớ.
• Hiểu cách đưa dữ liệu vào thanh ghi.
• Thực tập cộng giá trị trong 2 thanh ghi.
Kiến thức nền :
Chương trình là tập hợp của các lệnh được sắp xếp theo một trình tự cụ thể nhằm
giúp vi điều khiển, vi xử lý thực hiện các công việc cụ thể nào đó. Các lệnh trong chương
trình được lấy từ tập lệnh (Instruction Set) của họ vi điều khiển, vi xử lý đang sử dụng.
Tập lệnh là tập hợp của các lệnh được cung cấp bởi nhà sản xuất vi điều khiển, vi xử lý.
Ví dụ:
Lệnh MOV AL,m : chuyển m vào thanh ghi AL.
Vi xử lý, vi điều khiển sẽ tuần tự thực hiện các lệnh để thực hiện các công việc cụ thể mà
chương trình yêu cầu giúp hệ thống làm việc theo một chương trình được định trước.

Lệnh CLO:
Lệnh CLO là lệnh chỉ dùng một lần trong toàn bộ chương trình. CLO đóng tất cả
các cửa sổ không cần thiết trong lúc chương trình đang chạy. Lệnh này làm cho dễ dàng
hơn để viết các chương trình thể hiện tốt. Sử dụng CLO cũng tránh việc đóng các cửa sổ
hướng dẫn.
Lệnh MOV:
Lệnh MOV là từ viết tắt của Move. Trong ví dụ này các số được chép vào thanh
ghi mà ở đó các phép tính số học có thể thực hiện được. Lệnh MOV chép dữ liệu từ ô
nhớ này sang ô nhớ khác, mà dữ liệu trong ô nhớ không bị mất.
Các thanh ghi:
17/139
Các thanh ghi là nơi 8 bit nhị phân được lưu giữ tạm thời. Ðơn vị xử lý trung
tâm trong chương trình mô phỏng này có 4 thanh ghi mục đích gọi là AL, BL, CL và
DL trong các CPU sau này, các thanh ghi có thể đến 16, 32 hay 64 bit Các thanh ghi
cùng tên sẽ có cùng chức năng nhưng trong cùng một lúc thanh ghi 64 bit sẽ xử lý được
nhiều dữ liệu hơn thanh ghi 8 bit vì thế tốc độ của CPU có thanh ghi 64 bit xử lý nhanh
hơn CPU có thanh ghi 8 bit.
Các thanh ghi có dung lượng lớn có thể chứa số nguyên lớn. Việc này sẽ đơn
giản hóa các thao tác lập trình. Ba thanh ghi khác là SP, IP và SR sẽ được mô tả ở bài
sau.
Số Hex:
Trong lệnh MOV AL,2 với 2 là số Hex. Hệ thống số Hex được sử dụng trong
việc lập trình cấp thấp vì như vậy quá trình chuyển đổi giữa số nhị phân và số Hex thuận
lợi hơn . Ðể lập trình được tốt, bạn cần nắm vững hệ thống số Hex và số nhị phân.
Các lệnh số học :
Lệnh ADD được sử dụng để cộng 2 thanh ghi với nhau. Một cách cộng khác
của lệnh cộng là được dùng để cộng 1 số vào 1 thanh ghi. Bạn có thể xem hướng dẫn
qua các lệnh ADD, SUB, MUL và DIV bằng việc chọn lấy lệnh và nhấn F
1
.

Lệnh END:
Lệnh END là lệnh cuối cùng trong chương trình. Bất kỳ lệnh nào sau lệnh End
sẽ được bỏ qua.
Chương trình:
; Chương trình cộng 2 số Hex
CLO
MOV AL,2
MOV BL,2
ADD AL, BL
END ; kết thúc chương trình.
18/139
;
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ương
trình chia cho 0 .
19/139
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ởi
dữ 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ân
nố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ượng
Step 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ương
trình. Ðể ngừng chương trình ta click vào stop. Khi chương trình đang chạy, click vào
RAM - Source hay RAM - Hex hay RAM - ASCII . Ở đó ta sẽ thấy được sự thay đổi
luâ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ấy
mã 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 trong
chươ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ới
1 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ải
có dấu 2 chấm . Ví dụ: Start :
3/ Ðiều khiển các đèn giao thông:
20/139
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ỗi
bó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ố Hex
tươ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 đèn
giao 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 theo
nộ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 theo
từ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
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ệnh
MOV, JMP, INC.
• Làm quen với việc copy dữ liệu từ RAM tới thanh ghi và từ thanh ghi đến
RAM.
• 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ần
nhậ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
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. Ðịa
chỉ 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

×