Đó 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 2LỜ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 3MỤ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 4GIÁ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 53 Khởi tạo và truy suất thanh ghi
Trang 6BÀ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 7Cá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 8chú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 10Vi 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 11Hai 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 12ADD 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 13Chế độ đị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 14nhớ 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 1615 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 17lệ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 19chươ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 20Chươ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 21Nhậ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 22COMP 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 23BÀ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 24như 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 26Ngõ 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 273 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 29Bộ 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 30Cá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 31sẽ 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 32Thanh 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 335.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 34BÀ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 36thế 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 37Cấ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 38có đị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 39Lệ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 40Lệ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