1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Vi điều khiển (Nghề Điện tử dân dụng Trình độ Cao đẳng)

93 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo trình Vi điều khiển
Tác giả Đỗ Hữu Hậu
Trường học Cao đẳng nghề Cần Thơ
Chuyên ngành Điện tử dân dụng
Thể loại sách giáo trình
Năm xuất bản 2021
Thành phố Cần Thơ
Định dạng
Số trang 93
Dung lượng 1,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đó là các thanh ghi: CS Code Segment: Thang ghi đoạn mã, chứa địa chỉ bắt đầu của đoạn chươngtrình đoạn mã mang những lệnh thực hiện được và thông thường là một vùng nhớchứa dữ liệu

Trang 2

LỜI GIỚI THIỆU

Vi điều khiển là một trong những mô đun cơ sở của nghề Điện tử dân dụng

được biên soạn dựa theo chương trình khung đã xây dựng và ban hành năm 2021 củatrường Cao đẳng nghề Cần Thơ dành cho nghề Điện tử dân dụng hệ Cao đẳng

Giáo trình được biên soạn làm tài liệu học tập, giảng dạy nên giáo trình đã đượcxây dựng ở mức độ đơn giản và dễ hiểu, trong mỗi bài học đều có thí dụ và bài tậptương ứng để áp dụng và làm sáng tỏ phần lý thuyết

Khi biên soạn, nhóm biên soạn đã dựa trên kinh nghiệm thực tế giảng dạy, thamkhảo đồng nghiệp, tham khảo các giáo trình hiện có và cập nhật những kiến thức mới

có liên quan để phù hợp với nội dung chương trình đào tạo và phù hợp với mục tiêuđào tạo, nội dung được biên soạn gắn với nhu cầu thực tế

Nội dung giáo trình được biên soạn với lượng thời gian đào tạo 60 giờ gồm có:Bài MĐ 18-01: Họ vi xử lý INTEL 80x86

Bài MĐ 18-02: Cấu trúc họ vi điều khiển 8051

Cần Thơ, ngày tháng năm 2021

Tham gia biên soạn

Trang 3

MỤC LỤC

Trang

TUYÊN BỐ BẢN QUYỀN 1

LỜI GIỚI THIỆU 2

MỤC LỤC 3

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86 6

1 Cấu trúc bên trong và hoạt động của vi xử lý 8086 6

2 Các chế độ định địa chỉ của bộ vi xư lý 8086 10

3 Tập lệnh của vi xử lý 8086 13

4 Các chế độ làm việc của vi xử lý 17

5 Lập trình hợp ngữ cho vi xử lý 8086/8088 18

6 Thực hành 20

BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 23

1 Tổng quan 23

2 Sơ đồ chân vi điều khiển 8051 24

3 Cấu trúc Port I/O 27

4 Tổ chức bộ nhớ 28

5 Thực hành 33

BÀI 3: TẬP LỆNH 8051 34

1 Các cách định địa chỉ 34

2 Các nhóm lệnh 37

3 Thực hành 53

BÀI 4: BỘ ĐỊNH THỜI 55

1 Thanh ghi SFR của timer 56

2 Các chế độ làm việc 57

3 Thực hành 64

BÀI 05: CỔNG NỐI TIẾP (SERIAL PORT) 66

1 Thanh ghi điều khiển 66

2 Chế độ làm việc 69

3 Khởi tạo và truy xuất thanh ghi PORT nối tiếp 73

4 Tốc độ baud 75

5 Thực hành 79

BÀI 06: NGẮT 80

1 Tổ chức ngắt của 8051 80

2 Xử lý ngắt 85

3 Thiết kế chương trình dùng ngắt 87

4 Thực hành 91

TÀI LIỆU THAM KHẢO 93

Trang 4

GIÁO TRÌNH MÔ ĐUN

Tên mô đun: VI ĐIỀU KHIỂN

Mã mô đun: MĐ 18

Vị trí, tính chất, ý nghĩa và vai trò của mô đun:

- Vị trí của mô đun: Mô đun được bố trí dạy sau khi học xong các mô đun linhkiện điện tử, đo lường điện – điện tử, kỹ thuật số và học trước mô đun Máy thu hìnhcông nghệ cao, PLC

- Tính chất của mô đun: Là mô đun chuyên môn nghề

- Ý nghĩa của mô đun: giúp người học nắm bắt được phương pháp lập trìnhđiều khiển các ứng dụng căn bản các họ vi xử lý và vi điều khiển

- Vai trò của mô đun: Lập trình điều khiển các ứng dụng căn bản sử dụng họ

8051 và là nền tảng để học mô đun vi điều khiển nâng cao

Mục tiêu của mô đun:

- Về kiến thức:

+ Trình bày được về hệ đếm và mã hóa trong máy tính, tương tác giữa máy tính

và vi xử lý, các bộ vi xử lý intel đang được ứng dụng

+ Trình bày được cấu trúc của các họ vi xử lý và vi điều khiển

+ Giải thích được nguyên lý làm việc các hệ điều khiển ứng dụng vi xử lý và viđiều khiển

- Về kỹ năng:

+ Lập trình hợp ngữ một số bài tập cơ bản một cách thành thạo

+ Xử lý được một số dạng kết nối máy tính với vi xử lý và các thiết bị ngoại vi+ Phát triển được các hệ điều khiển trên cơ sở khối trung tâm là vi xử lý

+ Vận hành được các thiết bị và dây chuyền sản xuất dùng vi điều khiển

+ Xác định được các nguyên nhân gây ra hư hỏng xảy ra trong thực tế

+ Lập trình cho hệ vi điều khiển 89C51với Assembly

+ Nạp chương trình vào vi điều khiển

- Năng lực tự chủ và trách nhiệm:

+ Có sáng kiến, tìm tòi, khám phá trong quá trình học tập và công việc

+ Có khả năng tự định hướng, chọn lựa phương pháp tiếp cận thích nghi với cácbài học

+ Có năng lực đánh giá kết quả học tập và nghiên cứu của mình

+ Tự học tập, tích lũy kiến thức, kinh nghiệm để nâng cao trình độ chuyên môn

Nội dung của mô đun:

Số

TT Tên các bài trong mô đun

Thời gian (giờ)

Tổng số

Lý thuyết

Thực hành, thí nghiệm, thảo luận, bài tập

Kiểm tra

Trang 5

3 Khởi tạo và truy suất thanh ghi

Trang 6

BÀI 1: HỌ VI XỬ LÝ INTEL 80x86

Mã bài: MĐ 18-01 Giới thiệu:

Bộ vi xử lý 80x86 của Intel Đây là bộ vi xử lý nổi tiếng một thời của hãng Intel

và được sử dụng nhiều trong các lĩnh vực khác nhau Các chương trình viết cho 80x86vẫn có thể chạy được trên trên các hệ tiên tiến sau này Các họ vi xử lý của các hãngtuy có khác nhau nhưng xét cho cùng có khá nhiều điểm chủ yếu rất giống nhau, do đómột khi đã nắm vững các vấn đề kỹ thuật của 8086 ta sẽ có cơ sở để nắm bắt các bộ vi

xử lý khác trong cùng họ của Intel hoặc các họ khác

Mục tiêu:

- Trình bày được cấu trúc hệ vi xử lý 80x86

- Trình bày được tập lệnh của hệ vi xử lý 80x86

- Viết được một số chương trình đơn giản dạng hợp ngữ cho hệ vi xử lý 80x86

- Rèn luyện tính tư duy, tác phong trong công nghiệp

Nội dung chính:

1 Cấu trúc bên trong và hoạt động của vi xử lý 8086

1.1 Các khối chức năng của CPU

Chức năng bên trong vi xử lý về mặt logic được chia làm hai khối xử lý Khốithứ nhất là khối giao diện bus (BIU) và khối thứ hai là khối thực hiện lệnh (EU)

BIU: Cung cấp các chức năng liên quan đến việc nhận lệnh và xếp hàng lệnh,

lưu trữ các toán hạng và định vị các địa chỉ Khối này cũng cung cấp các chức năngđiều khiển BUS cơ sở Trong hầu hết các trường hợp thời gian thực hiện lệnh và lấylệnh và thực hiện lệnh là trùng nhau Chính điều này làm tăng khả năng hoạt động của

vi xử lý thông qua việc cải thiện Bus Trong khi khối thực hiện lệnh đang bận rộn vớilệnh hiện thời thì BIU đã có thể bắt đầu việc lấy các lệnh kế tiếp từ bộ nhớ và phầncuối của chúng được đặt trong một RAM nội bộ tốc độ cao được gọi là hàng đợi Độdài của hàng đợi này với vi xử lý 8086 là 6byte Kỹ thuật hàng đợi lệnh cho phép BIU

sử dụng bộ nhớ rất hiệu quả BIU sẽ lấy mã lệnh trong bộ nhớ rồi đưa vào hàng đợi.Theo cách này BIU có thể cung cấp các lệnh một cách liên tục mà không độc chiếmBIU Điều này làm giảm đáng kể thời gian chết trên Bus Hàng đợi lệnh làm việc nhưmột bộ đệm lệnh FIFO (First In First Out, vào trước ra trước)

Nếu có sự vào/ra liên tục của dòng mã lệnh trong bộ đệm này thì có nghĩa là có

sự phối hợp hoạt động hiệu qủa giữa hai khối EU và BIU theo cơ chế xử lý xen kẽ liêntục dòng mã lệnh để làm tăng tốc độ xử lý tổng thể Kỹ thuật xen kẽ liên tục dòng mãlệnh sẽ không còn tác dụng tăng tốc độ xử lý của CPU nữa nếu nếu như trong đệmlệnh có chứa các mã lệnh của các lệnh CALL (gọi chương trình con) hoặc JMP (nhảy),bởi vì lúc gặp các lệnh này nội dung cũ của bộ đệm lệnh sẽ bị xoá và thay thế vào đó

là nội dung mới được nạp bởi các lệnh mới do lệnh nhảy hoặc gọi quyết định Việcnày tiêu tốn nhiều thời gian hơn so với trường hợp trong đệm chỉ có mã lệnh của cáclệnh tuần tự

EU: Nhận các lệnh được lấy ra trước từ hàng đợi lệnh và cung cấp các toán

hạng, các địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Trong khi đó bản thân EU

sẽ giải mã lệnh, thực hiện, rồi lại chuyển các kết quả tới BIU để lưu trữ

Thao tác được thực hiện trước tiên của EU là việc giải mã lệnh và khoảng thờigian này có vẻ như là lãng phí đối với CPU khi mà dường như chẳng có một hoạt động

về mặt điện nào diễn ra ở trên Bus Nhưng trong thực tế, chính khoảng thời gian này làkhoảng thời gian được BIU khai thác để lấy trước các câu lệnh tiếp theo như đã được

mô tả ở trên

Trang 7

Các lệnh chứa trong hàng đợi lệnh chính là những lệnh cất trong các ô nhớ liêntiếp nhau và kế tiếp lệnh đang được thực hiện Nếu EU thực hiện một lệnh rồi chuyểnđiều khiển đến một nơi khác thì BIU sẽ xoá hàng đợi, lấy lệnh từ địa chỉ mới, chuyểnngay cho EU rồi lại bắt đầu lấy tiếp các lệnh để đưa vào hàng đợi.

Khối EU được tạo thành từ các thanh ghi chung của vi xử lý 8086/8088 Nhưchúng ta đã biết, tất cả các thanh ghi và các đường truyền của dữ liệu nội bộ đều có độrộng 16 bit ở đây không có sự giao tiếp trực tiếp giữa EU và môi trường bên ngoài khi

mà nó nhận các lệnh từ “hàng đợi” được BIU cung cấp (EU không nối với Bus hệthống mà lấy lệnh từ hàng đợi) Khi một lệnh yêu cầu truy nhập tới bộ nhớ hoặc I/O,khối EU sẽ ra lệnh cho khối BIU truyền/nhận dữ liệu Tất cả các dữ liệu được EU điềukhiển đều là địa chỉ 16 bit Nhưng thông qua việc di chuyển vị trí bộ nhớ được BIUthực hiện (định vị lại địa chỉ) khối EU có thể truy cập tới toàn bộ bộ nhớ 1 MB

ALU: Đây chỉ là một tập con của EU, nhưng trong thực tế nó giống như một

phần có cấu trúc độc lập, chịu trách nhiệm thực hiện các thao tác số học và các thaotác logic Các toán hạng có thể là dữ liệu tức thì, dữ liệu từ các thanh ghi hoặc dữ liệuđược lưu trữ trong bộ nhớ Trong khi đó kết quả lại được định vị trong một thanh ghihoặc trong bộ nhớ và 6 cờ trạng thái được cập nhật dựa trên kết quả của các thao tácnày

1.2 Các thanh ghi của CPU

Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:

Các thanh ghi đoạn: CS, DS, SS, ES

Các thanh ghi đa năng: AX, BX, CX, DX

Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI

Thanh ghi cờ FR (Flag)

Thanh ghi đoạn

Khối BIU đưa ra trên BUS địa chỉ 20 bit địa chỉ Như vậy 8086 có khả năngphân biệt được 220 = 1048576 =1M ô nhớ hay 1MB Trong không gian 1MB này bộnhớ cần được chia ra thành các vùng khác nhau dành riêng để:

Chứa mã chương trình

Chứa dữ liệu và kết quả trung gian của chương trình

Tạo ra một vùng nhớ đặc biệt gọi là ngăn xếp (stack) dùng vào việc quản lý cácthông số của bộ vi xử lý khi gọi chương trình con hoặc trở về từ chương trình con

Trong thực tế vi xử lý 8086/8088 có các thanh ghi 16 bit liên quan đến địa chỉđầu của các vùng (đoạn) kể trên và chúng được gọi là các thanh ghi đoạn (Segmentregister) Đó là các thanh ghi:

CS (Code Segment): Thang ghi đoạn mã, chứa địa chỉ bắt đầu của đoạn chươngtrình (đoạn mã) mang những lệnh thực hiện được và thông thường là một vùng nhớchứa dữ liệu dạng hàng không thể thay đổi được hoặc là một vùng ROM/EPROM

DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữliệu, bao gồm các tham số, các biến, các mảng số liệu…

SS (Stack Segment): Thanh ghi đoạn ngăn xếp, chứa địa chỉ bắt đầu của mảngstack Đây là một mảng của RAM, nơi mà dữ liệu tồn tại trong các thanh ghi được lưutrữ trong suốt quá trình ngắt

ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùngnhớ bổ sung

Dung lượng lớn nhất của mỗi đoạn nhớ này là 64 Kbyte Việc thay đổi giá trịcác thanh ghi đoạn tương ứng có thể dịch chuyển linh hoạt trong phạm vi không gian 1Mbyte Vì vậy các đoạn này có thể nằm cách nhau khi thông tin cần lưu trữ trong

Trang 8

chúng đòi hỏi dung lượng đủ 64 Kbyte hoặc cũng có thể nằm trùm lên nhau do cónhững đoạn không cần dùng hết dung lượng 64 Kbyte.

Nội dung của thanh ghi đoạn cho phép ta xác định địa chỉ ô nhớ nằm ở đầuđoạn Địa chỉ này gọi là địa chỉ cơ sở, địa chỉ của các ô nhớ khác nằm trong đoạn đượctính bằng cách cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch(offset) Độ lệch này được xác định bởi một thanh ghi 16 bit khác đóng vai trò thanhghi lệch (offset register)

Mọi sự trao đổi thông tin trong hệ thống vi xử lý đều dùng địa chỉ vật lý, cònđịa chỉ được tạo bởi thanh ghi đoạn và thanh ghi lệch như trên được gọi là địa chỉ logic

và được ký hiệu như sau:

Địa chỉ logic = Thanh ghi đoạn: Thanh ghi lệch

Địa chỉ logic tồn tại dưới dạng giá trị các thanh ghi cụ thể bên trong CPU và khicần thiết truy nhập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi đưa lênbus địa chỉ Việc chuyển đổi này do một bộ tạo địa chỉ thực hiện

Địa chỉ vật lý của ô nhớ được tính theo công thức sau:

20 bit địa chỉ vật lý = Thanh ghi đoạn x 16 + Thanh ghi lệch

Ví dụ: Cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã Nếu

tại một thời điểm nào đó ta có CS = F000H và IP = FFF0H thì

CS:IP ~ F000Hx16 + FFF0H = F0000H + FFF0H = FFFF0HĐịa chỉ FFFF0H chính là địa chỉ khởi động của 8086/8088 Dấu ~ ở đây là đểchỉ sự tương ứng Từ nay khi nói đến địa chỉ của một ô nhớ ta có thể sử dụng cả địachỉ logic lẫn địa chỉ vật lý vì bao giờ cũng có sự tồn tại tương ứng giữa hai loại địa chỉnày Ta cũng cần chú ý rằng một giá trị địa chỉ vật lý sẽ có nhiều cách tạo ra từ nhiềugiá trị thanh ghi đoạn và thanh ghi lệch

Ví dụ: địa chỉ vật lý của 32412H có thể được tạo ra từ các giá trị

Thanh ghi đoạn Thanh ghi lệch

Các thanh ghi đa năng

Trong khối EU có 4 thanh ghi đa năng AX, BX, CX, DX Điều đặc biệt là khicần chứa dữ liệu 8 bit thì mỗi thanh ghi này có thể tách ra làm 2 thanh ghi 8 bit cao vàthấp làm việc độc lập nhau, đó là các thanh ghi AH và AL, BH và BL, CH và CL, DH

và DL Mỗi thanh ghi có thể được dùng một cách vạn năng để chứa các loại dữ liệukhác nhau, nhưng cũng có những công việc đặc biệt nhất định chỉ thao tác với một vàithanh ghi nào đó và chính vì vậy các thanh ghi thường được gán cho những cái tên đặcbiệt rất có ý nghĩa

- AX (Accumulator, Acc): Thanh chứa, các kết quả của các thao tác thườngđược chứa ở đây, nếu kết quả là 8 bit thì thanh ghi AL được gọi là Acc

- BX (Base): Thanh ghi cơ sở, thường chứa địa chỉ cơ sở của một bảng trong bộnhớ

- CX (Count): Thanh ghi đếm, thường dùng để chứa số lần lặp của lệnh lặpLOOP, còn CL thường dùng chứa só lần dịch hoặc quay trong các lệnh dịch hoặc

Trang 9

- DX (Data): Thanh ghi dữ liệu DX và AX tham gia vào thao tác của các phépnhân hoặc chia 16 bit, DX còn dùng để chứa địa chỉ của các cổng trong các lệnh vào/ra

dữ liệu trực tiếp (IN/OUT)

Các thanh ghi con trỏ và chỉ số

8086 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit, các thanh ghi này (trừIP) đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính của mỗithanh ghi là chúng được ngầm định như là thanh ghi lệch cho các đoạn tương ứng

- IP (Instruction Pointer): Con trỏ lệnh, IP luôn trỏ vào lệnh tiếp theo sẽ đượcthực hiện nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng với CS:IP

và được xác định theo cách đã nói ở trên

- BP (Base Pointer): Con trỏ cơ sở, BP luôn trỏ vào một dữ liệu nằm trong đoạnngăn xếp SS Địa chỉ đầy đủ của một phần tử trong đoạn ngăn xếp ứng với SS:BP vàđược xác định theo cách đã nói ở trên

- SP (Stack Pointer): Con trỏ ngăn xếp, luôn trỏ vào đỉnh hiện thời của ngăn xếpnằm trong đoạn ngăn xếp SS Địa chỉ đầy đủ của đỉnh ngăn xếp ứng với SS:SP vàđược xác định theo cách đã nói ở trên

- SI (Source Index): Chỉ số nguồn, SI chỉ vào dữ liệu trong đoạn dữ liệu DS màđịa chỉ đầy đủ tương ứng với DS:SI và được xác định theo cách đã nói ở trên

- DI (Destination Index): Chỉ số đích, DI chỉ vào dữ liệu trong đoạn dữ liệu DS

mà địa chỉ đầy đủ tương ứng với DS:DI và được xác định theo cách đã nói ở trên

Thanh ghi cờ FR (Flag Register)

Đây là thanh ghi khá đặc biệt trong CPU mỗi bit của nó để phản ánh một trạng thái nhất định của kết qủa phép toán do ALU thực hiện hoặc một hoạt động của EU Dựa vào các cờ này mà người lập trình có thể đưa ra các lệnh thích hợp tiếp theo cho vi xử lý (các lệnh nhảy có điều kiện) Thanh ghi cờ có 16 bit nhưng chỉ sử dụng 9 bit làm bit cờ.

x: Không được định nghĩa Các cờ cụ thể:

Các cờ trạng thái

C hoặc CF (Carry Flag): Cờ nhớ CF = 1 khi có nhớ hoặc mượn từ MSB

F hoặc PF (Parity Flag): Cờ chẵn lẻ, phản ánh tính chẵn lẻ của tổng số bit 1 cótrong kết quả CF = 1 khi tổng số bit 1 trong kết quả là chẵn

A hoặc AF (Auxiliary carry Flag): cờ nhớ phụ, rất có ý nghĩa khi ta làm việcvới các số BCD, AF = 1 khi có nhớ hoặc mượn từ một số BCD thấp (4 bit thấp) sangmột số BCD cao (4bit cao)

Z hoặc ZF (Zero Flag): Cờ rỗng, ZF = 1 khi kết qủa bằng 0

S hoặc SF (Sign Flag): Cờ dấu, SF = 1 khi kết quả âm

O hoặc OF (Overflow Flag): Cờ tràn, OF = 1 khi kết quả là số bù hai vượt rangoài giá trị biểu diễn của nó

Các cờ điều khiển (có thể lập hoặc xoá bằng các lệnh riêng)

T hoặc TF (Trap Flag): Cờ bẫy, TF = 1 thì CPU làm việc ở chế độ

chạy từng lệnh (chế độ này dùng khi cần tìm lỗi chương trình)

I hoặc IF (Interrupt enable Flag): Cờ cho phép ngắt, IF = 1 thì CPU cho phépcác yêu cầu ngắt được tác động

D hoặc DF (Direction Flag): Cờ hướng, DF = 1 khi CPU làm việc với chuỗi ký

tự theo ký tự từ phải sang trái (vì vậy D chính là cờ lùi)

1.3.Tổ chức bộ nhớ của vi xử lý 8086

Trang 10

Vi xử lý 8086 có 20 đường địa chỉ và do đó có thể địa chỉ hoá được 220 ô nhớ

dữ liệu 8 bit kéo dài từ địa chỉ 00000h đến FFFFFh Bộ nhớ logic được chia thànhđoạn lệnh (CS), đoạn dữ liệu (DS), đoạn ngăn xếp (SS), đoạn thêm (ES) với 64 Kbytecho mỗi đoạn Tổ chữ bộ nhớ của 8086 được biểu diễn như hình 2.1.4

Bộ nhớ của 8086 được đánh địa chỉ theo đơn vị byte (8 bit), trong khi đó cónhiều thao tác sử dụng số 16 bit Trong bộ nhớ một số 16 bit được lưu thành hai byte

kề nhau Byte thấp được lưu ở địa chỉ thấp hơn Với kiểu này có vẻ hơi ngược so vớikiểu lưu trữ thông thường Chẳng hạn với số 3D7Fh sẽ được lưu trong bộ nhớ thành7F3Dh Đây là một chú ý quan trọng khi làm việc với các số 16 bit trong bộ nhớ

Một số vị trí trong bộ nhớ được dùng cho các thao tác đặc biệt Các vị trí có địachỉ từ FFFF0h – FFFFFh được dự tính cho các thao tác nhảy đến một chương trìnhkhởi tạo hệ thống Khi được RESET CPU sẽ thực hiện lệnh đầu tiên ở địa chỉ FFFF0h

mà ở đó thường chứa một lệnh nhảy

Các vị trí từ 00000h – 003FFh được dự tính cho các thao tác xử lý ngắt Trongphần này chứa địa chỉ chương trình con xử lý ngắt nên được gọi là bảng vector ngắt

2 Các chế độ định địa chỉ của bộ vi xư lý 8086

Trước khi đi vào các chế độ địa chỉ của Vi xử lý 8086 ta nói qua về cách mãhoá lệnh trong vi xử lý 8082

Lệnh của bộ vi xử lý được ghi bằng các ký tự dưới dạng gợi nhớ để người sửdụng dễ nhận biết Đối với bản thân bộ vi xử lý thì lệnh cho nó được mã hoá dướidạng các số 0 và 1 (còn gọi là mã máy) vì đó là dạng biểu diễn thông tin duy nhất màmáy có thể hiểu được Vì lệnh cho bộ vi xử lý được cho dưới dạng mã nên sau khinhận lệnh, bộ vi xử lý phải thực hiện giải mã lệnh rồi sau đó mới thực hiện lệnh

Một lệnh có thể có độ dài một vài byte tuỳ theo bộ vi xử lý Đối với vi xử lý

8086 một lệnh có độ dài từ 1 đến 6 byte Ta sẽ dùng lệnh MOV để giải thích cách ghilệnh nói chung của 8082

Hình 1.1: Biểu diễn dạng thức các byte dùng để mã hoá lệnh MOV.

Từ đây ta thấy để mã hoá lệnh MOV cần ít nhất 2 byte Trong đó 6 bit đầu dùng

để chứa mã lệnh, 6 bit này luôn là 10005 đối với các thanh ghi đoạn thì điều này lạikhác Bit W dùng để chỉ ra rằng một byte (W=0) hoặc một từ (W=1) sẽ được chuyền

đi Trong thao tác chuyển dữ liệu, một toán hạng luôn bắt buộc phải là thanh ghi Bộ vi

xử lý sử dụng 2 hoặc 3 bit (REG) để mã hoá các thanh ghi trong CPU như sau:

Bảng 1.1 Giá trị mã hóa thanh ghi

Thanh ghi Mã Thanh ghi đoạn Mã

Trang 11

Hai bit MOD (chế độ) cùng với ba bit R/M (thanh ghi/bộ nhớ) tạo ra 5 bit dùng

để chỉ ra chế độ địa chỉ cho các toán hạng của lệnh Bảng 1.2 cho ta thấy cách mã hoácác chế độ địa chỉ

Bảng 1.2 Phối hợp MOD và R/M để tạo ra các chế độ địa chỉ

MOD

Chế độ địa chỉ thanh ghi

Chế độ địa chỉ tức thì

Chế độ địa chỉ trực tiếp

Chế độ địa chỉ gián tiếp qua thanh ghi

Chế độ địa chỉ tương đối cơ sở

Chế độ địa chỉ tương đối chỉ số

Chế độ địa chỉ tương đối cơ sở chỉ số

Chế độ địa chỉ chuỗi (String) – mảng

Chế độ địa chỉ cổng (Port)

2.1 Chế độ địa chỉ thanh ghi

Trong chế độ địa chỉ này người ta sử dụng các thanh ghi có sẵn trong CPU như

là các toán hạng để chứa dữ liệu cần thao tác, vì vậy khi thực hiện có thể đạt tốc độtruy nhập cao hơn so với các lệnh truy nhập đến bộ nhớ

Ví dụ:

MOV BX, DX ; copy nội dung DX vào BX

Trang 12

ADD AX, BX ; cộng AX với BX rồi ghi kết qủa vào AX

2.2 Chế độ địa chỉ tức thì

Trong chế độ này toán hạng đích là một thanh ghi hay một ô nhớ, còn toán hạngnguồn là một hằng số Ta có thể dùng chế độ địa chỉ này để nạp dữ liệu cần thao tácvào bất kỳ thanh ghi nào trừ (thanh ghi đoạn và thanh ghi cờ) và bất kỳ ô nhớ nàotrong đoạn dữ liệu DS

Ví dụ:

MOV CL, 100 ; chuyển 100 vào CL

MOV [BX], 20 ;chuyển 20 vào ô nhớ tại địa chỉ DS:BX

2.3 Chế độ địa chỉ trực tiếp

Trong chế độ địa chỉ này một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa

dữ liệu, còn toán hạng kia có thể là thanh ghi mà không được là ô nhớ

Ví dụ:

MOV AL, [0243H] ;chuyển nội dung ở ô nhớ DS:0243 vào AL

2.4 Chế độ địa chỉ gián tiếp qua thanh ghi

Trong chế độ địa chỉ này một toán hạng là một thanh ghi được sử dụng để chứađịa chỉ lệch của ô nhớ dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà khôngđược là ô nhớ

Ví dụ:

MOV AL, [BX] ;copy nội dung ô nhớ có địa chỉ DS:SI vào AL

MOV [DI], AX ;copy nội dung AX vào 2 ô nhớ liên tiếp có địa chỉ DS:DI vàDS:(DI+1)

2.5 Chế độ địa chỉ tương đối cơ sở

Trong chế độ địa chỉ này các thanh ghi cơ sở như BX và BP và các hằng số biểudiễn các giá trị dịch chuyển được dùng để tính địa chỉ hiệu dụng của toán hạng trongcác vùng nhớ DS và SS

Ví dụ:

MOV CX, [BX]+10 ;copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:BX+10 vàDS:BX+11 vào CX

2.6 Chế độ địa chỉ tương đối chỉ số

Trong chế độ địa chỉ này các thanh ghi chỉ số như SI và DI và các hằng số biểudiễn các giá trị dịch chuyển được dùng để tính địa chỉ hiệu dụng của toán hạng trongcác vùng nhớ DS

Ví dụ:

MOV CX, [SI]+10 ;copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:SI+10 vàDS:SI+11vào CX

2.7 Chế độ địa chỉ tương đối chỉ số cơ sở

Kết hợp hai chế độ địa chỉ chỉ số và cơ sở ta có chế độ địa chỉ chỉ số cơ sở.Trong chế độ này ta dùng cả hai thanh ghi cơ sở lẫn thanh ghi chỉ số để tính địa chỉcủa toán hạng Nếu ta dùng thêm cả thành phần biểu diễn sự dịch chuyển của địa chỉthì ta có chế độ địa chỉ tổng hợp nhất: Chế độ địa chỉ tương đối chỉ số cơ sở

Ví dụ:

MOV AL, [BP+DI+5] ;chuyển nội dung ô nhớ có địa chỉ DS:BP+DI+5 vào ALCác chế độ địa chỉ đã trình bày ở trên có thể tóm tắt lại trong bảng sau:

Bảng 1.3: Các chế độ địa chỉ

Trang 13

Chế độ địa chỉ Toán hạng Thanh ghi đoạn ngầm định

[BP]+Disp DSSSTương đối chỉ số [DI]+Disp

[SI]+Disp

DSDSTương đối chỉ số cơ sở [BX]+[DI]+Disp DS

[BX]+[SI]+Disp [BP]+[DI]+Disp[BP]+[SI]+Disp

DSSSSS

Chú ý: Reg: Thanh ghi, Data: Dữ liệu tức thì, Disp: Dịch chuyển.

3 Tập lệnh của vi xử lý 8086

Tập lệnh của họ vi xử lý 80x86 đảm bảo tương thích thế hệ sau với thế hệ trước.điều đó có nghĩa là các chương trình viết cho 8086 vẫn chạy được trên các bộ vi xử lýmới hơn mà không phải thay đổi (không đảm bảo thứ tự ngược lại) Tập lệnh của một

bộ vi xử lý thường có rất nhiều lệnh (hàng trăm lệnh), vì thế mà việc tiếp cận và làmchủ chúng là trương đối khó khăn Có nhiều cách trình bày tập lệnh của bộ vi xử lý:Trình bày theo nhóm lệnh hoặc theo thứ tự abc Để có thể nhanh chóng và dễ dàng sửdụng các lệnh cơ bản và lập trình được ngay, ta sẽ tiếp cận tập lệnh của bộ vi xử lýtheo nhóm các thao tác cơ bản trong quá trình xử lý và điều khiển Với mỗi thao tácnói trên, ta làm quen với một vài lệnh tiêu biểu (độc giả có thể tra cứu thêm các lệnhkhác trong phần phụ lục) Các chức năng cơ bản của một bộ vi xử lý thường gồm:

Nhóm các lệnh vận chuyển (sao chép) dữ liệu

Nhóm các lệnh vận chuyển (sao chép) dữ liệu

1 LDS – Load register and DS with words from memory (nạp một từ (từ bộ

nhớ) vào thanh ghi cho trong lệnh và một từ tiếp theo vào DS)

Trong đó:

Đích là một trong các thanh ghi: AX, BX, CX, DX, SP, BP, SI, DI

Nguồn là ô nhớ trong đoạn DS được chỉ ra trong lệnh

Đây là lệnh nạp vào thanh ghi đã chọn và vào DS từ 4 ô nhớ liên tiếp Mộttrong những ứng dụng của lệnh này là làm cho SI và DS chỉ vào địa chỉ đầu của vùng

Trang 14

nhớ chứa chuỗi Nguồn trước khi đến lệnh thao tác chuỗi.

Các cờ bị thay đổi: không

2 LEA – Load Effective Address (nạp địa chỉ hiệu dụng vào thanh ghi)

Dạng lệnh: LEA Đích, Nguồn

Trong đó:

Đích là một trong các thanh ghi: BX, CX, DX, BP, SI, DI

Nguồn là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô nhớ cụ thể.Đích <- Địa chỉ lệch của Nguồn, hoặc

Đích -> Địa chỉ hiệu dụng của Nguồn

Đây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớ chọn làmNguồn rồi nạp vào thanh ghi đã chọn

Các cờ bị thay đổi: không

3 MOV – Mov a byte or word (chuyển một byte hay từ)

Dạng lệnh: MOV Đích, Nguồn

Mô tả: Đích <- Nguồn

Trong đó toán hạng đích và Nguồn có thể tìm được theo các chế độ địa chỉ khácnhau, nhưng phải có cùng độ dài và không được phép đồng thời là hai ô nhớ hoặc haithanh ghi đoạn

Các cờ bị thay đổi: không

4 POP – Pop word from top of Stack (lấy lại 1 từ vào thanh ghi từ đỉnh ngăn

Các cờ bị thay đổi: không

5 PUSH – Push word on the Stack (cất 1 từ vào ngăn xếp)

DEC trừ toán hạng Đích đi 1 Toán hạng Đích có thể là byte hay word

Các cờ bị thay đổi: AF, OF, PF, SF, ZF

9 DIV – Division (chia không dấu)

Trang 15

độ dài của toán hạng Nguồn) thì 8086 thực hiện lệnh ngắt INT 0.

Các cờ bị thay đổi: không

10 INC – Increment (tăng toán hạng lên 1)

Dạng lệnh: INC đích

Mô tả: Đích <- Đích + 1

Lệnh này tăng đích lên 1, tương đương với việc ADD đích, 1 nhưng chạy nhanhhơn

Các cờ bị thay đổi: AF, OF, PF, SF, ZF

11.MUL – Multiply unsigned byte or word (nhân số không dấu)

Các cờ bị thay đổi: CF, OF

12 NEG – Negation (lấy bù hai của một toán hạng, đảo dấu của một toán

Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF

13 SBB – Substract with Borrow (trừ có mượn)

Dạng lệnh: SBB Đích, Nguồn

Mô tả: Đích <- Đích-Nguồn-CF

Toán hạng đích vào Nguồn phải chứa cùng một loại dữ liệu và không đượcđồng thời là hai ô nhớ, cũng không được là thanh ghi đoạn

Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF

14 SUB – Substract (trừ hai toán hạng)

Trang 16

15 AND (phép và logic)

Dạng lệnh: AND Đích, Nguồn

Mô tả: Đích <- Đích ^ NguồnThực hiện phép và logic hai toán hạng và lưu kết quả vào toán hạng đích.Người ta thường sử dụng để che đi/giữ lại một vài bit nào đó của một toán hạng bằngcách nhân logic toán hạng đó với toán hạng tức thì có các bit 0/1 ở các vị trí cần cheđi/giữ lại tương ứng

Các cờ bị thay đổi: CF, OF, PF, SF, ZF

12 NOT – Logical Negation (phủ định logic)

Dạng lệnh: NOT Đích

NOT đảo các giá trị của các bit của toán hạng đích

Các cờ bị thay đổi: không

17 OR – Logic OR (phép hoặc logic)

Dạng lệnh: OR Đích, Nguồn

Mô tả: Đích = Đích ˅ NguồnToán hạng Đích và Nguồn phải chứa dữ liệu cùng độ dài và không được phépđồng thời là hai ô nhớ và cũng không được là thanh ghi đoạn Phép OR thường dùng

để lập một vài bit nào đó của toán hạng bằng cách cộng logic toán hạng đó với cáctoán hạng tức thời có các bit 1 tại vị trí tương ứng cần thiết lập

Các cờ bị thay đổi: CF, OF, PF, SF, ZF

Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF

Các cờ chính theo quan hệ đích và Nguồn khi so sánh hai số không dấu

Đích = Nguồn 0 1Đích > Nguồn 0 0Đích < Nguồn 1 0Nhóm các lệnh nhảy (rẽ nhánh)

19 JB/JC/JNAE – Jump if Below/Jump if Carry/Jump if Not Above or Equal

(nhảy nếu thấp hơn/nhảy nếu có nhớ/nhảy nếu không cao hơn hoặc bằng)

Dạng lệnh:

Mô tả: IP <- IP+dịch chuyển

Ba lệnh trên biểu diễn cùng một thao tác nhảy có điều kiện tới NHAN nếu CF =

1 Quan hệ cao hơn/thấp là quan hệ dành cho việc so sánh (do lệnh CMP thực hiện) độlớn hai số không dấu NHAN phải nằm cách xa một khoảng -128…+127 byte so với

Trang 17

lệnh tiếp theo sau lệnh JB/JC/JNAE Chương trình sẽ căn cứ vào vị trí NHAN để xácđịnh giá trị dịch chuyển.

Các cờ bị thay đổi: không

20.HLT – Halt processing (dừng)

Dạng lệnh: HLT

Khi gặp lệnh này, các hoạt động của vi xử lý 8086 bị tạm dừng và bước vàotrạng thái dừng Để thoát khỏi trạng thái dừng chỉ có cách tác động vào một trong cácchân INTR, NMI, RESET của bộ vi xử lý

Các cờ bị thay đổi: không

4 Các chế độ làm việc của vi xử lý

Chế độ khởi động

Vi xử lý có hai chế độ khởi động: khởi động cứng và khởi động mềm

Khởi động cứng: Là đưa tín hiệu tác dụng vào chân Reset của mạch vi xử lý(thường ở mức thấp) Đối với bộ vi xử lý 8086, sau tín hiệu Reset chương trình đượcthực hiện từ ô nhớ F000H – FFF0H Trong đại đa số trường hợp ô nhớ này thườngchứa một lệnh nhảy tới một thủ tục thực hiện việc khởi tạo hệ thống

Khởi động mềm: Là quá trình khởi động lại (Restart) của mạch vi xử lý sau khiđã thực hiện các lệnh đặc biệt Mỗi lệnh khởi động có một địa chỉ riêng giữ ở một ônhớ nhất định trong ROM Thông thường các hãng sản xuất tổ chức một vùng nhớ đặcbiệt để làm nơi chứa các lệnh khởi động này gọi là vùng con chứa vector khởi động

Chế độ treo

Chế độ treo được sử dụng trong trường hợp cần nâng cao tốc độ truyền số liệukhi các bộ vi xử lý khác hoặc thiết bị ngoại vi muốn thâm nhập trực tiếp bộ nhớ màkhông phải thông qua mạch vi xử lý nữa Muốn vậy ngoại vi hoặc các bộ vi xử lý khácchỉ cần thông báo cho vi xử lý biết để xin phép sử dụng các đường Bus Khi điều này

có thể thực hiện được thì vi xử lý trả lời tín hiệu đồng ý và chuyển sang chế độ treo.Chế độ ngoại vi thâm nhập trực tiếp bộ nhớ được gọi là chế độ DMA (Direct MemoryAccess) Trong chế độ treo các đường dây được nối với chân ra của mạch vi xử lý, cácđường địa chỉ và dữ liệu đều ở chế độ Hi-Z

Chế độ ngắt

Trong trường hợp vi xử lý làm việc với ngoại vi chậm mà lại phải xử lý vớikhối lượng tin tức lớn thì hoạt động trong chế độ đợi sẽ mất quá nhiều thời gian và ảnhhưởng tới hoạt động chung của toàn hệ Lúc đó người ta cho vi xử lý làm việc ở chế độngắt ở chế độ này ngoại vi sẽ gửi tín hiệu xin ngắt đến bộ vi xử lý, nếu là ngắt hợp lýthì vi xử lý sẽ thực hiện nốt lệnh hiện hành và chuyển sang chế độ xử lý ngắt Vi xử lýgửi ra tín hiệu đồng ý ngắt, ngoại vi nhận được tín hiệu đó sẽ gửi vào CPU các địa chỉtương ứng với chương trình con cần xử lý ngắt mà thực chất đây là quá trình nhận dữliệu từ ngoại vi đã xử lý xong Sau khi nhận được địa chỉ ngắt vi xử lý tạm thời dừngcông việc chính, lưu giữ địa chỉ của chương trình hiện hành và nạp vào địa chỉ củangắt Sau khi thực hiện xong để ra khỏi chế độ của ngắt cần có lệnh quay trở về IRET

Trang 18

ở cuối chương trình ngắt Khi nhận được tín hiệu trở về vi xử lý sẽ quay trở về chươngtrình chính với đúng chế độ trước khi ngắt.

Chế độ dừng

Sau khi thực hiện lệnh dừng (HLT) mạch vi xử lý sẽ thực hiện một chu kỳ máy nào

đó (thông qua lệnh NOP) Sau lệnh (NOP) vi xử lý vẫn sẵn sàng làm việc nhưng phải

có khoảng trống để nghỉ ngơi Muốn thoát khỏi chế độ này cần đưa vào lệnh RESETthì vi xử lý sẽ bắt đâu làm việc trở lại

5 Lập trình hợp ngữ cho vi xử lý 8086/8088

5.1 Giới thiệu chung về hợp ngữ

Khi đã xây dựng xong phần cứng cho một hệ vi xử lý thì vấn đề còn lại là viếtphần mềm cho sự hoạt động của nó Và như chúng ta đã biết CPU chỉ có thể tính toánđược trên các số nhị phân và với tốc độ rất cao Tuy nhiên đối với con người nếu phảilập trình với các số nhị phân thì thật nhàm chán và chậm chạp Chương trình chỉ gồmcác số 0 và 1 là trình ngôn ngữ máy

Thời kỳ đầu của máy tính các lập trình viên phải viết chương trình dưới dạngngôn ngữ máy Mặc dù số Hexa đã biểu diễn khá hiệu quả số nhị phân, song việc làmviệc trên mã máy vẫn còn là công việc nặng nhọc đối với con người Cuối cùng hợpngữ đã được xây dựng, trong đó có sử dụng các từ gợi nhớ và cùng với những đặc tínhkhác nữa, hợp ngữ đã giúp cho công việc lập trình trở nên dễ dàng và ít lỗi hơn Thuậtngữ từ gợi nhớ hay từ gợi (mnemonic) thường được sử dụng trong các tài liệu kỹ thuậtmáy tính để chỉ các mã lệnh và từ viết tắt tương đối dễ nhớ

Các chương trình hợp ngữ cần được dịch ra dưới dạng mã máy nhờ một chươngtrình được gọi là chương trình dịch hợp ngữ hay trình hợp dịch Hợp ngữ được coi làmột ngôn ngữ bậc thấp vì nó có quan hệ trực tiếp với cấu trúc bên trong CPU Để lậptrình hợp ngữ lập trình viên phải nắm vững cấu trúc bên trong CPU và tập lệnh của vi

Work-5.2 Cú pháp của chương trình hợp ngữ

Trước khi trình bày cách lập trình bằng hợp ngữ ta phải tìm hiểu qua cú phápcủa ngôn ngữ này Nếu chương trình viết đúng về cú pháp sẽ được chương trình dịchdịch ra dưới dạng mã máy Từ các chương trình mã máy này ta có thể tạo ra đượcchương trình chạy bằng cách dịch tiếp ra các tệp có đuôi EXE hoặc COM

Các trường của hợp ngữ

Một dòng lệnh của một chương trình hợp ngữ có thể có những trường sau(không nhất thiết phải có đủ các trường)

Tên (nhãn): Mã lệnh Các toán hạng ;Chú thích

Nhãn: Có thể là nơi đến của một lệnh nhảy, hay một lời gọi đến một chương

trình con Các nhãn này sẽ được chương trình dịch gán bằng các địa chỉ cụ thể của ônhớ Nhãn có thể dài đến 31 ký tự nhưng thường ngắn hơn nhiều, các ký tự có thể làchữ, số, ký tự đặc biệt nhưng lưu ý rằng ký tự đầu tiên không được là số Một nhãnthường kết thúc bằng dấu “:”

Mã lệnh: Trong trường mã lệnh nói chung sẽ có các lệnh thật và lệnh giả Đối

với các lệnh thật thì trường này sẽ chứa các mã lệnh gợi nhớ Mã lệnh này sẽ được

Trang 19

chương trình dịch dịch ra dạng mã máy Đối với các hướng dẫn chương trình dịch thìtrường này chứa các thông tin khác nhau liên quan đến các lệnh giả của hướng dẫn.

Toán hạng: Đối với lệnh thật thì trường này chứa các toán hạng của lệnh Tuỳ

theo từng loại lệnh mà ta có thể có 0, 1 hoặc 2 toán hạng trong một lệnh Trong trườnghợp các lệnh có một toán hạng thông thường ta có toán hạng là đích hoặc Nguồn, còntrong trường hợp lệnh với 2 toán hạng thì ta có một toán hạng là Đích và một toánhạng là Nguồn Đối với các hướng dẫn chương trình dịch thì trường này chứa cácthông tin khác nhau liên quan đến các lệnh giả của hướng dẫn

Chú thích: Ghi vào các lời giải thích cho chương trình và được viết sau dấu

“;” Assembler sẽ bỏ qua tất cả các chú thích này khi dịch chương trình

Khai báo biến, hằng, chương trình con

Khai báo biến

Khai báo hằng

Các hằng số trong chương trình hợp ngữ thường được định nghĩa và gán bằngmột tên dễ nhớ để làm cho chương trình dễ đọc hơn, thuận tiện cho việc kiểm tra vàhiệu chỉnh Việc chỉ dẫn được thực hiện bằng toán tử EQU

Ví dụ 1:

HANG2 EQU ‘XAU KY TU’

Với hằng là một xâu ký tự như HANG2 thì có thể sử dụng để định nghĩa chomột biến mảng khác

Khai báo chương trình con

Khi một chương trình cần thiết phải thực hiện một nhóm lệnh nhất định (chúng

có thể bao gồm các tham số khác nhau) nhiều lần, thì chúng ta nên nhóm các lệnh đóthành một chương trình con Sau đó nó được gọi và thực hiện bởi lệnh CALL, kết thúcchương trình con phải có lệnh RET Sau lệnh RET chúng sẽ trao quyền điều khiển chochương trình chính tiếp theo tại vị trí mà nó đã đạt tới trước khi thực hiện lệnh CALL

Tên_ctc Proc ; các lệnh của thân chương trình con RET

Khuôn dạng của chương trình hợp ngữ

Như chúng ta đã biết có hai loại tập tin thực hiện được là EXE và COM

Trang 20

Chương trình EXE là một thủ tục xa (Far Procedure), có thể được gọi từ mộtđoạn khác Với chương trình EXE có thể được định nghĩa 4 đoạn khác nhau: Đoạnlệnh (code), đoạn dữ liệu (data), đoạn ngăn xếp (stack) và đoạn thêm (extra).

Khác với chương trình EXE chương trình COM là một thủ tục gần (Near cedure), chỉ gọi được từ bên trong đoạn lệnh và chỉ có thể được định nghĩa với duynhất một đoạn lệnh, do đó phải đặt đoạn dữ liệu và ngăn xếp vào bên trong đoạn lệnhnày

Pro-Chương trình EXE

Khi một chương trình EXE được nạp vào bộ nhớ, DOS sẽ tạo ra một vùng gồm

256 byte gọi là đoạn mở đầu của chương trình (PSP), dùng để chứa các thông tin liênquan đến việc thực hiện chương trình Vùng PSP nằm ngay trước phần mã lệnh Cácthông số liên quan đến chương trình cũng được đưa vào DS, ES Vì vậy DS và ESkhông chứa địa chỉ đoạn dữ liệu, do đó phải đặt thanh ghi DS để nó chứa địa chỉ đoạn

dữ liệu bằng các lệnh sau đây:

MOV AX, dataMOV DS, AXKhung cho một chương trình EXE có dạng sau:

END StartNhãn Start là nơi chứa địa chỉ đầu tiên mà CPU sẽ thực hiện, chỉ thị END sẽ kếtthúc chương trình

6 Thực hành

Trang 21

Nhập mã HEX vào bộ thí nghiệm

- Bước 1: Nhấn READ để chọn vùng nhớ lưu chương trình

- Bước 2: Đặt địa chỉ cần nhập mã chương trình

- Bước 3: Nhấn WR để nhập từng byte dữ liệu

- Bước 4: Đặt CS, IP và DS

- Bước 5: Nhấn STEP để chạy chương trình

- Bước 6: Kiểm tra kết quả

6.2 Sinh viên thực hành

Viết chương trình cộng có nhớ 4 byts dữ liệu từ địa chỉ 2432H và 2233H, kếtquả lưu vào địa chỉ 4367H sau đó nhập lệnh vào bộ thí nghiệm và chạy chương trình.(chỉ sử dụng thanh ghi AX, BX, CX, DX, DI, SI)

Viết chương trình trừ có mượn 4 byts dữ liệu từ địa chỉ 4153H và 3239H, kếtquả lưu vào địa chỉ 4172H sau đó nhập lệnh vào bộ thí nghiệm và chạy chương trình.(chỉ sử dụng thanh ghi AX, BP, CX, DX, DI, SI)

Những trọng tâm cần chú ý trong bài

- Các cách định địa chỉ

- Tập lệnh

- Cấu trúc chương trình

- Các bước khi lập trình

Bài tập mở rộng và nâng cao

Bài 1: Phân tích đoạn chương trình sau đây:

LAP:

Trang 22

COMP AL, 0FH

Gợi ý: đây là đoạn chương trình lặp, chương trình kết thúc nếu AL = 0FH hay CX = 0

Bài 2: Hãy viết chương trình in chuỗi ký tự “lap trinh 8086”

Gợi ý: xem ví dụ 6 trang 124

Bài 3: Hãy viết chương trình nhập một chuỗi ký tự và chuyển chữ thường thành

chữ hoa

Yêu cầu về đánh giá kết quả học tập bài 1

Nội dung:

+ Về kiến thức: trình bày được chức năng của các lệnh đả học

+ Về kỹ năng: Lập trình được môt số bài đơn giản

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và

vệ sinh công nghiệp

Phương pháp:

+ Về kiến thức: Được đánh giá bằng phương pháp viết, trắc nghiệm

+ Về kỹ năng: Được đánh giá bằng phương pháp thực hành

+ Năng lực tự chủ và trách nhiệm: Rèn luyện tính tỷ mỉ, chính xác, an toàn và

vệ sinh công nghiệp

Trang 23

BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051

Mã bài: MĐ 18-02 Giới thiệu:

Vi điều khiển (Microcontroller) có khả năng tính toán, xử lý, và thay đổichương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả đối với các bàitoán và hệ thống, nhưng cấu trúc phần cứng dành cho người dùng đơn giản Vi điềukhiển ra đời mang lại sự tiện lợi đối với người dùng, họ không cần nắm vững một khốilượng kiến thức quá lớn như người dùng vi xử lý, kết cấu mạch điện dành cho ngườidùng cũng trở nên đơn giản hơn nhiều và có khả năng giao tiếp trực tiếp với các thiết

- Mô tả được cấu trúc họ vi điều khiển chuẩn công nghiệp

- Thực hiện truy xuất bộ nhớ dữ liệu, bộ nhớ chương trình đúng qui trình kỹthuật

- Thực hiện đúng kỹ thuật phương pháp mở rộng bộ nhớ ngoài

- Trình bày được nguyên lý hoạt động của mạch reset

Nội dung chính:

1 Tổng quan

Hình 2.1: Sơ đồ khối vi điều khiển 8051.

Thuật ngữ “8051” được dùng để chỉ rộng rãi các chip của họ MSC-51 Vi mạchtổng quát của họ MSC-51 là chip 8051, linh kiện đầu tiên của họ này được hãng Intelđưa ra thị trường MCS-51 bao gồm nhiều phiên bản khác nhau, mỗi phiên bảnsau tăng thêm một số thanh ghi điều khiển hoạt động của MCS-51 Hiện hay nhiềunhà sản xuất IC như Seimens, Advance Micro Devices (AMD), Fujitsu, Philips, At-mel… được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51 Ở ViệtNam các chip và các biến thể họ MSC-51của hãng Atmel và Philips được sử dụngrộng rãi như: AT89C2051, AT89C4051, AT89C51, AT8C52, AT89S52, AT89S8252,AT89S8253, P89C51RDxx, P89V51RDxx…

Vi điều khiển 8051 có 40 chân, mỗi chân có một kí hiệu tên và có các đặc trưng

Trang 24

như sau:

- 4KBROM, 128byteRAM 4port xuất nhập (I/Oport) 8bit

- 2 bộ định thời 16bit, mạch giao tiếp nối tiếp

- Không gian nhớ chương trình ngoài 64K, không gian nhớ dữ liệu ngoài 64K

- Bộ xử lý bit 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1bit nhân/chia trong4µs

Tuy nhiên, tuỳ thuộc vào từng họ VĐK của từng hãng sản xuất khác nhau màtính năng cũng như phạm vi ứng dụng của mỗi bộ VĐK là khác

2 Sơ đồ chân vi điều khiển 8051

Mặc dù các thành viên của họ MSC-51 có nhiều kiểu đóng vỏ khác nhau, chẳnghạn như: hai hàng chân DIP (Dual in-Line Pakage), dạng vỏ dẹp vuông và dạng chípkhông có chân đỡ LLC (Leadless Chip Carrier) Họ MSC-51 có 40 chân thực hiện cácchức năng khác nhau như: vào ra (I/O), đọc, ghi, địa chỉ, dữ liệu và ngắt Tuy nhiên,trong khuôn khổ chương trình chỉ khảo sát Vi điều khiển 40 chân dạng DIP như hìnhsau:

Hình 2.2: Sơ đồ chân của họ 8051

Chip 8051 có 40 chân, mỗi chân có một kí hiệu tên và có các chức năng như sau:

- Chân 40: nối với nguồn nuôi +5V

- Chân 20: nối với đất (Mass, GND)

- Chân 29: (PSEN) (programstoreenable) là tín hiệu điều khiển xuất ra của

8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE nable) của EPROM ngoài để cho phép đọc các byte của chương trình Các xung tínhiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh Những mã nhị phân của chươngtrình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi lệnh của

(OutoutE-8051 bởi mã lệnh (chú ý việc đọc ở đây là đọc các lệnh (khác với đọc dữ liệu), khi đóVXL chỉ đọc các bit o p code của lệnh và đưa chúng vào hàng đợi lệnh thông qua cácBus địa chỉ và dữ liệu)

- Chân 30 (ALE: Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051,

nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0

Trang 25

- Chân 31 (EA: Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mãngoài Đối với 8051 thì:

 EA=5V: Chọn ROM nội

 EA=0V:Chọn ROM ngoại

+ 32 chân còn lại chia làm 4 cổng vào/ra: có thể dùng chân đó để để đọc mức gic (0;1 tương ứng với 0V; 5V) vào hay xuất mức logic ra (0;1),

lo-Port 0 từ chân 39 -32 tương ứng là các chân P0.0 đến P0.7

Port 1 từ chân 1- 8 tương ứng là các chân P1.0 đến P1.7

Port 2 từ chân 21- 28 tương ứng là các chân P2.0 đến P2.7

Port 1 từ chân 10- 17 tương ứng là các chân P3.0 đến P3.7

2.1 Chân cho phép bộ nhớ chương trình PSEN

Chân cho phép bộ nhớ chương trình/PSEN (Programstoreenable) là tín hiệuxuất trên chân 24 Đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chươngtrình ngoài Chân này thường nối với chân cho phép xuất /OE (Outputenable) củaEPROM hoặc ROM để cho phép đọc các byte lệnh Tín hiệu/PSEN ở mức logic 0trong suốt thời gian tìm nạp lệnh Các mã nhị phân của chương trình hay Op codeđược đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh IR của 8051 đểđược giải mã Khi thực thi một chương trình chứa ở ROM nội, chân/PSEN được duytrì mức logic không tích cực (logic1)

Hình 2.3: Ghép nối vi điều khiển 8951 với IC chốt, mạch Reset, tụ thạch anh.

2.2 Chân cho phép chốt địa chỉ ALE

Ngõ xuất tín hiệu cho phép chốt địa chỉ ALE (addresslatchenable) Dùng để giải

đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ Khi port 0 được sử dụng làm busđịa chỉ/dữ liệu đa hợp, chân ALE xuất tín hiệu để chốt địa chỉ (byte thấp của địa chỉ 16bit ) vào một thanh ghi ngoài trong suốt ½ đầu của chu kỳ bộ nhớ (memorycycle) Saukhi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp hệ trongsuốt ½ thứ hai của chu kỳ bộ nhớ Tín hiệu ALE có tần số bằng 1/6 tần số của mạchdao động bên trong chip vi điều khiển

2.3 Chân truy xuất ROM ngoài EA

Trang 26

Ngõ vào/EA có thể được nối với 5V (logic1) hoặc với GND (logic 0) Nếu chânnày nối lên 5V chip 8051 thực thi chương trình trong ROM nội Nếu chân này đượcnối với GND(và chân/PSEN cũng ở logic 0) thì chương trình cần được thực thi chứa ở

bộ nhớ ngoài

2.4 Chân RESET(RST)

Ngõ vào RST là ngõ vào xóa chính (masterreset) của 8051 dùng để thiết lập lạitrạng thái ban đầu cho hệ thống hay gọi tắt là reset hệ thống Khi ngõ vào này đượctreo ở mức logic 1 tốit hiểu 2 chu kỳ máy, các thanh ghi bên trong của 8051 được nạplại các giá trị thích hợp cho việc khởi động lại hệ thống

Việc kết nối chân RESET đảm bảo hệ thống bắt đầu làm việc khi Vi điều khiển đượccấp điện, hoặc đang hoạt động mà hệ thống bị lỗi cần tác động cho Vi điều khiển hoạtđộng trở lại, hoặc do người sử dụng muốn quay về trạng thái hoạt động ban đầu Vìvậy chân RESET được kết nối như sau:

Với Vi điều khiển sử dụng thạch anh có tần số f zat = 12MHz sử dụng C=10µF

và R=10KΩ.Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC = 0000H.Sau khi reset, vi điều khiển luôn bắt đầu thực hiện chương trình tại địa chỉ 0000H của

bộ nhớ chương trình nên cácchương trình viết cho vi điều khiển luôn bắt đầu viết tạiđịa chỉ 0000H Nội dung của RAM trong vi điều khiển không bị thay đổi bởi tác độngcủa ngõ vào reset [có nghĩa là vi điều khiển đang sử dụng các thanh ghi để lưu trữ dữliệu nhưng nếu vi điều khiển bị reset thì dữ liệu trong các thanh ghi vẫn không đổi]

2.5 Các chân XTAL1,XTAL2

2.5.1 Kết nối chân XTAL1,XTAL2

Mạch dao động trên chip được ghép nối với mạch thạch anh bên ngoài

ở hai chân XTAL1 và XTAL2 (hình 2.6), các tụ ổn địnhcũng được yêu cầu kết nối, giátrị tụ do nhà sản xuất quy định (30p–40p) Tần số thạch anh thường dùng trong cácứng dụng là: 6.0592Mhz (giao tiếp với cổng Com máy tính ) và 12Mhz Tần số tối đa24Mhz Tần số càng lớn VĐK xử lí càng nhanh

2.5.2 Chu kì máy.

Gọi fzatlà tần số dao động của thạch anh Đối với 89Sxx có thể sử dụng thạch

anh có tần số f zat từ 2MHz đến 33MHz Chu kì máy là khoảng thời gian cần thiết đượcquy định để Vi điều khiển thực hiện hoàn thành một lệnh cơ bản Một chu kì máy bằng

12 lần chu kì dao động của nguồn xung dao động cấp cho nó

Tck = 12.Toc Với: Tck là chu kì máy

Toc là chu kì của nguồn xung dao động cấp cho Vi điều khiển

Như vậy:

Với: T ck là chu kì máy

f oclà tần số dao động cấp cho Vi điều khiển

Ví dụ: Ta kết nối Vi điều khiển với thạch anh có tần số f zat là 12MHz, thì chu kìmáy

T ck=12/(12.106)=10-6s =1µs

Chính vì lí do thạch anh có tần số f zat là 12MHz tạo ra chu kì máy là 1µs, thuận lợi cho việc tính toán thời gian khi lập trình do đó thạch anh có tần số f zat là 12MHzthường được sử dụng trong thực tế Khi giao tiếp truyền nối tiếp với máy vi tính dùng

thạch anh có tần số f zat là 6.0592MHz

Trang 27

3 Cấu trúc Port I/O

Hình 2.4: Vào ra với thiết bị ngoại vi

Port0:

Port0 là port có 2 chức năng ở các chân (32–39)

Chức năng IO (xuất/nhập): dùng cho các thiết kế nhỏ Tuy nhiên, khi dùngchức năng này thì Porto phải dùng thêm các điện trở kéo lên (pull-up), giá trị của điệntrở phụ thuộc vào thành phần kết nối với Port

Khi dùng làm ngõ ra, Porto có thể kéo được 8 ngõ TTL

Khi dùng làm ngõ vào, Port0 phải được set mức logic 1 trước đó

Chức năng địa chỉ/ dữ liệu đa hợp: khi dùng các thiết kếl ớn, đòi hỏi phải sửdụng bộ nhớ ngoài thì Port0 vừa là bus dữ liệu (8bit) vừa là bus địa chỉ (8bit thấp)

Ngoài ra khi lập trình cho AT89C51, Port0 còn dùng để nhận mã khi lập trình

và xuất mà khi kiểm tra (quá trình kiểm tra đòi hỏi phải có điện trở kéo lên)

Port1:

Port1 (chân1 – 8) chỉ có một chức năng là IO, không dùng cho mục đích khác(chỉ trong 8032/8052/8952 thì dùng thêm P1.0 và P1.1 cho bộ định thời thứ 3) TạiPort1 đã có điện trở kéo lên nên không cần thêm điện trở ngoài

Port1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8bit địa chỉ thấp trongquá trình lập trình hay kiểm tra

Khi dùng làm ngõ vào, Port1 phải được set mức logic 1 trước đó

Port2:

Port2 (chân21–28) là port có 2 chức năng:

- Chức năng IO (xuất/nhập): có khả năng kéo được 4ngõ TTL

- Chức năng địa chỉ: dùng làm 8bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ16bit Khi đó, Port2 không được dùng cho mục đích I/O

Khi dùng làm ngõ vào, Port2 phải được set mức logic1 trước đó

Khi lập trình, Port2 dùng làm 8bit địa chỉ cao hay một số tính hiệu điều khiển

Port3:

Port3 (chân10–17)là port có 2 chức năng:

- Chức năng IO:có khả năng kéo được 4 ngõ TTL

Khi dùng làm ngõ vào, Port3 phải được set mức logic 1trước đó

Các Port khi xuất tín hiệu ở mức logic 1 thường không đạt đến 5V mà dao động

trong khoảng từ 3.5V đến 4.9V và dòng xuất ra rất nhỏ dưới 5mA (P0,P2 dòng xuất khoảng 1mA; P1,P3 dòng xuất ra khoảng 1mA đến 5mA) vì vậy dòng xuất này không

đủ để có thể làm led sáng Tuy nhiên khi các Port xuất tín hiệu ở mức logic 0 dòng

Trang 28

điện cho phép đi qua lớn hơn rất nhiều:

Chân Vi điều khiển khi ở mức 0:

Các chip vi điều khiển được dùng làm thành phần trung tâm trong các thiết kếhướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ khóa và hệđiều hành Chương trình điều khiển phải thường trú rong ROM nên 8051 có khônggian bộ nhớ riêng cho chương trình và dữ liệu, cả hai bộ nhớ chương trình và dữ liệuđều đặt trong chip, tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệubằng cách sử dụng các chip nhớ bên ngoài với dung lượng tối đa là 64K

Bộ nhớ nội trong chip bao gồm ROM và RAM

Bộ nhớ ROM:

Bộ nhớ ROM dùng để lưu chương trình do người viết chương trình viết ra.Chương trình là tập hợp các câu lệnh thể hiện các thuật toán để giải quyết các côngviệc cụ thể, chương trình do người thiết kế viết trên máy vi tính, sau đó được đưa vàolưu trong ROM của vi điều khiển, khi hoạt động, vi điều khiển truy xuất từng câu lệnhtrong ROM để thực hiện chương trình ROM còn dùng để chứa số liệu các bảng, cáctham số hệ thống, các số liệu cố định của hệ thống Bộ nhớ ROM được tích hợp trongchip Vi điều khiển với dung lượng tùy vào chủng loại cần dùng, chẳng hạn đối với89S52 là 8KByte, với 89S53 là 12KByte

Bộ nhớ bên trong Vi điều khiển 89Sxx là bộ nhớ Flash ROM cho phép xóa bộnhớ ROM bằng điện và nạp vào chương trình mới cũng bằng điện và có thể nạp xóanhiều lần

Ngoài ra, Vi điều khiển còn có khả năng mở rộng bộ nhớ ROM với việc giaotiếp với bộ nhớ ROM bên ngoài lên đến 64Kbyte (địa chỉ từ 0000H đến FFFH)

Bộ nhớ RAM:

Trang 29

Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ các kết quả trunggian và kết quả cuối cùng của các phép toán, xử lí thông tin Nó cũng dùng để tổ chứccác vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu.

RAM nội trong Vi điều khiển được tổ chức như sau:

Các vị trí trên RAM được định địa chỉ theo từng Byte bằng các số thập lục phân(số Hex) Các bank thanh ghi có địa chỉ 00H đến 1FH 210 vị trí được định địa chỉ bit Các thanh ghi có chức năng đặc biệt có địa chỉ từ 80H đến FFH

4.2 Vùng RAM đa năng

Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H–7FH Bất kỳ vị trí nhớnào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụngcác kiểu định địa chỉ trực tiếp hoặc gián tiếp

4.3 Vùng RAM định địa chỉ bit

8051 có 210 vị trí bit được định địa chỉt rong đó 128bit chứa trong các byte ởđịa chỉ từ 20H-2FH và phần còn lại chứa trong các thanh ghi chức năng đặc biệt Cácdãy thanh ghi: 32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi Các lệnh của

8051 hỗ trợ 8 thanh ghi từ R0–R7 thuộc dãy 0 (bank0) Đây là dãy mặc định sau khireset hệ thống Các thanh ghi này ở các địa chỉ từ 00H– 07H

Trang 30

Các lệnh sử dụng các thanh ghi từ R0–R7 là các lệnh ngắn và thực hiện nhanhhơn so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp Các giá trịthường được sử dụng nên chứa ở một trong các thanh ghi này Dãy thanh ghi đangđược sử dụng được gọi là dãy thanh ghi tích cực Dãy thanh ghi tích cực có thể đượcthay đổi bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW.

Các thanh ghi chức năng đặc biệt (SFR)

Các thanh ghi nội của 8051 được cấu hình thành một phần của RAM trên chip,

do vậy mỗi thanh ghi cũng có một địa chỉ Cũng như các thanh ghi từ R0–R7 ta có 21thanh ghi chức năng đặc biệt SFR chiếm phần trên của RAM nội từ địa chỉ 80H–FFH.Lưu ý không phải tất cả 128 địa chỉ từ 80H–FFH đều được định nghĩa mà chỉ có 21địa chỉ được định nghĩa

Từ trạng thái chương trình PSW (program status word)

Thanh ghi PSW có địa chỉ là D0H chứa các bit trạng thái có chức năng đượctóm tắt trong bảng sau:

Bảng 2.1: Trạng thái thanh ghi PSW

PSW.7 C

hoặc-CY

D7H CaryFlag: Cờ nhớPSW.6 AC D6H AuxiliaryCaryFlag: Cờ nhớ phụ

PSW.5 F0 D5H Flag0 còn gọi là cờ Zero kí hiệu là Z

PSW4 RS1 D4H Register Bank Select 1: bit lựa chọn bank thanh ghi.PSW.3 RS0 D3H Register Bank Select 0: bit lựa chọn bank thanh ghi

00 =Bank 0; ô nhớ có address 00H÷07H gán cho R0-R7

01 =Bank 1; ô nhớ có address 08H÷0FH gán cho R0-R7

10 =Bank 2; ô nhớ có address 10H÷17H gán cho R0-R7

11 =Bank 3; ô nhớ có address 18H÷1FHgán choR0-R7PSW.2 OV D2H Overflow Flag: cờ tràn số nhị phân có dấu

PSW.1 - D1H Reserved: chưa thiết kế nên chưa sử dụng được

PSW.0 P D0H Even Parity Flag: cờ chẵn lẻ

Trang 31

sẽ làm giảm thanh ghi SP Nếu ta không khởi động SP, nội dung mặc định của thanhghi này là 07H

Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địa chỉtruy xuất được bởi kiểu định địa chỉ gián tiếp Các lệnh PUSH và POP sẽ cất dữ liệuvào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) vàlệnh trở về (RET, RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC(Program counter)

Con trỏ dữ liệu DPTR

Con trỏ dữ liệu DPTR(datapointer) được dùng để truy xuất bộ nhớ chương trìnhngoài hoặc bộ nhớ dữ liệu ngoài DPTR là thanh ghi 16bit có địa chỉ là 82H (DPL,bytethấp) và 83H (DPH, byte cao)

Các thanh ghi Port nối tiếp

Các port xuất nhập của 8051 bao gồm port 0 tại địa chỉ 80H, port1 tại địa chỉ90H, port2 tại địa chỉ A0H và port3 tại địa chỉ 0BH Các port0, 2 và 3 không đượcdùng để xuất/nhập nếu ta sử dụng thêm bộ nhớ ngoài hoặc nếu có một số đặc tính của

8051 được sử dụng (như là ngắt, port nối tiếp) Tất cả các port đều được định địa chỉtừng bit nhằm cung cấp các khả năng giao tiếp mạnh

Các thanh ghi định thời

8051 có hai bộ đếm định thời (timer/counter) 16bit để định các khoảng thời gianhoặc để đếm các sự kiện Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH(TH0,byte cao), bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1,bytecao) Họat động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD(timer moderegister) ở địa chỉ 89H và thanh ghi điều khiển định thời TCON (timercon-trolregsiter) ở địa chỉ 88H

Các thanh ghi port nối tiếp (Serial Data Buffer)

Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị

nối tiếp như các thiết bị đầu cuối hoặc moderm, hoặc để giao tiếp với các IC khác Mộtthanh ghi đựơc gọi là bộ đệm dữ liệu nối tiếp SBUF (serialdata buffer) ở địa chỉ 99Hlưu trữ dữ liệu truyền đi và dữ liệu nhận về.Việc ghi lên SBUF sẽ nạp dữ liệu đểtruyền và việc đọc SBUF sẽ lấy dữ liệu đã nhận được.Khi dữ liệu được chuyển vàothanh ghi SBUF, dữ liệu sẽ được chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ

ở đó cho đến khi quá trình truyền dữ liệu qua truyền thông nối tiếp kết thúc Khi thựchiện việc chuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệucủa truyền thông nối tiếp

- Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điềukhiển port nối tiếp SCON(serialportcontrolregister) ở địa chỉ 98H Chỉ có TCON đượcđịnh địa chỉ từng bit

Các thanh ghi ngắt

8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt Cácngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép ngắt bằng cách ghivào thanh ghi cho phép ngắt IE (interruptenable register) ở địa chỉA 8H Mức ưu tiênngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interruptpriorityregister) ở địa chỉB8H Cả hai thanh ghi này đều được định địa chỉ từng bit

Thanh ghi điều khiển nguồn PCON

Thanh ghi PCON (power control) có chức năng điều khiển công suất khi vi điềukhiển làm việc hay ở chế độ chờ Khi vi điều khiển không còn xử lý gì nữa thì ngườilập trình có thể lập trình cho vi điều khiển chuyển sang chế độ chờ để giảm bớt côngsuất tiêu thụ nhất là khi nguồn cung cấp cho vi điều khiển là pin

Trang 32

Thanh ghi PCON tại địa chỉ 87H không cho phép định địa chỉ bit:

+SMOD1(SerialMode1):=1 cho phép tăng gấp đơi tốc độ port nối tiếp trong chếđộ1, 2 và 3

+SMOD0 (SerialMode0): cho phép chọn bit SM0 hay FE trong thanh ghiSCON (=1chọn bit FE)

+POF(Power-offFlag):dùng để nhận dạng loại reset POF=1 khi mở nguồn Do

đó, để xác định loại reset,cần phải xóa bit POF trướcđó

+GF1, GF0 (GeneralpurposeFlag):các bit cờ dành cho người sử dụng

+PD(PowerDown):được xóa bằng phần cứng khi hoạt động reset xảy ra Khi bitPD=1 thì vi điều khiển sẽ chuyển sang chế độ nguồn giảm.Trong chế độ này:

Chỉ có thể thốt khỏi chế độ nguồn giảm bằng cách reset

Nội dung RAM và mức logic trên các port được duy trì

Mạch dao động bên trong và các chức năng khác ngừng hoạt động

Chân ALE và PSEN ớ mức thấp

Yêu cầu Vcc phải có điện áp ít nhất là 2V và phục hồi Vcc=5V ít nhất 10 chu

kỳ trước khi chân RESET xuống mức thấp lần nữa

IDL(Idle):được xóa bằng phần cứng khi hoạt động reset hay có ngắt xảy ra Khibit IDL=1 thì vi điều khiển sẽ chuyển sang chế độ nghỉ.Trong chế độ này:

Chỉ có thể thốt khỏi chế độ nguồn giảm bằng cách Reset hay có ngắt xảy ra.Trạng thái hiện hành của vi điều khiển được duy trì và nội dung các thanh ghikhông đổi

Mạch dao động bên trong không gởi được tín hiệu đến CPU

Chân ALE và PSEN mức cao

Lưu ý rằng các bit điều khiển PD và IDL có tác dụng chính trong tất cả các IC

họ MSC-51nhưng chỉ có thể thực hiện được trong các phiên bản CMOS

Hoạt động Reset

8051 được Reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy vàsau đó chuyển về mức thấp RST có thể được tác động tay hoặc được tác động khi cấpnguồn bằng cách dùng một mạch RC

Trạng thái của các thanh ghi sau khi reset như sau:

Bảng 2.2: Trạng thái các thanh ghi khi Rest

Trang 33

5.1 Các bước thực hiện vẽ sơ đồ chân

Bước 1: Xác định chân nguồn, mass

Bước 2: Xác định chân tạo xung

Bước 3: Xác định chân Reset

Bước 4: Xác định chân Port0-Port3

Bước 5: Kết nối mạch

5.2 Sinh viên thực hành

Vẽ sơ đồ chân và giải thích chức năng của các chân trong Vi điều khiển 8051?

Những trọng tâm cần chú ý trong bài

- Các Port của Vi điều khiển 8051

- Cấu trúc bộ nhớ trong

- Trạng thái các thanh ghi khi hoạt động Reset

Bài tập mở rộng và nâng cao

Bài 4: Giả sử lệnh đầu tiên thực hiện sau khi reset hệ thống là một lệnh gọi

chương trình con, thanh ghi PC sẽ được chứa vào địa chỉ nào của RAM nội trước khiđược chuyển tới chương trình con

Bài 6: Tính giá trị offset tương đối cho lệnh SJMP AHEAD, giả sử lệnh này

nằm tại địa chỉ A050H và A051H, và nhãn AHEAD biểu diễn cho lệnh nằm tại địa chỉ9FE0H

Yêu cầu về đánh giá kết quả học tập:

Nội dung:

+ Về kiến thức: cấu tạo, đặc điểm, ứng dụng của các loại Vi điều khiển

+ Về kỹ năng:

- Thực hiện viết các chương trình theo yêu cầu cho trước

+ Năng lực tự chủ và trách nhiệm: Đánh giá phong cách, thái độ học tập

Phương pháp:

+ Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết, trắc nghiệm

+ Về kỹ năng: Đánh giá kỹ năng thực hành mỗii sinh viên, hoặc mỗi nhóm họcviên thực hiện công việc theo yêu cầu của giáo viên.Tiêu chí đánh giá theo các nộidung:

- Độ chính xác của công việc

- Độ an toàn trên mạch điện

- Thời gian thực hiện công việc

- Độ chính xác theo yêu cầu kỹ thuật

+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác

Trang 34

BÀI 3: TẬP LỆNH 8051Mã bài: MĐ 18-03 Giới thiệu:

Để điều khiển hoạt động khối mạch điện giao tiếp phức tạp của hệ thống, cáckhối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thực hiện, các mạch điệngiao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối này cùng liên kết với viđiều khiển thì mới thực hiện được công việc Để kết nối các khối này đòi hỏi ngườithiết kế phải hiểu biết tinh tường về các thành phần vi điều khiển, bộ nhớ, các thiết bịngoại vi Sau khi kết nối vi điều khiển với các thiết bị ngoại vi, ta phải tìm hiểu về cáctập lệnh của MSC-51 để điều khiển hoạt động hệ thống

Chương này giới thiệu cách thức lập trình trên MCS-51cũng như giải thích hoạtđộng của các lệnh sử dụng cho họ MCS-51

Mục tiêu:

- Phân biệt được các kiểu định địa chỉ và dữ liệu

- Trình bày được đặc tính và công dụng của từng lệnh trong 8051

- Xác định được độ lớn và thời gian thực hiện chương trình

- Kết hợp được các lệnh riêng lẻ để thực hiện thao tác cho trước đúng kỹ thuật

Nội dung chính:

1 Các cách định địa chỉ

Các kiểu định địa chỉ cho phép định rõ nơi lấy dữ liệu hoặc nơi nhận dữ liệu tùythuộc vào cách thức sửd ụng lệnh của người lập trình.Vi điều khiển 8051 có 8 kiểuđịnh địa chỉ như sau:

- Kiểu định địa chỉ dùng thanh ghi

- Kiểu định địa chỉ trực tiếp

- Kiểu định địa chỉ gián tiếp

- Kiểu định địa chỉ tức thời

- Kiểu định địa chỉ tương đối

- Kiểu định địa chỉ tuyệt đối

- Kiểu định địa chỉ dài

- Kiểu định địa chỉ chỉ số

Định địa chỉ bằng thanh ghi

- Các thanh ghi từ R0 – R7 có thể truy xuất bằng cách định địa chỉ trực tiếp haygián tiếp như trên Ngoài ra, các thanh ghi này còn có thể truy xuất bằng cách dùng 3bit trong mã lệnh để chọn 1 trong 8 thanh ghi (8 thanh ghi này có địa chỉ trực tiếp thayđổi tuỳ theo bank thanh ghi đang sử dụng)

- Các lệnh sử dụng kiểu định địa chỉ thanh ghi được mã hóa bằng các dùng 3 bitthấp nhất của opcode (của lệnh) để chỉ ra 1 thanh ghi bên trong không gian địa chỉ lo-gic này Vậy: 1 mã chức năng + địa chỉ toán hạng → 1 lệnh ngắn 1 byte

- Kiểu này thường được dùng cho các lệnh xử lý dữ liệu mà dữ liệu luôn lưutrong các thanh ghi Đối với vi điều khiển thì mã lệnh thuộc kiểu này chỉ có 1 byte

Định địa chỉ trực tiếp

- Định địa chỉ trực tiếp chỉ dùng cho các thanh ghi chức năng đặc biệt và RAMnội của 8951 Giá trị địa chỉ trực tiếp 8 bit được thêm vào phía sau mã lệnh Nếu địachỉ trực tiếp từ 00h – 7Fh thì đó là RAM nội của 8951(128byte), còn địa chỉ từ 80h–FFh là địa chỉ các thanh ghi chức năng đặc biệt

Các lệnh sau có kiểu định địa chỉ trực tiếp:

MOV A, P0MOV A, 30h

Trang 35

- Trong 8051 có 128 byte bộ nhớ RAM Bộ nhớ RAM được gán địa chỉ từ 00Hđến FFH và được phân chia như sau:

Các ngăn nhớ từ 00H đến 1FH được gán cho các băng thanh ghi và ngăn xếp.Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bít để lưu

dữ liệu theo từng bit

Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1byte

Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của bộ nhớRAM Tuy nhiên, chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ30H đến 7FH, vì thực tế đối với không gian nhớ danh cho băng thanh ghi thì đã đượctruy cập bằng tên thanh ghi như R0- R7 ở chế độ định địa chỉ trực tiếp, địa chỉ ngănnhớ RAM chứa dữ liệu là toán hạng của lệnh

Ví dụ:

MOV R0, 40 ; sao nội dung ngăn nhớ 40H của RAM vào R0

MOV R4, 7FH ; chuyển nội dung ngăn nhớ 7FH vào R4

Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp Trong

họ 8051, chỉ có chế độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngănxếp

Lệnh đầu tiên chuyển nội dung từ Port0 vào thanh ghi A Khi biên dịch, chươngtrình sẽ thay thế từ gợi nhớ P0 bằng địa chỉ trực tiếp Port0 (80h) và đưa vào byte 2 củamã lệnh Lệnh thứ hai chuyển nội dung của RAM nội ở địa chỉ 30h vào thanh ghi A

Định địa chỉ gián tiếp (Indirect Addressing)

Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ

Nếu dữ liệu có trên chip CPU thì chỉ các thanh ghi R0 và R1 mới được

sử dụng, và như vậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đếnđịa chỉ của toán hạng ở chế độ định địa chỉ này

Ví dụ:

MOV A, @R0 ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A

MOV @R1, B ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1

- Kiểu định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @, được đặt trướccác thanh ghi R0,R1,SP cho địa chỉ 8 bit(không sử dụng các thanh ghi R2–R7trong chế

độ địa chỉ này) hay DPTR cho địa chỉ 16 bit R0 và R1có thể hoạt động như một thanhghi con trỏ, nội dung của nó cho biết địa chỉ của một ô nhớ trong RAM nội mà dữ liệu

sẽ ghi hoặc sẽ đọc Còn DPTR dùng để truy xuất ô nhớ ngoại.Các lệnh thuộc dạng nàychỉ có 1byte Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truycập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR.Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặckhông gian ROM trên chip Trong những trường hợp đó chúng ta cần sử dụng thanhghi 16 bit DPTR

Vídụ:

MOVA,@R1 ;copy nội dung ô nhớ có địa chỉ đặt trong thanh ghiR1 vào thanh ghi A

Định địa chỉ tức thời (Immediate Addressing)

Khi toán hạng là một hằng số thay vì là một biến, hằng số này có thể đưa vàolệnh và đây là byte dữ liệu tức thời

Trong hợp ngữ, các tồn hạng tức thời được nhận biết nhờ vào ký tự ‘#‘ đặt trướcchúng Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức số học

sử dụng các hằng số, các ký hiệu và các toán tử Trình dịch hợp ngữ tính giá trị và thay

Trang 36

thế dữ liệu tức thời vào trong lệnh Lệnh này thường dùng để nạp 1 giá trị là 1 hằng số

ở byte thứ 2 (hoặc byte thứ 3) vào thanh ghi hoặc ô nhớ

Ví dụ:

MOV A, #12 ;Nạp giá trị 12(OCH) vào thanh ghi A

MOVA, #30H ;nạp dữ liệu 30H vào thanh ghi A

Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bitlàm dữ liệu tức thời Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR,hằng địa chỉ 16 bit được cần đến

Định địa chỉ tương đối

Kiểu định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy.Nơi nhảy đến cóđịa chỉ bằng địa chỉ đang lưu trong thanh ghi PC cộng với 1giá trị 8 bit [còn gọi là giátrị lệch tương đối: relativeoffset] có giá trị từ –128 đến+127 nên vi điều khiển có thểnhảy lùi [nếu số cộng với số âm] và nhảy tới [nếu sốcộng với số dương] Lệnh này cómã lệnh 2byte, byte thứ 2 chính là giá trị lệch tương đối:

- Nơi nhảy đến thường được xác định bởi nhãn (label) và trình biên dịch sẽtính toán giá trị lệch

- Định vị tương đối có ưu điểm là mã lệnh cố định,nhưng khuyết điểm là chỉnhảy ngắn trong phạm vi -128÷127 byte [256byte], nếu nơi nhảy đến xa hơn thì lệnhnày không đáp ứng được sẽ có lỗi

Ví dụ:

SJMP X1 ;nhảy đến nhản coa tên X1 nằm trong

;khoảng 256byte

Định địa chỉ tuyệt đối.

Kiểu định địa chỉ tuyệt đối được dùng với các lệnh ACALLvà AJMP Các lệnhnày có mã lệnh 2byte Định địa chỉ tuyệt đối có ưu điểm là mã lệnh ngắn (2byte),nhưng khuyết điểm là mã lệnh thay đổi và giới hạn phạm vi nơi nhảy đến, gọi đếnkhông

”kếthợpvới“ một giá trị lệch (offset) còn gọi là giá trị tương đối [thường lưu trongthanh ghi]” để tạo ra 1 địa chỉ của ô nhớ cần truy xuất hoặc là địa chỉ của nơi nhảy đến

Trang 37

Cấu trúc chung của mỗi lệnh:

Mã_lệnh Toán_hạng1, Toán_hạng2, Toán_hạng3Trong đó:

- Mã_lệnh:Tên gợi nhớ cho chức năng của lệnh.(VD như add cho addition)

- Toán_hạng1,Toán_hạng2,Toán_hạng3:Là các toán hạng của lệnh, tùy thuộcvào mỗi lệnh số toán hạng có thể không có, có1, 2 hoặc 3

Ví dụ:

- RET (Kết thúc chương trình con) Lệnh này không có toán hạng

- JZTEMP(Chuyển con trỏ chương trình đến vị trí TEMP) Chỉ có1 toán hạng

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanhghi Rn, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A Lệnh này có ảnh hưởngđến thanh thanh trạng thái PSW

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên ô nhớ

Trang 38

có địa chỉ direct, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A Lệnh này cóảnh hưởng đến thanh thanh trạng thái PSW

A (A) + (direct)

Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp:

Cú pháp: Add A,@Ri

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ cóđịa chỉ bằng giá trị của thanh ghi Ri, sau khi thực hiện lệnh kết quả được lưu ở thanhghi A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) + (Ri)

Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định:

Cú pháp: Add A,#data

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với một giá trị xác định, saukhi thực hiện lệnh kết quả được lưu ở thanh ghi A Lệnh này có ảnh hưởng đến thanhthanh trạng thái PSW

A (A) + # data

Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn có số nhớ ở cờ C:

Cú pháp: AddC A,Rn

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanhghi Rn và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả đượclưu ở thanh ghi A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) + (C) + (Rn)

Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và giá trị số nhớ ở cờ C.

Cú pháp: AddC A,direct

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ cóđịa chỉ direct và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quảđược lưu ở thanh ghi A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) + (C) + (Rn)

Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C.

Cú pháp: AddC A, @Ri

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ

có địa chỉ bằng giá trị của thanh ghi Ri và cộng thêm giá trị của số nhớ trên cờ C, saukhi thực hiện lệnh kết quả được lưu ở thanh ghi A Lệnh này có ảnh hưởng đến thanhthanh trạng thái PSW

-Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C.

Cú pháp: AddC A,#data

Trang 39

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte.

Thời gian thực hiện: 1 chu kì máy

Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị xác định và cộngthêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi

A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) + (C) + #data

Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn và số nhớ ở cờ C.

Cú pháp: SUBB A,Rn

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanh ghi

Rn và trừ cho giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi

A Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) - (C) - (Rn)

Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và số nhớ ở

cờ C.

Cú pháp: SUBB A,direct

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ cóđịa chỉ direct và trừ cho giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu

ở thanh ghi A Lệnh này có ảnh hưởng đến thanh trạng thái PSW

A (A) - (C) - (direct)

Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C.

Cú pháp: SUBB A,@Ri

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ cóđịa chỉ bằng giá trị của thanh ghi Ri và trừ cho giá trị nhớ trên cờ C, sau khi thực hiệnlệnh kết quả được lưu ở thanh ghi A Lệnh này có ảnh hưởng đến thanh thanh trạngthái PSW

A (A) - (C) – ((Ri))

Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C.

Cú pháp: SUBB A,#data

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị xác định và trừ thêmgiá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A Lệnh này

có ảnh hưởng đến thanh thanh trạng thái PSW

A (A) - (C) - #data

Lệnh tăng giá trị dữ liệu trên thanh ghi A lên 1 đơn vị.

Cú pháp: INC A

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi A lên 1 đơn vị, khôngảnh hưởng đến các cờ nhớ trên PSW

A (A) + 1

Trang 40

Lệnh tăng giá trị dữ liệu trên thanh ghi Rn lên 1 đơn vị.

Cú pháp: INC Rn

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi Rn lên 1 đơn vị, khôngảnh hưởng đến các cờ nhớ trên PSW

A (Rn) + 1

Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ direct lên 1 đơn vị.

Cú pháp: INC direct

Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Tăng giá trị dữ liệu ở một ô nhớ có địa chỉ direct lên 1 đơn vị,không ảnh hưởng đến các cờ nhớ trên PSW

Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp lên 1 đơn vị.

Cú pháp: Inc @Ri

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Tăng giá trị dữ liệu ở ô nhớ có địa chỉ bằng giá trị dữ liệu trên Rilên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW

Lệnh tăng giá trị của con trỏ dữ liệu DPTR lên 1 đơn vị.

Cú pháp: Inc DPTR

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 2 chu kì máy

Công dụng: Tăng giá trị dữ liệu của thanh ghi con trỏ dữ liệu DPTR lên 1 đơn

vị, không ảnh hưởng đến các cờ nhớ trên PSW

Lệnh giảm giá trị dữ liệu trên thanh ghi A xuống 1 đơn vị.

Cú pháp: DEC A

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi A xuống 1 đơn vị, khôngảnh hưởng đến các cờ nhớ trên PSW

Lệnh giảm giá trị dữ liệu trên thanh ghi Rn xuống 1 đơn vị:

Cú pháp: Dec Rn

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi Rn xuống 1 đơn vị,không ảnh hưởng đến các cờ nhớ trên PSW

Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị.

Cú pháp: Dec direct

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị,không ảnh hưởng đến các cờ nhớ trên PSW

Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp xuống 1 đơn vị.

Cú pháp: Dec @Ri

Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte

Thời gian thực hiện: 1 chu kì máy

Công dụng: Giảm giá trị dữ liệu ở ô nhớ có địa chỉ bằng giá trị dữ liệu trên Ri

Ngày đăng: 16/12/2023, 16:05

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm