Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Kỹ thuật Vi xử lý.pdf
1. TRƯỜNG ĐẠI HỌC BÀ RỊA – VŨNG TÀU
Giáo trình nội bộ
KỸ THUẬT
VI XỬ LÝ
ThS. Lưu Hoàng
BỘ MÔN ĐIỆN – ĐIỆN TỬ
KHOA KỸ THUẬT CÔNG NGHỆ -
NÔNG NGHIỆP CÔNG NGHỆ CAO
2. TRƯỜNG ĐẠI HỌC BÀ RỊA - VŨNG TÀU
GIÁO TRÌNH NỘI BỘ
KỸ THUẬT
VI XỬ LÝ
ThS. LƯU HOÀNG
3. 1
LỜI NÓI ĐẦU
Ngày nay Vi xử lý là một thành phần không thể thiếu trong xã hội hiện đại nói
chung và khoa học kỹ thuật nói riêng. Nó đóng vai trò xử lý mọi dữ liệu được số hóa hàng
ngày. Là nền tảng của tự động hóa, của công nghệ thông tin. Nó len lỏi trong mọi lĩnh vực
từ thiết bị gia dụng hàng ngày cho đến hàng không vũ trụ.
Đặc biệt với sự phát triển của IOT và công nghiệp 4.0, vi xử lý càng quan trọng hơn
bao giờ hết bởi nói là trái tim của mọi hệ thống. Ở đó vi xử lý đóng vai trò kết nối, phân
tích và xử lý mọi dữ liệu với khả năng linh hoạt và tiết kiệm. Thông minh hóa mọi thứ và
tạo ra một môi trường sống và làm việc hiện đại hơn.
Vì vậy việc nắm bắt về kỹ thuật vi xử lý là nội dung bắt buộc trong các chương
trình giáo dục đại học, cao đẳng trong khối ngành kỹ thuật như: điện, điện tử, tự động hóa,
cơ điện tử, công nghệ thông tin... Để từ nền tảng này người học có thể phát triển các kiến
thức chuyên sâu theo từng lĩnh vực tương ứng. Đây chính là lý do để tác giả biên soạn
cuốn giáo trình “Kỹ thuật vi xử lý”.
Trong cuốn giáo trình này, tác giả đã từng bước giới thiệu đến người học về vi xử
lý, kiến trúc cơ bản cũng như cách thức hoạt động.
Phần chính của giáo trình là giới thiệu và ứng dụng họ vi điều khiển 8051. Đây là
họ vi điều khiển có cấu trúc đơn giản giúp người học dễ tiếp cận và ứng dụng. Từ đó người
học có thể tự nghiên cứu sâu hơn về các dòng vi điều khiển phức tạp và cao cấp hơn như
AVR, PIC, ARM, ESP...
Với sự phát triển của công nghệ và kỹ thuật hiện nay, vi xử lý – vi điều khiển cũng
đã có những bước phát triển đáng kể và cuốn sách này là tiền đề để người học phát triển
thêm. Cho dù tác giả đã rất cố gắng nhưng chắc chắn cuốn giáo trình này không tránh khỏi
những khiếm khuyết, tác giả mong nhận được sự đóng góp chân thành từ các bạn đọc, quý
thầy cô và các bạn sinh viên để có thể trở nên hoàn thiện hơn.
Xin chân thành cảm ơn!
Tác giả giáo trình nội bộ
Thạc sỹ Lưu Hoàng
4. 2
MỤC LỤC
LỜI NÓI ĐẦU...........................................................................................................1
CHƯƠNG 1. GIỚI THIỆU VI XỬ LÝ...................................................................9
1.1. Khái niệm vi xử lý..........................................................................................9
1.2. Lịch sử phát triển của vi xử lý ......................................................................9
1.3. Phân loại vi xử lý..........................................................................................10
1.3.1. Phân loại theo chức năng ........................................................................10
1.3.2. Phân loại theo cấu trúc ............................................................................10
1.3.3. Phân loại theo tập lệnh ............................................................................11
1.4. Hệ vi xử lý.....................................................................................................12
1.4.1. Sơ đồ tổng quát hệ vi xử lý .....................................................................12
1.4.2. Đơn vị xử lý trung tâm (Central Processing Unit: CPU)........................12
1.4.3. Bộ nhớ (Memory)....................................................................................12
1.4.4. Các thiết bị ngoại vi ................................................................................13
1.4.5. Các BUS giao tiếp...................................................................................13
1.4.6. Hoạt động của hệ vi xử lý .......................................................................14
CHƯƠNG 2. CẤU TRÚC VÀ TẬP LỆNH CỦA VI XỬ LÝ.............................17
2.1. Cấu trúc bên trong của vi xử lý ..................................................................17
2.1.1. Sơ đồ khối của vi xử lý ...........................................................................17
2.1.2. chức năng của các khối ...........................................................................18
2.1.3. Bus dữ liệu bên trong vi xử lý.................................................................20
2.2. Tập lệnh của vi xử lý....................................................................................20
2.2.1. Giới thiệu về tập lệnh của vi xử lý..........................................................20
2.2.2. Từ gợi nhớ (mnemonic) ..........................................................................21
2.2.3. Các kiểu lệnh cơ bản của vi xử lý ...........................................................21
2.2.4. Các kiểu truy xuất địa chỉ của vi xử lý....................................................22
CHƯƠNG 3. VI ĐIỀU KHIỂN .............................................................................24
3.1. Giới thiệu vi điều khiển ...............................................................................24
3.2. Họ Vi điều khiển 8051..................................................................................25
3.3. Tóm tắt phần cứng họ vi điều khiển 8051..................................................26
5. 3
3.4. Khảo sát cấu trúc bên trong của VĐK 89C51...........................................27
3.4.1. Sơ đồ cấu trúc bên trong của vi điều khiển.............................................27
3.4.2. Khảo sát sơ đồ chân của 89C51 ..............................................................27
3.5. Cấu trúc bộ nhớ của vi điều khiển .............................................................33
3.5.1. Tổ chức bộ nhớ........................................................................................33
3.5.2. Tổ chức bộ nhớ RAM .............................................................................33
CHƯƠNG 4. KHẢO SÁT TẬP LỆNH CỦA VI ĐIỀU KHIỂN........................41
4.1. Khái niệm về chương trình, tập lệnh và ngôn ngữ gợi nhớ .....................41
4.2. Các kiểu định địa chỉ bộ nhớ ......................................................................41
4.3. Tập lệnh của vi điều khiển ..........................................................................43
4.3.1. Nhóm lệnh di chuyển dữ liệu (Data Transfer Instructions) ....................45
4.3.2. Nhóm lệnh số học (Mathematical Instructions)......................................49
4.3.3. Nhóm lệnh logic (Logic Instructions).....................................................52
4.3.4. Nhóm lệnh rẽ nhánh (Control Transfer Instructions)..............................57
4.3.5. Nhóm lệnh xử lý bit (Bit Oriented Instructions).....................................62
4.4. Chương trình Assembly ..............................................................................64
4.4.1. Các chỉ dẫn trong chương trình...............................................................64
4.4.2. Cấu trúc chương trình Assembly.............................................................66
4.4.3. Các thành phần của lệnh..........................................................................66
4.4.4. Lưu đồ và giải thuật ................................................................................66
CHƯƠNG 5. KHẢO SÁT TIMER/COUNTER CỦA VI ĐIỀU KHIỂN..........73
5.1. Giới thiệu ......................................................................................................73
5.2. Các thanh ghi của timer ..............................................................................73
5.2.1. Thanh ghi chọn chế độ hoạt động của timer (TMOD)............................73
5.2.2. Thanh ghi điều khiển timer (TCON).......................................................74
5.2.3. Thanh ghi bộ đếm timer ..........................................................................74
5.3. Các chế độ hoạt động của timer..................................................................75
5.3.1. Timer hoạt động ở mode 0 ......................................................................75
5.3.2. Timer hoạt động ở mode 1 ......................................................................75
5.3.3. Timer hoạt động ở mode 2 ......................................................................76
5.3.4. Timer hoạt động ở mode 3 ......................................................................77
5.4. Nguồn xung clock cho timer........................................................................77
6. 4
5.5. Điều khiển hoạt động của timer..................................................................78
5.6. Các bước sử dụng timer ..............................................................................78
5.7. Bài tập ví dụ..................................................................................................80
CHƯƠNG 6. HOẠT ĐỘNG NGẮT CỦA VI ĐIỀU KHIỂN.............................86
6.1. Giới thiệu ......................................................................................................86
6.2. Các nguồn ngắt.............................................................................................86
6.3. Các thanh ghi trong hoạt động ngắt...........................................................88
6.3.1. Thanh ghi cho phép ngắt: IE (Interrupt Enable) .....................................88
6.3.2. Thanh ghi ưu tiên ngắt: IP (Interrupt Priority)........................................88
6.4. Xử lý ngắt......................................................................................................89
6.5. Bài tập ví dụ..................................................................................................90
CHƯƠNG 7. GIAO TIẾP NỐI TIẾP...................................................................95
7.1. Giới thiệu ......................................................................................................95
7.2. Truyền nối tiếp trên 8051............................................................................95
7.2.1. Thanh ghi đệm SBUF (Serial Buffer) .....................................................96
7.2.2. Thanh ghi điều khiển SCON (Serial Control).........................................96
7.3. Các kiểu truyền dữ liệu nối tiếp..................................................................97
7.3.1. Truyền dữ liệu mode 0 (SM0 = 0, SM1 = 0) ..........................................97
7.3.2. Truyền dữ liệu mode 1 (SM0 = 0, SM1 = 1) ..........................................98
7.3.3. Truyền dữ liệu mode 2 (SM0 = 1, SM1 = 0) ..........................................98
7.3.4. Truyền dữ liệu mode 3 (SM0 = 1, SM1 = 1) ..........................................98
7.4. Tốc độ truyền nối tiếp..................................................................................98
7.4.1. Tốc độ baud cố định................................................................................99
7.4.2. Tốc độ baud thay đổi...............................................................................99
7.5. Truyền và nhận dữ liệu .............................................................................101
7.6. Bài tập ví dụ................................................................................................101
CHƯƠNG 8. LẬP TRÌNH C CHO VI ĐIỀU KHIỂN......................................106
8.1. Một số khái niệm C cho Vi điều khiển.....................................................106
8.1.1. Các kiểu dữ liệu.....................................................................................106
8.1.2. Biểu thức (Expressions) ........................................................................107
8.1.3. Câu lệnh (Statement).............................................................................107
8.1.4. Khối (Blocks) ........................................................................................107
7. 5
8.1.5. Toán tử (Operators)...............................................................................107
8.1.6. Các cấu trúc điều khiển.........................................................................111
8.1.7. Function (hàm, chương trình con).........................................................114
8.1.8. Tiền xử lý (Preprocessor)......................................................................115
8.1.9. Chú thích (Comments) ..........................................................................115
8.2. Cấu trúc chương trình C cho vi điều khiển.............................................116
8.3. Môi trường lập trình C cho vi điều khiển................................................117
8.3.1. Khởi tạo Project.....................................................................................117
8.3.2. Soạn thảo chương trình .........................................................................119
8.3.3. Biên dịch chương trình..........................................................................120
8.3.4. Chạy mô phỏng và sửa lỗi.....................................................................120
PHỤ LỤC 1: BẢNG TÓM TẮT TẬP LỆNH VI ĐIỀU KHIỂN 8051 ............121
PHỤ LỤC 2: ĐÁP ÁN CÂU HỎI TRẮC NGHIỆM.........................................126
PHỤ LỤC 3: HƯỚNG DẪN CÀI ĐẶT KEIL C ...............................................128
DANH MỤC TÀI LIỆU THAM KHẢO ............................................................131
8. 6
DANH MỤC HÌNH ẢNH
Hình 1-1: Vi xử lý Intel 4004 ...................................................................................10
Hình 1-2: Mô hình cấi trúc Von Neuman.................................................................11
Hình 1-3: Mô hình cấu trúc Harvard ........................................................................11
Hình 1-4: Sơ đồ khối hệ vi xử lý ..............................................................................12
Hình 1-5: Các bước thực hiện của chu kỳ lệnh ........................................................14
Hình 2-1: Cấu trúc của vi xử lý 8 bit........................................................................17
Hình 2-2: Đơn vi xử lý số học ALU.........................................................................18
Hình 2-3: Sơ đồ khối điều khiển và giải mã lệnh.....................................................19
Hình 2-4: Cấu trúc của lệnh......................................................................................21
Hình 3-1: Các thành phần chính trong vi điều khiển................................................24
Hình 3-2: Các thành phần có trong vi điều khiển.....................................................25
Hình 3-3: Bảng một số chip thông dụng của Atmel.................................................26
Hình 3-4: Các kiểu đóng gói của chip 8051.............................................................26
Hình 3-5: Sơ đồ khối vi điều khiển 89C51...............................................................27
Hình 3-6: Sơ đồ chân vi điều khiển 89C51 ..............................................................28
Hình 3-7: Sơ đồ cấu tạo Port 0 .................................................................................29
Hình 3-8: Sơ đồ kết nối điện trở pull-up cho port 0 .................................................29
Hình 3-9: Sơ đồ cấu tạo Port 1,2,3 ...........................................................................30
Hình 3-10: Chức năng từng chân của port 3.............................................................30
Hình 3-11: Sơ đồ giao tiếp bộ nhớ chương trình bên ngoài .....................................31
Hình 3-12: Mạch reset ..............................................................................................31
Hình 3-13: Sơ đồ kết nối mạch dao động.................................................................32
Hình 3-14: Minh họa khả năng quản lý bộ nhớ của 89C51 .....................................33
Hình 3-15: Minh họa các phân vùng và địa chỉ trong RAM....................................34
Hình 3-16: Bảng minh họa các bank thanh ghi ........................................................35
Hình 3-17: bảng các bit trong thanh ghi trạnh thái PSW .........................................36
Hình 4-1: Minh họa cách lấy dữ liệu từ bộ nhớ của vi xử lý....................................42
Hình 4-2: Bảng trạng thái các phép logic cơ bản .....................................................52
Hình 4-3: Các ký hiệu trong lưu đồ thuật toán.........................................................67
Hình 5-1: Bảng các thanh ghi của timer...................................................................73
Hình 5-2: Minh họa timer ở mode 0.........................................................................75
Hình 5-3: Minh họa timer ở mode 1.........................................................................76
Hình 5-4: Minh họa timer0 ở mode 2.......................................................................76
Hình 5-5: Minh họa timer 0 ở mode 3......................................................................77
Hình 5-6: Minh họa chọn nguồn xung cho timer .....................................................77
Hình 5-7: Minh họa chọn phương thức điều khiển timer.........................................78
Hình 6-1: Minh họa chương trình khi chạy có ngắt .................................................86
Hình 6-2: Sơ đồ kết nối các nguồn ngắt ...................................................................87
Hình 7-1: Mô hình truyền/nhận dữ liệu nối tiếp của chip 8051 ...............................96
9. 7
Hình 7-2: Sơ đồ kết nối mở rộng ngõ ra...................................................................97
Hình 7-3: Minh họa một khung truyền dữ liệu nối tiếp............................................98
Hình 7-4: Minh họa tốc độ baud cố định mode 0 và mode 2 ...................................99
Hình 7-5: Minh họa tốc độ baud ở mode 1 và mode 3.............................................99
Hình 7-6: Bảng tốc độ baud thông dụng và thông số cài đặt .................................100
10. 8
DANH MỤC CÁC TỪ VIẾT TẮT
VIẾT TẮT DIỄN GIẢI
VXL Vi xử lý
VĐK Vi điều khiển
CT Chương trình
ALU Arithmetic Logic Unit
I/O Input/Output
us Micro second (mili giây)
OSC Oscillator
Xtal External Crytal
11. 9
CHƯƠNG 1. GIỚI THIỆU VI XỬ LÝ
Chương này giới thiệu tổng quan về vi xử lý. Các loại vi xử lý cũng như cấu trúc và
hoạt động của hệ vi xử lý.
Sau khi học xong Chương 1, người học nắm được các kiến thức:
Vi xử lý là gì, lịch sử phát triển của vi xử lý.
Cách phân loại vi xử lý và các loại vi xử lý mà người học tiếp cận.
Hệ vi xử lý là gì, cấu trúc và hoạt động của hệ vi xử lý, các thành phần có trong hệ
vi xử lý.
1.1. Khái niệm vi xử lý
VXL có chức năng chính là xử lý dữ liệu. Việc xử lý dữ liệu bao gồm tính toán và
điều khiển dữ liệu.
Việc tính toán được thực hiện bởi các mạch điện logic được đặt trong khối ALU
(Arithmetic Logic Unit) gọi là đơn vị xử lý số học. ALU có thể thực hiệc các phép toán về
số học như: cộng (add), trừ (subtract), tăng (increment), giảm (decrement)… và các phép
toán luận lý như: and, or, xor, so sánh (compare), …
Việc điều khiển dữ liệu là di chuyển dữ liệu giữa các thanh ghi, các ô nhớ RAM hoặc
với các vùng nhớ khác trong hệ thống.
Ngoài ALU, VXL còn có các mạch điện logic khác để điều khiển dữ liệu (Control
Logic). Các mạch điều khiển sẽ di chuyển dữ liệu vào đúng vị trí để khối ALU xử lý. Sau
khi thực hiện xong, khối điều khiển sẽ di chuyển dữ liệu đến vị trí mong muốn.
Để VXL điều khiển các mạch logic thì cần phải có chương trình. Chương trình là tập
hợp các lệnh để xử lý dữ liệu được lưu trữ trong bộ nhớ. Các lệnh này sẽ quyết định công
việc mà VXL sẽ làm.
Do các lệnh được lưu trữ trong bộ nhớ nên có thể thay đổi các lệnh khi cần. Khi thay
đổi các lệnh của VXL tức là thay đổi cách thức xử lý dữ liệu.
Ngoài chức năng đón và thực hiện lệnh, các mạch logic điều khiển còn điều khiển
giao tiếp với các mạch điện bên ngoài như: bộ nhớ, bàn phím… gọi là các thiết bị I/O hay
còn gọi là các thiết bị ngoại vi.
1.2. Lịch sử phát triển của vi xử lý
Với sự khám phá ra transistor và phát triển của công nghệ chế tạo vi mạch SSI (Small
Scale Integrated), MSI (Medium Scale Integrated), máy tính vẫn còn là một nhóm gồm
nhiều IC kết hợp lại với nhau.
Cho đến thập niên 70, với sự phát triển của công nghệ LSI (Large Scale Integrated),
VLSI (Very Large Scale Integrated), cấu trúc máy tính mới được rút gọn và được chế tạo
thành một IC duy nhất được gọi là vi xử lý (Microprocessor).
12. 10
VXL đầu tiên được chế tạo bởi Intel vào năm 1971 tên là Intel-4004 có khả năng xử
lý 4 bit.
VXL kết hợp với các thiết bị khác tạo ra các máy tính có khả năng tính toán rất lớn
như máy vi tính hay các sản phẩm khác như: tổng đài điện thoại, hệ thống điều khiển tự
động…
1.3. Phân loại vi xử lý
1.3.1. Phân loại theo chức năng
1.3.1.1. Vi xử lý đa năng (General Purpose Microprocessor)
Sử dụng cho các mục đích dân dụng như: máy tính, điện thoại...
1.3.1.2. DSP (Digital Signal Processor)
Sử dụng cho các ứng dụng cần xử lý khối lượng dữ liệu lớn với tốc độ cao theo thời
gian thực.
1.3.1.3. Vi điều khiển (Microcontroller)
Sử dụng cho các ứng dụng nhỏ với chi phí thấp như: điều khiển máy lạnh, đèn giao
thông, robot nhỏ...
1.3.1.4. Vi xử lý chuyên dụng (ASIP - Application Specific Integrated Processor)
Dùng cho các mục đích chuyên biệt với yêu cầu kỹ thuật cao như trong y tế, quân sự,
hàng không…
1.3.2. Phân loại theo cấu trúc
1.3.2.1. Cấu trúc Von Neuman
Ở cấu trúc này, bộ nhớ chương trình và dữ liệu dùng chung đường bus. Nghĩa là việc
đọc chương trình và lấy dữ liệu phải diễn ra lần lượt. Điều này làm chậm quá trình xử lý
dữ liệu nên việc thực thi lệnh kém hiệu quả.
Hình 1-1: Vi xử lý Intel 4004
13. 11
1.3.2.2. Cấu trúc Harvard
Ở cấu trức này, bộ nhớ chương trình và dữ liệu dùng đường bus giao tiếp riêng nên
tốc độ xử lý nhanh hơn. Tăng hiệu quả xử lý dữ liệu. Cấu trúc này thường được dùng cho
các chip hiện tại.
1.3.3. Phân loại theo tập lệnh
1.3.3.1. CISC (complex Instruction Set Computer): máy tính có tập lệnh phức tạp
Nhiều lệnh
Cấu trúc phần cứng phức tạp
Mỗi lệnh: có độ dài khác nhau và thực hiện trong 1 đến chục chu kỳ xung nhịp
Ví dụ: Intel x86, AMD
1.3.3.2. RISC (reduced instruction Set Computer): máy tính có tập lệnh rút gọn
Ít lệnh
Mỗi lệnh có độ dài cố định và thực hiện trong 1 đến 2 chu kỳ xung nhịp
Cấu trúc vi xử lý đơn giản, có nhiều thanh ghi
Tốc độ xung nhịp lớn và tiêu thụ năng lượng thấp
Ví dụ: 8051, ARM, AVR
Program
Address Bus
Data Bus
Memory
Data
Address Bus
Fetch Bus
CPU
Hình 1-3: Mô hình cấu trúc Harvard
Hình 1-2: Mô hình cấi trúc Von Neuman
CPU
Program
&
Data
Address Bus
Data Bus
Memory
14. 12
1.4. Hệ vi xử lý
1.4.1. Sơ đồ tổng quát hệ vi xử lý
Là hệ thống máy tính dùng vi xử lý để xử lý dữ liệu thông qua chương trình điều
khiển.
Một hệ vi xử lý bao gồm các thành phần cơ bản sau:
1.4.2. Đơn vị xử lý trung tâm (Central Processing Unit: CPU)
Đơn vị xử lý trung tâm bao gồm các thành phần cơ bản sau:
Đơn vị số học và logic (Arithmetic Logical Unit): Thực hiện các phép toán số học
(cộng, trừ, nhân chia…) và các phép toán logic (and, or, compare…).
Đơn vị điều khiển (Control Unit): nhận lệnh từ bộ nhớ và điều khiển các khối khác
để thực hiện lệnh.
Các thanh ghi (Registers): lưu trữ dữ liệu và trạng thái của hệ thống trong quá trình
thực hiện lệnh.
1.4.3. Bộ nhớ (Memory)
Bộ nhớ trong hệ vi xử lý thường là bộ nhớ bán dẫn. Bộ nhớ bao gồm RAM và ROM.
RAM (Random Access Memory): chứa dữ liệu trong quá trình hoạt động của hệ
thống. RAM mất dữ liệu khi mất nguồn.
SRAM (Static RAM): RAM tĩnh.
DRAM (Dynamic RAM): RAM động. Cần có quá trình làm tươi (Refresh).
PCI
USB
VGA
COM
LPT
Data Bus
Control Bus
Bộ nhớ
Memory
RAM
ROM
Intel 80X86
Motorola 680X
...
Phối ghép
vào/ra
Thiết bị
vào/ra
Màn hình
Bàn phím
Chuột
Ổ cứng
CD-ROM
Máy in
Webcam
Address Bus
Vi xử lý
CPU
Hình 1-4: Sơ đồ khối hệ vi xử lý
15. 13
ROM (Read Only Memory): chứa chương trình điều khiển hệ thống. ROM không bị
mất dữ liệu khi mất nguồn.
MROM (Mask ROM): ROM lập trình bằng mặt nạ. Dữ liệu được ghi ngay trong
quá trình sản xuất chip.
PROM (Programable ROM): ROM lập trình được 1 lần. Cấu trúc ROM được kết
nối qua những cầu chì. Quá trình ghi sẽ đốt cháy một số cầu chì tùy theo dữ liệu
tương ứng, dẫn đến không thể khôi phục khi muốn ghi lại dữ liệu khác.
EPROM (Erasable PROM): ROM có thể xóa bằng tia cực tím và lập trình lại. Trên
mỗi chip có cửa sổ để chiếu tia cực tím khi xóa. Thời gian xóa dữ liệu mất khoảng
10 phút hoặc hơn nên khá mất thời gian. EPROM còn gọi là UV-ROM. Loại này
không còn được dùng nhiều trong hiện tại.
EEPROM (Electrically EPROM): ROM có thể xóa bằng điện. Nghĩa là có thể ghi
và xóa trực tiếp bằng lệnh và thực hiện trên mạch điện. EEPROM có thể dùng để lưu
trữ các thông số cài đặt của hệ thống.
FLASH ROM: ROM ghi xóa nhanh theo từng mảng. Thường được thực hiện thông
qua thiết bị ghi xóa chuyên dụng. Hiện nay FLASH ROM thường được tích hợp trong
các vi điều khiển để lưu chương trình.
1.4.4. Các thiết bị ngoại vi
Là các thiết bị giao tiếp với vi xử lý thông qua các I/O hoặc các chuẩn giao tiếp như:
COM, VGA, LPT, USB, PCI…
Các ngoại vi input như: bộ nhớ mở rộng, bàn phím, chuột, micro, webcam, scanner…
Các ngoại vi output như: màn hình, loa, máy in…
1.4.5. Các BUS giao tiếp
Data Bus: Bus dữ liệu
Là Bus hai chiều.
Dùng để truyền tải dữ liệu giữa các khối trong hệ thống.
Độ rộng của Bus dữ liệu tùy thuộc vào vi xử lý.
Độ rộng Bus thường là 8, 16, 32, 64 bit.
Độ rộng Bus càng lớn thì khả năng xử lý dữ liệu càng nhanh.
Address Bus: Bus địa chỉ
Là Bus một chiều.
Dùng để định địa chỉ truy xuất bộ nhớ từ VXL.
Số bit địa chỉ thể hiện khả năng quản lý bộ nhớ của VXL.
Với VXL có N bit địa chỉ có thể đánh quản lý được 2N
ô nhớ.
Ví dụ VXL 8088/8086 có 20 đường địa chỉ có thể quản lý được: 220
bytes=1Mbytes.
Control Bus: Bus điều khiển
Là Bus một chiều nhưng có 2 hướng
16. 14
Từ VXL gởi tín hiệu điều khiển đến các khối trong hệ thống như: read, write,
enable…
Từ các khối khác có thể gởi tín hiệu điều khiển đến VXL như tín hiệu ngắt
(interrupt)…
1.4.6. Hoạt động của hệ vi xử lý
Quá trình xử lý lệnh gồm 3 bước:
Đón lệnh: đọc mã lệnh từ bộ nhớ chương trình vào CPU.
Giải mã lệnh: xác định xem lệnh đó là lệnh gì rồi gởi cho khối điều khiển.
Thực hiện lệnh:
Nếu cần thì đọc thêm thông tin từ bộ nhớ/cổng.
Tính toán và gởi kết quả lên Bus dữ liệu.
Sau khi thực hiện xong một lệnh, VXL lại thực hiện chu kỳ lệnh tiếp theo.
ĐỌC MÃ LỆNH
GIẢI MÃ LỆNH
THỰC HIỆN LỆNH
1 chu kỳ lệnh
CÂU HỎI THẢO LUẬN
Câu 1. Vi xử lý đầu tiên có từ năm nào? Hãng nào sản xuất?
Câu 2. Phân loại vi xử lý theo chức năng thì có những loại nào?
Câu 3. Hệ vi xử lý là gì?
Câu 4. Trong hệ vi xử lý gồm những thành phần chính nào?
Câu 5. Các bus giao tiếp trong hệ vi xử lý?
Câu 6. Cách tính khả năng truy xuất bộ nhớ của VXL thông qua số bit địa chỉ?
Câu 7. Bộ nhớ RAM là gì? Có những loại bộ nhớ RAM nào?
Câu 8. Bộ nhớ ROM là gì? Có những loại bộ nhớ ROM nào?
Câu 9. Chu kỳ lệnh là gì? Một chu kỳ lệnh gồm mấy bước?
Câu 10. Vi xử lý đóng vai trò như thế nào trong cuộc sống và sản xuất?
Hình 1-5: Các bước thực hiện của chu kỳ lệnh
17. 15
CÂU HỎI TRẮC NGHIỆM ÔN TẬP
Câu 1. Vi xử lý được sản xuất lần đầu tiên vào năm nào? Do nhà sản xuất nào chế tạo?
a. 1971 - Hãng Intel b. 1976 - Hãng Motorola
c. 1976 - Hãng Intel d. 1980 - Hãng Zilog
Câu 2. ROM là loại bộ nhớ bán dẫn có đặc tính:
a. Cho phép đọc dữ liệu từ ROM, không cho phép ghi dữ liệu vào ROM, mất dữ liệu
khi mất nguồn điện.
b. Cho phép đọc dữ liệu từ ROM, không cho phép ghi dữ liệu vào ROM, không mất
dữ liệu khi mất nguồn điện.
c. Cho phép đọc dữ liệu từ ROM, cho phép ghi dữ liệu vào ROM, mất dữ liệu khi
mất nguồn điện.
d. Cho phép đọc dữ liệu từ ROM, cho phép ghi dữ liệu vào ROM, không mất dữ liệu
khi mất nguồn điện.
Câu 3. RAM là loại bộ nhớ bán dẫn có đặc tính:
a. Cho phép đọc dữ liệu từ RAM, không cho phép ghi dữ liệu vào RAM, mất dữ liệu
khi mất nguồn điện.
b. Cho phép đọc dữ liệu từ RAM, không cho phép ghi dữ liệu vào RAM, không mất
dữ liệu khi mất nguồn điện.
c. Cho phép đọc dữ liệu từ RAM, cho phép ghi dữ liệu vào RAM, mất dữ liệu khi
mất nguồn điện.
d. Cho phép đọc dữ liệu từ RAM, cho phép ghi dữ liệu vào RAM, không mất dữ liệu
khi mất nguồn điện.
Câu 4. Loại bộ nhớ ROM nào cho phép ghi dữ liệu vào và xoá dữ liệu đi bằng tia cực tím?
a. PROM b. MROM
c. EPROM d. EEPROM
Câu 5. Loại bộ nhớ ROM nào cho phép ghi dữ liệu vào và xoá dữ liệu bằng tín hiệu điện:
a. PROM b. MROM
c. EPROM d. EEPROM
Câu 6. Loại bộ nhớ bán dẫn có thể mất dữ liệu ngay khi vẫn còn nguồn điện cung cấp nếu
không được làm tươi (refresh)?
a. SRAM b. DRAM
c. PROM d. MROM
Câu 7. Loại bộ nhớ ROM nào có thể ghi dữ liệu vào và xoá dữ liệu:
a. PROM b. MROM
c. EPROM d. Cả ba câu đều đúng
Câu 8. Trong hệ VXL, BUS một chiều là BUS nào?
a. Data b. Address
18. 16
c. Control d. Intruction
Câu 9. Trong hệ VXL, BUS hai chiều là BUS nào?
a. Data b. Address
c. Control d. Intruction
Câu 10. Trong hệ VXL, BUS điều khiển dùng để làm gì?
a. VXL gởi tín hiệu điều khiển đến
các khối
b. Các ngoại vi gởi tín hiệu ngắt đến
VXL
c. Cả 2 đều đúng d. Cả 2 đều sai
Câu 11. Bộ nhớ bán dẫn 8 bit có mã số 62512 cho biết dung lượng của bộ nhớ này là bao
nhiêu?
a. 512 KB b. 512 Kbit
c. 62512 Kbit d. 62512 KB
Câu 12. Một bộ vi xử lý có 20 đường địa chỉ cho biết số lượng ô nhớ mà bộ vi xử lý đó có
khả năng truy xuất là bao nhiêu?
a. 1024 b. 1024 K
c. 1024 M d. 1024 G
19. 17
CHƯƠNG 2. CẤU TRÚC VÀ TẬP LỆNH CỦA VI XỬ LÝ
Chương này trình bày cấu trúc cơ bản bên trong của một vi xử lý. Các khái niệm
trong vi xử lý, các khối cơ bản, hoạt động và tập lệnh của nó.
Sau khi học chương 2, người học nắm được:
Cấu trúc bên trong vi xử lý.
Các khối cơ bản bên trong.
Tập lệnh.
Chu kỳ thực hiện lệnh.
2.1. Cấu trúc bên trong của vi xử lý
2.1.1. Sơ đồ khối của vi xử lý
Cấu trúc của VXL đều có các khối cơ bản như ALU (Athmetic Logical Unit), khối
điều khiển (Control Logic) và các thanh ghi (Register). Ngoài ra còn có các đường truyền
tải dữ liệu trong và ngoài hệ thống.
Mỗi VXL khác nhau sẽ có cấu trúc khác nhau. Cấu trúc của của VXL được cung cấp
bởi nhà chế tạo và được trình bày dưới dạng sơ đồ khối.
Ví dụ cấu trúc của một VXL 8 bit với 16 bit địa chỉ:
Hình 2-1: Cấu trúc của vi xử lý 8 bit
20. 18
2.1.2. chức năng của các khối
2.1.2.1. Khối ALU
Khối ALU chứa các mạch điện logic chuyên về tính toán dữ liệu. Nó có 2 ngõ vào
“IN” chính là các ngõ vào dữ liệu cho ALU xử lý và một ngõ ra “OUT” là ngõ ra kết quả
sau khi ALU xử lý xong.
Dữ liệu trước khi vào ALU được chứa ở 2 thanh ghi đệm (Temporary Register) là
“Temp Reg 1” và “Temp Reg 2” để ALU có thể lấy 2 dữ liệu cùng lúc.
Ngõ ra của ALU sau khi xử lý xong sẽ gởi kết quả lên bus dữ liệu. Thông thường kết
quả này được gởi đến thanh ghi tích lũy Acc.
ALU có thể thực hiện các phép toán như:
Cộng (add), trừ (subtract)
So sánh (compare)
Dịch trái (shift left), dịch phải (shift right), xoay (rotate)
Tăng (increment), giảm (decrement)
Lấy bù (complement), and, or, exor …
2.1.2.2. Khối điều khiển và giải mã lệnh
Khối giải mã lệnh (Intruction Decoder) có chức năng nhận lệnh từ thanh ghi lệnh
(Intruction Register) sau đó giải mã để gởi tín hiệu đến khối điều khiển logic.
Khối điều khiển (Control Logic) có chức năng nhận lệnh từ bộ giải mã lệnh sau đó
điều khiển để thực hiện các yêu cầu của lệnh. Việc thực hiện bao gồm lấy dữ liệu, điều
khiển ALU và gởi kết quả đến địa chỉ mong muốn.
Ngõ vào quan trọng nhất của khối điều khiển logic là tín hiệu xung nhịp (clock). Nếu
không có tín hiệu clock VXL sẽ không làm việc
Hình 2-2: Đơn vi xử lý số học ALU
21. 19
2.1.2.3. Các thanh ghi của vi xử lý
Các thanh ghi bên trong VXL có chức năng lưu trữ tạm thời các dữ liệu khi xử lý.
Trong số đó có các thanh ghi dùng thực hiện các chức năng đặc biệt và luôn có trong
một VXL bao gồm:
Thanh ghi tích lũy A: Accumulator
Thanh ghi bộ đếm chương trình PC: Program Counter
Thanh ghi con trỏ ngăn xếp SP: Stack Pointer
Thanh ghi trạng thái SR: Status Register
Thanh ghi địa chỉ AR: Address Register
Thanh ghi lệnh IR: Intruction Register
Còn lại là các thanh ghi thông dụng. Số lượng các thanh ghi thông dụng thay đổi tùy
thuộc vào cấu trúc từng VXL. Số lượng các thanh ghi này càng nhiều thì càng hữu dụng
cho người lập trình.
b. Thanh ghi A
Là một thanh ghi quan trọng của VXL. Nó thường được kết hợp với ALU để tính
toán .
Hầu hết các công việc tính toán đều xảy ra giữa ALU và thanh ghi A.
Ngoài ra thanh ghi A còn có chức năng trung gian để giao tiếp dữ liệu bên trong
VXL và các thiết bị bên ngoài.
c. Thanh ghi PC
Chức năng của thanh ghi PC là quản lý lệnh đang thực hiện và tự động chỉ đến lệnh
sẽ thực hiện tiếp theo.
Chiều dài của thanh ghi PC bằng với chiều dài số đường địa chỉ mà VXL có thể
truy xuất.
d. Thanh ghi trạng thái
Thanh ghi trạng thái chương trình còn được gọi là thanh ghi cờ (Flag register) dùng
để lưu trữ kết quả của một số lệnh kiểm tra hay tính toán.
Hình 2-3: Sơ đồ khối điều khiển và giải mã lệnh
22. 20
Số lượng các bit có trong thanh ghi trạng thái tùy thuộc vào từng VXL. Trong một
số VXL có thể xóa hoặc đặt các bit trong thanh ghi trạng thái.
Các bit thường có trong thanh ghi trạng thái:
Status Register
Z N C I IF O P 1
e. Thanh ghi con trỏ ngăn xếp
Thanh ghi SP dùng để quản lý bộ nhớ ngăn xếp khi muốn lưu trữ dữ liệu tạm thời
vào ngăn xếp.
Sau khi thực hiện cất dữ liệu vào ngăn xếp, SP tự động chỉ đến ô nhớ tiếp theo.
SP phải chỉ đến ô nhớ ban đầu do người lập trình thiết lập. Quá trình này gọi là
khởi tạo con trỏ ngăn xếp.
Tổ chức của ngăn xếp là dữ liệu vào sau phải được lấy ra trước (Last In First Out:
LIFO).
f. Thanh ghi địa chỉ bộ nhớ
Mỗi khi VXL truy xuất bộ nhớ thì thanh ghi địa chỉ phải tạo ra đúng địa chỉ mà
VXL mong muốn. Ngõ ra của thanh ghi địa chỉ được đặt lên bus địa chỉ 16 bit.
Nội dung của thanh ghi địa chỉ và thanh ghi PC là giống nhau khi VXL truy xuất
bộ nhớ để đón lệnh.
Trong tất cả các VXL, chiều dài của thanh ghi địa chỉ bằng với thanh ghi PC.
g. Thanh ghi lệnh
Thanh ghi lệnh dùng để chứa lệnh đang thực hiện. Một chu kỳ lệnh bao gồm đón
lệnh từ bộ nhớ, giải mã và thực hiện lệnh.
Chiều dài thanh ghi lệnh bằng với chiều dài từ dữ liệu.
Thanh ghi lệnh do VXL sử dụng, người lập trình không được sử dụng thanh ghi
này.
2.1.3. Bus dữ liệu bên trong vi xử lý
Bus dữ liệu dùng để kết nối các thanh ghi bên trong và ALU với nhau. Tất cả các dữ
liệu di chuyển bên trong VXL đều thông qua bus dữ liệu này.
Các thanh ghi bên trong có thể nhận dữ liệu từ bus hay đặt dữ liệu lên bus nên bus
dữ liệu là bus 2 chiều.
Bus dữ liệu bên trong có thể kết nối ra bus bên ngoài khi VXL cần truy xuất dữ liệu
từ bộ nhớ ngoài hay các thiết bị I/O.
2.2. Tập lệnh của vi xử lý
2.2.1. Giới thiệu về tập lệnh của vi xử lý
Lệnh của VXL là một dữ liệu số nhị phân. Mỗi lệnh tương đương với một công việc
mà VXL phải làm. Hầu hết các lệnh của VXL là lệnh chuyển dữ liệu và xử lý dữ liệu.
Tập lệnh của VXL là tất cả các lệnh mà VXL có thể hiểu và thực hiện được.
23. 21
Độ dài của một lệnh bằng với chiều dài từ dữ liệu của VXL. Một VXL 8 bit thì độ
dài của một lệnh là 8 bit và số lệnh tối đa có thể có của nó là 28 = 256 lệnh.
Một lệnh được thực hiện cần phải có 2 yếu tố:
Yếu tố thứ nhất là mã lệnh (Opcode: Operation code): để yêu cầu VXL thực hiện
một việc nào đó.
Yếu tố thứ hai là địa chỉ (Address): để chỉ cho VXL biết vị trí của các dữ liệu mà
VXL phải xử lý.
Như vậy cấu trúc của một lệnh bao gồm mã lệnh và địa chỉ.
Có nhiều cách chỉ cho VXL biết địa chỉ của dữ liệu được gọi là các kiểu truy xuất bộ
nhớ. Khi sử dụng một VXL cần phải biết các kiểu truy xuất này.
2.2.2. Từ gợi nhớ (mnemonic)
Lệnh của VXL là các chữ số nhị phân, và một tập lệnh bao gồm rất nhiều lệnh. Do
đó người lập trình rất khó để nhớ hết.
Để giải quyết vấn đề này, lệnh được viết thành các từ gợi nhớ gần với chức năng và
ý nghĩa của lệnh.
Trong hầu hết các từ gợi nhớ mã lệnh được rút gọn chỉ còn 3 ký tự.
Khi lập trình người sử dụng dùng các từ gợi nhớ này để viết chương trình. Các từ gợi
nhớ này tạo thành một ngôn ngữ gọi là Assembly.
Để VXL hiểu và thực hiện được chương trình thì phải chuyển các lệnh viết dưới dạng
ngôn ngữ assembly thành các lệnh dạng số nhị phân bằng chương trình biên dịch
Assembler.
2.2.3. Các kiểu lệnh cơ bản của vi xử lý
Đối với hầu hết VXL tập lệnh được chia ra làm 9 nhóm lệnh cơ bản:
Nhóm lệnh truyền dữ liệu: Data transfers.
Nhóm lệnh trao đổi, truyền khối dữ liệu, tìm kiếm: Exchanges, Block transfers,
Searches.
Nhóm lệnh số học.
Nhóm lệnh logic.
Nhóm lệnh điều khiển CPU.
Nhóm lệnh xử lý bit.
Nhóm lệnh nhảy: Jumps.
Nhóm lệnh gọi, trở về: Calls, Return.
Hình 2-4: Cấu trúc của lệnh
24. 22
Nhóm lệnh xuất nhập: Input, output.
Các từ gợi nhớ và các mã nhị phân của tất cả các lệnh được cung cấp bởi nhà chế tạo
đối với từng VXL cụ thể.
2.2.4. Các kiểu truy xuất địa chỉ của vi xử lý
VXL có thể truy xuất địa chỉ bộ nhớ bằng nhiều cách để lấy dữ liệu. Các kiểu truy
xuất địa chỉ cơ bản của một VXL bao gồm:
Kiểu địa chỉ ngầm định.
Kiểu địa chỉ tức thời.
Kiểu địa chỉ trực tiếp.
Kiểu địa chỉ gián tiếp.
Kiểu địa chỉ chỉ số.
Kiểu địa chỉ tương đối.
Để biết VXL có bao nhiêu cách truy xuất bộ nhớ cần phải khảo sát từng VXL cụ thể.
CÂU HỎI THẢO LUẬN
Câu 1. Vi xử lý bao gồm những thành phần nào?
Câu 2. ALU là gì? ALU có thể thực hiện được các phép toán nào?
Câu 3. Chức năng của khối điều khiển là gì?
Câu 4. Mã lệnh của chương trình điều khiển chứa ở đâu?
Câu 5. Thanh ghi PC có ý nghĩa gì trong vi xử lý?
Câu 6. Ngăn xếp là gì? Ngăn xếp trong VXL là loại nào?
Câu 7. Lệnh của VXL là gì? Cấu tạo một lệnh gồm thành phần nào?
Câu 8. Từ gợi nhớ là gì?
Câu 9. Các nhóm lệnh cơ bản của VXL?
Câu 10. VXL thường có các kiểu truy xuất bộ nhớ nào?
CÂU HỎI TRẮC NGHIỆM ÔN TẬP
Câu 1. Mã lệnh từ bộ nhớ chưong trình bên ngoài, Sau khi được CPU đọc vào sẽ được
chứa tại bộ phận nào trong CPU.
a. Thanh ghi PC b. Thanh ghi IR
c. Khối giải mã lệnh và điều khiển d. ALU
Câu 2. Bộ phận nào trong CPU dùng để lưu giữ địa chỉ của lệnh kế tiếp trong bộ nhớ
chương trình mà CPU cần thực hiện.
a. Thanh ghi PC b. Thanh ghi IR
c. Khối giải mã lệnh và điều khiển d. ALU
25. 23
Câu 3. Nhiệm vụ của CPU là:
a. Điều hành hoạt động của toàn hệ thống theo ý định của người sử dụng thông qua
chương trình điều khiển.
b. Thi hành chương trình theo vòng kín gọi là chu kỳ lệnh.
c. Giao tiếp với các thiết bị xuất nhập.
d. Cả hai câu a và b đều đúng.
Câu 4. Ngăn xếp của VXL là loại nào?
a. LIFO b. LILO
c. FILO d. FIFO
Câu 5. Thanh ghi nào thường có chiều dài bằng chiều dài từ dữ liệu?
a. Thanh ghi địa chỉ b. Thanh ghi lệnh
c. Thanh ghi PC d. Thanh ghi khác
Câu 6. Thanh ghi nào thường có chiều dài bằng chiều dài thanh ghi địa chỉ?
a. Thanh ghi địa chỉ b. Thanh ghi lệnh
c. Thanh ghi PC d. Thanh ghi khác
Câu 7. Một lệnh thường có mấy yếu tố?
a. 1 b. 2
c. 3 d. 4
Câu 8. Từ gợi nhớ thường gồm mấy ký tự?
a. 1 b. 2
c. 3 d. 4
Câu 9. Vi xử lý gồm những thành phần nào?
a. ALU b. Control Unit
c. Register d. Bao gồm các thành phần trên
Câu 10. Mã lệnh của vi xử lý lưu trong bộ nhớ là dữ liệu kiểu gì?
a. BIN b. DEC
c. HEX d. BCD
26. 24
CHƯƠNG 3. VI ĐIỀU KHIỂN
Chương 3 giúp người học hiểu được thế nào là vi điều khiển, cấu trúc chung của vi
điều khiển. Trong chương này sẽ giới thiệu họ vi điều khiển 8051 là một họ vi điều khiển
thông dụng và có kiến trúc đơn giản giúp người học dễ tiếp cận môn học này.
Nội dung môn học bao gồm:
Giới thiệu về vi điều khiển.
Họ vi điều khiển 8051 (MCS-51).
Cấu trúc phần cứng của 8051.
3.1. Giới thiệu vi điều khiển
Vi điều khiển (Microcontroller: µC) là một thiết bị tích hợp một số các thành phần
của hệ vi xử lý lên cùng một chip.
Vi điều khiển có thể hoạt động độc lập mà không cần kết nối thêm nhiều các thiết bị
ngoại vi.
Vi điều khiển thuận lợi cho các ứng dụng nhỏ với chi phí thấp.
Vi điều khiển bao gồm các thành phần cơ bản như sau:
CPU
Memory (ROM, RAM)
Các cổng I/O
Các phần chính của một vi điều khiển:
Dung lượng RAM từ khoảng 64 Byte đến 4 KByte.
Dung lượng ROM từ khoảng 512 Byte đến 16 KB. Có loại lên đến 256 KB.
Dung lượng bộ nhớ ngày càng được tích hợp nhiều hơn theo sự phát triển của công
nghệ.
Các loại vi điều khiển có thể kết nối thêm bộ nhớ ngoài gọi là bộ nhớ mở rộng.
Hình 3-1: Các thành phần chính trong vi điều khiển
27. 25
Các cổng I/O của vi điều khiển thường được nhóm thành các cổng (PORT) mỗi
cổng gồm 8 bit.
Ngoài ra tùy loại VĐK mà còn có các thành phần sau:
Timer-counter: bộ định thời hoặc bộ đếm.
Các cổng giao tiếp: UART, SPI, I2C, USB, …
ADC (Analog to Digital Converter): xử lý các tín hiệu tương tự.
3.2. Họ Vi điều khiển 8051
Có nhiều loại VĐK thông dụng khác nhau như: AVR, PIC, ARM, … nhưng một
trong những họ VĐK thông dụng là 8051 (MCS-51).
Họ 8051 do hãng Intel phát triển đầu tiên và được nhiều hãng sản xuất linh kiện phát
triển theo như: Philip, Atmel… VĐK này có cấu trúc đơn giản thuận lợi cho người mới
tiếp cận nghiên cứu và học tập.
Dưới đây là một số đời vi điều khiển 8051 từ đời đầu tiên đến nay.
VĐK đầu tiên trong họ 8051 là 80C31. VĐK này không có bộ nhớ bên trong do
chưa tích hợp được.
VĐK 80C51 tích hợp được 4 kbyte bộ nhớ loại prom. Do đó chỉ lập trình được một
lần và không thể xóa được.
VĐK 87C51 tích hợp được 4 kbyte bộ nhớ eprom, cho phép lập trình nhiều lần và
xóa bằng tia cực tím.
VĐK 89C51 (CMOS) tích hợp được 4 kbyte bộ nhớ flash rom, cho phép nạp và
xóa bằng điện hàng ngàn lần.
Có nhiều phiên bản chip 8051 của các hàng khác nhau như: Philips, Dallas nhưng
thông dụng là sản phẩm của Atmel.
Một số vi điều khiển họ 8051 trên thị trường hiện nay đến bởi Atmel như sau:
Hình 3-2: Các thành phần có trong vi điều khiển
28. 26
89Cxxx: là CMOS, công nghệ chế tạo chip.
89Sxxx: là Serial, thể hiện khả năng lập trình nối tiếp.
89LVxxx: là loại Low Voltage, có khả năng chạy điện áp thấp từ 2,7V đến 6V.
Mã số ROM RAM Timer I/O Số chân
89C51 (89S51, 89LV51) 4 KB 128 byte 2 32 (4 port) 40
89C52 (89S52, 89LV52) 8 KB 256 byte 3 32 (4 port) 40
89C55 (89S55) 20 KB 256 byte 3 32 (4 port) 40
89C1051 1 KB 64 byte 1 15 (2 port) 20
89C2051 2 KB 128 byte 2 15 (2 port) 20
89C4051 4 KB 128 byte 2 15 (2 port) 20
Hình 3-3: Bảng một số chip thông dụng của Atmel
3.3. Tóm tắt phần cứng họ vi điều khiển 8051
Tất cả các VĐK cùng họ 8051 đều có các đặc tính cơ bản và tập lệnh giống nhau
nhưng phần cứng thì khác nhau. Những VĐK sau sẽ có nhiều tính năng hay hơn các VĐK
thế hệ trước.
Trong phần tiếp theo chúng ta chỉ đề cập đến VĐK 89C51 là một VĐK thông dụng
trong họ 8051.
VĐK 80C51 có các đặc điểm phần cứng như sau:
Có 4 kbyte bộ nhớ Flash ROM để lưu chương trình điều khiển.
Có 128 byte RAM nội.
Có 4 port xuất/nhập (input/output) 8 bit.
Có khả năng giao tiếp truyền dữ liệu nối tiếp.
Có thể giao tiếp với 64 Kbyte bộ nhớ ngoài để lưu chương trình điều khiển.
Có thể giao tiếp với 64 Kbyte bộ nhớ ngoài để lưu dữ liệu.
Có 210 bit có thể truy xuất từng bit.
Được đóng gói 40 pin DIP (Dual Inline Package) hoặc 44 pin TQFP (Thin Quad
Flat Package) hoặc PLCC (Plastic Leaded Chip Carrier).
Hình 3-4: Các kiểu đóng gói của chip 8051
29. 27
3.4. Khảo sát cấu trúc bên trong của VĐK 89C51
3.4.1. Sơ đồ cấu trúc bên trong của vi điều khiển
CPU: đơn vị điều khiển trung tâm, lõi vi xử lý.
Oscillator: mạch dao động để tạo xung nhịp cho chip.
Interrupt Control: khối điều khiển xử lý các nguồn ngắt.
Bus Control: khối điều khiển bus.
Other Register: các thanh ghi đặc biệt nằm trong bộ nhớ RAM.
I/O port: các cổng xuất nhập.
Address/Data: ngõ vào địa chỉ/dữ liệu dùng để giao tiếp bộ nhớ mở rộng.
Timer 0, timer 1 : các bộ định thời và đếm sự kiện.
Serial port: ngõ xuất/nhập dữ liệu nối tiếp USART.
3.4.2. Khảo sát sơ đồ chân của 89C51
VĐK 89C51 có tất cả 40 chân, trong đó có 24 chân có 2 chức năng. Mỗi chân có thể
hoạt động như một đường xuất nhập điều khiển I/O hoặc là thành phần của các bus dữ liệu
và bus địa chỉ khi giao tiếp với bộ nhớ ngoài.
VĐK 89C51 có 4 port I/O, mỗi port 8 bit tương ứng 8 chân vật lý, được đặt tên là
P0, P1, P2, P3.
P1 chỉ có chức năng I/O.
P0, P2 và P3 là port có 2 chức năng.
Chức năng I/O:
Input (nhận dữ liệu vào mcu)
Output (xuất dữ liệu ra thiết bị ngoại vi)
Chức năng khác ứng với từng chân:
Truyền dữ liệu nối tiếp
Hình 3-5: Sơ đồ khối vi điều khiển 89C51
30. 28
Ngắt ngoài(Interrupt)
Bus dữ liệu (Data Bus)
Bus địa chỉ (Address Bus)
Bus điều khiển (Control Bus)
3.4.2.2. Chức năng các port
a. Port 0: là port có 2 chức năng với số chân từ 32 – 39.
Chức năng thứ nhất port 0 dùng để làm các đường I/O.
Bên ngoài cần có điện trở “pull – up” .
Chức năng thứ 2 dùng làm bus địa chỉ (byte thấp) và dữ liệu AD7-AD0.
Bên trong đã có internal pull – up nên không cần điện trở “pull –up” bên ngoài.
Xuất ra, nhập vào dữ liệu dạng địa chỉ hay data.
Hình 3-6: Sơ đồ chân vi điều khiển 89C51
31. 29
Cấu trúc một pin của port 0:
Khi sử dụng port0 với chức năng I/O thì cần phải có điện trở pull-up kết nối ở bên ngoài.
b. Port 1: với số chân từ 1 – 8. port 1 chỉ có chức năng dùng làm các đường điều
khiển xuất nhập I/O. Port 1 có sẵn điện trở pull-up bên trong.
c. Port 2: là port có 2 chức năng với số chân từ 21 – 28.
Chức năng thứ nhất port 2 dùng để làm các đường điều khiển I/O.
Chức năng thứ 2 dùng làm 8 bus địa chỉ cao A8-A15.
Cấu trúc của port 2 tương tự như port 1.
Hình 3-8: Sơ đồ kết nối điện trở pull-up cho port 0
Hình 3-7: Sơ đồ cấu tạo Port 0
32. 30
d. Port 3: cũng là port có 2 chức năng với số chân từ 10 – 17.
Chức năng thứ nhất port 3 dùng để làm các đường điều khiển I/O.
Ngoài ra port 3 còn có các tính năng đặc biệt theo từng chân như sau:
Bit Tên Chức năng
P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp
P3.1 TxD Ngõ xuất dữ liệu nối tiếp
P3.2 INT0 Ngõ vào ngắt cứng 0
P3.3 INT1 Ngõ vào ngắt cứng 1
P3.4 T0 Ngõ vào của Timer/Counter 0
P3.5 T1 Ngõ vào của Timer/Counter 1
P3.6 WR Ngõ điều khiển ghi dữ liệu lên bộ
nhớ ngoài
P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ
nhớ ngoài
Hình 3-10: Chức năng từng chân của port 3
3.4.2.3. Các tín hiệu điều khiển
Chân EA (External Access): là tín hiệu ngõ vào ở chân 31. Nếu nối EA lên mức 1
VĐK sẽ thi hành chương trình trong bộ nhớ nội. Nếu nối EA ở mức 0, VĐK sẽ thi
hành chương trình từ bộ nhớ ngoài. Thông thương chân này được nối mức 1.
Chân PSEN (Program Store ENable): là tín hiệu ngõ ra ở chân 29, chân này là tín
hiệu điều khiển để đọc bộ nhớ chương trình mở rộng. Khi có giao tiếp với bộ nhớ
chương trình bên ngoài mới dùng đến chân PSEN. Chân này thường được nối với
chân OE của chip ROM.
Hình 3-9: Sơ đồ cấu tạo Port 1,2,3
33. 31
Chân RD (Read): là tín hiệu ngõ ra ở chân 17, chân này là tín hiệu điều khiển để
đọc bộ nhớ dữ liệu mở rộng. Chân này thường được nối với chân OE của chip ROM
hoặc RAM.
Chân WR (Write): là tín hiệu ngõ ra ở chân 16, chân này là tín hiệu điều khiển để
ghivào bộ nhớ dữ liệu mở rộng là RAM. Chân này thường được nối với chân WE
của chip RAM.
Chân ALE (Address Latch Enable): là tín hiệu ngõ ra ở chân 30. Tín hiệu ở chân
ALE dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và các đường dữ
liệu khi kết nối chúng với IC chốt. Tần số ALE bằng 1/12 tần số mạch dao động trên
chip. Hình dưới minh họa việc kết nối VĐK với bộ nhớ chương trình mở rộng.
Ngõ vào RST: ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái ban đầu cho
vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1
tối thiểu 2 chu kì máy.
Trạng thái của các thanh ghi đặc biệt trong VĐK sau khi reset có giá trị như sau:
Hình 3-11: Sơ đồ giao tiếp bộ nhớ chương trình bên ngoài
Hình 3-12: Mạch reset
34. 32
Thanh ghi Nội dung
PC 0000h
A 00h
B 00h
PSW 00h
SP 07h
DPTR 0000h
IP XXX00000b
IE 0X0X0000b
TH0,TL0,TH1,TL1 00h
SCON,SBUF 00h
PCON 0XXX0000b
Ngõ vào bộ dao động Xtal1, Xtal2: có vị trí chân là 18 và 19 được sử dụng để nhận
nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và
các tụ để tạo nguồn xung clock ổn định. Tần số thạch anh khoảng 2MHz đến 33MHz.
Nếu dùng tín hiệu clock bên ngoài thì đưa vào chân Xtal1 , Xtal 2 để trống.
Chu kỳ máy: là khoảng thời gian cần thiết được quy định để VĐK 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ó.
CKM = 12. T =
12
f
Với: CKM là chu kỳ máy
TOSC là chu kỳ của nguồn xung dao động cấp cho VĐK
fOSC là tần số của nguồn xung dao động cấp cho VĐK
Ví dụ: VĐK sử dụng thạch anh có tần số là 12MHz, thì chu kỳ máy là:
CKM =
12
f
=
12
12. 10
= 10 = 1μs
Vì thạch anh có tần số 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ường được sử dụng trong thực tế.
Hình 3-13: Sơ đồ kết nối mạch dao động
35. 33
3.5. Cấu trúc bộ nhớ của vi điều khiển
3.5.1. Tổ chức bộ nhớ
VĐK 89C51 có bộ nhớ tích hợp bên trong và có khả năng giao tiếp với bộ nhớ ngoài.
Bộ nhớ trong gồm 256 byte bộ nhớ dữ liệu và 4 kbyte bộ nhớ chương trình.
Bộ nhớ ngoài cũng có 2 loại, VĐK có thể giao tiếp tối đa với 64 Kbyte bộ nhớ dữ
liệu và 64 Kbyte bộ nhớ chương trình thông qua các chân điều khiển.
Hình dưới đây minh họa khả năng giao tiếp của VĐK 89C51 như sau:
FFFFh Data
Memory
Điều khiển
bởi
RD & RW
FFFFh Code
Memory
Điều khiển
bởi
PSEN
0FFFh Code
Memory
FFh Data
Memory
00h 0000h 0000h 0000h
RAM
Flash
ROM
RAM hoặc
ROM
ROM
Bộ nhớ trong Bộ nhớ mở rộng
Hình 3-14: Minh họa khả năng quản lý bộ nhớ của 89C51
3.5.2. Tổ chức bộ nhớ RAM
RAM bên trong 89C51 gồm được quản lý bởi 8 bit địa chỉ, có 256 byte được chia
làm 2 phần. Từ 00h đến 7Fh gồm 128 byte gồm các bank thanh ghi, vùng nhớ định địa chỉ
bit và RAM đa dụng. Phần còn lại từ 80h đến FFh là các ô nhớ dành cho các thanh ghi đặc
biệt. Trong các thanh ghi này có một số định địa chỉ bit, còn lại thì không.
Hình dưới minh họa các vùng trong bộ nhớ RAM.
7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
RAM đa dụng E0 E7 E6 E5 E4 E3 E2 E2 E0 A
(80 byte)
D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW
30 B8 - - - BC BB BA B9 B8 IP
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P3
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE
2B 5F 5E 5D 5C 5B 5A 59 58
36. 34
2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40 99 SBUF
27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 93 91 90 P1
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 8D TH1
22 17 16 15 14 13 12 11 10 8C TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B TL1
20 07 06 05 04 03 02 01 00 8A TL0
1F BANK 3
(RS1 = 1, RS0 = 1)
89 TMOD
18 88 8F 8E 8D 8C 8B 8A 89 88 TCON
17 BANK 2
(RS1 = 1, RS0 = 0)
87 PCON
10
0F BANK 1
(RS1 = 0, RS0 = 1)
83 DPH
08 82 DPL
07 BANK 0
(mặc định gán cho R0 - R7)
81 SP
00 80 87 86 85 84 83 82 81 80 P0
RAM REGISTER
Hình 3-15: Minh họa các phân vùng và địa chỉ trong RAM
3.5.2.1. Các bank thanh ghi có địa chỉ từ 00h đến 1Fh
Các bank thanh ghi gồm 32 byte được chia làm 4 bank. Tại mỗi thời điểm chỉ có một
bank thanh ghi được truy xuất, mặc định là bank 0.
Có 8 thanh ghi được đặt tên là R0 đến R7 (Register).
Các thanh ghi này được đặt mặc định trong bank 0. Nghĩa là thanh ghi R0 sẽ có địa
chỉ 00h, R1 là 01h, cho đến R7 là 07h.
Để thay đổi việc truy xuất các bank thanh ghi, người dùng phải thay đổi giá trị các
bit chọn bank RS1 và RS0 trong thanh ghi trạng thái PSW.
Nếu cài đặt sử dụng bank nào thì các thanh ghi sẽ được dời đến địa chỉ bank đó.
Ví dụ nếu dùng bank 3, thanh ghi R0 sẽ có địa chỉ 18h, R1 là 19h, cho đến R7 là 1Fh.
Direct RAM Register
1Fh
Bank
3
…
18h
17h
Bank
2
…
10h
37. 35
0Fh
Bank
1
…
08h
07h R7
Bank
0
06h R6
05h R5
04h R4
03h R3
02h R2
01h R1
00h R0
Hình 3-16: Bảng minh họa các bank thanh ghi
3.5.2.2. RAM truy xuất từng bit từ 20h đến 2Fh
Trên RAM nội có 210 ô nhớ có thể truy xuất đến từng bit. Các bit nhớ này cũng được
định địa chỉ bằng các số Hex. Trong đó có 128 bit nằm trong các ô nhớ có địa chỉ byte từ
20h đến 2Fh, các bit nhớ còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt. Các bit
này có thể được thay đổi giá trị mà không ảnh hưởng đến các bit khác trong cùng một byte
thông qua nhóm lệnh xử lý bit ở phần sau sẽ đề cập.
3.5.2.3. RAM đa dụng từ 30h đến 7Fh
Gồm 80 byte dùng để lưu trữ dữ liệu và có thể truy xuất theo từng byte. Một phần bộ
nhớ này thường được dùng để làm ngăn xếp.
3.5.2.4. Các thanh ghi có chức năng đặc biệt từ 80h đến FFh
Các thanh ghi này được định địa chỉ byte, một số được định thêm địa chỉ bit. Các
thanh ghi đặc biệt này này được dùng để xác lập trạng thái hoạt động cần thiết cho VĐK.
a. Các thanh ghi có địa chỉ 80h, 90h, A0h, B0h: Đây là các thanh ghi kiểm tra và
điều khiển mức logic của các Port, có thể truy xuất và xác lập các thanh ghi này
với địa chỉ byte hoặc tên riêng lần lượt là P0, P1, P2, P3 tương ứng với các Port.
b. Thanh ghi A (Accumulator): ở địa chỉ E0h, là thanh ghi tích lũy, dùng để lưu trữ
các toán hạng và kết quả của phép tính.
c. Thanh ghi B: ở địa chỉ F0h, được dùng với thanh ghi A để thực hiện các phép toán
nhân và chia.
d. Thanh ghi con trỏ ngăn xếp SP (Stack Pointer): có địa chỉ 81H, giá trị của nó được
tăng, giảm tự động khi thực hiện cất hoặc lấy dữ liệu. Giá trị mặc định khi mới
khởi động của SP là 07h.
e. Thanh ghi con trỏ dữ liệu DPTR (Data Pointer Register): là thanh ghi 16 bit được
tạo thành từ hai thanh ghi DPL (byte thấp, ở địa chỉ 82h) và DPH (byte cao, ở địa
chỉ 83h). Hai thanh ghi này có thể truy xuất độc lập bởi người sử dụng. Con trỏ
dữ liệu DPTR thường được sử dụng khi truy xuất dữ liệu từ bộ nhớ chương trình
hoặc bộ nhớ dữ liệu mở rộng.
38. 36
DPTR (16 bit)
DPH (8 bit cao) DPL (8 bit thấp)
f. Thanh ghi trạng thái chương trình PSW (Program Status Word): có địa chỉ D0h là
thanh ghi chứa các bit trạng thái khi chương trình hoạt động. Các bit này thông
thường tự động thay đổi theo chức năng mỗi bit.
Bit Địa chỉ bit Ký hiệu Chức năng
PSW.7 D7h C Cờ nhớ (Cary Flag)
PSW.6 D6h AC Cờ nhớ phụ (Auxiliary Cary Flag)
PSW.5 D5h Z Cờ 0 hay cờ Zero
PSW.4 D4h RS1 Bit lựa chọn bank thanh ghi 1
PSW.3 D3h RS0 Bit lựa chọn bank thanh ghi 0
PSW.2 D2h OV
Cờ tràn với phép tính liên quan đến
số nhị phân có dấu
PSW.1 D1h - Chưa được thiết kế để sử dụng
PSW.0 D0h P Cờ chẵn lẻ (Parity Flag)
Hình 3-17: bảng các bit trong thanh ghi trạnh thái PSW
Chức năng từng bit trong thanh trạng thái PSW:
Cờ nhớ C: được sử dụng trong các lệnh toán học và một số lệnh khác.
+ C = 1 nếu phép toán cộng xảy ra tràn hoặc phép trừ có mượn.
+ C = 0 nếu phép toán cộng không tràn hoặc phép trừ không mượn.
+ Ngoài ra cờ C còn bị ảnh hưởng bởi lệnh xoay và lệnh so sánh.
Cờ nhớ phụ AC: được dùng trong các phép toán cộng hai số BCD. Khi cộng số
BCD.
+ AC = 1 nếu kết quả phép toán cộng có 4 bit thấp lớn hơn 9 hoặc có nhớ từ bit 3
qua bit 4.
+ AC = 0 nếu kết quả phép toán cộng có 4 bit thấp nhỏ hơn 10 hoặc không có nhớ
từ bit 3 qua bit 4.
Cờ Z hay cờ nhớ F0: cờ zero.
+ Cờ Z = 0 khi thanh ghi A có giá trị khác 0.
+ Cờ Z = 1 khi thanh ghi A có giá trị là 0.
Các bit chọn bank thanh ghi RS1, RS0: dùng để lựa chọn bank thanh ghi. Mặc định
khi reset hệ thống bank 0 được sử dụng (RS1 = 0, RS0 = 0).
Bảng chọn bank thanh ghi:
39. 37
RS1 RS0 Bank thanh ghi được sử dụng
0 0 Bank 0
0 1 Bank 1
1 0 Bank 2
1 1 Bank 3
Cờ tràn OV (Over Flag): được sử dụng trong các phép toán cộng có dấu, với các
phép toán cộng không dấu cờ tràn OV được bỏ qua, không cần quan tâm đến OV.
Nếu:
+ Phép cộng hai số có dấu lớn hơn +127 thì OV = 1
+ Hoặc phép trừ hai số có dấu nhỏ hơn -128 thì OV = 1
+ Các trường hợp còn lại OV = 0
Cờ chẵn lẻ P (Parity): tự động được đặt bằng 1 hoặc xóa về 0 sao cho tổng số bit
mang giá trị 1 trên thanh ghi A với cờ P luôn là một số chẵn. Cờ chẵn lẻ được dùng
để xử lý dữ liệu trước khi truyền đi theo kiểu nối tiếp hoặc xử lý dữ liệu trước khi
nhận vào theo kiểu nối tiếp (hạn chế lỗi phát sinh trong quá trình truyền).
CÂU HỎI THẢO LUẬN
Câu 1. Vi điều khiển là gì? Vi điều khiển bao gồm những thành phần nào?
Câu 2. 8051 có mấy loại bộ nhớ?
Câu 3. Các thanh ghi có trong 8051? Chức năng của mỗi thanh ghi là gì?
Câu 4. Chân RST có chức năng gì? Sơ đồ của mạch reset?
Câu 5. Chu kỳ máy là gì? Cách tính chu kỳ máy đối với VĐK 8051?
Câu 6. Dung lượng các loại bộ nhớ trong 8051?
Câu 7. Các phân vùng của bộ nhớ RAM trong 8051?
Câu 8. Bank thanh ghi là gì? Có mấy bank? Các thanh ghi trong bank là gì?
Câu 9. Để sử dụng bank 3 cần cài đặt thế nào? R0 khi dùng bank 3 ở địa chỉ bao nhiêu?
Câu 10. RAM truy xuất bit là gì?
Câu 11. RAM đa dụng là gì?
Câu 12. Các thanh ghi đặc biệt nằm trong vùng địa chỉ nào? Tại sao lại gọi là “Các thanh
ghi có chức năng đặc biệt”?
Câu 13. Các port có chức năng gì?
Câu 14. Thanh ghi trạng thái là gì? Gồm các các bit nào?
Câu 15. Dung lượng bộ nhớ ngoài mà 8051 có thể truy xuất?
40. 38
CÂU HỎI TRẮC NGHIỆM ÔN TẬP
Câu 1. Dung lượng bộ nhớ dữ liệu (RAM) có trong chip 89C51 là?
a. 128 byte b. 256 byte
c. 8 KB d. 4 KB
Câu 2. Dung lượng bộ nhớ chương trình (ROM) có trong chip 89C51 là?
a. 128 byte b. 256 byte
c. 8 KB d. 4 KB
Câu 3. Số lượng bộ đếm/bộ định thời (Timer) có trong chip vi điều khiển 8051 là?
a. 1 b. 2
c. 3 d. 4
Câu 4. Chip vi điều khiển 89C51 có bao nhiêu port xuất nhập dữ liệu?
a. 1 port b. 2 port
c. 3 port d. 4 port
Câu 5. Dung lượng bộ nhớ dữ liệu mở rộng tối đa mà chip 89C51 có khả năng truy xuất?
a. 32 KB b. 64 KB
c. 128 KB d. 256 KB
Câu 6. Trong chip vi điều khiển 89C51, các port xuất nhập có hai chức năng là?
a. P1, P2, P3 b. P0, P1, P2
c. P0, P2, P3 d. P0, P1, P3
Câu 7. Trong chip vi điều khiển 89C51, port chỉ có chức năng xuất nhập cơ bản là?
a. P0 b. P1
c. P2 d. P3
Câu 8. Khi các port xuất nhập của 89C51 đóng vai trò là port xuất nhập dữ liệu thì port
nào cần phải có điện trở kéo lên bên ngoài?
a. P0 b. P1
c. P2 d. P3
Câu 9. Khi chip 89C51 sử dụng bộ nhớ bên ngoài thì port nào đóng vai trò là bus địa chỉ
byte thấp và bus dữ liệu đa hợp (AD0 ... AD7)?
a. P0 b. P1
c. P2 d. P3
Câu 10. Khi chip 89C51 sử dụng bộ nhớ bên ngoài thì port nào đóng vai trò là bus địa chỉ
byte cao?
a. P0 b. P1
c. P2 d. P3
Câu 11. Khi chip 89C51 sử dụng bộ nhớ bên ngoài hay các chức năng đặc biệt thì port nào
đóng vai trò là các tin hiệu điều khiển?
a. P0 b. P1
41. 39
c. P2 d. P3
Câu 12. PSEN là tín hiệu điều khiển dùng làm gì?
a. Cho phép truy xuất (đọc) bộ nhớ chương trình bên ngoài.
b. Cho phép truy xuất (sử dụng) bộ nhớ chương trình bên ngoài.
c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp.
d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051.
Câu 13. EA là tín hiệu điều khiển dùng làm gì?
a. Cho phép truy xuất (đọc) bộ nhớ chương trình bên ngoài.
b. Cho phép truy xuất (sử dụng) bộ nhớ chương trình bên ngoài.
c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp.
d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051.
Câu 14. ALE là tín hiệu điều khiển dùng làm gì?
a. Cho phép truy xuất (đọc) bộ nhớ chương trình bên ngoài.
b. Cho phép truy xuất (sử dụng) bộ nhớ chương trình bên ngoài.
c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp.
d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051.
Câu 15. RST là tín hiệu điều khiển dùng làm gì?
a. Cho phép truy xuất (đọc) bộ nhớ chương trình bên ngoài.
b. Cho phép truy xuất (sử dụng) bộ nhớ chương trình bên ngoài.
c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp.
d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051.
Câu 16. WR là tín hiệu điều khiển dùng làm gì?
a. Cho phép đọc thông tin từ bộ nhớ dữ liệu ngoài.
b. Cho phép ghi thông tin vào bộ nhớ dữ liệu ngoài.
c. Cho phép đọc thông tin từ bộ nhớ chương trình ngoài.
d. Cho phép ghi thông tin vào bộ nhớ chương trình ngoài.
Câu 17. RD là tín hiệu điều khiển dùng làm gì?
a. Cho phép đọc thông tin từ bộ nhớ dữ liệu ngoài.
b. Cho phép ghi thông tin vào bộ nhớ dữ liệu ngoài.
c. Cho phép đọc thông tin từ bộ nhớ chương trình ngoài.
d. Cho phép ghi thông tin vào bộ nhớ chương trình ngoài.
Câu 18. Tần số phổ dụng của thạch anh sử dụng cho hầu hết các chip vi điều khiển họ
8051 là?
a. 10 MHz b. 11 MHz
c. 12 MHz d. 13 MHz
42. 40
Câu 19. Chân PSEN của chip 8051 thường được nối với chân nào của bộ nhớ chương trình
bên ngoài?
a. CS b. WR
c. RD d. OE
Câu 20. Nếu tần số xung clock của mạch dao động trong chip là 12 MHZ thì tần số của tín
hiệu tại chân ALE là bao nhiêu?
a. 12 MHz b. 6 MHz
c. 2 MHz d. 1 MHz
Câu 21. Khi dùng mạch dao động TTL bên ngoài tạo tín hiệu xung clock cho chip 8051
thì tín hiệu xung clock phải được đưa vào chân nào?
a. CS b. INT0
c. XTAL1 d. XTAL2
Câu 22. Các bank thanh ghi của chip 8051 nằm trong bộ nhớ nào?
a. Bộ nhớ chương trình bên trong.
b. Bộ nhớ chương trình bên ngoài.
c. Bộ nhớ dữ liệu bên trong.
d. Bộ nhớ dữ liệu bên ngoài.
Câu 23. Trong bộ nhớ dữ liệu của chip 8051, các bank thanh ghi có địa chỉ nằm trong
khoảng nào?
a. 00h – 1Fh b. 20h – 2Fh
c. 30h – 7Fh d. 80h – FFh
Câu 24. Trong bộ nhớ dữ liệu của chip 8051, vùng RAM định địa chỉ bit có địa chỉ nằm
trong khoảng nào?
a. 00h – 1Fh b. 20h – 2Fh
c. 30h – 7Fh d. 80h – FFh
Câu 25. Trong bộ nhớ dữ liệu của chip 8051, vùng RAM đa dụng có địa chỉ nằm trong
khoảng nào?
a. 00h – 1Fh b. 20h – 2Fh
c. 30h – 7Fh d. 80h – FFh
Câu 26. Trong bộ nhớ dữ liệu bên trong của chip 8051, các thanh ghi có chức năng đặc
biệt (SFR) có địa chỉ nằm trong khoảng nào?
a. 00h – 1Fh b. 20h – 2Fh
c. 30h – 7Fh d. 80h – FFh
Câu 27. Dung lượng bộ nhớ chương trình mở rộng tối đa mà chip 8051 có khả năng truy
xuất là?
a. 4 KB b. 8 KB
c. 32 KB d. 64 KB
43. 41
CHƯƠNG 4. KHẢO SÁT TẬP LỆNH CỦA VI ĐIỀU KHIỂN
Chương này giúp người học kiến thức về lập trình hợp ngữ Assembly thông qua tập
lệnh của vi điều khiển 8051. Biết được cấu trúc của mỗi lệnh, từ khóa và mã nhị phân cho
từng lệnh. Biết cách xây dựng một chương trình vi xử lý hoàn chỉnh.
Nội dung môn học bao gồm:
Giới thiệu về chương trình và tập lệnh.
Các kiểu truy xuất bộ nhớ.
Các nhóm lệnh của 8051.
Cấu trúc của chương trình.
4.1. Khái niệm về chương trình, tập lệnh và ngôn ngữ gợi nhớ
Chương trình là tập hợp các lệnh được tổ chức theo một trình tự hợp lý để giải quyết
các yêu cầu của người lập trình.
Tập hợp tất cả các lệnh mà VĐK có thể thực hiện được gọi là tập lệnh. Họ vi điều
khiển 8051 đều có chung một tập lệnh.
Lệnh của Vi điều khiển là các số nhị phân 8 bit hay còn gọi là mã máy. Do đó vi điều
khiển có tối đa 28
= 256 lệnh. Các lệnh mang mã từ 00000000b đến 11111111b.
Chương trình cho vi điều khiển có thể viết bằng C,Visual Basic, hoặc bằng các ngôn
ngữ cấp cao khác. Tuy nhiên hợp ngữ Assembly được đa số người dùng mới làm quen vi
điều khiển sử dụng để lập trình.
Ưu điểm của hợp ngữ Assembly là: mã gọn, ít chiếm dung lượng bộ nhớ, hoạt động
với tốc độ nhanh và nó có hiệu suất tốt hơn so với các chương trình viết bằng ngôn ngữ
bậc cao khác.
Để soạn thảo chương trình có thể sử dụng Notepad hoặc bất cứ chương trình soạn
thảo có sử dụng bộ ký tự chuẩn ASCII và lưu tên với phần mở rộng là ".asm". Ngoài ra có
thể sử dụng các phần mềm hỗ trợ soạn thảo dành riêng cho vi điều khiển đã tích hợp sẵn
chương trình biên dịch.
Chương trình sau khi viết bằng assembly cần được chuyển đổi qua mã lệnh (hay còn
gọi là mã máy) của vi điều khiển, quá trình chuyển đổi được thực hiện bằng chương trình
dịch Assembler.
4.2. Các kiểu định địa chỉ bộ nhớ
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ùy thuộc
vào cách thức sử dụng lệnh của người lập trình.
44. 42
Vi điều khiển họ 8051 có 8 kiểu định địa chỉ như sau:
a. Địa chỉ trực tiếp: dùng để truy xuất bất kỳ ô nhớ nào trong bộ nhớ RAM nội của
vi điều khiển.
Opcode Direct Address
Ví dụ: Mov A,05h ;copy nội dung ô nhớ 05h vào thanh ghi A.
b. Địa chỉ dùng thanh ghi: kiểu định địa chỉ này thường được dùng cho các lệnh xử
lý dữ liệu mà dữ liệu luôn lưu trữ trong các thanh ghi. Mã lệnh kiểu này chỉ có 1
byte.
Opcode n n n
Ví dụ: Mov A,R5 ;copy nội dung thanh ghi R5 vào thanh ghi A.
c. Địa chỉ gián tiếp: kiểu định địa chỉ này được ký hiệu bằng dấu @ trước các thanh
ghi R0, R1 hay DPTR. Nội dung của các thanh ghi này cho biết địa chỉ ô nhớ cần
truy xuất.
Opcode i
Ví dụ: Mov A,@R1 ;copy nội dung ô nhớ có địa chỉ trong thanh ghi R1 vào thanh
ghi A.
d. Địa chỉ tức thời: được ký hiệu bằng dấu # đặt trước dữ liệu dạng nhị phân, thập
phân hoặc thập lục phân.
Opcode Immediate Data
Hình 4-1: Minh họa cách lấy dữ liệu từ bộ nhớ của vi xử lý
45. 43
Ví dụ: Mov A,#30h ;nạp dữ liệu là 30h vào thanh ghi A.
e. Địa chỉ tương đối: kiểu định địa chỉ này chỉ sử dụng với những lệnh nhảy. Nơi
nhảy đến sẽ có địa chỉ bằng giá trị trong thanh ghi PC cộng với một giá trị lệch
tương đối 8 bit (từ -128 đến 127).
Opcode Relative Offset
f. Địa chỉ tuyệt đối: được dùng với các lệnh Acall, Ajmp. Lệnh này phân chia bộ
nhớ thành các trang kích thước 2 Kbyte. Trong câu lệnh chứa 11 bit địa chỉ sẽ
được thay thế cho 11 bit thấp của thanh ghi PC.
A10 - A8 Opcode A7 - A0
g. Địa chỉ dài: được dùng với lệnh Lcall, Ljmp. Trong câu lệnh chứa 16 bit địa chỉ
sẽ được nạp cho thanh ghi PC.
Opcode A15 – A8
A7 – A0
h. Địa chỉ chỉ số: kiểu định địa chỉ này dùng một thanh ghi cơ bản (PC hoặc DPTR)
làm con trỏ kết hợp với giá trị lệch được lưu trong thanh ghi A để đưa ra địa chỉ ô
nhớ cần truy xuất.
Ví dụ: MovC A,@A+DPTR ;chuyển nội dung của ô nhớ có địa chỉ A+DPTR trong
bộ nhớ chương trình vào thanh ghi A.
4.3. Tập lệnh của vi điều khiển
Tập lệnh trong Vi điều khiển được chia làm 5 nhóm:
Nhóm lệnh di chuyển dữ liệu
Nhóm lệnh số học
Nhóm lệnh logic
Nhóm lệnh rẽ nhánh
Nhóm lệnh xử lý bit
Các quy ước khi sử dụng tập lệnh
Rn: các thanh ghi trong bank thanh ghi. Rn thay thế cho R0 đến R7.
Ví dụ: Mov R5 , A
#Data: dữ liệu tức thời 8 bit. Có thể viết ở dạng nhị phân (bin), thập phân (dec)
hoặc thập lục phân (hex). Sau khi biên dịch tất cả được lưu ở dạng nhị phân.
Ví dụ: Mov R5 , #3Bh
46. 44
Mov R5 , #00111011b
Mov R5 , #59
Lưu ý: dữ liệu ở dạng số hex nếu bắt đầu bằng ký tự A đến F thì phải thêm số ‘0’
phía trước khi lập trình. Để đơn giản, trong tài liệu này sẽ không thêm số ‘0’.
Ví dụ: trong tài liệu ghi: Mov R5,#B3h
thì khi lập trình phải ghi: Mov R5,#0B3h
#Data16: dữ liệu tức thời 16 bit.
Ví dụ: Mov dptr , #1A7Ch
Direct: ô nhớ có địa chỉ trực tiếp 8 bit trong RAM nội có giá trị từ 00h đến FFh.
Ví dụ: Mov 05h , #30h
↔ Mov R5 , #30h
@Ri: con trỏ ô nhớ có địa chỉ gián tiếp được xác định bởi giá trị trong thanh ghi
Ri. Ri thay thế cho R1 và R0.
Ví dụ: Mov R0 , #30h
Mov @R0 , #5Ch
Bit: địa chỉ trực tiếp của một bit được xác định cho các ô nhớ hoặc thanh ghi có
khả năng truy xuất bit.
Ví dụ: Setb 30h
Mov C , 30h
Rel: relative, địa chỉ offset 8 bit có dấu, giá trị từ -128 đến 127. Giá trị này được
cộng vào thanh ghi PC khi gặp các lệnh nhảy. Khi lập trình, địa chỉ tham chiếu đến
được thay thế bằng một nhãn (label).
Ví dụ: Repeat: Mov A , #30
Add a,#01
Sjmp Repeat
Add11: địa chỉ tuyệt đối 11 bit. Được thay thế bằng nhãn.
Ví dụ: Ajmp Repeat
Add16: địa chỉ dài 16 bit. Được thay thế bằng nhãn.
Ví dụ: Ljmp Repeat
Src: source, toán hạng nguồn, là nơi lấy dữ liệu trong RAM. Src có thể là A, Rn,
Direct, @Ri, #Data.
Ví dụ: Mov A , #30
Dest: destination, toán hạng đích, là nơi dữ liệu sẽ chuyển đến. Dest có thể là A,
Rn, Direct, @Ri.
47. 45
4.3.1. Nhóm lệnh di chuyển dữ liệu (Data Transfer Instructions)
4.3.1.1. Lệnh di chuyển dữ liệu 8 bit trong RAM nội
Cú pháp: Mov dest , src
Dest: A, Rn, direct, @Ri
Src: A, Rn, direct, @Ri, #data
Liệt kê lệnh: Mov A,Rn
Mov A,direct
Mov A,@Ri
Mov A,#data
Mov Rn,A
Mov Rn,direct
Mov Rn,#data
Mov direct,A
Mov direct,Rn
Mov direct,direct
Mov direct,@Ri
Mov direct,#data
Mov @Ri,A
Mov @Ri,direct
Mov @Ri,#data
Chức năng: (src) → (dest)
Mô tả: lệnh này dùng di chuyển (thực chất là sao chép) dữ liệu được lưu trong ô nhớ
nguồn Src đến ô nhớ đích Dest. Dữ liệu chỉ di chuyển nội bộ trong RAM.
Ví dụ: Mov A , #30
4.3.1.2. Lệnh di chuyển dữ liệu 16 bit vào thanh ghi dptr (Data PoinTer Register)
Cú pháp: Mov dptr , #data16
Chức năng: data16 → (dptr)
Mô tả: lệnh này dùng nạp địa chỉ 16 bit cho con trỏ dữ liệu dptr, có thể nạp riêng cho
từng byte qua thanh ghi DPH và DPL.
Ví dụ: Mov dptr , #1234h
↔ Mov dph , #12h
Mov dpl , #34h
48. 46
4.3.1.3. Lệnh di chuyển dữ liệu với bộ nhớ ngoài
Cú pháp: MovX @dptr , A
MovX A , @dptr
Chức năng: (A) → ((dptr))
((dptr)) → (A)
Mô tả: lệnh này dùng trao đổi dữ liệu giữa vi điều khiển với bộ nhớ mở rộng thông
qua thanh ghi A và con trỏ DPTR.
Ví dụ: copy dữ liệu từ ô nhớ 15h (đang có dữ liệu = #AAh) sang ô nhớ 1234h.
Mov A , 15h
Mov dptr , #1234h
MovX @dptr , A
Ví dụ: copy dữ liệu từ ô nhớ 1234h (đang có dữ liệu = #7Fh) sang thanh ghi R7.
Mov dptr , #1234h
Movx A , @dptr
Mov R7 , A
4.3.1.4. Lệnh copy dữ liệu từ bộ nhớ chương trình
Cú pháp: MovC A , @A+dptr
MovC A , @A+PC
Chức năng: ((A) + (dptr)) → (A)
((A) + (PC)) → (A)
Mô tả: lệnh này dùng để lấy dữ liệu từ bộ nhớ chương trình (ROM) thông qua con
trỏ DPTR hoặc thanh ghi PC.
Ví dụ: copy dữ liệu từ ô nhớ 01F3h trong bộ nhớ chương trình sang ô nhớ 20h.
49. 47
Mov dptr , #01F3h
Clr A
MovC A , @A+dptr
4.3.1.5. Lệnh trao đổi dữ liệu với A (Exchange)
Cú pháp: Xch A , src
Src: Rn, @Ri, direct
Liệt kê lệnh: Xch A,Rn
Xch A,@Ri
Xch A,direct
Chức năng: (A) ↔ (Src)
Mô tả: lệnh này dùng trao đổi dữ liệu giữa A với nguồn dữ liệu còn lại là Src.
Ví dụ: Xch A,20h
4.3.1.6. Lệnh trao đổi 4 bit thấp giữa ô nhớ gián tiếp và A (Exchange Digit)
Cú pháp: XchD A , @Ri
Chức năng: (A) 3-0 ↔ ((Ri))3-0
Mô tả: lệnh này trao đổi dữ liệu 4 bit thấp của thanh ghi A với 4 bit thấp của ô nhớ
bất kỳ thông qua con trỏ Ri.
Ví dụ: Mov A,#36h
Mov 20h,#75h
Mov R0,#20h
XchD A,@R0
50. 48
4.3.1.7. Lệnh cất dữ liệu ô nhớ trực tiếp vào ngăn xếp
Cú pháp: Push direct
Chức năng: (SP) = (SP) + 1 ; (direct) → ((SP))
Mô tả: lệnh này cất dữ liệu vào ngăn xếp
được quản lý bởi con trỏ SP. Mỗi khi thực hiện
push, SP sẽ tăng 1 để chỉ đến ô nhớ trống trên cùng
của ngăn xếp.
Lưu ý: lệnh này chỉ dùng địa chỉ trực tiếp.
Ví dụ: giả sử ban đầu thanh ghi A có giá trị
#AAh, thanh ghi B có giá trị #BBh, thanh ghi R0
có giá trị #CCh và con trỏ ngăn xếp có giá trị #5Fh.
Để cất thanh ghi A, B, R0 vào ngăn xếp ta
dùng các lệnh sau:
Push E0h ;địa chỉ thanh ghi A
Push F0h ;địa chỉ thanh ghi B
Push 00h ;địa chỉ thanh ghi R0
Có thể dùng lệnh Push Acc với thanh ghi A. Acc là địa chỉ direct của A, khi biên dịch
Acc sẽ được thay bằng E0h.
4.3.1.8. Lệnh lấy dữ liệu từ ngăn xếp
Cú pháp: Pop direct
Chức năng: ((SP)) → (direct) ; (SP) = (SP) – 1
Mô tả: lệnh này lấy dữ liệu từ ngăn xếp được quản lý bởi con trỏ SP sau đó lưu trở
lại ô nhớ trực tiếp. Mỗi khi thực hiện pop, dữ liệu sẽ được lấy ra tại vị trí SP đang quản lý,
sau đó SP sẽ giảm 1 để chỉ đến ô nhớ có dữ liệu trên cùng của ngăn xếp.
Ví dụ: để lấy dữ liệu đã cất trước
đó từ ngăn xếp vào thanh ghi A, B, R0 ta
dùng các lệnh sau:
Pop 00h ;địa chỉ thanh ghi R0
Pop F0h ;địa chỉ thanh ghi B
Pop Acc ;địa chỉ thanh ghi A
Lưu ý: ngăn xếp thuộc dạng bộ nhớ
LIFO (vào sau ra trước) nên dữ liệu nào
cất vào sau cùng thì được lấy ra trước.
51. 49
4.3.2. Nhóm lệnh số học (Mathematical Instructions)
4.3.2.1. Lệnh cộng với thanh ghi A
Cú pháp: Add A , src
Src: Rn, @Ri, direct, #data
Liệt kê lệnh: Add A,Rn
Add A,@Ri
Add A,direct
Add A,#data
Chức năng: (A) + (src) → (A) ; (C) = 1 nếu KQ > 255
Mô tả: Lệnh này cộng dữ liệu trong A với dữ liệu chứa trong Src, kết quả sau khi
cộng lưu lại vào A. Lệnh này tác động đến bit C. Nếu tổng lớn hơn 8 bit thì bit C tự động
được đặt lên 1.
Ví dụ: Mov A , #30h
Mov R2 , #3Fh
Add A , R2
4.3.2.2. Lệnh cộng với thanh ghi A và cờ nhớ C
Cú pháp: AddC A , src
Src: Rn, @Ri, #data, direct
Liệt kê lệnh: AddC A,Rn
AddC A,@Ri
AddC A,direct
AddC A,#data
Chức năng: (A) + (src) + (C) → (A) ; (C) = 1 nếu KQ > 255
Mô tả: lệnh này tương tự lệnh Add nhưng ngoài việc cộng dữ liệu của A với Src còn
cộng thêm giá trị của bit C. Lệnh này dùng để mở rộng các phép toán cộng lớn hơn 8 bit.
Ví dụ: Mov A , #30h
Mov R2 , #3Fh
Setb C
Addc A , R2
4.3.2.3. Lệnh trừ với bao gồm cờ C
Cú pháp: SubB A , src
Src: Rn, @Ri, #data, direct
Liệt kê lệnh: SubB A,Rn
SubB A,@Ri
SubB A,direct
52. 50
SubB A,#data
Chức năng: (A) - (src) – (C) → (A) ; (C) = 1 nếu KQ < 0
Mô tả: Lệnh này tương tự lệnh AddC nhưng là phép toán trừ. Dữ liệu trong A trừ cho
Src đồng thời trừ cho bit C. Bit C trong lệnh trừ có vai trò là bit mượn (Borrow).
Ví dụ: lấy #30h trừ dữ liệu trong R2
Mov A , #30h
Clr C
Subb A , R2
4.3.2.4. Lệnh hiệu chỉnh số BCD (Decimal Adjustment)
Cú pháp: DA A
Chức năng: (A)HEX → (A)BCD ; (C) = 1 nếu KQ > 99h
Mô tả: lệnh này dùng để hiệu chỉnh số hex trong thanh ghi A thành số BCD sau khi
thực hiện phép toán cộng. Bit C = 1 khi kết quả lớn hơn 99h.
Ví dụ: Mov A , #39h
Mov R2 , #45h
Add A , R2 → A = #7Eh
DA A → A = #84h
4.3.2.5. Lệnh nhân A với B (Multiply)
Cú pháp: Mul AB
Chức năng: (A) x (B) → (B: high byte) (A: low byte)
Mô tả: lệnh nhân chỉ được dùng với thanh ghi A và thanh ghi B. Trước khi nhân,
thanh ghi A và thanh ghi B chứa 2 thừa số. Sau khi thực hiện lệnh nhân, thanh ghi A và B
chứa kết quả là tích số gồm 16 bit. Trong đó thanh ghi A chứa byte thấp và thanh ghi B
chứa byte cao.
Ví dụ: nhân #30h với #1Bh
Mov A , #30h
Mov B , #1Bh
Mul AB
Kết quả: A = #10h, B = #05h
4.3.2.6. Lệnh chia A với B (Divide)
Cú pháp: Div AB
Chức năng: (A) / (B) → (B: phần dư), (A: phần nguyên)
Mô tả: lệnh chia chỉ được dùng với thanh ghi A và thanh ghi B. Trước khi chia thanh
ghi A chứa số bị chia, thanh ghi B chứa số chia. Sau khi thực hiện lệnh chia, thanh ghi A
chứa thương số, thanh ghi B chứa phần dư.
Ví dụ: chia #30h với #1Bh
53. 51
Mov A , #30h
Mov B , #1Bh
Div AB
Kết quả: A = #01h, B = #15h
4.3.2.7. Lệnh tăng dữ liệu trong Src lên 1 (Increment)
Cú pháp: Inc Src
Src: A, Rn, @Ri, direct, dptr
Liệt kê lệnh: Inc A
Inc Rn
Inc @Ri
Inc direct
Inc dptr
Chức năng: (Src) +1 → (Src)
Mô tả: dữ liệu chứa trong Src tăng 1 đơn vị. Nếu vượt qua giá trị lớn nhất mà Src có
thể chứa thì kết quả sẽ bằng 0.
Ví dụ: Mov A , #1Fh
Mov dptr , #1B79h
Inc A
Inc dptr
4.3.2.8. Lệnh giảm dữ liệu trong Src xuống 1 (Decrement)
Cú pháp: Dec Src
Src: A, Rn, @Ri, direct
Liệt kê lệnh: Dec A
Dec Rn
Dec @Ri
Dec direct
Chức năng: (Src) -1 → (Src)
Mô tả: dữ liệu chứa trong Src giảm 1 đơn vị. Nếu dữ liệu trước khi giảm bằng 0 thì
kết quả nhận được là giá trị lớn nhất mà Src có thể chứa.
Lưu ý: lệnh giảm không dùng được với thanh ghi DPTR.
Ví dụ: Mov R5 , #1Fh
Mov 30h , #00h
Dec R5
Dec 30h
54. 52
4.3.3. Nhóm lệnh logic (Logic Instructions)
4.3.3.1. Lệnh And, Or, Xor thanh ghi A với dữ liệu 8 bit
Cú pháp: AnL A , Src
OrL A , Src
XrL A , Src
Src: Rn, @Ri, #data, direct
Liệt kê lệnh: AnL A,Rn
AnL A,@Ri
AnL A,direct
AnL A,#data
OrL A,Rn
OrL A,@Ri
OrL A,direct
OrL A,#data
XrL A,Rn
XrL A,@Ri
XrL A,direct
XrL A,#data
Chức năng: AnL: (A) and (Src) → (A)
OrL: (A) or (Src) → (A)
XrL: (A) xor (Src) → (A)
Mô tả: dữ liệu chứa trong thanh ghi A được and (hoặc or hoặc xor) với dữ liệu chứa
trong Src. Kết quả lưu vào thanh ghi A.
A B A AND B A OR B A XOR B NOT A
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0
Hình 4-2: Bảng trạng thái các phép logic cơ bản
Ta có:
A and 0 = 0 A or 0 = A A xor 0 = A
A and 1 = A A or 1 = 1 A xor 1 = Ā
Do đó ta có thể thực hiện thay đổi giá trị các bit trong một byte mà không ảnh hưởng
đến các bit còn lại bằng cách sau:
55. 53
+ Dùng lệnh AnL để xóa một số bit trong byte. Bit nào xóa thì and với 0, bit nào
giữ nguyên thì and với 1.
+ Dùng lệnh OrL để đặt một số bit trong byte lên 1. Bit nào muốn đặt lên 1 thì or
với 1, bit nào giữ nguyên thì or với 0.
+ Dùng lệnh XrL để đảo một số bit trong byte. Bit nào muốn đảo thì xor với 1, bit
nào giữ nguyên thì xor với 0.
Ví dụ: or thanh ghi A với thanh ghi R1.
Mov A , #B2h
Mov R1 , #5Eh
Orl A , R1
(A) 1 0 1 1 0 0 1 0 input 1
(A) 1 1 1 1 1 1 1 0 or result
(R1) 0 1 0 1 1 1 1 0 input 2
Ví dụ: And thanh ghi A với ô nhớ trực tiếp 20h (direct).
Mov A , #0FCh
Mov 20h , #3Fh
Anl A , 20h
(A) 1 1 1 1 1 1 0 0 input 1
(A) 0 0 1 1 1 1 0 0 and result
(20h) 0 0 1 1 1 1 1 1 input 2
Ví dụ: Xor thanh ghi A với ô nhớ gián tiếp qua con trỏ R1.
Mov A , #14h
Mov 20h , #05h
Mov R1 , #20h
Xrl A , R5
(A) 0 0 0 1 0 1 0 0 input 1
(A) 0 0 0 1 0 0 0 1 xor result
(@R1) 0 0 0 0 0 1 0 1 input 2
56. 54
4.3.3.2. Lệnh And, Or, Xor ô nhớ trực tiếp với dữ liệu 8 bit
Cú pháp: AnL direct , Src
OrL direct , Src
XrL direct , Src
Src: A, #data
Liệt kê lệnh: AnL direct,A
AnL direct,#data
OrL direct,A
OrL direct,#data
XrL direct,A
XrL direct,#data
Chức năng: AnL: (direct) and (src) → (direct)
OrL: (direct) or (src) → (direct)
XrL: (direct) xor (src) → (direct)
Mô tả: dữ liệu chứa trong ô nhớ trực tiếp (direct) được and (hoặc or hoặc xor) với dữ
liệu chưa trong Src. Kết quả lưu vào ô nhớ trực tiếp.
Ví dụ: Mov A , #1Ch
Mov 30h , #79h
Xrl 30h , A
4.3.3.3. Lệnh xóa dữ liệu trong thanh ghi A (Clear)
Cú pháp: Clr A
Chức năng: 0 → (A)
Mô tả: dữ liệu chứa trong thanh ghi A được xóa về 0. Lệnh này tương đương với lệnh
Mov A,#0.
Ví dụ: Mov A , #5Ch
Clr A
↔ Mov A , #00h
(A) 0 1 0 1 1 0 1 0 input
clr
(A) 0 0 0 0 0 0 0 0 result
4.3.3.4. Lệnh đảo dữ liệu trong thanh ghi A (Complement)
Cú pháp: Cpl A
Chức năng: (Ā) → (A)
Mô tả: dữ liệu chứa trong thanh ghi A được đảo các bit. Lệnh này tương đương với
lệnh Xrl A,#11111111b.
57. 55
Ví dụ: Mov A , #0Fh
Cpl A
Kết quả: A = #F0h
(A) 0 0 0 0 1 1 1 1 input
cpl
(A) 1 1 1 1 0 0 0 0 result
4.3.3.5. Lệnh xoay thanh ghi A (Rotate)
Cú pháp: RL A (Rotate Left)
RR A (Rotate Right)
Chức năng: RL: (A0) → (A1), (A1) → (A2),…,( A7) → (A0)
RR: (A7) → (A6), (A6) → (A5),…,( A0) → (A7)
Mô tả: dữ liệu chứa trong thanh ghi A được xoay qua trái (hoặc phải) 1 bit. Nếu xoay
trái, bit A7 sẽ quay về vị trí của A0. Nếu quay phải, bit A0 sẽ quay về vị trí của A7.
(A) A7 A6 A5 A4 A3 A2 A1 A0 input
← ← ← ← ← ← ← ← RL
(A) A6 A5 A4 A3 A2 A1 A0 A7 result
(A) A7 A6 A5 A4 A3 A2 A1 A0 input
→ → → → → → → → RR
(A) A0 A7 A6 A5 A4 A3 A2 A1 result
Ví dụ: Mov A , #65h
RL A
(A) 0 1 1 0 0 1 0 1 input
← ← ← ← ← ← ← ← RL
(A) 1 1 0 0 1 0 1 0 result
Kết quả: A = #CAh
4.3.3.6. Lệnh xoay thanh ghi A cùng với bit C (Rotate with C)
Cú pháp: RLC A (Rotate Left)
RRC A (Rotate Right)
Chức năng: RL: (A0) → (A1),…,( A7) → (C), (C) → (A0)
RR: (A7) → (A6),…,( A0) → (C), (C) → (A7)
Mô tả: dữ liệu chứa trong thanh ghi A được xoay qua trái (hoặc phải) 1 bit cùng với
bit C, nghĩa là cùng xoay 9 bit. Nếu xoay trái, bit A7 vào vị trí bit C và bit C sẽ quay về vị
trí của A0. Nếu quay phải, bit A0 sẽ vào vị trí bit C và bit C sẽ quay về vị trí của A7.
58. 56
C ← A7 A6 A5 A4 A3 A2 A1 A0 input
← ← ← ← ← ← ← ← RLC
A7 A6 A5 A4 A3 A2 A1 A0 C result
(C) (A)
C → A7 A6 A5 A4 A3 A2 A1 A0 input
→ → → → → → → → RRC
A0 C A7 A6 A5 A4 A3 A2 A1 result
(C) (A)
Ví dụ: Mov A , #65h
Clr C
RRC A
0 → 0 1 1 0 0 1 0 1 input
→ → → → → → → → RRC
1 0 0 1 1 0 0 1 0 result
(C) (A)
Kết quả: A = #32h, C = 1
4.3.3.7. Lệnh xoay 4 bit trong thanh ghi A
Cú pháp: Swap A
Chức năng: (A7-4)(A3-0) → (A3-0) (A7-4)
Mô tả: dữ liệu chứa trong thanh ghi A được đổi vị trí 4 bit cao với 4 bit thấp. Việc
này tương đương xoay trái (hoặc phải) 4 bit.
(A) A7 A6 A5 A4 A3 A2 A1 A0 input
→ → → → ← ← ← ← Swap
(A) A3 A2 A1 A0 A7 A6 A5 A4 result
Ví dụ: Mov A , #7Dh
Swap A
↔ RL A
RL A
RL A
RL A
(A) 0 1 1 1 1 1 0 1 input
→ → → → ← ← ← ← Swap
(A) 1 1 0 1 0 1 1 1 result
Kết quả: A = #D7h
59. 57
4.3.4. Nhóm lệnh rẽ nhánh (Control Transfer Instructions)
4.3.4.1. Lệnh gọi chương trình con (Call)
Cú pháp: Call Address
Address: Add11, Add16
Liệt kê lệnh: Acall Add11 (Absolute Call)
Lcall Add16 (Long Call)
Chức năng: (PC) → ((SP))
(Address) → (PC)
Mô tả: lệnh Call dùng để gọi thực thi chương trình con được xác định vị trí lưu trong
ROM bằng địa chỉ tuyệt đối Add11 hoặc địa chỉ dài Add16 (gọi chung là Address). Giá trị
của thanh ghi PC tạm thời được lưu vào ngăn xếp, sau đó PC được nạp giá trị mới chính
là địa chỉ của chương trình con. Khi lập trình bằng Assembly, Add11 và Add16 được thay
thế bằng “Nhãn” (Label) để tham chiếu đến vị trí của chương trình con.
Cách đặt tên Nhãn: do người lập trình tự đặt với điều kiện không được trùng với từ
khoá, mã gợi nhớ, chỉ dẫn, toán tử hoặc ký hiệu tiền định nghĩa. Nhãn phải bắt đầu bằng
ký tự chữ, dấu chấm hỏi ‘?’, dấu gạch dưới ‘_’. Độ dài của nhãn tối đa 31 ký tự và kết thúc
bằng dấu hai chấm ‘:’.
4.3.4.2. Lệnh trở về từ chương trình con (Return)
Cú pháp: RET
RETI
Chức năng: ((SP)) → (PC)
Mô tả: lệnh RET (hoặc RETI) dùng để kết
thúc chương trình con (hoặc chương trình con phục
vụ ngắt) đang được thực thi. Thanh ghi PC sẽ được
nạp lại địa chỉ của chương trình chính trước đó
đang được lưu trong ngăn xếp.
Ví dụ: chương trình con “Delay” được gọi và
thực thi như hình bên bằng lệnh “Lcall”.
(1) Giá trị thanh ghi PC khi reset, chương
trình bắt đầu chạy từ địa chỉ 0000h.
(2) Khi thực thi đến lệnh “Lcall” ở địa chỉ
0123h, lệnh này chiếm 3 byte nên thanh
ghi PC tăng lên 0126h. Thanh ghi PC
được cất vào ngăn xếp và nạp địa chỉ
0234h của chương trình con “Delay”.
(3) Chương trình con “Delay” bắt đầu được
thực thi.
address ROM
0000h ------------- (1)
-------------
-------------
-------------
Chương
trính
chính
0123h Lcall Delay (2)
0126h ------------- (5)
-------------
-------------
-------------
0234h Delay: (3)
-------------
-------------
-------------
-------------
Chương
trình
con
(Sub
rountine)
0256h Ret (4)
-------------
-------------
-------------