SlideShare a Scribd company logo
1 of 133
Download to read offline
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
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
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
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
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
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
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
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
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
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
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).
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
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
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ý
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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:
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?
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
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
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
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.
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ý
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
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.
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
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.
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
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.
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
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
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
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:
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
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.
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.
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
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)
-------------
-------------
-------------
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf
Kỹ thuật Vi xử lý.pdf

More Related Content

Similar to Kỹ thuật Vi xử lý.pdf

Phan tich-thiet-ke-he-thong-tin
Phan tich-thiet-ke-he-thong-tinPhan tich-thiet-ke-he-thong-tin
Phan tich-thiet-ke-he-thong-tinxxxabcyyy
 
2516102 phan-tich-thiet-ke-he-thong-thong-tin
2516102 phan-tich-thiet-ke-he-thong-thong-tin2516102 phan-tich-thiet-ke-he-thong-thong-tin
2516102 phan-tich-thiet-ke-he-thong-thong-tinTruong Tuyen
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Hòn Đá To
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmemNga Khổng
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnhttps://www.facebook.com/garmentspace
 
Robot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnRobot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnPHÚ QUÝ ĐINH
 
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scaratinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scara5 Phút Giải Lao
 
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119Duy Tân
 
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...Man_Ebook
 
03 - LUANVAN_NopQuyen.pdf
03 - LUANVAN_NopQuyen.pdf03 - LUANVAN_NopQuyen.pdf
03 - LUANVAN_NopQuyen.pdfNguyễn Thái
 
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...Dịch vụ viết bài trọn gói ZALO: 0909232620
 
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...Dịch vụ viết thuê Khóa Luận - ZALO 0932091562
 
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềmLuận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềmViết thuê trọn gói ZALO 0934573149
 
New fortran
New fortranNew fortran
New fortranhoahanh
 

Similar to Kỹ thuật Vi xử lý.pdf (20)

Thi nghiem xlths
Thi nghiem xlthsThi nghiem xlths
Thi nghiem xlths
 
Phan tich-thiet-ke-he-thong-tin
Phan tich-thiet-ke-he-thong-tinPhan tich-thiet-ke-he-thong-tin
Phan tich-thiet-ke-he-thong-tin
 
2516102 phan-tich-thiet-ke-he-thong-thong-tin
2516102 phan-tich-thiet-ke-he-thong-thong-tin2516102 phan-tich-thiet-ke-he-thong-thong-tin
2516102 phan-tich-thiet-ke-he-thong-thong-tin
 
Pttkhttt
PttkhtttPttkhttt
Pttkhttt
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012
 
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải tríĐề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
Đề tài: Chương trình quản lý đăng ký tham gia hoạt động giải trí
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem
 
ĐỒ ÁN - ROBOT HÚT BỤI SỬ DỤNG ARDUINO.docx
ĐỒ ÁN - ROBOT HÚT BỤI SỬ DỤNG ARDUINO.docxĐỒ ÁN - ROBOT HÚT BỤI SỬ DỤNG ARDUINO.docx
ĐỒ ÁN - ROBOT HÚT BỤI SỬ DỤNG ARDUINO.docx
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
 
Robot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnRobot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều Khiển
 
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scaratinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
 
Đề tài: Tính toán động học và điều khiển Robot SCARA, HAY
Đề tài: Tính toán động học và điều khiển Robot SCARA, HAYĐề tài: Tính toán động học và điều khiển Robot SCARA, HAY
Đề tài: Tính toán động học và điều khiển Robot SCARA, HAY
 
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119
123doc tinh-toan-dong-hoc-va-dieu-khien-robot-scara-170518155119
 
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...
Phát triển thuật toán tự triển khai cho hệ thống đa robot giám sát môi trường...
 
03 - LUANVAN_NopQuyen.pdf
03 - LUANVAN_NopQuyen.pdf03 - LUANVAN_NopQuyen.pdf
03 - LUANVAN_NopQuyen.pdf
 
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
Nâng cao hiệu năng mạng Manet bằng kỹ thuật định tuyến cân bằng tải - Gửi miễ...
 
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
Luận án: Nâng cao hiệu năng mạng MANET sử dụng kỹ thuật định tuyến cân bằng t...
 
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềmLuận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
Luận văn: Áp dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
 
New fortran
New fortranNew fortran
New fortran
 
Luận án: Cải tiến bộ điều khiển sử dụng đại số gia tử cho phi tuyến
Luận án: Cải tiến bộ điều khiển sử dụng đại số gia tử cho phi tuyếnLuận án: Cải tiến bộ điều khiển sử dụng đại số gia tử cho phi tuyến
Luận án: Cải tiến bộ điều khiển sử dụng đại số gia tử cho phi tuyến
 

More from Man_Ebook

BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfBÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfMan_Ebook
 
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docTL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docMan_Ebook
 
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfGiáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfGiáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfGiáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfGiáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfGiáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfMan_Ebook
 
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfGiáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfGiáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfMan_Ebook
 
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfGiáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfGiáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfMan_Ebook
 
Giáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfGiáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfMan_Ebook
 
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình web  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình song song  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfGiáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfMan_Ebook
 
Giáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfGiáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfMan_Ebook
 
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdfGiáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdfMan_Ebook
 

More from Man_Ebook (20)

BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfBÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
 
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docTL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
 
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfGiáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
 
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfGiáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
 
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
 
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
 
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfGiáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
 
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfGiáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
 
Giáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfGiáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdf
 
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfGiáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
 
Giáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfGiáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdf
 
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfGiáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
 
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfGiáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
 
Giáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfGiáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdf
 
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình web  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình song song  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfGiáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdf
 
Giáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfGiáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdf
 
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdfGiáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
 

Recently uploaded

Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 

Recently uploaded (20)

Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
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) ------------- ------------- -------------