SlideShare a Scribd company logo
1 of 32
Download to read offline
Tài liệu Lập trình hệ thống Chương 1 
Chương 1 
KIẾN TRÚC VÀ HOẠT ĐỘNG CỦA HỆ VI XỬ LÝ / 
MÁY TÍNH 
1. Cấu trúc luận lý 
Máy tính số (Digital computer) là máy giải quyết các vấn đề bằng cách thực hiện 
các chỉ thị do con người cung cấp. Chuỗi các chỉ thị này gọi là chương trình (program). 
Các mạch điện tử trong một máy tính số sẽ thực hiện một số giới hạn các chỉ thị đơn giản 
cho trước. Tập hợp các chỉ thị này gọi là tập lệnh của máy tính. Tất cả các chương trình 
muốn thực thi đều phải được biến đổi sang tập lệnh trước khi được thi hành. Các lệnh cơ 
bản là: 
- Cộng 2 số. 
- So sánh với 0. 
- Di chuyển dữ liệu. 
Tập lệnh của máy tính tạo thành một ngôn ngữ giúp con người có thể tác động lên 
máy tính, ngôn ngữ này gọi là ngôn ngữ máy (machine language). Tuy nhiên, hầu hết các 
ngôn ngữ máy đều đơn giản nên để thực hiện một yêu cầu nào đó, người thiết kế phải 
thực hiện một công việc phức tạp. Đó là chuyển các yêu cầu này thành các chỉ thị có chứa 
trong tập lệnh của máy. Vấn đề này có thể giải quyết bằng cách thiết kế một tập lệnh mới 
thích hợp cho con người hơn tập lệnh đã cài đặt sẵn trong máy (built-in). Ngôn ngữ máy 
sẽ được gọi là ngôn ngữ cấp 1 (L1) và ngôn ngữ vừa được hình thành gọi là ngôn ngữ cấp 
2 (L2). 
Tuy nhiên, trong thực tế, để có thể thực hiện được, các ngôn ngữ L1 và L2 không 
được khác nhau nhiều. Như vậy, ngôn ngữ L2 cũng không thật sự giúp ích nhiều cho 
người thiết kế. Do đó, một tập lệnh kế tiếp được hình thành sẽ hướng về con người nhiều 
hơn là máy tính, tập lệnh này sẽ tạo thành một ngôn ngữ và ta gọi là ngôn ngữ L3. Ta có 
thể viết các chương trình trong L3 như là đã tồn tại máy tính sử dụng ngôn ngữ L3 (máy 
ảo L3). Các chương trình này sẽ được dịch sang ngôn ngữ L2 và được thực thi bằng một 
chương trình dịch L2. 
Việc xây dựng toàn bộ chuỗi các ngôn ngữ, mỗi ngôn ngữ được tạo ra sẽ thích hợp 
hơn ngôn ngữ trước đó sẽ có thể tiếp tục cho đến khi nhận được ngôn ngữ thích hợp nhất. 
Sơ đồ một máy ảo n cấp có thể biểu diễn như sau: 
Phạm Hùng Kim Khánh Trang 1
Tài liệu Lập trình hệ thống Chương 1 
Cấp n 
Cấp 3 
Cấp 2 
Cấp 1 
Máy ảo Mn dùng ngôn 
ngữ máy Ln 
Chương trình trong Ln được dịch thành 
ngôn ngữ của máy cấp thấp hơn 
Máy ảo M3 dùng ngôn 
ngữ máy L3 
Chương trình trong L3 được dịch thành 
ngôn ngữ L2 hay L1 
Máy ảo M2 dùng ngôn 
ngữ máy L2 
Chương trình trong L2 được dịch thành 
ngôn ngữ máy L1 
Máy tính số M1 dùng 
ngôn ngữ máy L1 
Chương trình trong L1 được thực thi trực 
tiếp bằng các mạch điện tử 
Hình 1.1. Máy ảo n cấp 
Một máy tính số có n cấp có thể xem như có n-1 máy ảo khác nhau, mỗi máy ảo có 
một ngôn ngữ máy riêng. Các chương trình viết trên các máy ảo này không thể thực thi 
trực tiếp mà phải dịch thành các ngôn ngữ máy cấp thấp hơn. Chỉ có máy thật dùng ngôn 
ngữ máy L1 mới có thể thực thi trực tiếp bằng các mạch điện tử. Một lập trình viên sử 
dụng máy ảo cấp n không cần biết tất cả các trình dịch này. Chương trình trong máy ảo 
cấp n sẽ được thực thi bằng cách dịch thành ngôn ngữ máy cấp thấp hơn và ngôn ngữ máy 
này sẽ được dịch thành ngôn ngữ máy thấp hơn nữa hay dịch trực tiếp thành ngôn ngữ 
máy L1 và thực thi trực tiếp trên các mạch điện tử. 
Phạm Hùng Kim Khánh Trang 2
Tài liệu Lập trình hệ thống Chương 1 
Về cơ bản, máy tính gồm có 6 cấp: 
Cấp 5 Cấp ngôn ngữ hướng vấn đề 
Dịch (chương trình dịch) 
Cấp 4 Cấp ngôn ngữ hợp dịch 
Dịch (hợp dịch) 
Cấp 3 Cấp hệ điều hành 
Dịch 1 phần (hệ điều hành) 
Cấp 2 Cấp máy quy ước 
Thông dịch (vi chương trình) 
Cấp 1 Cấp vi lập trình 
Vi chương trình (phần cứng) 
Cấp 0 Cấp logic số 
Hình 1.2 – Các cấp trên máy tính số 
Cấp 0 chính là phần cứng của máy tính. Các mạch điện tử của cấp này sẽ thực thi 
các chương trình ngôn ngữ máy của cấp 1. Trong cấp logic số, đối tượng quan tâm là các 
cổng logic. Các cổng này được xây dựng từ một nhóm các transistor. 
Cấp 1 là cấp ngôn ngữ máy thật sự. Cấp này có một chương trình gọi là vi chương 
trình (microprogram), vi chương trình có nhiệm vụ thông dịch các chỉ thị của cấp 2. Hầu 
hết các lệnh trong cấp này là di chuyển dữ liệu từ phần này đến phần khác của máy hay 
thực hiện việc một số kiểm tra đơn giản. 
Mỗi máy cấp 1 có một hay nhiều vi chương trình chạy trên chúng. Mỗi vi chương 
trình xác định một ngôn ngữ cấp 2. Các máy cấp 2 đều có nhiều điểm chung ngay cả các 
máy cấp 2 của các hãng sản xuất khác nhau. Các lệnh trên máy cấp 2 được thực thi bằng 
cách thông dịch bởi vi chương trình mà không phải thực thi trực tiếp bằng phần cứng. 
Cấp thứ 3 thường là cấp hỗn hợp. Hầu hết các lệnh trong ngôn ngữ của cấp máy 
này cũng có trong ngôn ngữ cấp 2 và đổng thời có thêm một tập lệnh mới, một tổ chức bộ 
Phạm Hùng Kim Khánh Trang 3
Tài liệu Lập trình hệ thống Chương 1 
nhớ khác và khả năng chạy 2 hay nhiều chương trình song song. Các lệnh mới thêm vào 
sẽ được thực thi bằng một trình thông dịch chạy trên cấp 2, gọi là hệ điều hành. Nhiều 
lệnh cấp 3 được thực thi trực tiếp do vi chương trình và một số lệnh khác được thông dịch 
bằng hệ điều hành (do đó, cấp này là cấp hỗn hợp). 
Cấp 4 thật sự là dạng tượng trưng cho một trong các ngôn ngữ. Cấp này cung cấp 
một phương pháp viết chương trình cho các cấp 1, 2, 3 dễ dàng hơn. Các chương trình 
viết bằng hợp ngữ được dịch sang các ngôn ngữ của cấp 1, 2, 3 và sau đó được thông dịch 
bằng các máy ảo hay thực tương ứng. 
Cấp 5 bao gồm các ngôn ngữ được thiết kế cho người lập trình nhằm giải quyết 
một vấn đề cụ thể. Các ngôn ngữ này được gọi là cấp cao. Một số ngôn ngữ cấp cao như 
Basic, C, Cobol, Fortran, Lisp, Prolog, Pascal và các ngôn ngữ lập trình hướng đối tượng 
như C++, J++, … Các chương trình viết bằng các ngôn ngữ này thường được dịch sang 
cấp 3 hay 4 bằng các trình biên dịch (compiler). 
2. Giao tiếp ngoại vi 
Ta phân biệt tất cả 3 phương pháp xuất / nhập dữ liệu: 
- Nhập / xuất bằng cách hỏi trạng thái của thiết bị ngoại vi (polling) 
- Nhập / xuất bằng ngắt (interrupt). 
- Nhập / xuất bằng cách truy xuất trực tiếp vào bộ nhớ dùng các phần cứng phụ 
trợ (DMA). 
2.1. Nhập / xuất dữ liệu bằng cách hỏi vòng (polling) 
Ta biết rằng vấn đề điều khiển nhập / xuất dữ liệu sẽ rất đơn giản trong trường hợp 
thiết bị ngoại vi lúc nào cũng có thể làm việc với μP. Ta có thể ví dụ như bộ hiển thị Led 
7 đoạn lúc nào cũng sẵn sàng hiển thị dữ liệu khi mà μP gởi dữ liệu ra. Tuy nhiên, trong 
thực tế, không phải lúc nào μP cũng làm việc với các thiết bị ngoại vi có tính năng như 
trên. Ví dụ như khi làm việc với một máy in, μP yêu cầu in nhưng máy in không sẵn sàng 
(giả sử như hết giấy, kẹt giấy, …). Khi đó, μP phải kiểm tra xem một thiết bị mà nó cần 
giao tiếp có sẵn sàng hay không nếu thiết bị sẵn sàng thì mới thực hiện trao đổi dữ liệu. 
Để kiểm tra các thiết bị ngoại vi, μP phải sử dụng các tín hiệu bắt tay (handshake) xác 
định tuần tự từng thiết bị, xem thiết bị nào có yêu cầu trao đổi dữ liệu. Các tín hiệu này 
lấy từ các mạch giao tiếp do người thiết kế tạo ra. 
Giả sử hệ thống có 2 thiết bị ngoại vi, nếu thiết bị 1 có dữ liệu cần truyền đến μP 
thì nó sẽ gởi 1 xung để chốt dữ liệu đồng thời tạo tín hiệu sẵn sàng cho thiết bị. Khi μP 
kiểm tra tín hiệu sẵn sàng của thiết bị 1 thì nó sẽ đọc dữ liệu vào từ mạch chốt và xoá tín 
hiệu sẵn sàng. 
Trong trường hợp μP muốn gởi dữ liệu ra thiết bị 2, nó sẽ đọc tín hiệu sẵn sàng của 
thiết bị 2, nếu thiết bị 2 có thể nhận dữ liệu thì μP sẽ gởi dữ liệu ra mạch chốt và thiết bị 2 
sẽ đọc dữ liệu vào. 
Phạm Hùng Kim Khánh Trang 4
Tài liệu Lập trình hệ thống Chương 1 
2.2. Ngắt và xử lý ngắt 
Trong cách thức thực hiện trao đổi dữ liệu bằng cách hỏi vòng như trên, trước khi 
tiến hành thực hiện thì μP phải kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi. Tuy 
nhiên trong thực tế ta cần phải tận dụng khả năng của μP để làm các công việc khác mà 
không phải tốn thời gian kiểm tra thiết bị, chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới 
tạm dừng công việc hiện tại. Cách làm việc như vậy gọi là ngắt μP, khi có một ngắt xảy ra 
thì ta phải thực hiện gọi các chương trình phục vụ ngắt tại các địa chỉ xác định của μP. 
Các tín hiệu ngắt từ thiết bị ngoại vi đưa vào μP thông qua các chân NMI hay INTR. 
2.2.1. Các loại ngắt 
™ Ngắt cứng: là các yêu cầu ngắt từ các chân NMI hay INTR. 
Ngắt cứng NMI là ngắt không che được còn ngắt cứng INTR có thể che được. Các 
lệnh CLI (Clear Interrupt) và STI (Set Interrupt) chỉ ảnh hưởng đến việc μP có chấp nhận 
yêu cầu ngắt tại chân INTR hay không. Yêu cầu ngắt tại chân INTR có thể có các kiểu 
ngắt từ 00h ÷ FFh. Kiểu ngắt này sẽ được đưa vào bus dữ liệu để μP xác định kiểu ngắt 
(dùng cho các thiết bị ngoại vi khác nhau). 
74LS245 
1 
19 
2 3 4 5 6 7 8 9 
11 
12 
13 
14 
15 
16 
17 
18 
DIR 
G 
A8 
A7 
A6 
A5 
A4 
A3 
A2 
A1 
B8 
B7 
B6 
B5 
B4 
B3 
B2 
B1 
INT7 
INT5 
INT6 
INT4 
INT3 
INT2 
INT1 
VCC 
INT0 
1234 
56 
11 
12 
8 
40 
39 
38 
37 
36 
35 
34 
33 
32 
VCC 
GND 
AD14 
AD15 
AD13 
A16/S3 
AD12 
A17/S4 
AD11 
A18/S5 
AD10 
A19/S6 
AD9 
BHE/S7 
AD8 
AD7 
AD6 
AD5 
AD4 
AD3 
AD2 
AD1 
AD0 
NMI 
INTR 
CLK 
GND RESET 
MN/MX 
RD 
10 
11 
HOLD (RQ/GT0) 
12 
HLDA (RQ/GT1) 
13 
WR (LOCK) 
14 
IO/M (S2) 
15 
DT/R (S1) 
16 
DEN (S0) 
17 
ALE (QS0) 
18 
INTA (QS1) 
19 
20 21 
8086 
123456789 
31 
30 
29 
28 
27 
26 
25 
24 
23 
22 
TEST 
READY 
Hình 1.3 – Kết nối ngắt đơn giản 
™ Ngắt mềm: là các ngắt thực hiện bằng phần mềm tác động do người sử dụng. 
2.2.2. Đáp ứng của μP khi có yêu cầu ngắt 
Khi có yêu cầu ngắt đến μP và nếu được phép ngắt, μP sẽ thực hiện các công việc 
sau: 
- [SP] ← SP – 2, [SP] ← FR (Flag Register): cất thanh ghi cờ vào stack. 
- IF ← 0, TF ← 0: không cho thực hiện các ngắt khác. 
- SP ← SP – 2, [SP] ← CS: cất địa chỉ đoạn mã vào stack. 
- SP ← SP – 2, [SP] ← IP: cất địa chỉ trở về sau khi phục vụ ngắt 
Phạm Hùng Kim Khánh Trang 5
Tài liệu Lập trình hệ thống Chương 1 
- IP ← [Số_hiệu_ngắt*4], CS ← [Số_hiệu_ngắt*4 + 2]: lấy lệnh tại địa chỉ phục 
vụ ngắt tương ứng 
- Sau khi kết thúc chương trình con phục vụ ngắt (khi gặp lệnh IRET): 
+ IP ← [SP], SP ← SP + 2 
+ CS ← [SP], SP ← SP + 2: lấy lại địa chỉ trước khi gọi chương trình phục vụ 
ngắt 
+ FR ← [SP], SP ← SP + 2: lấy lại giá trị thanh ghi cờ 
2.2.3. Xử lý ưu tiên ngắt 
Như ta đã biết ở trên, khi μP đang thực hiện lệnh, nếu có ngắt xảy ra thì μP sẽ tạm 
ngừng chương trình và thực thi chương trình con phục vụ ngắt. Trong thực tế sẽ có trường 
hợp có nhiều yêu cầu ngắt khác nhau cùng một lúc, khi đó μP sẽ phục vụ cho ngắt theo 
thứ tự ưu tiên với nguyên tắc là ngắt nào có mức ưu tiên cao nhất thì sẽ phục vụ cho ngắt 
đó trước. 
Các mức ưu tiên của các ngắt (từ mức thấp nhất đến mức cao nhất): 
- Ngắt thực hiện chạy từng lệnh (INT 1) 
- Ngắt che được INTR 
- Ngắt không che được NMI 
- Ngắt nội bộ (INT 0: xảy ra do phép chia số 0, ngắt mềm) 
2.3. Nhập / xuất dữ liệu bằng DMA (Direct Memory Access) 
Trong các phương thức trao đổi dữ liệu như hai phần trên đã trình bày thì việc trao 
đổi dữ liệu giữa thiết bị ngoại vi và hệ thống thường theo trình tự sau: từ ngoại vi đến vi 
xử lý rồi đi vào bộ nhớ hay từ bộ nhớ đến vi xử lý rồi ghi ra ngoại vi. Trong thực tế sẽ 
có trường hợp ta cần thực hiện trao đổi dữ liệu ngay giữa ngoại vi và bộ nhớ. Khi đó 
người ta đưa ra cơ chế truy xuất bộ nhớ trực tiếp (DMA). Để thực hiện được vấn đề này, 
các hệ vi xử lý thông thường dùng thêm các mạch chuyên dụng để điều khiển quá trình 
truy xuất bộ nhớ trực tiếp (DMAC – Direct Memory Access Controller). Có tất cả 3 cơ 
chế hoạt động: 
¾ Tận dụng thời gian CPU không dùng bus: 
Ta phải dùng thêm mạch phát hiện các chu kỳ xử lý nội của CPU và tận dụng các 
chu kỳ này để thực hiện trao đổi dữ liệu. 
¾ Treo CPU để trao đổi từng byte: 
CPU không bị treo trong khoảng thời gian dài mà chỉ bị treo trong thời gian ngắn 
đủ để trao đổi 1 byte dữ liệu giữa bộ nhớ và ngoại vi. Do đó, công việc của CPU không bị 
gián đoạn mà chỉ bị chậm đi. 
¾ Treo CPU một khoảng thời gian để trao đổi một khối dữ liệu: 
Trong cơ chế này, CPU bị treo trong suốt quá trình trao đổi dữ liệu. 
- CPU ghi từ lệnh và từ chế độ làm việc vào DMAC. 
- Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó gởi tín hiệu DRQ = 1 
(DMA Request) đến DMAC. 
Phạm Hùng Kim Khánh Trang 6
Tài liệu Lập trình hệ thống Chương 1 
- DMAC gởi tín hiệu HRQ (Hold Request) đến chân HOLD của CPU để yêu cầu 
treo CPU. Tín hiệu này sẽ giữ ở mức cao cho đến hết quá trình trao đổi dữ liệu. 
- Sau khi nhận yêu cầu treo, CPU sẽ thực hiện hết chu kỳ bus của m?nh rồi treo 
các bus và gởi tín hiệu HLDA (Hold Acknowledge) để báo cho DMAC biết có 
thể sử dụng các bus. 
- DMAC chuyển dữ liệu từ bộ nhớ đến ngoại vi bằng cách: đưa địa chỉ byte đầu 
tiên ra bus địa chỉ và đưa tín hiệu MEMR để đọc 1 byte từ bộ nhớ, kế tiếp 
DMAC đưa tín hiệu IOW để ghi dữ liệu ra ngoại vi. Sau đó, DMAC giảm số 
byte cần truyền, cập nhật địa chỉ bộ nhớ và lặp lại quá trình cho đến khi hết 
byte cần truyền. 
DMAC 
Address bus 
Data bus 
HRQ 
HACK 
I/O 
DRQ 
DACK 
DRQ 
DACK 
Control bus 
Hình 1.4 – Giao tiếp DMAC với hệ vi xử lý 
μP 
HOLD 
HLDA 
Memory 
Hai tín hiệu dùng để yêu cầu treo và chấp nhận yêu cầu treo CPU dùng cho cơ chế 
DMA là HOLD và HLDA có thể mô tả như sau: 
T4 hay T1 
Hình 1.5 – Tín hiệu HOLD và HLDA 
CLK 
HOLD 
HLDA 
Phạm Hùng Kim Khánh Trang 7
Tài liệu Lập trình hệ thống Chương 1 
3. Bus 
CPU 
ALU 
Bus nội (on-chip bus) 
Đồng xử lý 
Bus hệ thống (system bus) 
Memory 
board 
I/O 
board 
Bus cục bộ 
(local bus) 
Hình 1.6 - Các bus trong một hệ thống máy tính 
Registers 
Bus là đường truyền tín hiệu điện nối các thiết bị khác nhau trong một hệ thống 
máy tính. Bus thường có từ 50 đến 100 dây dẫn được gắn trên mainboard, trên các dây 
này có các đầu nối đưa ra, các đầu này được sắp xếp và cách nhau những khoảng quy 
định để có thể cắm vào đó những I/O board hay board bộ nhớ (bus hệ thống – system 
bus). 
Cũng có những bus dùng cho mục đích chuyên biệt, thí dụ nối 1 vi xử lý với 1 hay 
nhiều vi xử lý khác hoặc nối với bộ nhớ cục bộ (local bus). 
Trong vi xử lý cũng có một số bus để nối các thành phần bên trong của bộ vi xử lý 
với nhau. Người thiết kế chip vi xử lý có thể tuỳ ý lựa chọn loại bus bên trong nó, còn với 
các bus liên hệ bên ngoài cần phải xác định rõ các quy tắc làm việc cũng như các đặc 
điểm kỹ thuật về điện và cơ khí của bus để người thiết kế mainboard có thể ghép nối chip 
vi xử lý với các thiết bị khác. Nói cách khác, các bus này phải tuân theo 1 chuẩn nào đó. 
Tập các quy tắc của chuẩn còn được gọi là giao thức bus (bus protocol) 
Thường có nhiều thiết bị nối với bus, một số thiết bị là tích cực (active) có thể đòi 
hỏi truyền thông trên bus, trong khi đó có các thiết bị thụ động chờ yêu cầu từ các thiết bị 
khác. Các thiết bị tích cực được gọi là chủ (master) còn thiết bị thụ động là tớ (slave). 
Ví dụ: Khi CPU ra lệnh cho bộ điều khiển đĩa đọc/ghi một khối dữ liệu thì CPU là 
master còn bộ điều khiển đĩa là slave. Tuy nhiên, bộ điều khiển đĩa ra lệnh cho bộ nhớ 
nhận dữ liệu thì nó lại giữ vai trò master. 
Phạm Hùng Kim Khánh Trang 8
Tài liệu Lập trình hệ thống Chương 1 
3.1. Bus Driver và Bus Receiver 
Tín hiệu điện trong máy tính phát ra thường không đủ để điều khiển bus, nhất là 
khi bus khá dài và có nhiều thiết bị nối với nó. Chính vì thế mà hầu hết các bus master 
được nối với bus thông qua 1 chip gọi là bus driver, về cơ bản nó là một bộ khuếch đại tín 
hiệu số. Tương tự như vậy, hầu hết các slave được nối với bus thông qua bus receiver. 
Đối với các thiết bị khi thì đóng vai trò master, khi thì đóng vai trò slave, người ta sử 
dụng 1 chip kết hợp gọi là transceiver. Các chip này đóng vai trò ghép nối và là các thiết 
bị 3 trạng thái, cho phép nó có thể ở trạng thái thứ 3 – hở mạch (thả nổi). 
Giống như vi xử lý, bus có các đường địa chỉ, đường số liệu và đường điều khiển. 
Tuy nhiên, không nhất thiết có ánh xạ 1 – 1 giữa các tín hiệu ở các chân ra của vi xử lý và 
các đường dây của bus. Thí dụ: một số chíp vi xử lý có 3 chân ra, truyền ra các tín hiệu 
báo chíp vi xử lý đang thực hiện các thao tác MEMR, MEMW , IOR , IOW hay thao 
tác khác. Một bus điển hình thường có 4 đường trên. 
Các vấn đề quan trọng nhất liên quan đến thiết kế bus là: xung clock bus (sự phân 
chia thời gian, hay còn gọi là bus blocking), cơ chế phân xử bus (bus arbitration), xử lý 
ngắt và xử lý lỗi. 
Các bus có thể được chia theo giao thức truyền thông thành hai loại riêng biệt là 
bus đồng bộ và bus không đồng bộ phụ thuộc vào việc sử dụng clock bus. 
3.2. Bus đồng bộ (Synchronous bus) 
Mỗi chu kỳ bus bắt đầu bằng việc xuất địa chỉ bộ nhớ hoặc I/O port (chu kỳ xung 
nhịp T1). Bus điều khiển có 4 tín hiệu tác động mức thấp làMEMR, MEMW, IOR và 
IOW. 
Các chuỗi sự kiện xảy ra trong một chu kỳ bus đọc bộ nhớ: 
T1: μP xuất địa chỉ bộ nhớ 20 bit. Các đường dữ liệu không hoạt động và các 
đường điều khiển bị cấm 
T2: Đường điều khiển MEMR xuống mức thấp. Đơn vị bộ nhớ ghi nhận chu kỳ 
bus này là quá trình đọc bộ nhớ và đặt byte hay word có địa chỉ đó lên data bus. 
T3: μP đặt cấu hình để các đường data bus là nhập. Trạng thái này chủ yếu để bộ 
nhớ có thời gian tìm kiếm byte hay word dữ liệu 
T4: μP đợi dữ liệu trên data bus. Do đó, nó thực hiện chốt data bus và giải phóng 
các đường điều khiển đọc bộ nhớ. Quá trình này sẽ kết thúc chu kỳ bus. 
Phạm Hùng Kim Khánh Trang 9
Tài liệu Lập trình hệ thống Chương 1 
T1 T2 T3 T4 
Địa chỉ 
Địa chỉ 
Dữ liệu vào 
Dữ liệu ra 
Hình 1.7 – Định thì chu kỳ bus đồng bộ 
Clk 
Address 
bus 
IOR hay 
MEMR 
Data bus 
Address 
bus 
IOW hay 
MEMW 
Data bus 
Đọc bộ 
nhớ hay 
I/O 
Ghi bộ 
nhớ hay 
I/O 
Trong một chu kỳ bus, μP có thể thực hiện đọc I/O, ghi I/O, đọc bộ nhớ hay ghi bộ 
nhớ. Các đường address bus và control bus dùng để xác định địa chỉ bộ nhớ hay I/O và 
hướng truyền dữ liệu trên data bus. 
Chú ý rằng μP điều khiển tất cả các quá trình trên nên bộ nhớ bắt buộc phải cung 
cấp được dữ liệu vào lúc MEMR lên mức cao trong trạng thái T4. Nếu không, μP sẽ đọc 
dữ liệu ngẫu nhiên không mong muốn trên data bus. Để giải quyết vấn đề này, ta có thể 
dùng thêm các trạng thái chờ (wait state). 
™ Truyền theo khối: 
Ngoài các chu kỳ đọc/ghi, một số bus truyền dữ liệu đồng bộ còn hỗ trợ truyền dữ 
liệu theo khối. Khi bắt đầu thao tác đọc khối, bus master báo cho slave biết số byte cần 
được truyền đi, thí dụ truyền con số này đi trong chu kỳ T1, sau đó đáng lẽ truyền đi 1 
byte, slave đưa ra trong mỗi chu kỳ 1 byte cho tới khi đủ số byte được thông báo. Như 
vậy, khi đọc dữ liệu theo khối, n byte dữ liệu cần n+2 chu kỳ clock chứ không phải 3n 
chu kỳ. 
Một cách khác để cho truyền dữ liệu nhanh hơn là giảm chu kỳ. Tuy nhiên, giảm 
chu kỳ bus dẫn đến khó khăn về mặt kỹ thuật, các tín hiệu truyền trên các đường khác 
nhau không phải luôn có cùng tốc độ, dẫn đến hiệu ứng bus skew. Điều quan trọng là thời 
Phạm Hùng Kim Khánh Trang 10
Tài liệu Lập trình hệ thống Chương 1 
gian chu kỳ phải dài hơn so với skew để tránh việc những khoảng thời gian được số hoá 
lại trở thành các đại lượng biến thiên liên tục. 
3.3. Bus bất đồng bộ( Asynchronous bus) 
Bus bất đồng bộ không sử dụng xung clock đồng bộ, chu kỳ của nó có thể kéo dài 
tuỳ ý và có thể khác nhau đối với các cặp thiết bị khác nhau. Làm việc với các bus đồng 
bộ dễ dàng hơn do nó được định thời một cách gián đoạn , tuy vậy chính đặc điểm này 
cũng dẫn đên nhược điểm. Mọi công việc được tiến hành trong khoảng thời gian là bội số 
của xung clock, nếu 1 thao tác nào đó của vi xử lý hay bộ nhớ hoàn thành trong 3.1 chu 
kỳ thì nó cũng sẽ phải kéo dài trong 4 chu kỳ. Khi đã chọn chu kỳ bus và đã xây dựng bộ 
nhớ, I/O card cho bus này thì khó có thể tận dụng những tiến bộ của công nghệ. Chẳng 
hạn sau khi đã xây bus với sự định thời như trên, công nghệ mới đưa ra các vi xử lý và bộ 
nhớ có thời gian chu kỳ là 100ns chứ không còn là 750ns như cũ, thì chúng vẫn chạy với 
tốc độ thấp như các vi xử lý, bộ nhớ loại cũ, bởi vì giao thức bus đòi hỏi bộ nhớ phải đưa 
được dữ liệu ra và ổn định trước thời điểm cạnh âm của T3. Nếu có nhiều thiết bị khác 
nhau cùng nối với 1 bus, trong đó có thể có một số thiết bị hoạt động nhanh hơn hơn các 
thiết bị khác thì cần phải đặt bus hoạt động phù hợp với thiết bị có tốc độ thấp nhất. 
Bus bất đồng bộ ra đời nhằm khắc phục những nhược điểm của bus đồng bộ. 
Trước hết master phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát tín hiệu MEMR 
tích cực để xác định cần truy xuất bộ nhớ và yêu cầu quá trình truy xuất là READ để xác 
định chiều truyền dữ liệu. Tín hiệu MEMR được đưa ra sau tín hiệu địa chỉ một khoảng 
thời gian phụ thuộc tốc độ hoạt động của master. Sau khi 2 tín hiệu này đã ổn định, master 
sẽ phát ra tín hiệu MSYN (master synchrization) ở mức tích cực để báo cho slave biết 
rằng các tín hiệu cần thiết đã sẵn sàng trên bus, slave có thể nhận lấy. Khi slave nhận 
được tín hiệu này, nó sẽ thực hiện công việc với tốc độ nhanh nhất có thể được, đưa dữ 
liệu của ô nhớ được yêu cầu lên bus dữ liệu. Khi hoàn thành slave sẽ phát tín hiệu SSYN 
(slave synchronization) tích cực. 
Hình 1.8 – Định thì chu kỳ bus bất đồng bộ 
Address 
MEMR 
(Control) 
MSYN 
Data 
SSYN 
Phạm Hùng Kim Khánh Trang 11
Tài liệu Lập trình hệ thống Chương 1 
Master nhận được tín hiệu SSYN tích cực thì xác định được dữ liệu của slave đã 
sẵn sàng nên thực hiện việc chốt dữ liệu, sau đó đảo các đường địa chỉ cũng như các tín 
hiệu MEMR và MSYN . Khi slave nhận được tín hiệu MSYN không tích cực, nó xác 
định kết thúc chu kỳ và đảo tín hiệu SSYN làm bus trở lại trạng thái ban đầu, mọi tín hiệu 
đều không tích cực, chờ bus master mới. 
Trên giản đồ thời gian của bus bất đồng bộ, ta sử dụng mũi tên để thể hiện nguyên 
nhân và kết quả. MSYN tích cực dẫn đến việc truyền dữ liệu ra bus dữ liệu và đồng thời 
cũng dẫn đến việc slave phát ra tín hiệu SSYN tích cực, đến lượt mình tín hiệu SSYN lại 
gây ra sự đảo mức của các đường địa chỉ, MEMR và MSYN . Cuối cùng sự đảo mức của 
MSYN lại gây ra sự đảo mức tín hiệu SSYN và kết thúc chu kỳ. Tập các tín hiệu phối 
hợp với nhau như vậy được gọi là bắt tay toàn phần (full handshake), chủ yếu gồm 4 tín 
hiệu sau: 
- MSYN tích cực. 
- SSYN tích cực để đáp lại tín hiệu MSYN . 
- MSYN được đảo để đáp lại tín hiệu SSYN (tích cực). 
- SSYN được đảo để đáp lại tín hiệu MSYN không tích cực. 
Ta có thể nhận thấy bắt tay toàn phần là độc lập thời gian, mỗi sự kiện được gây ra 
bởi 1 sự kiện trước đó chứ không phải bởi xung clock. Nếu 1 cặp master-slave nào đó 
hoạt động chậm thì cặp master-slave kế tiếp không hề bị ảnh hưởng. 
Tuy ưu điểm của bus bất đồng bộ rất rõ ràng, nhưng trong thực tế phần lớn các bus 
đang sử dụng là loại đồng bộ. Nguyên nhân là các hệ thống sử dụng bus đồng bộ dễ thiết 
kế hơn. Vi xử lý chỉ cần chuyển các mức tín hiệu cần thiết sang trạng thái tích cực là bộ 
nhớ đáp ứng ngay, không cần tín hiệu phản hồi. Chỉ cần các chọn phù hợp thì mọi hoạt 
động đều trôi chảy, không cần phải bắt tay. 
3.4. Xử lý ngắt 
Ở trên, ta chỉ khảo sát các chu kỳ bus thông thường, trong đó master nhận hay gởi 
thông tin từ / đến slave. Một ứng dụng quan trọng nữa của bus là dùng để xử lý ngắt. Khi 
CPU ra lệnh cho thiết bị I/O làm một việc gì đó, nó thường chờ đợi tín hiệu ngắt do thiết 
bị I/O phát ra khi hoàn thành công việc được CPU yêu cầu. Khi nhận được tín hiệu ngắt, 
CPU sẽ đáp ứng ngay, có thể nhận dữ liệu do thiết bị I/O truyền về, hay gởi tiếp dữ liệu ra 
thiết bị I/O, hay CPU sẽ sử dụng bus cho một thao tác khác…. Như vậy chính ngắt phát ra 
tín hiệu yêu cầu sử dụng bus. 
Vì có thể nhiều thiết bị ngoại vi cùng phát ra ngắt, cho nên cần có 1 cơ chế phân 
xử giống như đối với các bus thông thường. Giải pháp thường dùng là gán các mức độ ưu 
tiên cho các thiết bị và sử dụng 1 arbiter tập trung để trao quyền ưu tiên cho các thiết bị 
quan trọng thường xuyên được sử dụng. Hiện trên thị trường có những chip điều khiển 
ngắt được tiêu chuẩn hóa và được sử dụng rộng rãi là chip 8259A. Có thể nối 8 chip điều 
khiển I/O tới các đầu IRx (Interrupt request) của 8259A. Khi có 1 thiết bị nào đó muốn 
ngắt, nó đặt mức tích cực lên chân Irx, 8259A nhận được tín hiệu tích cực ở 1 hay một số 
Phạm Hùng Kim Khánh Trang 12
Tài liệu Lập trình hệ thống Chương 1 
đầu vào Irx thì sẽ đặt mức tích cực lên đầu dây INT. Tín hiệu INT sẽ truyền trực tiếp đến 
chân Interrupt của CPU. Khi CPU có thể xử lý được ngắt, nó gởi lại 1 tín hiệu chấp nhận 
ngắt cho 8259A. Lúc này, CPU chờ 8259A chỉ ra I/O nào yêu cầu ngắt, bằng cách gởi số 
hiệu của I/O đó lên bus dữ liệu (D0-D7) để đi đến CPU. Sau đó, phần cứng CPU sẽ sử 
dụng con số đó để tính chỉ số trong 1 bảng con trỏ -bảng vector ngắt (interrupt vector) để 
tìm địa chỉ chương trình con, cho chạy chương trình này để phục vụ ngắt. Các chương 
trình con này gọi là chương trình con xử lý ngắt. 
4. Các chip hỗ trợ cho bộ xử lý trung tâm 
4.1. Mạch tạo xung clock 8284 
CSYNC VCC 
18 
PCLK 
X1 
AEN1 
X2 
RDY1 
ASYNC 
READY 
EFI 
RD2 
F/C 
AEN2 
OSC 
CLK 
RES 
GND RESET 
8284 
123456789 
17 
16 
15 
14 
13 
12 
11 
10 
Hình 1.9 – Mạch tạo xung clock 8284 
PCLK (Peripheral Clock): xung clock f = fX/6 (fX là tần số thạch anh) với chu kỳ 
bổn phận 50%. 
CSYNC (Clock Synchronisation): ngõ vào xung đồng bộ chung khi hệ thống có 
các 8284 dùng dao động ngoài tại chân EFI. Khi dùng mạch dao động trong thì phải nối 
GND. 
AEN1 , AEN2 (Address Enable): cho phép chọn các chân tương ứng RDY1, 
RDY2 báo hiệu trạng thái sẵn sàng của bộ nhớ hay thiết bị ngoại vi. 
RDY1, RDY2 (Bus ready): kết hợp với AEN1, AEN2 tạo các chu kỳ đợi ở CPU 
READY: nối đến chân READY của μP. 
CLK (Clock): xung clock f = fX/3, nối với chân CLK của CPU. 
RESET: nối với chân RESET của CPU, là tín hiệu khởi động lại toàn hệ thống. 
RES (Reset Input): chân khởi động cho 8284, được nối với mạch RC để tự khởi 
động khi bật nguồn. 
OSC: ngõ ra xung clock có tần số fX. 
F/C (Frequency / Crystal): chọn nguồn tín hiệu chuẩn cho 8284, nếu ở mức cao 
thì chọn tần số xung clock bên ngoài, ngược lại thì dùng xung clock từ thạch anh. 
EFI (External Frequency Input): xung clock từ bộ dao động ngoài. 
Phạm Hùng Kim Khánh Trang 13
Tài liệu Lập trình hệ thống Chương 1 
ASYNC : chọn chế độ làm việc cho tín hiệu RDY. Nếu ASYNC = 1, tín hiệu 
RDY có ảnh hưởng đến tín hiệu READY cho đến khi có xung âm của xung clock. Ngược 
lại thì RDY chỉ ảnh hưởng khi xuất hiện xung âm. 
X1,X2: ngõ vào của thạch anh, dùng để tạo xung chuẩn cho hệ thống. 
CSYNC 
PCLK 
AEN1 
RDY1 
READY 
VCC 
X1 
X2 
ASYNC 
EFI 
F/C 
OSC 
RES 
RESET GND 
8284 
123456789 
18 
17 
16 
15 
14 
13 
12 
11 
10 
RD2 
AEN2 
CLK 
+ 
Hình 1.10 – Mạch khởi động cho 8284 
Vcc 
4.2. Mạch định thời PIT – 8253 / 8254 (Programmable Interval Timer) 
20 A0 
OUT0 
19 
A1 
10 
OUT1 
13 
OUT2 
17 
D0 
8 
D1 
7 
D2 
6 
D3 
5 
D4 4 
3 
D5 
D6 
2 
D7 
1 
G0 
11 
G1 
14 
G2 
16 
9 
15 CLK0 
CLK1 
CLK2 
18 
RD 
22 
WR 
23 
CS 
21 
8253 
Hình 1.11 – Sơ đồ chân của PIT 8253 
Phạm Hùng Kim Khánh Trang 14
Tài liệu Lập trình hệ thống Chương 1 
Bộ đếm 
0 
Bộ đếm 
1 
Bộ đếm 
2 
BUS NỘI 
Hình 1.12 – Sơ đồ khối của PIT 8253 
Đệm dữ 
liệu 
Điều 
khiển 
đọc/ghi 
Thanh 
ghi từ 
điều 
khiển 
D7 ÷ D0 
RD 
WR 
A1 
A0 
CS 
OUT0 
CLK0 
GATE0 
OUT1 
CLK1 
GATE1 
OUT2 
CLK2 
GATE2 
D7 ÷ D0: bus dữ liệu 
CLK0 ÷ CLK2: ngõ vào xung clock cho các bộ đếm 
OUT0 ÷ OUT2: ngõ ra bộ đếm 
RD , WR: cho phép CPU đọc / ghi dữ liệu từ / đến các thanh ghi của 8253 
A1, A0: giải mã chọn bộ đếm hay thanh ghi điều khiển, thường được nối với bus 
địa chỉ của CPU 
A1 A0 Chọn 
0 0 Bộ đếm 0 
0 1 Bộ đếm 1 
1 0 Bộ đếm 2 
1 1 Thanh ghi từ điều khiển 
G0 ÷ G2 (Gate): cho phép hay cấm các bộ đếm hoạt động ( =1: cho phép, =0: 
cấm). 
PIT 8253 có tất cả 5 chế độ đếm tùy thuộc vào giá trị trong thanh ghi điều khiển. 
Phạm Hùng Kim Khánh Trang 15
Tài liệu Lập trình hệ thống Chương 1 
SC1 
Chọn bộ đếm 
00: bộ đếm 0 
01: bộ đếm 1 
10: bộ đếm 2 
11: đọc CWR trong 8254 
Quy định phương thức 
đọc/ghi 
00: chốt bộ đếm 
01: đọc/ghi byte thấp 
10: đọc/ghi byte cao 
11: đọc/ghi byte thấp 
trước, byte cao sau 
SC0 RW1 RW0 M2 M1 M0 BCD 
Định dạng đếm 
0: đếm nhị phân 
1: đếm BCD (0 ÷ 999) 
Chế độ đếm 
000: chế độ 0 
001: chế độ 1 
010: chế độ 2 
011: chế độ 3 
100: chế độ 4 
101: chế độ 5 
Hình 1.13 – Dạng từ điều khiển của 8253 
PIT 8253 có 3 bộ đếm lùi 16 bit có thể lập trình và độc lập với nhau. Mỗi bộ đếm 
có tín hiệu xung clock riêng (8254 tương tự như 8253 nhưng có thêm lệnh đọc thanh ghi 
từ điều khiển CWR). 
™ Các chế độ đếm: 
Chế độ 0 (Interrupt on Terminal Count): tín hiệu ngõ ra ở mức thấp cho tới khi bộ 
đếm tràn thì sẽ chuyển lên mức cao. 
Chế độ 1 (Programmable Monoflop): tín hiệu ngõ ra chuyển xuống mức thấp tại 
cạnh âm của xung clock đầu tiên và sẽ chuyển lên mức cao khi bộ đếm kết thúc. 
Chế độ 2 (Rate Generator): tín hiệu ngõ ra xuống mức thấp trong chu kỳ đầu tiên 
và sau đó chuyển lên mức cao trong các chu kỳ còn lại. 
Chế độ 3 (Square-Wave Generator): tương tự như chế độ 2 nhưng xung ngõ ra là 
sóng vuông khi giá trị đếm chẵn và sẽ thêm một chu kỳ ở mức cao khi giá trị đếm lẻ. 
Chế độ 4 (Software-triggered Pulse): giống như chế độ 2 nhưng xung Gate không 
khởi động quá trình đếm mà sẽ đếm ngay khi số đếm ban đầu được nạp. Ngõ ra ở mức 
cao để đếm và xuống mức thấp trong chu kỳ xung đếm. Sau đó, ngõ ra sẽ trở lại mức cao. 
Chế độ 5 (Hardware-triggered Pulse): giống như chế độ 2 nhưng xung Gate không 
khởi động quá trình đếm mà được khởi động bằng cạnh dương của xung clock ngõ vào. 
Ngõ ra ở mức cao và xuống mức thấp sau một chu kỳ clock khi quá trình đếm kết thúc. 
Phạm Hùng Kim Khánh Trang 16
Tài liệu Lập trình hệ thống Chương 1 
™ Ba chức năng của 8253 trong PC: 
Cập nhật đồng hồ hệ thống: bộ đếm 0 của PIT phát tuần hoàn một ngắt cứng qua 
IRQ0 của 8259 để CPU có thể thay đổi đồng hồ hệ thống. Bộ đếm hoạt động trong chế độ 
2. Ngõ vào được cấp xung clock tần số 1.19318 MHz. G0 = 1 để bộ đếm luôn được phép 
đếm. Giá trị ban đầu được nạp là 0 cho phép PIT phát ra xung chính xác với tần 
số:1.19318/65536 = 18.206Hz. Cạnh dương của mỗi xung này sẽ tạo ra một ngắt cứng 
trong 8259. Yêu cầu này sẽ dẫn tới ngắt 08h để cập nhật đồng hổ hệ thống 18.206 lần 
trong 1 giây. 
Làm tươi bộ nhớ: PIT nối với chip DMAC dùng làm tươi bộ nhớ DRAM. Bộ đếm 
1 sẽ định kỳ kích hoạt kênh 0 của DMAC-8237A để tiến hành 1 chu trình đọc giả làm 
tươi bộ nhớ. Bộ nhớ 1 hoạt động trong chế độ 3 phát sóng vuông với giá trị nạp ban đầu là 
18. Do đó sóng vuông được phát ra có tần số 1,19318 MHz/18 = 66288 Hz (chu kỳ bằng 
0.015s). Như vậy cứ sau 15 ms cạnh dương của sóng vuông này sẽ tạo 1 chu kỳ đọc giả 
để làm tươi bộ nhớ. 
Phát sóng âm với tần số biến đổi ra loa của PC: Bộ đếm 2 của PIT được dùng để 
phát sóng âm ra loa của PC. 
4.3. Mạch điều khiển bus 8288 
Mạch điều khiển bus 8288 lấy một số tín hiệu điều khiển của CPU và cung cấp các 
tín hiệu điều khiển cần thiết cho hệ vi xử lý. 
IOB VCC 
20 
CLK 
S0 
S1 
S2 
DT/R 
MCE/PDEN 
ALE 
DEN 
AEN 
CEN 
MRDC 
INTA 
AMWC 
IORC 
MWTC 
AIOWC 
8288 
123456789 
19 
18 
17 
16 
15 
14 
13 
12 
11 
10 
IOWC 
GND 
Hình 1.14 – Mạch điều khiển bus 8288 
IOB (Input / Output Bus Mode): điều khiển để 8288 làm việc ở các chế độ bus 
khác nhau. 
CLK (Clock): ngõ vào lấy từ xung clock hệ thống (từ 8284) và dùng để đồng bộ 
toàn bộ các xung điều khiển đi ra từ mạch 8288. 
DT/ R (Data Transmit/Receive): CPU truyền (1) hay nhận (0) dữ liệu. 
ALE (Address Latch Enable): tín hiệu cho phép chốt địa chỉ, tín hiệu này thường 
được nối với chân G của 74573 để điếu khiển chốt địa chỉ. 
AEN (Address Enable): chờ thời gian trễ khoảng 150 ns sẽ tạo các tín hiệu điều 
khiển ở đầu ra của 8288 để đảm bảo rằng địa chỉ sử dụng đã hợp lệ. 
S2 , S1 , S0 : các tín hiệu trạng thái lấy trực tiếp từ CPU. Tuỳ theo các giá trị nhận 
được mà 8288 sẽ đưa các tín hiệu theo bảng: 
Phạm Hùng Kim Khánh Trang 17
Tài liệu Lập trình hệ thống Chương 1 
S2 S1 S0 Tạo tín hiệu 
0 0 0 INTA 
0 0 1 IORC 
0 1 0 IOWC, AIOWC 
0 1 1 Không 
1 0 0 MRDC 
1 0 1 MRDC 
1 1 0 MWTC, AMWC 
1 1 1 Không 
MRDC (Memory Read Command): điều khiển đọc bộ nhớ 
MWTC (Memory Write Command): điều khiển ghi bộ nhớ 
AMWC (Advanced MWTC),: giống như MWTC nhưng hoạt động sớm hơn một 
chút dùng cho các bộ nhớ chậm đáp ứng kịp tốc độ CPU. 
IOWC (I/O Write Command): điều khiển ghi ngoại vi 
AIOWC (Advanced IOWC),: giống như IOWC nhưng hoạt động sớm hơn một 
chút dùng cho các ngoại vi chậm đáp ứng kịp tốc độ CPU. 
IORC (I/O Read Command): điều khiển đọc ngoại vi 
INTA (Interrupt Acknowledge): ngõ ra thông báo CPU chấp nhận yêu cầu ngắt 
của thiết bị ngoại vi 
CEN (Command Enable): cho phép đưa ra tín hiệu DEN và các tín hiệu điều khiển 
khác của 8288. 
DEN (Data Enable): điều khiển bus dữ liệu thành bus cục bộ hay bus hệ thống. 
MCE / PDEN (Master Cascade Enable / Peripheral Data Enable): định chế độ làm 
việc cho mạch điều khiển ngắt PIC 8259 để nó làm việc ở chế độ master. 
Phạm Hùng Kim Khánh Trang 18
Tài liệu Lập trình hệ thống Chương 1 
4.4. Chip điều khiển ngắt ưu tiên PIC 8259A (Priority Interrupt Controller) 
IR0 
IR1 
IR2 
IR3 
IR4 
IR5 
IR6 
IR7 
A0 
INTA 
CAS0 
CAS1 
CAS2 
RD 
WR SP/EN 
8259A 
11 
10 
987654 
18 
19 
20 
21 
22 
23 
24 
25 
27 
26 
32 
1 
12 
13 
15 
16 
17 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
CS 
INT 
Hình 1.15 – Sơ đồ chân của 8259A 
Trong trường hợp nhiều yêu cầu ngắt cần phải phục vụ, ta thường dùng vi mạch 
8259A để giải quyết vấn đề ưu tiên. 8259A có thể giải quyết được 8 yêu cầu ngắt với 8 
mức ưu tiên khác nhau. 
™ Các khối chức năng: 
IRR (thanh ghi yêu cầu ngắt): lưu trữ các yêu cầu ngắt tại ngõ vào 
ISR (thanh ghi phục vụ ngắt): lưu trữ các yêu cầu ngắt đang phục vụ 
IMR (thanh ghi mặt nạ ngắt): lưu trữ mặt nạ của các yêu cầu ngắt tại ngõ vào 
Control logic (logic điều khiển): gởi yêu cầu ngắt tới chân INTR của CPU khi có 
tín hiệu ngắt tại ngõ vào của 8259A và nhận trả lời chấp nhận yêu cầu ngắt hay không 
INTA từ CPU để đưa kiểu ngắt vào CPU. 
Data bus buffer (đệm bus dữ liệu): giao tiếp giữa 8259A với bus dữ liệu của CPU. 
Cascade buffer / comparator (đệm nối tầng và so sánh): lưu trữ và so sánh số hiệu 
của các kiểu ngắt trong trường hợp dùng nhiều mạch 8259A. 
Phạm Hùng Kim Khánh Trang 19
Tài liệu Lập trình hệ thống Chương 1 
Data bus 
buffer 
Read / 
Write 
Logic 
Cascade 
buffer / 
comparator 
ISR 
(Interrupt 
Service 
Register) 
INTERNAL BUS 
Hình 1.16 – Sơ đồ khối của PIC 8259A 
™ Các tín hiệu điều khiển: 
INTA INT 
Control logic 
PR 
(Priority 
Resolver) 
IRR 
(Interrupt 
Request 
Register) 
IMR (Interrupt Mask Register) 
IR0 
IR1 
IR7 
CAS0 ÷ 2 (In, Out): các ngõ vào chọn mạch 8259A tớ (slave) từ mạch 8259A chủ 
RD 
WR 
A0 
CS 
CAS0 
CAS1 
CAS2 
SP / EN 
(master) trong trường hợp dùng nhiều mạch 8259A để tăng yêu cầu ngắt. 
SP / EN (In, Out) (Slave Program / Enable Buffer): nếu 8259A hoạt động ở chế 
độ không dùng đệm dữ liệu thì tín hiệu này dùng để xác định mạch 8259A là mạch chủ 
(SP = 1) hay tớ (SP = 0). Nếu 8259A hoạt động ở chế độ có đệm dữ liệu thì tín hiệu này 
dùng để cho phép giao tiếp giữa 8259A và CPU, khi đó mạch 8259A là master hay slave 
phải dựa vào từ lệnh khởi động ICW4. 
INT (Out): tín hiệu yêu cầu ngắt đưa đến CPU (chân INTR). 
INTA (In): nhận trả lời chấp nhận ngắt hay không từ CPU (chân INTA) 
A0: cho phép chọn các từ điều khiển của 8259A. 
8259A cho phép xử lý 8 ngắt với 8 mức ưu tiên khác nhau. Trong trường hợp hệ 
thống có số lượng ngắt lớn hơn thì có thể mắc nhiều 8259A liên tầng. 
Phạm Hùng Kim Khánh Trang 20
Tài liệu Lập trình hệ thống Chương 1 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
A0 
CS 
RD 
WR 
SP/EN 
INT 
INTA 
IR0 
IR1 
IR2 
IR3 
IR4 
IR5 
IR6 
IR7 
CAS0 
CAS1 
CAS2 
8259A - Master 
11 
10 
987654 
27 
132 
16 
17 
26 
18 
19 
20 
21 
22 
23 
24 
25 
12 
13 
15 
Vcc 
Hình 1.17 – 8259A mắc liên tầng 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
A0 
CS 
RD 
WR 
SP/EN 
INT 
INTA 
IR0 
IR1 
IR2 
IR3 
IR4 
IR5 
IR6 
IR7 
CAS0 
CAS1 
CAS2 
8259A - Slave 
11 
10 
987654 
27 
132 
16 
17 
26 
18 
19 
20 
21 
22 
23 
24 
25 
12 
13 
15 
40 
39 
38 
37 
36 
35 
34 
33 
32 
GND 
VCC 
AD14 
AD15 
AD13 
A16/S3 
AD12 
A17/S4 
AD11 
A18/S5 
AD10 
A19/S6 
AD9 
BHE/S7 
AD8 
AD7 
AD6 
AD5 
AD4 
AD3 
AD2 
AD1 
AD0 
NMI 
INTR 
CLK 
GND RESET 
MN/MX 
RD 
10 
11 
HOLD (RQ/GT0) 
12 
HLDA (RQ/GT1) 
13 
WR (LOCK) 
14 
IO/M (S2) 
15 
DT/R (S1) 
16 
DEN (S0) 
17 
ALE (QS0) 
18 
INTA (QS1) 
19 
TEST 
20 READY 
21 
8086 
123456789 
31 
30 
29 
28 
27 
26 
25 
24 
23 
22 
4.5. Chip điều khiển truy nhập bộ nhớ trực tiếp DMAC 8237 (Direct Memory 
Access Controller) 
DMAC 8237 có thể thực hiện truyền dữ liệu theo 3 kiểu: kiểu đọc (từ bộ nhớ ra 
thiết bị ngoại vi), kiểu ghi (từ thiết bị ngoại vi đến bộ nhớ) và kiểu kiểm tra. 
A0 
A1 
A2 
A3 
A4 
A5 
A6 
A7 
CLK 
DB0 
DB1 
DB2 
DB3 
DB4 
DB5 
DB6 
DB7 
DAK0 
DAK1 
DAK2 
DAK3 
19 
18 
17 
16 MEMR 
MEMW 
DRQ0 
DRQ1 
DRQ2 
DRQ3 
EOP 
IOR 
IOW 
HLDA 
READY 
RESET 
CS 
8237 
30 
29 
28 
27 
26 
23 
22 
21 
25 
24 
14 
15 
34 
98 
10 
32 
33 
34 
35 
37 
38 
39 
40 
12 
36 
7 
12 
6 
13 
11 
5 
AEN 
ASTB 
HRQ 
VX 
Phạm Hùng Kim Khánh Trang 21
Tài liệu Lập trình hệ thống Chương 1 
Timing and 
control 
Priority encoder 
and rotating 
prority logic 
Decrementor 
Temp word 
count register 
Incrementor 
Temp address 
register 
I/O buffer 
Output buffer 
Bus 16 bit 
Read buffer 
Base 
address 
Base word 
count 
R/W buffer 
Current 
address 
Current 
word count 
Write buffer Read buffer 
Command 
control 
A8 – A15 
D0 – D1 
A0 – A3 
A4 – A7 
Command I/O buffer 
Mask 
Request 
RD 
R/W 
Mode 
Status 
Temp 
Hình 1.18 – Sơ đồ chân và sơ đồ khối của DMAC 8237A 
™ Khối Timing and Control (định thời và điều khiển): 
DACK0 – DACK3 
DB0 – DB7 
Tạo các tín hiệu định thời và điều khiển cho bus ngoài (external bus). Các tín hiệu 
EOP 
RESET 
CS 
READY 
CLK 
AEN 
ADSTB 
MEMW 
MEMR 
IOW 
IOR 
DRQ0 – DRQ3 
HLDA 
HRQ 
này được đồng bộ với xung clock đưa vào DMAC (tần số xung clock tối đa là 5 MHz). 
™ Khối Priority encoder and rotating priority logic (mã hóa ưu tiên và 
quay mức ưu tiên): 
DMAC 8237A có 2 mô hình ưu tiên: mô hình ưu tiên cố định (fixed priority) và 
mô hình ưu tiên quay (rotating priority). Trong mô hình ưu tiên cố định, kênh 0 sẽ có 
mức ưu tiên cao nhất còn kênh 3 có mức ưu tiên thấp nhất. Còn đối với mô hình ưu tiên 
quay thì mức ưu tiên khi khởi động giống như mô hình ưu tiên cố định nhưng khi yêu cầu 
DMA tại một kênh nào đó được phục vụ thì sẽ được đặt xuống mức ưu tiên thấp nhất. 
™ Khối Command Control (điều khiển lệnh): 
Giải mã các thanh ghi lệnh (xác định thanh ghi sẽ được truy xuất và loại hoạt động 
cần thực hiện). 
Phạm Hùng Kim Khánh Trang 22
Tài liệu Lập trình hệ thống Chương 1 
™ Các thanh ghi: 
DMAC 8237A có tất cả 12 loại thanh ghi nội khác nhau: 
Tên Kích thước (bit) Số lượng 
Thanh ghi địa chỉ cơ sở (Base Address Register) 
Thanh ghi đếm từ cơ sở (Base Word Count Register) 
Thanh ghi địa chỉ hiện hành (Current Address Register) 
Thanh ghi đếm từ hiện hành (Current Word Count Register) 
Thanh ghi địa chỉ tạm (Temporary Address Register) 
Thanh ghi đếm từ tạm (Temporary Word Count Register) 
Thanh ghi trạng thái (Status Register) 
Thanh ghi lệnh (Command Register) 
Thanh ghi tạm (Temporary Register) 
Thanh ghi chế độ (Mode Register) 
Thanh ghi mặt nạ (Mask Register) 
Thanh ghi yêu cầu (Request Register) 
16 
16 
16 
16 
16 
16 
8 
8 
8 
6 
4 
4 
4 
4 
4 
4 
1 
1 
1 
1 
1 
4 
1 
1 
™ Chức năng các chân của 8237A: 
CLK (Input): tín hiệu xung clock của mạch. Tín hiệu này thường được lấy từ 8284 
sau khi qua cổng đảo. 
CS (Input): thường được nối với bộ giải mã địa chỉ. 
RESET (Input): khởi động 8237A, được nối với ngõ RESET của 8284. Khi Reset 
thì thanh ghi mặt nạ được lập còn các phần sau bị xóa: 
+ Thanh ghi lệnh 
+ Thanh ghi trạng thái 
+ Thanh ghi yêu cầu 
+ Thanh ghi tạm 
+ Flip-flop đầu/cuối (First/Last flip-flop) 
READY (Input): nối với READY của CPU để tạo chu kỳ đợi khi truy xuất các thiết 
bị ngoại vi hay bộ nhớ chậm. 
HLDA (Hold Acknowledge)(Input): tín hiệu chấp nhận yêu cầu treo từ CPU 
DRQ0 – DRQ3 (DMA Request)(Input): các tín hiệu yêu cầu treo từ thiết bị ngoại 
vi. 
DB0 – DB7 (Input, Output): nối đến bus địa chỉ và dữ liệu của CPU 
Phạm Hùng Kim Khánh Trang 23
Tài liệu Lập trình hệ thống Chương 1 
IOR , IOW (Input, Output): sử dụng trong các chu kỳ đọc và ghi 
EOP (End Of Process)(Input,Output): bắt buộc DMAC kết thúc quá trình DMA 
nếu là ngõ vào hay dùng để báo cho một kênh biết là dữ liệu đã chuyển xong 
(Terminal count – TC), thường dùng như yêu cầu ngắt để CPU kết thúc quá trình 
DMA. 
A0 – A3 (Input, Output): chọn các thanh ghi trong 8237A khi lập trình hay dùng để 
chứa 4 bit địa chỉ thấp. 
A4 – A7 (Output): chứa 4 bit địa chỉ 
HRQ (Hold Request)(Output): tín hiệu yêu cầu treo đến CPU 
DACK0 – DACK3 (DMA Acknowledge)(Output): tín hiệu trả lời yêu cầu DMA cho 
các kênh. 
AEN (Output): cho phép lấy địa chỉ vùng nhớ cần trao đổi 
ADSTB (Address Strobe)(Output): chốt các bit địa chỉ cao A8 – A15 chứa trong 
các chân DB0 – DB7 
MEMR, MEMW (Output): dùng để đọc / ghi bộ nhớ. 
™ Các thanh ghi nội: 
Các thanh ghi nội trong DMAC 8237A được truy xuất nhờ các bit địa chỉ thấp A0 
– A3. 
Bit địa chỉ 
A3 A2 A1 A0 
Địa 
chỉ Chọn chức năng R/W? 
0 
0 
0 
0 
0 
0 
0 
0 
1 
1 
1 
1 
1 
1 
1 
1 
0 
0 
0 
0 
1 
1 
1 
1 
0 
0 
0 
0 
1 
1 
1 
1 
0 
0 
1 
1 
0 
0 
1 
1 
0 
0 
1 
1 
0 
0 
1 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
X0 
X1 
X2 
X3 
X4 
X5 
X6 
X7 
X8 
X9 
XA 
XB 
XC 
XD 
XE 
XF 
Thanh ghi địa chỉ bộ nhớ kênh 0 
Thanh ghi đếm từ kênh 0 
Thanh ghi địa chỉ bộ nhớ kênh 1 
Thanh ghi đếm từ kênh 1 
Thanh ghi địa chỉ bộ nhớ kênh 2 
Thanh ghi đếm từ kênh 2 
Thanh ghi địa chỉ bộ nhớ kênh 3 
Thanh ghi đếm từ kênh 3 
Thanh ghi trạng thái / lệnh 
Thanh ghi yêu cầu 
Thanh ghi mặt nạ cho một kênh 
Thanh ghi chế độ 
Xóa flip-flop đầu/cuối 
Xóa toàn bộ các thanh ghi / đọc thanh ghi tạm 
Xóa thanh ghi mặt nạ 
Thanh ghi mặt nạ 
R/W 
R/W 
R/W 
R/W 
R/W 
R/W 
R/W 
R/W 
R/W 
W 
W 
W 
W 
W/R 
W 
W 
Phạm Hùng Kim Khánh Trang 24
Tài liệu Lập trình hệ thống Chương 1 
Địa chỉ các thanh ghi nội dùng ghi / đọc địa chỉ: 
Kênh IOR 
IOW 
A3 A2 A1 A0 Thanh ghi R/W? 
0 1 
0 
1 
0 
0 
1 
0 
1 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
1 
1 
Địa chỉ cơ sở và địa chỉ hiện hành 
Địa chỉ hiện hành 
Bộ đếm cơ sở và bộ đếm hiện hành 
Bộ đếm hiện hành 
W 
R 
W 
R 
1 1 
0 
1 
0 
0 
1 
0 
1 
0 
0 
0 
0 
0 
0 
0 
0 
1 
1 
1 
1 
0 
0 
1 
1 
Địa chỉ cơ sở và địa chỉ hiện hành 
Địa chỉ hiện hành 
Bộ đếm cơ sở và bộ đếm hiện hành 
Bộ đếm hiện hành 
W 
R 
W 
R 
2 1 
0 
1 
0 
0 
1 
0 
1 
0 
0 
0 
0 
1 
1 
1 
1 
0 
0 
0 
0 
0 
0 
1 
1 
Địa chỉ cơ sở và địa chỉ hiện hành 
Địa chỉ hiện hành 
Bộ đếm cơ sở và bộ đếm hiện hành 
Bộ đếm hiện hành 
W 
R 
W 
R 
3 1 
0 
1 
0 
0 
1 
0 
1 
0 
0 
0 
0 
1 
1 
1 
1 
1 
1 
1 
1 
0 
0 
1 
1 
Địa chỉ cơ sở và địa chỉ hiện hành 
Địa chỉ hiện hành 
Bộ đếm cơ sở và bộ đếm hiện hành 
Bộ đếm hiện hành 
W 
R 
W 
R 
Địa chỉ các thanh ghi trạng thái và điều khiển: 
IOR ` IOW A3 A2 A1 A0 Thanh ghi 
1 
0 
1 
1 
1 
1 
1 
0 
0 
1 
0 
0 
0 
0 
0 
1 
1 
1 
1 
1 
1 
1 
1 
1 
0 
0 
0 
0 
0 
1 
1 
1 
0 
0 
0 
1 
1 
0 
0 
0 
0 
0 
1 
0 
1 
0 
1 
1 
Ghi thanh ghi lệnh 
Đọc thanh ghi trạng thái 
Ghi thanh ghi yêu cầu 
Ghi thanh ghi mặt nạ 
Ghi thanh ghi chế độ 
Xóa flip-flop đầu/cuối 
Xóa tất cả các thanh ghi nội 
1 
0 
1 
0 
0 
1 
0 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
0 
0 
1 
1 
Địa chỉ cơ sở và địa chỉ hiện hành 
Địa chỉ hiện hành 
Bộ đếm cơ sở và bộ đếm hiện hành 
Bộ đếm hiện hành 
Mạch 8273A-5 chứa 4 kênh trao đổi dữ liệu DMA với mức ưu tiên lập trình được. 
8237A-5 có tốc độ truyền 1 MBps cho mỗi kênh và 1 kênh có thể truyền 1 mảng có độ dài 
64 KB. Để có thể sử dụng mạch DMAC 8237A, ta cần tạo tín hiệu điều khiển như sau: 
Phạm Hùng Kim Khánh Trang 25
Tài liệu Lập trình hệ thống Chương 1 
Vcc 
1A 
1B 
2A 
2B 
3A 
3B 
4A 
4B 
G 
A/B 
1Y 
2Y 
3Y 
4Y 
74LS257 
2356 
11 
10 
14 
13 
15 
1 
4 
7 
9 
12 
RD 
WR 
AEN 
IO/M 
IOR 
IOW 
MEMR 
MEMW 
Hình 1.19 – Tín hiệu điều khiển cho hệ thống làm việc với DMAC 8237A 
Tín hiệu AEN từ 8237A dùng để cấm các tín hiệu điều khiển từ CPU khi DMAC 
đã nắm quyền điều khiển bus. 
4.6. Chip điều khiển màn hình CRTC 6845 (Cathode Ray Tube Controller) 
RST (Reset): khởi động lại 6845. 
MA0 ÷ MA13 (Memory Address): 14 địa chỉ nhớ cho RAM màn hình. 
DE (Display Enable): cho phép (=1) hay không (=0) các tín hiệu điều khiển và địa 
chỉ vùng hiện lên màn hình. 
LPSTD (Light Pen Strobe): lưu trữ địa chỉ hiện hành của RAM màn hình trong 
thanh ghi bút sáng. CPU đọc thanh ghi và xác định vị trí bút sáng trên màn hình. 
CURSOR: vị trí con trỏ đã quét (=1) hay chưa (=0). 
RA0 
RA1 
RA2 
RA3 
RA4 
CURSOR 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
LPSTD 
RST 
6845 
456789 
10 
11 
12 
13 
14 
15 
16 
17 
38 
37 
36 
35 
34 
19 
33 
32 
31 
30 
29 
28 
27 
26 
21 
23 
32 
24 
22 
25 
18 
39 
40 
MA0 
MA1 
MA2 
MA3 
MA4 
MA5 
MA6 
MA7 
MA8 
MA9 
MA10 
MA11 
MA12 
MA13 
CLK 
E 
RS 
R/W 
CS 
DE 
HS 
VS 
Hình 1.20 – Sơ đồ chân của 6845 
Phạm Hùng Kim Khánh Trang 26
Tài liệu Lập trình hệ thống Chương 1 
VS (Vertical Synchronization): ngõ ra tín hiệu đồng bộ quét dọc 
HS (Horizontal Synchronization): ngõ ra tín hiệu đồng bộ quét ngang 
RA0 ÷RA4 (Row Address): phân định hàng quét của ký tự trong chế độ văn bản 
(32 hàng quét). Trong chế độ đồ họa, chúng kết hợp với MA0 ÷ MA13 tạo các địa chỉ cho 
các bank RAM màn hình. 
D0 ÷ D7: đường dữ liệu. 
CS : chọn chip. 
RS (Regigter Select): chọn thanh ghi địa chỉ (=0) hay thanh ghi dữ liệu (=1). 
E: xung âm kích hoạt bus dữ liệu và dùng như xung clock cho 6845 đọc / ghi dữ 
liệu vào các thanh ghi bên trong. 
R/W : đọc / ghi dữ liệu vào các thanh ghi. 
CLK: dùng đồng bộ với tín hiệu của màn hình và thường bằng tốc độ hiện ký tự 
trên màn hình. 
4.7. Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor) 
Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thức dùng 
dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức, logarit, … 
Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU. Thời gian xử lý 
giữa 8087 và 8086 như sau (dùng xung clock 8 MHz): 
Phép toán 8087 [μs] 8086 [μs] 
Cộng / trừ 
10.6 
1000 
Nhân 
11.9 
1000 
Chia 
24.4 
2000 
Căn bậc hai 
22.5 
12250 
Tang 
56.3 
8125 
Lũy thừa 
62.5 
10680 
Lưu trữ 
13.1 
750 
™ 8087: 
8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus và 
một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấm động 
trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị (mantissa 
module). Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngăn xếp thanh ghi. 
Phạm Hùng Kim Khánh Trang 27
Tài liệu Lập trình hệ thống Chương 1 
Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy các lệnh 
điều khiển riêng của 8087. Do đó, CU có thể đồng bộ với CPU trong khi NU đang thực 
hiện các công việc tính toán. CU bao gồm bộ điều khiển bus, bộ đệm dữ liệu và hàng 
lệnh. 
CU - Control Unit NU - Numerical Unit 
Từ điều khiển 
Từ trạng thái 
Đệm dữ liệu 
Điều khiển bus 
Bộ điều 
khiển số 
Module lũy 
thừa 
Từ thẻ 
Thanh ghi 
Hình 1.21 – Sơ đồ khối của 8087 
INT (8259) 
IRx (8259) 
AD0 
AD1 
AD2 
AD3 
AD4 
AD5 
AD6 
AD7 
CLK 
BUSY 
QS0 
QS1 
READY 
RQ/GT0 
RQ/GT1 
RST 
BHE/S7 
8087 
16 
15 
14 
13 
12 
11 
10 
9 
19 
23 
25 
24 
22 
31 
33 
21 
34 
8765432 
39 
38 
37 
36 
35 
26 
27 
28 
32 
AD8 
AD9 
AD10 
AD11 
AD12 
AD13 
AD14 
AD15 
A16/S3 
A17/S4 
A18/S5 
A19/S6 
S0 
S1 
S2 
INT 
16 
15 
14 
13 
12 
11 
10 
9 
19 
18 
33 
17 
22 
31 
30 
21 
23 
AD0 
AD1 
AD2 
AD3 
AD4 
AD5 
AD6 
AD7 
CLK 
INTR 
MX 
NMI 
READY 
RQ/GT0 
RQ/GT1 
RST 
TEST 
Hình 1.22 – Sơ đồ kết nối 8087 và CPU 8086 
Module 
định trị 
ngăn xếp 
Bus dữ liệu 
Địa chỉ trạng thái 
CLK (8284) 
8086 
8765432 
39 
38 
37 
36 
35 
26 
27 
28 
34 
29 
25 
24 
32 
AD8 
AD9 
AD10 
AD11 
AD12 
AD13 
AD14 
AD15 
A16/S3 
A17/S4 
A18/S5 
A19/S6 
S0 
S1 
S2 
BHE/S7 
LOCK 
QS0 
QS1 
RD 
Phạm Hùng Kim Khánh Trang 28
Tài liệu Lập trình hệ thống Chương 1 
Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bit trong 
đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần định trị. Dữ liệu 
truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độ rộng bus dữ liệu là 
84 bit và không cần phải biến đổi định dạng. 
Ngay sau khi reset PC, bộ đồng xử lý kiểm tra xem nó có được nối với PC hay 
không bằng các đường BHE /S7. 8087 sẽ điều chỉnh độ dài của hàng lệnh cho phù hợp với 
CPU (nếu dùng 8086 thì độ dài là 6 byte). 
8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặp bit 
Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi R0 ÷ R7 
để cho phép thực hiện một số tác vụ nhanh hơn. Mỗi thanh ghi từ thẻ có 2 bit xác định 4 
giá trị khác nhau của các thanh ghi Ri. 
Tag = 00: xác định 
Tag = 01: zero 
Tag = 10: NAN, giá trị bất thường 
Tag = 11: rỗng 
™ 80287: 
S0 
S1 
CLK 
CLK286 
CMD0 
CMD1 
COD/INTA 
CKM 
HLDA 
NPS1 
NPS2 
NPRD 
NPWR 
PEACK 
READY 
RESET 
80287 
23 
22 
21 
20 
19 
18 
17 
16 
15 
14 
12 
11 
8765 
26 
25 
24 
21 
32 
37 
29 
31 
3 
39 
38 
34 
33 
27 
28 
36 
40 
35 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
D8 
D9 
D10 
D11 
D12 
D13 
D14 
D15 
ERROR 
BUSY 
PEREQ 
S0 
D0 
D1 
D2 
D3 
D4 
D5 
D6 
D7 
D8 
D9 
D10 
D11 
D12 
D13 
D14 
D15 
CAP 
CLK 
BUSY 
ERROR 
HOLD 
INTR 
NMI 
PEREQ 
READY 
80286 
36 
38 
40 
42 
44 
46 
48 
50 
37 
39 
41 
43 
45 
47 
49 
51 
52 
31 
54 
53 
64 
57 
59 
61 
63 
29 
RST 
S1 
Hình 1.23 – Sơ đồ kết nối giữa 80286 và 80287 
S0 
S1 
S0 13 
S1 
X1 
X2 
ARDY 
AYEN 
EFI 
F/C 
RES 
SRDY 
SYEN 
CLK 
PCLK 
READY 
RESET 
82284 
15 
16 
78 
1 
17 
5 
6 
11 
23 
10 
4 
12 
82288 
19 
3 
18 
2 
15 
14 
76 
1 
13 
12 
11 
89 
5 
16 
17 
4 
S0 
S1 
M/IO 
CLK 
CEN/AEN 
CENL 
CMDLY 
MB 
READY 
INTA 
IORC 
IOWC 
MRDC 
MWTC 
ALE 
DEN 
DT/R 
MCE 
34 
33 
32 
28 
27 
26 
25 
24 
23 
22 
21 
20 
19 
18 
17 
16 
15 
14 
13 
12 
11 
10 
87 
54 
1 
66 
65 
68 
67 
6 
A0 
A1 
A2 
A3 
A4 
A5 
A6 
A7 
A8 
A9 
A10 
A11 
A12 
A13 
A14 
A15 
A16 
A17 
A18 
A19 
A20 
A21 
A22 
A23 
BHE 
COD/INTA 
HLDA 
LOCK 
M/IO 
PEACK 
S0 
S1 
S0 13 
S1 
X1 
X2 
ARDY 
AYEN 
EFI 
F/C 
RES 
SRDY 
SYEN 
82284 
15 
16 
78 1 
17 
5 
6 
11 
23 
10 
4 
12 
CLK 
PCLK 
READY 
RESET 
Phạm Hùng Kim Khánh Trang 29 
S0 
S0 
S1 
S1
Tài liệu Lập trình hệ thống Chương 1 
Do 80286 có chế độ mạch bảo vệ nên mạch ghép nối giữa 80286 và 80287 được 
thiết kế khác 8087 ở đơn vị điều khiển CU. Bộ đồng xử lý ở đây không thực hiện truy 
xuất bộ nhớ trực tiếp. Để truy xuất được bộ nhớ, 80287 không những cần một đơc vị định 
địa chỉ đơn giản của nó mà còn phải được tăng cường thêm chức năng quản lý bộ nhớ của 
80286. Cấu trúc bên trong của 80287 cũng tương tự như 8087, chỉ có đơn vị bus thay đổi 
cho phù hợp với 80286. Khác vơi 8087, 80287 hoạt động không đồng bộ với CPU nên có 
thể dùng xung clock riêng. 
™ 80387: 
Ưu điểm của 80387 so với 80287 là có thể thực hiện các phép toán số học nhanh 
hơn. No có bus dữ liệu 32 bit như CPU và sử dụng công nghệ CMOS nên công suất tiêu 
thụ thấp hơn. 
5. Bộ thanh ghi 
μP 8086/8088 có tất cả 14 thanh ghi nội. Các thanh ghi này có thể phân loại như 
sau: 
- Thanh ghi dữ liệu (data register) 
- Thanh ghi chỉ số và con trỏ (index & pointer register) 
- Thanh ghi đoạn (segment register) 
- Thanh ghi trạng thái và điều khiển (status & control register) 
5.1. Các thanh ghi dữ liệu 
Các thanh ghi dữ liệu gồm có các thanh ghi 16 bit AX, BX, CX và DX trong đó 
nửa cao và nửa thấp của mỗi thanh ghi có thể định địa chỉ một cách độc lập. Các nửa 
thanh ghi này (8 bit) có tên là AH và AL, BH và BL, CH và CL, DH và DL. 
Các thanh ghi này được sử dụng trong các phép toán số học và logic hay trong quá 
trình chuyển dữ liệu. 
Bảng 2.8: 
Thanh ghi Sử dụng trong 
AX MUL, IMUL (toán hạng nguồn kích thước word) 
DIV, IDIV (toán hạng nguồn kích thước word) 
IN (nhập word) 
OUT (xuất word) 
CWD 
Các phép toán xử lý chuỗi (string) 
AL MUL, IMUL (toán hạng nguồn kích thước byte) 
DIV, IDIV (toán hạng nguồn kích thước byte) 
IN (nhập byte) 
OUT (xuất byte) 
XLAT 
AAA, AAD, AAM, AAS (các phép toán ASCII) 
CBW (đổi sang word) 
Phạm Hùng Kim Khánh Trang 30
Tài liệu Lập trình hệ thống Chương 1 
DAA, DAS (số thập phân) 
Các phép toán xử lý chuỗi (string) 
AH MUL, IMUL (toán hạng nguồn kích thước byte) 
DIV, IDIV (toán hạng nguồn kích thước byte) 
CBW (đổi sang word) 
BX XLAT 
CX LOOP, LOOPE, LOOPNE 
Các phép toán string với tiếp dầu ngữ REP 
CL RCR, RCL, ROR, ROL (quay với số đếm byte) 
SHR, SAR, SAL (dịch với số đếm byte) 
DX MUL, IMUL (toán hạng nguồn kích thước word) 
DIV, IDIV (toán hạng nguồn kích thước word) 
AX (ACC – Accumulator): thanh ghi tích luỹ 
BX (Base): thanh ghi cơ sở 
CX (Count): đếm 
DX (Data): thanh ghi dữ liệu 
5.2. Các thanh ghi chỉ số và con trỏ 
Bao gồm các thanh ghi 16 bit SP, BP, SI và DI, thường chứa các giá trị offset (độ 
lệch) cho các phần tử định địa chỉ trong một phân đoạn (segment). Chúng có thể được sử 
dụng trong các phép toán số học và logic. Hai thanh ghi con trỏ (SP – Stack Pointer và BP 
– Base Pointer) cho phép truy xuất dễ dàng đến các phần tử đang ở trong ngăn xếp (stack) 
hiện hành. Các thanh ghi chỉ số (SI – Source Index và DI – Destination Index) được dùng 
để truy xuất các phần tử trong các đoạn dữ liệu và doạn thêm (extra segment). Thông 
thường, các thanh ghi con trỏ liên hệ đến đoạn stack hiện hành và các thanh ghi chỉ số liên 
hệ đến doạn dữ liệu hiện hành. SI và DI dùng trong các phép toán chuỗi. 
5.3. Các thanh ghi đoạn 
Bao gồm các thanh ghi 16 bit CS (Code segment), DS (Data segment), SS (stack 
segment) và ES (extra segment), dùng để định địa chỉ vùng nhớ 1 MB bằng cách chia 
thành 16 đoạn 64 KB. 
Tất cả các lệnh phải ở trong đoạn mã hiện hành, được định địa chỉ thông qua thanh 
ghi CS. Offset (độ lệch) của mã được xác định bằng thanh ghi IP. Dữ liệu chương trình 
thường được đặt ở đoạn dữ liệu, định vị thông qua thanh ghi DS. Stack định vị thông qua 
thanh ghi SS. Thanh ghi đoạn thêm có thể sử dụng để định địa chỉ các toán hạng, dữ liệu, 
bộ nhớ và các phần tử khác ngoài đoạn dữ liệu và stack hiện hành. 
5.4. Các thanh ghi điều khiển và trạng thái 
Thanh ghi con trỏ lệnh IP (Instruction Pointer) giống như bộ đếm chương trình 
(Program Counter). Thanh ghi điều khiển này do BIU quản lý nhằm lưu trữ offset từ bắt 
đầu đoạn mã đến lệnh thực thi kế tiếp. Ta không thể xử lý trực tiếp trên thanh ghi IP. 
Phạm Hùng Kim Khánh Trang 31
Tài liệu Lập trình hệ thống Chương 1 
Thanh ghi cờ (Flag register) hay từ trạng thái 16 bit chứa 3 bit điều khiển (TF, IF 
và DF) và 6 bit trạng thái (OF, SF, ZF, AF, PF và CF) còn các bit còn lại mà 8086/8088 
không sử dụng thì không thể truy xuất được. 
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
X X X X OF DF IF TF SF ZF X AF X PF X CF 
- OF (Overflow - tràn): OF = 1 xác định tràn số học, xảy ra khi kết quả vượt ra 
ngoài phạm vi biểu diễn 
- DF (Direction- hướng): xác định hướng chuyển string, DF = 1 khi μP làm việc 
với string theo thứ tự từ phải sang trái. 
- IF (Interrupt - ngắt): cho phép hay cấm các interrupt có mặt nạ 
- TF (Trap - bẫy): đặt μP vào chế độ từng bước, dùng cho các chương trình gỡ 
rối (debugger). 
- SF (Sign - dấu): dùng để chỉ các kết quả số học là số dương (SF = 0) hay âm 
(SF = 1). 
- ZF (Zero): = 1 nếu kết quả của phép toán trước là 0. 
- AF (Auxiliary – nhớ phụ): dùng trong các số thập phân để chỉ nhớ từ nửa byte 
thấp hay mượn từ nửa byte cao. 
- PF (Parity): PF = 1 nếu kết quả của phép toán là có tổng số bit 1 là chẵn (dùng 
để kiểm tra lỗi truyền dữ liệu) 
- CF (Carry): CF = 1 nếu có nhớ hay mượn từ bit cao nhất của kết quả. Cờ này 
cũng dùng cho các lệnh quay. 
Phạm Hùng Kim Khánh Trang 32

More Related Content

What's hot

xử lý số tín hiệu -Chuong 5
xử lý số tín hiệu -Chuong 5xử lý số tín hiệu -Chuong 5
xử lý số tín hiệu -Chuong 5Ngai Hoang Van
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 inteldark_valley
 
xử lý số tín hiệu -Chuong 6
xử lý số tín hiệu -Chuong 6xử lý số tín hiệu -Chuong 6
xử lý số tín hiệu -Chuong 6Ngai Hoang Van
 
Bai tap dien_tu_cong_suat
Bai tap dien_tu_cong_suatBai tap dien_tu_cong_suat
Bai tap dien_tu_cong_suatToai Nguyen
 
Cong nghe vi mach dien tu
Cong nghe vi mach dien tuCong nghe vi mach dien tu
Cong nghe vi mach dien tutiểu minh
 
Dientuso Sld2
Dientuso Sld2Dientuso Sld2
Dientuso Sld2hoadktd
 
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768nataliej4
 
Xử lí tín hiệu số
Xử lí tín hiệu số Xử lí tín hiệu số
Xử lí tín hiệu số Tran An
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử líHong Phuoc Nguyen
 
Kiến trúc máy tính và hợp ngữ bài 04
Kiến trúc máy tính và hợp ngữ bài 04Kiến trúc máy tính và hợp ngữ bài 04
Kiến trúc máy tính và hợp ngữ bài 04Nhóc Nhóc
 
Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Nhóc Nhóc
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assemblerleduanmtt
 
15 Ghép nối 8255
15 Ghép nối 825515 Ghép nối 8255
15 Ghép nối 8255Mr Giap
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIRThe Nguyen Manh
 

What's hot (20)

xử lý số tín hiệu -Chuong 5
xử lý số tín hiệu -Chuong 5xử lý số tín hiệu -Chuong 5
xử lý số tín hiệu -Chuong 5
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 intel
 
xử lý số tín hiệu -Chuong 6
xử lý số tín hiệu -Chuong 6xử lý số tín hiệu -Chuong 6
xử lý số tín hiệu -Chuong 6
 
Bai tap dien_tu_cong_suat
Bai tap dien_tu_cong_suatBai tap dien_tu_cong_suat
Bai tap dien_tu_cong_suat
 
Cong nghe vi mach dien tu
Cong nghe vi mach dien tuCong nghe vi mach dien tu
Cong nghe vi mach dien tu
 
Dientuso Sld2
Dientuso Sld2Dientuso Sld2
Dientuso Sld2
 
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768
Ngân hàng đề môn điện tử số kỹ thuật số ( có đáp án) 4797768
 
Xử lí tín hiệu số
Xử lí tín hiệu số Xử lí tín hiệu số
Xử lí tín hiệu số
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
 
Kiến trúc máy tính và hợp ngữ bài 04
Kiến trúc máy tính và hợp ngữ bài 04Kiến trúc máy tính và hợp ngữ bài 04
Kiến trúc máy tính và hợp ngữ bài 04
 
Ktmt chuong 3
Ktmt chuong 3Ktmt chuong 3
Ktmt chuong 3
 
Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08
 
Chuong 05 flip flop
Chuong 05 flip flopChuong 05 flip flop
Chuong 05 flip flop
 
Slide chuong4
Slide chuong4Slide chuong4
Slide chuong4
 
Đề tài: Sử dụng hiệu quả phổ và nâng cao chất lượng kênh truyền
Đề tài: Sử dụng hiệu quả phổ và nâng cao chất lượng kênh truyềnĐề tài: Sử dụng hiệu quả phổ và nâng cao chất lượng kênh truyền
Đề tài: Sử dụng hiệu quả phổ và nâng cao chất lượng kênh truyền
 
Cổng logic
Cổng logicCổng logic
Cổng logic
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assembler
 
15 Ghép nối 8255
15 Ghép nối 825515 Ghép nối 8255
15 Ghép nối 8255
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
[Báo cáo] Bài tập lớn Xử lý tín hiệu số: Thiết kế bộ lọc FIR
 

Viewers also liked

Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITNgô Doãn Tình
 
39 giao trinh chuyen de ky thuat lap trinh
39 giao trinh chuyen de ky thuat lap trinh39 giao trinh chuyen de ky thuat lap trinh
39 giao trinh chuyen de ky thuat lap trinhLvcham Le van Cham
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXLThân Khương
 
Chương II: Hệ điều hành
Chương II: Hệ điều hànhChương II: Hệ điều hành
Chương II: Hệ điều hànhSunkute
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)realpotter
 
Vi xử lý cấu trúc máy tính
Vi xử lý cấu trúc máy tínhVi xử lý cấu trúc máy tính
Vi xử lý cấu trúc máy tínhleeduy
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởThuyet Nguyen
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assemblyLy hai
 
tài liệu Mã nguồn mở 17308 he dieu hanh ma nguon mo
tài liệu Mã nguồn mở  17308   he dieu hanh ma nguon motài liệu Mã nguồn mở  17308   he dieu hanh ma nguon mo
tài liệu Mã nguồn mở 17308 he dieu hanh ma nguon moThuyet Nguyen
 
Dien tu-cong-suat3
Dien tu-cong-suat3Dien tu-cong-suat3
Dien tu-cong-suat3Tuan Nguyen
 
Hệ điều hành (chương 1)
Hệ điều hành (chương 1)Hệ điều hành (chương 1)
Hệ điều hành (chương 1)realpotter
 
8051 experiments1
8051 experiments18051 experiments1
8051 experiments1tt_aljobory
 

Viewers also liked (16)

Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PIT
 
39 giao trinh chuyen de ky thuat lap trinh
39 giao trinh chuyen de ky thuat lap trinh39 giao trinh chuyen de ky thuat lap trinh
39 giao trinh chuyen de ky thuat lap trinh
 
lap trinh assembly cho VXL
lap trinh  assembly cho VXLlap trinh  assembly cho VXL
lap trinh assembly cho VXL
 
Chuong3 lập trình hợp ngữ
Chuong3 lập trình hợp ngữChuong3 lập trình hợp ngữ
Chuong3 lập trình hợp ngữ
 
Assembly
AssemblyAssembly
Assembly
 
Chương II: Hệ điều hành
Chương II: Hệ điều hànhChương II: Hệ điều hành
Chương II: Hệ điều hành
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)
 
Hệ điều hành windows
Hệ điều hành windowsHệ điều hành windows
Hệ điều hành windows
 
Vi xử lý cấu trúc máy tính
Vi xử lý cấu trúc máy tínhVi xử lý cấu trúc máy tính
Vi xử lý cấu trúc máy tính
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assembly
 
Bài giảng Assembly
Bài giảng AssemblyBài giảng Assembly
Bài giảng Assembly
 
tài liệu Mã nguồn mở 17308 he dieu hanh ma nguon mo
tài liệu Mã nguồn mở  17308   he dieu hanh ma nguon motài liệu Mã nguồn mở  17308   he dieu hanh ma nguon mo
tài liệu Mã nguồn mở 17308 he dieu hanh ma nguon mo
 
Dien tu-cong-suat3
Dien tu-cong-suat3Dien tu-cong-suat3
Dien tu-cong-suat3
 
Hệ điều hành (chương 1)
Hệ điều hành (chương 1)Hệ điều hành (chương 1)
Hệ điều hành (chương 1)
 
8051 experiments1
8051 experiments18051 experiments1
8051 experiments1
 

Similar to C1

TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...
TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...
TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...nataliej4
 
Bai1laprapcaidat ttth
Bai1laprapcaidat ttthBai1laprapcaidat ttth
Bai1laprapcaidat ttthut1101833
 
Snm ptoantap diep_thanhnguyen_-chuong1
Snm ptoantap diep_thanhnguyen_-chuong1Snm ptoantap diep_thanhnguyen_-chuong1
Snm ptoantap diep_thanhnguyen_-chuong1anhhaibi
 
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh may tinh
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh  may tinhLớp 8: Bài 1 T1+ 2 may tinh va chuong trinh  may tinh
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh may tinhHeo_Con049
 
Bộ điều khiển lập trình PLC - Điện tử đo lường
Bộ điều khiển lập trình PLC - Điện tử đo lườngBộ điều khiển lập trình PLC - Điện tử đo lường
Bộ điều khiển lập trình PLC - Điện tử đo lườngChia sẻ tài liệu học tập
 
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfBÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfMan_Ebook
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bị
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bịLập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bị
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bịXuân Thủy Nguyễn
 
Cac lenh lap trinh ladder
Cac lenh lap trinh ladderCac lenh lap trinh ladder
Cac lenh lap trinh ladderAlain Hua
 
CP1L_Chuong-2.pdf
CP1L_Chuong-2.pdfCP1L_Chuong-2.pdf
CP1L_Chuong-2.pdfJosKhanh1
 
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu Mr. Cao
 

Similar to C1 (20)

TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...
TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...
TÀI LIỆU ĐÁP ÁN VÀ CÂU HỎI KIỂM TRA, SÁT HẠCH KIẾN THỨC CHUYÊN NGÀNH.Tuyển dụ...
 
Winxp
WinxpWinxp
Winxp
 
Ngôn ngữ lập trình ứng dụng
Ngôn ngữ lập trình ứng dụngNgôn ngữ lập trình ứng dụng
Ngôn ngữ lập trình ứng dụng
 
Giới thiệu chung về plc s7 1200
Giới thiệu chung về plc s7 1200Giới thiệu chung về plc s7 1200
Giới thiệu chung về plc s7 1200
 
Bai1laprapcaidat ttth
Bai1laprapcaidat ttthBai1laprapcaidat ttth
Bai1laprapcaidat ttth
 
Htc.kien.truc.unix.linux
Htc.kien.truc.unix.linuxHtc.kien.truc.unix.linux
Htc.kien.truc.unix.linux
 
Kien.truc.unix.linux 2
Kien.truc.unix.linux 2Kien.truc.unix.linux 2
Kien.truc.unix.linux 2
 
Kien.truc.unix.linux
Kien.truc.unix.linuxKien.truc.unix.linux
Kien.truc.unix.linux
 
Snm ptoantap diep_thanhnguyen_-chuong1
Snm ptoantap diep_thanhnguyen_-chuong1Snm ptoantap diep_thanhnguyen_-chuong1
Snm ptoantap diep_thanhnguyen_-chuong1
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Cau truc may tinh
Cau truc may tinhCau truc may tinh
Cau truc may tinh
 
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh may tinh
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh  may tinhLớp 8: Bài 1 T1+ 2 may tinh va chuong trinh  may tinh
Lớp 8: Bài 1 T1+ 2 may tinh va chuong trinh may tinh
 
Bộ điều khiển lập trình PLC - Điện tử đo lường
Bộ điều khiển lập trình PLC - Điện tử đo lườngBộ điều khiển lập trình PLC - Điện tử đo lường
Bộ điều khiển lập trình PLC - Điện tử đo lường
 
Bai5 tin10_ngongulaptrinh
Bai5 tin10_ngongulaptrinhBai5 tin10_ngongulaptrinh
Bai5 tin10_ngongulaptrinh
 
plc 300
plc 300plc 300
plc 300
 
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdfBÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
BÁO cáo học tập về PLC MITSHUBISHI FX3U.pdf
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bị
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bịLập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bị
Lập trình PLC S7 1200 tiếng Việt-Chuong 1 tổng quan thiết bị
 
Cac lenh lap trinh ladder
Cac lenh lap trinh ladderCac lenh lap trinh ladder
Cac lenh lap trinh ladder
 
CP1L_Chuong-2.pdf
CP1L_Chuong-2.pdfCP1L_Chuong-2.pdf
CP1L_Chuong-2.pdf
 
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu
Trình bày cơ chế nhập / xuất của hệ thống vào ra dữ liệu
 

C1

  • 1. Tài liệu Lập trình hệ thống Chương 1 Chương 1 KIẾN TRÚC VÀ HOẠT ĐỘNG CỦA HỆ VI XỬ LÝ / MÁY TÍNH 1. Cấu trúc luận lý Máy tính số (Digital computer) là máy giải quyết các vấn đề bằng cách thực hiện các chỉ thị do con người cung cấp. Chuỗi các chỉ thị này gọi là chương trình (program). Các mạch điện tử trong một máy tính số sẽ thực hiện một số giới hạn các chỉ thị đơn giản cho trước. Tập hợp các chỉ thị này gọi là tập lệnh của máy tính. Tất cả các chương trình muốn thực thi đều phải được biến đổi sang tập lệnh trước khi được thi hành. Các lệnh cơ bản là: - Cộng 2 số. - So sánh với 0. - Di chuyển dữ liệu. Tập lệnh của máy tính tạo thành một ngôn ngữ giúp con người có thể tác động lên máy tính, ngôn ngữ này gọi là ngôn ngữ máy (machine language). Tuy nhiên, hầu hết các ngôn ngữ máy đều đơn giản nên để thực hiện một yêu cầu nào đó, người thiết kế phải thực hiện một công việc phức tạp. Đó là chuyển các yêu cầu này thành các chỉ thị có chứa trong tập lệnh của máy. Vấn đề này có thể giải quyết bằng cách thiết kế một tập lệnh mới thích hợp cho con người hơn tập lệnh đã cài đặt sẵn trong máy (built-in). Ngôn ngữ máy sẽ được gọi là ngôn ngữ cấp 1 (L1) và ngôn ngữ vừa được hình thành gọi là ngôn ngữ cấp 2 (L2). Tuy nhiên, trong thực tế, để có thể thực hiện được, các ngôn ngữ L1 và L2 không được khác nhau nhiều. Như vậy, ngôn ngữ L2 cũng không thật sự giúp ích nhiều cho người thiết kế. Do đó, một tập lệnh kế tiếp được hình thành sẽ hướng về con người nhiều hơn là máy tính, tập lệnh này sẽ tạo thành một ngôn ngữ và ta gọi là ngôn ngữ L3. Ta có thể viết các chương trình trong L3 như là đã tồn tại máy tính sử dụng ngôn ngữ L3 (máy ảo L3). Các chương trình này sẽ được dịch sang ngôn ngữ L2 và được thực thi bằng một chương trình dịch L2. Việc xây dựng toàn bộ chuỗi các ngôn ngữ, mỗi ngôn ngữ được tạo ra sẽ thích hợp hơn ngôn ngữ trước đó sẽ có thể tiếp tục cho đến khi nhận được ngôn ngữ thích hợp nhất. Sơ đồ một máy ảo n cấp có thể biểu diễn như sau: Phạm Hùng Kim Khánh Trang 1
  • 2. Tài liệu Lập trình hệ thống Chương 1 Cấp n Cấp 3 Cấp 2 Cấp 1 Máy ảo Mn dùng ngôn ngữ máy Ln Chương trình trong Ln được dịch thành ngôn ngữ của máy cấp thấp hơn Máy ảo M3 dùng ngôn ngữ máy L3 Chương trình trong L3 được dịch thành ngôn ngữ L2 hay L1 Máy ảo M2 dùng ngôn ngữ máy L2 Chương trình trong L2 được dịch thành ngôn ngữ máy L1 Máy tính số M1 dùng ngôn ngữ máy L1 Chương trình trong L1 được thực thi trực tiếp bằng các mạch điện tử Hình 1.1. Máy ảo n cấp Một máy tính số có n cấp có thể xem như có n-1 máy ảo khác nhau, mỗi máy ảo có một ngôn ngữ máy riêng. Các chương trình viết trên các máy ảo này không thể thực thi trực tiếp mà phải dịch thành các ngôn ngữ máy cấp thấp hơn. Chỉ có máy thật dùng ngôn ngữ máy L1 mới có thể thực thi trực tiếp bằng các mạch điện tử. Một lập trình viên sử dụng máy ảo cấp n không cần biết tất cả các trình dịch này. Chương trình trong máy ảo cấp n sẽ được thực thi bằng cách dịch thành ngôn ngữ máy cấp thấp hơn và ngôn ngữ máy này sẽ được dịch thành ngôn ngữ máy thấp hơn nữa hay dịch trực tiếp thành ngôn ngữ máy L1 và thực thi trực tiếp trên các mạch điện tử. Phạm Hùng Kim Khánh Trang 2
  • 3. Tài liệu Lập trình hệ thống Chương 1 Về cơ bản, máy tính gồm có 6 cấp: Cấp 5 Cấp ngôn ngữ hướng vấn đề Dịch (chương trình dịch) Cấp 4 Cấp ngôn ngữ hợp dịch Dịch (hợp dịch) Cấp 3 Cấp hệ điều hành Dịch 1 phần (hệ điều hành) Cấp 2 Cấp máy quy ước Thông dịch (vi chương trình) Cấp 1 Cấp vi lập trình Vi chương trình (phần cứng) Cấp 0 Cấp logic số Hình 1.2 – Các cấp trên máy tính số Cấp 0 chính là phần cứng của máy tính. Các mạch điện tử của cấp này sẽ thực thi các chương trình ngôn ngữ máy của cấp 1. Trong cấp logic số, đối tượng quan tâm là các cổng logic. Các cổng này được xây dựng từ một nhóm các transistor. Cấp 1 là cấp ngôn ngữ máy thật sự. Cấp này có một chương trình gọi là vi chương trình (microprogram), vi chương trình có nhiệm vụ thông dịch các chỉ thị của cấp 2. Hầu hết các lệnh trong cấp này là di chuyển dữ liệu từ phần này đến phần khác của máy hay thực hiện việc một số kiểm tra đơn giản. Mỗi máy cấp 1 có một hay nhiều vi chương trình chạy trên chúng. Mỗi vi chương trình xác định một ngôn ngữ cấp 2. Các máy cấp 2 đều có nhiều điểm chung ngay cả các máy cấp 2 của các hãng sản xuất khác nhau. Các lệnh trên máy cấp 2 được thực thi bằng cách thông dịch bởi vi chương trình mà không phải thực thi trực tiếp bằng phần cứng. Cấp thứ 3 thường là cấp hỗn hợp. Hầu hết các lệnh trong ngôn ngữ của cấp máy này cũng có trong ngôn ngữ cấp 2 và đổng thời có thêm một tập lệnh mới, một tổ chức bộ Phạm Hùng Kim Khánh Trang 3
  • 4. Tài liệu Lập trình hệ thống Chương 1 nhớ khác và khả năng chạy 2 hay nhiều chương trình song song. Các lệnh mới thêm vào sẽ được thực thi bằng một trình thông dịch chạy trên cấp 2, gọi là hệ điều hành. Nhiều lệnh cấp 3 được thực thi trực tiếp do vi chương trình và một số lệnh khác được thông dịch bằng hệ điều hành (do đó, cấp này là cấp hỗn hợp). Cấp 4 thật sự là dạng tượng trưng cho một trong các ngôn ngữ. Cấp này cung cấp một phương pháp viết chương trình cho các cấp 1, 2, 3 dễ dàng hơn. Các chương trình viết bằng hợp ngữ được dịch sang các ngôn ngữ của cấp 1, 2, 3 và sau đó được thông dịch bằng các máy ảo hay thực tương ứng. Cấp 5 bao gồm các ngôn ngữ được thiết kế cho người lập trình nhằm giải quyết một vấn đề cụ thể. Các ngôn ngữ này được gọi là cấp cao. Một số ngôn ngữ cấp cao như Basic, C, Cobol, Fortran, Lisp, Prolog, Pascal và các ngôn ngữ lập trình hướng đối tượng như C++, J++, … Các chương trình viết bằng các ngôn ngữ này thường được dịch sang cấp 3 hay 4 bằng các trình biên dịch (compiler). 2. Giao tiếp ngoại vi Ta phân biệt tất cả 3 phương pháp xuất / nhập dữ liệu: - Nhập / xuất bằng cách hỏi trạng thái của thiết bị ngoại vi (polling) - Nhập / xuất bằng ngắt (interrupt). - Nhập / xuất bằng cách truy xuất trực tiếp vào bộ nhớ dùng các phần cứng phụ trợ (DMA). 2.1. Nhập / xuất dữ liệu bằng cách hỏi vòng (polling) Ta biết rằng vấn đề điều khiển nhập / xuất dữ liệu sẽ rất đơn giản trong trường hợp thiết bị ngoại vi lúc nào cũng có thể làm việc với μP. Ta có thể ví dụ như bộ hiển thị Led 7 đoạn lúc nào cũng sẵn sàng hiển thị dữ liệu khi mà μP gởi dữ liệu ra. Tuy nhiên, trong thực tế, không phải lúc nào μP cũng làm việc với các thiết bị ngoại vi có tính năng như trên. Ví dụ như khi làm việc với một máy in, μP yêu cầu in nhưng máy in không sẵn sàng (giả sử như hết giấy, kẹt giấy, …). Khi đó, μP phải kiểm tra xem một thiết bị mà nó cần giao tiếp có sẵn sàng hay không nếu thiết bị sẵn sàng thì mới thực hiện trao đổi dữ liệu. Để kiểm tra các thiết bị ngoại vi, μP phải sử dụng các tín hiệu bắt tay (handshake) xác định tuần tự từng thiết bị, xem thiết bị nào có yêu cầu trao đổi dữ liệu. Các tín hiệu này lấy từ các mạch giao tiếp do người thiết kế tạo ra. Giả sử hệ thống có 2 thiết bị ngoại vi, nếu thiết bị 1 có dữ liệu cần truyền đến μP thì nó sẽ gởi 1 xung để chốt dữ liệu đồng thời tạo tín hiệu sẵn sàng cho thiết bị. Khi μP kiểm tra tín hiệu sẵn sàng của thiết bị 1 thì nó sẽ đọc dữ liệu vào từ mạch chốt và xoá tín hiệu sẵn sàng. Trong trường hợp μP muốn gởi dữ liệu ra thiết bị 2, nó sẽ đọc tín hiệu sẵn sàng của thiết bị 2, nếu thiết bị 2 có thể nhận dữ liệu thì μP sẽ gởi dữ liệu ra mạch chốt và thiết bị 2 sẽ đọc dữ liệu vào. Phạm Hùng Kim Khánh Trang 4
  • 5. Tài liệu Lập trình hệ thống Chương 1 2.2. Ngắt và xử lý ngắt Trong cách thức thực hiện trao đổi dữ liệu bằng cách hỏi vòng như trên, trước khi tiến hành thực hiện thì μP phải kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi. Tuy nhiên trong thực tế ta cần phải tận dụng khả năng của μP để làm các công việc khác mà không phải tốn thời gian kiểm tra thiết bị, chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới tạm dừng công việc hiện tại. Cách làm việc như vậy gọi là ngắt μP, khi có một ngắt xảy ra thì ta phải thực hiện gọi các chương trình phục vụ ngắt tại các địa chỉ xác định của μP. Các tín hiệu ngắt từ thiết bị ngoại vi đưa vào μP thông qua các chân NMI hay INTR. 2.2.1. Các loại ngắt ™ Ngắt cứng: là các yêu cầu ngắt từ các chân NMI hay INTR. Ngắt cứng NMI là ngắt không che được còn ngắt cứng INTR có thể che được. Các lệnh CLI (Clear Interrupt) và STI (Set Interrupt) chỉ ảnh hưởng đến việc μP có chấp nhận yêu cầu ngắt tại chân INTR hay không. Yêu cầu ngắt tại chân INTR có thể có các kiểu ngắt từ 00h ÷ FFh. Kiểu ngắt này sẽ được đưa vào bus dữ liệu để μP xác định kiểu ngắt (dùng cho các thiết bị ngoại vi khác nhau). 74LS245 1 19 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 DIR G A8 A7 A6 A5 A4 A3 A2 A1 B8 B7 B6 B5 B4 B3 B2 B1 INT7 INT5 INT6 INT4 INT3 INT2 INT1 VCC INT0 1234 56 11 12 8 40 39 38 37 36 35 34 33 32 VCC GND AD14 AD15 AD13 A16/S3 AD12 A17/S4 AD11 A18/S5 AD10 A19/S6 AD9 BHE/S7 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND RESET MN/MX RD 10 11 HOLD (RQ/GT0) 12 HLDA (RQ/GT1) 13 WR (LOCK) 14 IO/M (S2) 15 DT/R (S1) 16 DEN (S0) 17 ALE (QS0) 18 INTA (QS1) 19 20 21 8086 123456789 31 30 29 28 27 26 25 24 23 22 TEST READY Hình 1.3 – Kết nối ngắt đơn giản ™ Ngắt mềm: là các ngắt thực hiện bằng phần mềm tác động do người sử dụng. 2.2.2. Đáp ứng của μP khi có yêu cầu ngắt Khi có yêu cầu ngắt đến μP và nếu được phép ngắt, μP sẽ thực hiện các công việc sau: - [SP] ← SP – 2, [SP] ← FR (Flag Register): cất thanh ghi cờ vào stack. - IF ← 0, TF ← 0: không cho thực hiện các ngắt khác. - SP ← SP – 2, [SP] ← CS: cất địa chỉ đoạn mã vào stack. - SP ← SP – 2, [SP] ← IP: cất địa chỉ trở về sau khi phục vụ ngắt Phạm Hùng Kim Khánh Trang 5
  • 6. Tài liệu Lập trình hệ thống Chương 1 - IP ← [Số_hiệu_ngắt*4], CS ← [Số_hiệu_ngắt*4 + 2]: lấy lệnh tại địa chỉ phục vụ ngắt tương ứng - Sau khi kết thúc chương trình con phục vụ ngắt (khi gặp lệnh IRET): + IP ← [SP], SP ← SP + 2 + CS ← [SP], SP ← SP + 2: lấy lại địa chỉ trước khi gọi chương trình phục vụ ngắt + FR ← [SP], SP ← SP + 2: lấy lại giá trị thanh ghi cờ 2.2.3. Xử lý ưu tiên ngắt Như ta đã biết ở trên, khi μP đang thực hiện lệnh, nếu có ngắt xảy ra thì μP sẽ tạm ngừng chương trình và thực thi chương trình con phục vụ ngắt. Trong thực tế sẽ có trường hợp có nhiều yêu cầu ngắt khác nhau cùng một lúc, khi đó μP sẽ phục vụ cho ngắt theo thứ tự ưu tiên với nguyên tắc là ngắt nào có mức ưu tiên cao nhất thì sẽ phục vụ cho ngắt đó trước. Các mức ưu tiên của các ngắt (từ mức thấp nhất đến mức cao nhất): - Ngắt thực hiện chạy từng lệnh (INT 1) - Ngắt che được INTR - Ngắt không che được NMI - Ngắt nội bộ (INT 0: xảy ra do phép chia số 0, ngắt mềm) 2.3. Nhập / xuất dữ liệu bằng DMA (Direct Memory Access) Trong các phương thức trao đổi dữ liệu như hai phần trên đã trình bày thì việc trao đổi dữ liệu giữa thiết bị ngoại vi và hệ thống thường theo trình tự sau: từ ngoại vi đến vi xử lý rồi đi vào bộ nhớ hay từ bộ nhớ đến vi xử lý rồi ghi ra ngoại vi. Trong thực tế sẽ có trường hợp ta cần thực hiện trao đổi dữ liệu ngay giữa ngoại vi và bộ nhớ. Khi đó người ta đưa ra cơ chế truy xuất bộ nhớ trực tiếp (DMA). Để thực hiện được vấn đề này, các hệ vi xử lý thông thường dùng thêm các mạch chuyên dụng để điều khiển quá trình truy xuất bộ nhớ trực tiếp (DMAC – Direct Memory Access Controller). Có tất cả 3 cơ chế hoạt động: ¾ Tận dụng thời gian CPU không dùng bus: Ta phải dùng thêm mạch phát hiện các chu kỳ xử lý nội của CPU và tận dụng các chu kỳ này để thực hiện trao đổi dữ liệu. ¾ Treo CPU để trao đổi từng byte: CPU không bị treo trong khoảng thời gian dài mà chỉ bị treo trong thời gian ngắn đủ để trao đổi 1 byte dữ liệu giữa bộ nhớ và ngoại vi. Do đó, công việc của CPU không bị gián đoạn mà chỉ bị chậm đi. ¾ Treo CPU một khoảng thời gian để trao đổi một khối dữ liệu: Trong cơ chế này, CPU bị treo trong suốt quá trình trao đổi dữ liệu. - CPU ghi từ lệnh và từ chế độ làm việc vào DMAC. - Khi thiết bị ngoại vi có yêu cầu trao đổi dữ liệu, nó gởi tín hiệu DRQ = 1 (DMA Request) đến DMAC. Phạm Hùng Kim Khánh Trang 6
  • 7. Tài liệu Lập trình hệ thống Chương 1 - DMAC gởi tín hiệu HRQ (Hold Request) đến chân HOLD của CPU để yêu cầu treo CPU. Tín hiệu này sẽ giữ ở mức cao cho đến hết quá trình trao đổi dữ liệu. - Sau khi nhận yêu cầu treo, CPU sẽ thực hiện hết chu kỳ bus của m?nh rồi treo các bus và gởi tín hiệu HLDA (Hold Acknowledge) để báo cho DMAC biết có thể sử dụng các bus. - DMAC chuyển dữ liệu từ bộ nhớ đến ngoại vi bằng cách: đưa địa chỉ byte đầu tiên ra bus địa chỉ và đưa tín hiệu MEMR để đọc 1 byte từ bộ nhớ, kế tiếp DMAC đưa tín hiệu IOW để ghi dữ liệu ra ngoại vi. Sau đó, DMAC giảm số byte cần truyền, cập nhật địa chỉ bộ nhớ và lặp lại quá trình cho đến khi hết byte cần truyền. DMAC Address bus Data bus HRQ HACK I/O DRQ DACK DRQ DACK Control bus Hình 1.4 – Giao tiếp DMAC với hệ vi xử lý μP HOLD HLDA Memory Hai tín hiệu dùng để yêu cầu treo và chấp nhận yêu cầu treo CPU dùng cho cơ chế DMA là HOLD và HLDA có thể mô tả như sau: T4 hay T1 Hình 1.5 – Tín hiệu HOLD và HLDA CLK HOLD HLDA Phạm Hùng Kim Khánh Trang 7
  • 8. Tài liệu Lập trình hệ thống Chương 1 3. Bus CPU ALU Bus nội (on-chip bus) Đồng xử lý Bus hệ thống (system bus) Memory board I/O board Bus cục bộ (local bus) Hình 1.6 - Các bus trong một hệ thống máy tính Registers Bus là đường truyền tín hiệu điện nối các thiết bị khác nhau trong một hệ thống máy tính. Bus thường có từ 50 đến 100 dây dẫn được gắn trên mainboard, trên các dây này có các đầu nối đưa ra, các đầu này được sắp xếp và cách nhau những khoảng quy định để có thể cắm vào đó những I/O board hay board bộ nhớ (bus hệ thống – system bus). Cũng có những bus dùng cho mục đích chuyên biệt, thí dụ nối 1 vi xử lý với 1 hay nhiều vi xử lý khác hoặc nối với bộ nhớ cục bộ (local bus). Trong vi xử lý cũng có một số bus để nối các thành phần bên trong của bộ vi xử lý với nhau. Người thiết kế chip vi xử lý có thể tuỳ ý lựa chọn loại bus bên trong nó, còn với các bus liên hệ bên ngoài cần phải xác định rõ các quy tắc làm việc cũng như các đặc điểm kỹ thuật về điện và cơ khí của bus để người thiết kế mainboard có thể ghép nối chip vi xử lý với các thiết bị khác. Nói cách khác, các bus này phải tuân theo 1 chuẩn nào đó. Tập các quy tắc của chuẩn còn được gọi là giao thức bus (bus protocol) Thường có nhiều thiết bị nối với bus, một số thiết bị là tích cực (active) có thể đòi hỏi truyền thông trên bus, trong khi đó có các thiết bị thụ động chờ yêu cầu từ các thiết bị khác. Các thiết bị tích cực được gọi là chủ (master) còn thiết bị thụ động là tớ (slave). Ví dụ: Khi CPU ra lệnh cho bộ điều khiển đĩa đọc/ghi một khối dữ liệu thì CPU là master còn bộ điều khiển đĩa là slave. Tuy nhiên, bộ điều khiển đĩa ra lệnh cho bộ nhớ nhận dữ liệu thì nó lại giữ vai trò master. Phạm Hùng Kim Khánh Trang 8
  • 9. Tài liệu Lập trình hệ thống Chương 1 3.1. Bus Driver và Bus Receiver Tín hiệu điện trong máy tính phát ra thường không đủ để điều khiển bus, nhất là khi bus khá dài và có nhiều thiết bị nối với nó. Chính vì thế mà hầu hết các bus master được nối với bus thông qua 1 chip gọi là bus driver, về cơ bản nó là một bộ khuếch đại tín hiệu số. Tương tự như vậy, hầu hết các slave được nối với bus thông qua bus receiver. Đối với các thiết bị khi thì đóng vai trò master, khi thì đóng vai trò slave, người ta sử dụng 1 chip kết hợp gọi là transceiver. Các chip này đóng vai trò ghép nối và là các thiết bị 3 trạng thái, cho phép nó có thể ở trạng thái thứ 3 – hở mạch (thả nổi). Giống như vi xử lý, bus có các đường địa chỉ, đường số liệu và đường điều khiển. Tuy nhiên, không nhất thiết có ánh xạ 1 – 1 giữa các tín hiệu ở các chân ra của vi xử lý và các đường dây của bus. Thí dụ: một số chíp vi xử lý có 3 chân ra, truyền ra các tín hiệu báo chíp vi xử lý đang thực hiện các thao tác MEMR, MEMW , IOR , IOW hay thao tác khác. Một bus điển hình thường có 4 đường trên. Các vấn đề quan trọng nhất liên quan đến thiết kế bus là: xung clock bus (sự phân chia thời gian, hay còn gọi là bus blocking), cơ chế phân xử bus (bus arbitration), xử lý ngắt và xử lý lỗi. Các bus có thể được chia theo giao thức truyền thông thành hai loại riêng biệt là bus đồng bộ và bus không đồng bộ phụ thuộc vào việc sử dụng clock bus. 3.2. Bus đồng bộ (Synchronous bus) Mỗi chu kỳ bus bắt đầu bằng việc xuất địa chỉ bộ nhớ hoặc I/O port (chu kỳ xung nhịp T1). Bus điều khiển có 4 tín hiệu tác động mức thấp làMEMR, MEMW, IOR và IOW. Các chuỗi sự kiện xảy ra trong một chu kỳ bus đọc bộ nhớ: T1: μP xuất địa chỉ bộ nhớ 20 bit. Các đường dữ liệu không hoạt động và các đường điều khiển bị cấm T2: Đường điều khiển MEMR xuống mức thấp. Đơn vị bộ nhớ ghi nhận chu kỳ bus này là quá trình đọc bộ nhớ và đặt byte hay word có địa chỉ đó lên data bus. T3: μP đặt cấu hình để các đường data bus là nhập. Trạng thái này chủ yếu để bộ nhớ có thời gian tìm kiếm byte hay word dữ liệu T4: μP đợi dữ liệu trên data bus. Do đó, nó thực hiện chốt data bus và giải phóng các đường điều khiển đọc bộ nhớ. Quá trình này sẽ kết thúc chu kỳ bus. Phạm Hùng Kim Khánh Trang 9
  • 10. Tài liệu Lập trình hệ thống Chương 1 T1 T2 T3 T4 Địa chỉ Địa chỉ Dữ liệu vào Dữ liệu ra Hình 1.7 – Định thì chu kỳ bus đồng bộ Clk Address bus IOR hay MEMR Data bus Address bus IOW hay MEMW Data bus Đọc bộ nhớ hay I/O Ghi bộ nhớ hay I/O Trong một chu kỳ bus, μP có thể thực hiện đọc I/O, ghi I/O, đọc bộ nhớ hay ghi bộ nhớ. Các đường address bus và control bus dùng để xác định địa chỉ bộ nhớ hay I/O và hướng truyền dữ liệu trên data bus. Chú ý rằng μP điều khiển tất cả các quá trình trên nên bộ nhớ bắt buộc phải cung cấp được dữ liệu vào lúc MEMR lên mức cao trong trạng thái T4. Nếu không, μP sẽ đọc dữ liệu ngẫu nhiên không mong muốn trên data bus. Để giải quyết vấn đề này, ta có thể dùng thêm các trạng thái chờ (wait state). ™ Truyền theo khối: Ngoài các chu kỳ đọc/ghi, một số bus truyền dữ liệu đồng bộ còn hỗ trợ truyền dữ liệu theo khối. Khi bắt đầu thao tác đọc khối, bus master báo cho slave biết số byte cần được truyền đi, thí dụ truyền con số này đi trong chu kỳ T1, sau đó đáng lẽ truyền đi 1 byte, slave đưa ra trong mỗi chu kỳ 1 byte cho tới khi đủ số byte được thông báo. Như vậy, khi đọc dữ liệu theo khối, n byte dữ liệu cần n+2 chu kỳ clock chứ không phải 3n chu kỳ. Một cách khác để cho truyền dữ liệu nhanh hơn là giảm chu kỳ. Tuy nhiên, giảm chu kỳ bus dẫn đến khó khăn về mặt kỹ thuật, các tín hiệu truyền trên các đường khác nhau không phải luôn có cùng tốc độ, dẫn đến hiệu ứng bus skew. Điều quan trọng là thời Phạm Hùng Kim Khánh Trang 10
  • 11. Tài liệu Lập trình hệ thống Chương 1 gian chu kỳ phải dài hơn so với skew để tránh việc những khoảng thời gian được số hoá lại trở thành các đại lượng biến thiên liên tục. 3.3. Bus bất đồng bộ( Asynchronous bus) Bus bất đồng bộ không sử dụng xung clock đồng bộ, chu kỳ của nó có thể kéo dài tuỳ ý và có thể khác nhau đối với các cặp thiết bị khác nhau. Làm việc với các bus đồng bộ dễ dàng hơn do nó được định thời một cách gián đoạn , tuy vậy chính đặc điểm này cũng dẫn đên nhược điểm. Mọi công việc được tiến hành trong khoảng thời gian là bội số của xung clock, nếu 1 thao tác nào đó của vi xử lý hay bộ nhớ hoàn thành trong 3.1 chu kỳ thì nó cũng sẽ phải kéo dài trong 4 chu kỳ. Khi đã chọn chu kỳ bus và đã xây dựng bộ nhớ, I/O card cho bus này thì khó có thể tận dụng những tiến bộ của công nghệ. Chẳng hạn sau khi đã xây bus với sự định thời như trên, công nghệ mới đưa ra các vi xử lý và bộ nhớ có thời gian chu kỳ là 100ns chứ không còn là 750ns như cũ, thì chúng vẫn chạy với tốc độ thấp như các vi xử lý, bộ nhớ loại cũ, bởi vì giao thức bus đòi hỏi bộ nhớ phải đưa được dữ liệu ra và ổn định trước thời điểm cạnh âm của T3. Nếu có nhiều thiết bị khác nhau cùng nối với 1 bus, trong đó có thể có một số thiết bị hoạt động nhanh hơn hơn các thiết bị khác thì cần phải đặt bus hoạt động phù hợp với thiết bị có tốc độ thấp nhất. Bus bất đồng bộ ra đời nhằm khắc phục những nhược điểm của bus đồng bộ. Trước hết master phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát tín hiệu MEMR tích cực để xác định cần truy xuất bộ nhớ và yêu cầu quá trình truy xuất là READ để xác định chiều truyền dữ liệu. Tín hiệu MEMR được đưa ra sau tín hiệu địa chỉ một khoảng thời gian phụ thuộc tốc độ hoạt động của master. Sau khi 2 tín hiệu này đã ổn định, master sẽ phát ra tín hiệu MSYN (master synchrization) ở mức tích cực để báo cho slave biết rằng các tín hiệu cần thiết đã sẵn sàng trên bus, slave có thể nhận lấy. Khi slave nhận được tín hiệu này, nó sẽ thực hiện công việc với tốc độ nhanh nhất có thể được, đưa dữ liệu của ô nhớ được yêu cầu lên bus dữ liệu. Khi hoàn thành slave sẽ phát tín hiệu SSYN (slave synchronization) tích cực. Hình 1.8 – Định thì chu kỳ bus bất đồng bộ Address MEMR (Control) MSYN Data SSYN Phạm Hùng Kim Khánh Trang 11
  • 12. Tài liệu Lập trình hệ thống Chương 1 Master nhận được tín hiệu SSYN tích cực thì xác định được dữ liệu của slave đã sẵn sàng nên thực hiện việc chốt dữ liệu, sau đó đảo các đường địa chỉ cũng như các tín hiệu MEMR và MSYN . Khi slave nhận được tín hiệu MSYN không tích cực, nó xác định kết thúc chu kỳ và đảo tín hiệu SSYN làm bus trở lại trạng thái ban đầu, mọi tín hiệu đều không tích cực, chờ bus master mới. Trên giản đồ thời gian của bus bất đồng bộ, ta sử dụng mũi tên để thể hiện nguyên nhân và kết quả. MSYN tích cực dẫn đến việc truyền dữ liệu ra bus dữ liệu và đồng thời cũng dẫn đến việc slave phát ra tín hiệu SSYN tích cực, đến lượt mình tín hiệu SSYN lại gây ra sự đảo mức của các đường địa chỉ, MEMR và MSYN . Cuối cùng sự đảo mức của MSYN lại gây ra sự đảo mức tín hiệu SSYN và kết thúc chu kỳ. Tập các tín hiệu phối hợp với nhau như vậy được gọi là bắt tay toàn phần (full handshake), chủ yếu gồm 4 tín hiệu sau: - MSYN tích cực. - SSYN tích cực để đáp lại tín hiệu MSYN . - MSYN được đảo để đáp lại tín hiệu SSYN (tích cực). - SSYN được đảo để đáp lại tín hiệu MSYN không tích cực. Ta có thể nhận thấy bắt tay toàn phần là độc lập thời gian, mỗi sự kiện được gây ra bởi 1 sự kiện trước đó chứ không phải bởi xung clock. Nếu 1 cặp master-slave nào đó hoạt động chậm thì cặp master-slave kế tiếp không hề bị ảnh hưởng. Tuy ưu điểm của bus bất đồng bộ rất rõ ràng, nhưng trong thực tế phần lớn các bus đang sử dụng là loại đồng bộ. Nguyên nhân là các hệ thống sử dụng bus đồng bộ dễ thiết kế hơn. Vi xử lý chỉ cần chuyển các mức tín hiệu cần thiết sang trạng thái tích cực là bộ nhớ đáp ứng ngay, không cần tín hiệu phản hồi. Chỉ cần các chọn phù hợp thì mọi hoạt động đều trôi chảy, không cần phải bắt tay. 3.4. Xử lý ngắt Ở trên, ta chỉ khảo sát các chu kỳ bus thông thường, trong đó master nhận hay gởi thông tin từ / đến slave. Một ứng dụng quan trọng nữa của bus là dùng để xử lý ngắt. Khi CPU ra lệnh cho thiết bị I/O làm một việc gì đó, nó thường chờ đợi tín hiệu ngắt do thiết bị I/O phát ra khi hoàn thành công việc được CPU yêu cầu. Khi nhận được tín hiệu ngắt, CPU sẽ đáp ứng ngay, có thể nhận dữ liệu do thiết bị I/O truyền về, hay gởi tiếp dữ liệu ra thiết bị I/O, hay CPU sẽ sử dụng bus cho một thao tác khác…. Như vậy chính ngắt phát ra tín hiệu yêu cầu sử dụng bus. Vì có thể nhiều thiết bị ngoại vi cùng phát ra ngắt, cho nên cần có 1 cơ chế phân xử giống như đối với các bus thông thường. Giải pháp thường dùng là gán các mức độ ưu tiên cho các thiết bị và sử dụng 1 arbiter tập trung để trao quyền ưu tiên cho các thiết bị quan trọng thường xuyên được sử dụng. Hiện trên thị trường có những chip điều khiển ngắt được tiêu chuẩn hóa và được sử dụng rộng rãi là chip 8259A. Có thể nối 8 chip điều khiển I/O tới các đầu IRx (Interrupt request) của 8259A. Khi có 1 thiết bị nào đó muốn ngắt, nó đặt mức tích cực lên chân Irx, 8259A nhận được tín hiệu tích cực ở 1 hay một số Phạm Hùng Kim Khánh Trang 12
  • 13. Tài liệu Lập trình hệ thống Chương 1 đầu vào Irx thì sẽ đặt mức tích cực lên đầu dây INT. Tín hiệu INT sẽ truyền trực tiếp đến chân Interrupt của CPU. Khi CPU có thể xử lý được ngắt, nó gởi lại 1 tín hiệu chấp nhận ngắt cho 8259A. Lúc này, CPU chờ 8259A chỉ ra I/O nào yêu cầu ngắt, bằng cách gởi số hiệu của I/O đó lên bus dữ liệu (D0-D7) để đi đến CPU. Sau đó, phần cứng CPU sẽ sử dụng con số đó để tính chỉ số trong 1 bảng con trỏ -bảng vector ngắt (interrupt vector) để tìm địa chỉ chương trình con, cho chạy chương trình này để phục vụ ngắt. Các chương trình con này gọi là chương trình con xử lý ngắt. 4. Các chip hỗ trợ cho bộ xử lý trung tâm 4.1. Mạch tạo xung clock 8284 CSYNC VCC 18 PCLK X1 AEN1 X2 RDY1 ASYNC READY EFI RD2 F/C AEN2 OSC CLK RES GND RESET 8284 123456789 17 16 15 14 13 12 11 10 Hình 1.9 – Mạch tạo xung clock 8284 PCLK (Peripheral Clock): xung clock f = fX/6 (fX là tần số thạch anh) với chu kỳ bổn phận 50%. CSYNC (Clock Synchronisation): ngõ vào xung đồng bộ chung khi hệ thống có các 8284 dùng dao động ngoài tại chân EFI. Khi dùng mạch dao động trong thì phải nối GND. AEN1 , AEN2 (Address Enable): cho phép chọn các chân tương ứng RDY1, RDY2 báo hiệu trạng thái sẵn sàng của bộ nhớ hay thiết bị ngoại vi. RDY1, RDY2 (Bus ready): kết hợp với AEN1, AEN2 tạo các chu kỳ đợi ở CPU READY: nối đến chân READY của μP. CLK (Clock): xung clock f = fX/3, nối với chân CLK của CPU. RESET: nối với chân RESET của CPU, là tín hiệu khởi động lại toàn hệ thống. RES (Reset Input): chân khởi động cho 8284, được nối với mạch RC để tự khởi động khi bật nguồn. OSC: ngõ ra xung clock có tần số fX. F/C (Frequency / Crystal): chọn nguồn tín hiệu chuẩn cho 8284, nếu ở mức cao thì chọn tần số xung clock bên ngoài, ngược lại thì dùng xung clock từ thạch anh. EFI (External Frequency Input): xung clock từ bộ dao động ngoài. Phạm Hùng Kim Khánh Trang 13
  • 14. Tài liệu Lập trình hệ thống Chương 1 ASYNC : chọn chế độ làm việc cho tín hiệu RDY. Nếu ASYNC = 1, tín hiệu RDY có ảnh hưởng đến tín hiệu READY cho đến khi có xung âm của xung clock. Ngược lại thì RDY chỉ ảnh hưởng khi xuất hiện xung âm. X1,X2: ngõ vào của thạch anh, dùng để tạo xung chuẩn cho hệ thống. CSYNC PCLK AEN1 RDY1 READY VCC X1 X2 ASYNC EFI F/C OSC RES RESET GND 8284 123456789 18 17 16 15 14 13 12 11 10 RD2 AEN2 CLK + Hình 1.10 – Mạch khởi động cho 8284 Vcc 4.2. Mạch định thời PIT – 8253 / 8254 (Programmable Interval Timer) 20 A0 OUT0 19 A1 10 OUT1 13 OUT2 17 D0 8 D1 7 D2 6 D3 5 D4 4 3 D5 D6 2 D7 1 G0 11 G1 14 G2 16 9 15 CLK0 CLK1 CLK2 18 RD 22 WR 23 CS 21 8253 Hình 1.11 – Sơ đồ chân của PIT 8253 Phạm Hùng Kim Khánh Trang 14
  • 15. Tài liệu Lập trình hệ thống Chương 1 Bộ đếm 0 Bộ đếm 1 Bộ đếm 2 BUS NỘI Hình 1.12 – Sơ đồ khối của PIT 8253 Đệm dữ liệu Điều khiển đọc/ghi Thanh ghi từ điều khiển D7 ÷ D0 RD WR A1 A0 CS OUT0 CLK0 GATE0 OUT1 CLK1 GATE1 OUT2 CLK2 GATE2 D7 ÷ D0: bus dữ liệu CLK0 ÷ CLK2: ngõ vào xung clock cho các bộ đếm OUT0 ÷ OUT2: ngõ ra bộ đếm RD , WR: cho phép CPU đọc / ghi dữ liệu từ / đến các thanh ghi của 8253 A1, A0: giải mã chọn bộ đếm hay thanh ghi điều khiển, thường được nối với bus địa chỉ của CPU A1 A0 Chọn 0 0 Bộ đếm 0 0 1 Bộ đếm 1 1 0 Bộ đếm 2 1 1 Thanh ghi từ điều khiển G0 ÷ G2 (Gate): cho phép hay cấm các bộ đếm hoạt động ( =1: cho phép, =0: cấm). PIT 8253 có tất cả 5 chế độ đếm tùy thuộc vào giá trị trong thanh ghi điều khiển. Phạm Hùng Kim Khánh Trang 15
  • 16. Tài liệu Lập trình hệ thống Chương 1 SC1 Chọn bộ đếm 00: bộ đếm 0 01: bộ đếm 1 10: bộ đếm 2 11: đọc CWR trong 8254 Quy định phương thức đọc/ghi 00: chốt bộ đếm 01: đọc/ghi byte thấp 10: đọc/ghi byte cao 11: đọc/ghi byte thấp trước, byte cao sau SC0 RW1 RW0 M2 M1 M0 BCD Định dạng đếm 0: đếm nhị phân 1: đếm BCD (0 ÷ 999) Chế độ đếm 000: chế độ 0 001: chế độ 1 010: chế độ 2 011: chế độ 3 100: chế độ 4 101: chế độ 5 Hình 1.13 – Dạng từ điều khiển của 8253 PIT 8253 có 3 bộ đếm lùi 16 bit có thể lập trình và độc lập với nhau. Mỗi bộ đếm có tín hiệu xung clock riêng (8254 tương tự như 8253 nhưng có thêm lệnh đọc thanh ghi từ điều khiển CWR). ™ Các chế độ đếm: Chế độ 0 (Interrupt on Terminal Count): tín hiệu ngõ ra ở mức thấp cho tới khi bộ đếm tràn thì sẽ chuyển lên mức cao. Chế độ 1 (Programmable Monoflop): tín hiệu ngõ ra chuyển xuống mức thấp tại cạnh âm của xung clock đầu tiên và sẽ chuyển lên mức cao khi bộ đếm kết thúc. Chế độ 2 (Rate Generator): tín hiệu ngõ ra xuống mức thấp trong chu kỳ đầu tiên và sau đó chuyển lên mức cao trong các chu kỳ còn lại. Chế độ 3 (Square-Wave Generator): tương tự như chế độ 2 nhưng xung ngõ ra là sóng vuông khi giá trị đếm chẵn và sẽ thêm một chu kỳ ở mức cao khi giá trị đếm lẻ. Chế độ 4 (Software-triggered Pulse): giống như chế độ 2 nhưng xung Gate không khởi động quá trình đếm mà sẽ đếm ngay khi số đếm ban đầu được nạp. Ngõ ra ở mức cao để đếm và xuống mức thấp trong chu kỳ xung đếm. Sau đó, ngõ ra sẽ trở lại mức cao. Chế độ 5 (Hardware-triggered Pulse): giống như chế độ 2 nhưng xung Gate không khởi động quá trình đếm mà được khởi động bằng cạnh dương của xung clock ngõ vào. Ngõ ra ở mức cao và xuống mức thấp sau một chu kỳ clock khi quá trình đếm kết thúc. Phạm Hùng Kim Khánh Trang 16
  • 17. Tài liệu Lập trình hệ thống Chương 1 ™ Ba chức năng của 8253 trong PC: Cập nhật đồng hồ hệ thống: bộ đếm 0 của PIT phát tuần hoàn một ngắt cứng qua IRQ0 của 8259 để CPU có thể thay đổi đồng hồ hệ thống. Bộ đếm hoạt động trong chế độ 2. Ngõ vào được cấp xung clock tần số 1.19318 MHz. G0 = 1 để bộ đếm luôn được phép đếm. Giá trị ban đầu được nạp là 0 cho phép PIT phát ra xung chính xác với tần số:1.19318/65536 = 18.206Hz. Cạnh dương của mỗi xung này sẽ tạo ra một ngắt cứng trong 8259. Yêu cầu này sẽ dẫn tới ngắt 08h để cập nhật đồng hổ hệ thống 18.206 lần trong 1 giây. Làm tươi bộ nhớ: PIT nối với chip DMAC dùng làm tươi bộ nhớ DRAM. Bộ đếm 1 sẽ định kỳ kích hoạt kênh 0 của DMAC-8237A để tiến hành 1 chu trình đọc giả làm tươi bộ nhớ. Bộ nhớ 1 hoạt động trong chế độ 3 phát sóng vuông với giá trị nạp ban đầu là 18. Do đó sóng vuông được phát ra có tần số 1,19318 MHz/18 = 66288 Hz (chu kỳ bằng 0.015s). Như vậy cứ sau 15 ms cạnh dương của sóng vuông này sẽ tạo 1 chu kỳ đọc giả để làm tươi bộ nhớ. Phát sóng âm với tần số biến đổi ra loa của PC: Bộ đếm 2 của PIT được dùng để phát sóng âm ra loa của PC. 4.3. Mạch điều khiển bus 8288 Mạch điều khiển bus 8288 lấy một số tín hiệu điều khiển của CPU và cung cấp các tín hiệu điều khiển cần thiết cho hệ vi xử lý. IOB VCC 20 CLK S0 S1 S2 DT/R MCE/PDEN ALE DEN AEN CEN MRDC INTA AMWC IORC MWTC AIOWC 8288 123456789 19 18 17 16 15 14 13 12 11 10 IOWC GND Hình 1.14 – Mạch điều khiển bus 8288 IOB (Input / Output Bus Mode): điều khiển để 8288 làm việc ở các chế độ bus khác nhau. CLK (Clock): ngõ vào lấy từ xung clock hệ thống (từ 8284) và dùng để đồng bộ toàn bộ các xung điều khiển đi ra từ mạch 8288. DT/ R (Data Transmit/Receive): CPU truyền (1) hay nhận (0) dữ liệu. ALE (Address Latch Enable): tín hiệu cho phép chốt địa chỉ, tín hiệu này thường được nối với chân G của 74573 để điếu khiển chốt địa chỉ. AEN (Address Enable): chờ thời gian trễ khoảng 150 ns sẽ tạo các tín hiệu điều khiển ở đầu ra của 8288 để đảm bảo rằng địa chỉ sử dụng đã hợp lệ. S2 , S1 , S0 : các tín hiệu trạng thái lấy trực tiếp từ CPU. Tuỳ theo các giá trị nhận được mà 8288 sẽ đưa các tín hiệu theo bảng: Phạm Hùng Kim Khánh Trang 17
  • 18. Tài liệu Lập trình hệ thống Chương 1 S2 S1 S0 Tạo tín hiệu 0 0 0 INTA 0 0 1 IORC 0 1 0 IOWC, AIOWC 0 1 1 Không 1 0 0 MRDC 1 0 1 MRDC 1 1 0 MWTC, AMWC 1 1 1 Không MRDC (Memory Read Command): điều khiển đọc bộ nhớ MWTC (Memory Write Command): điều khiển ghi bộ nhớ AMWC (Advanced MWTC),: giống như MWTC nhưng hoạt động sớm hơn một chút dùng cho các bộ nhớ chậm đáp ứng kịp tốc độ CPU. IOWC (I/O Write Command): điều khiển ghi ngoại vi AIOWC (Advanced IOWC),: giống như IOWC nhưng hoạt động sớm hơn một chút dùng cho các ngoại vi chậm đáp ứng kịp tốc độ CPU. IORC (I/O Read Command): điều khiển đọc ngoại vi INTA (Interrupt Acknowledge): ngõ ra thông báo CPU chấp nhận yêu cầu ngắt của thiết bị ngoại vi CEN (Command Enable): cho phép đưa ra tín hiệu DEN và các tín hiệu điều khiển khác của 8288. DEN (Data Enable): điều khiển bus dữ liệu thành bus cục bộ hay bus hệ thống. MCE / PDEN (Master Cascade Enable / Peripheral Data Enable): định chế độ làm việc cho mạch điều khiển ngắt PIC 8259 để nó làm việc ở chế độ master. Phạm Hùng Kim Khánh Trang 18
  • 19. Tài liệu Lập trình hệ thống Chương 1 4.4. Chip điều khiển ngắt ưu tiên PIC 8259A (Priority Interrupt Controller) IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 A0 INTA CAS0 CAS1 CAS2 RD WR SP/EN 8259A 11 10 987654 18 19 20 21 22 23 24 25 27 26 32 1 12 13 15 16 17 D0 D1 D2 D3 D4 D5 D6 D7 CS INT Hình 1.15 – Sơ đồ chân của 8259A Trong trường hợp nhiều yêu cầu ngắt cần phải phục vụ, ta thường dùng vi mạch 8259A để giải quyết vấn đề ưu tiên. 8259A có thể giải quyết được 8 yêu cầu ngắt với 8 mức ưu tiên khác nhau. ™ Các khối chức năng: IRR (thanh ghi yêu cầu ngắt): lưu trữ các yêu cầu ngắt tại ngõ vào ISR (thanh ghi phục vụ ngắt): lưu trữ các yêu cầu ngắt đang phục vụ IMR (thanh ghi mặt nạ ngắt): lưu trữ mặt nạ của các yêu cầu ngắt tại ngõ vào Control logic (logic điều khiển): gởi yêu cầu ngắt tới chân INTR của CPU khi có tín hiệu ngắt tại ngõ vào của 8259A và nhận trả lời chấp nhận yêu cầu ngắt hay không INTA từ CPU để đưa kiểu ngắt vào CPU. Data bus buffer (đệm bus dữ liệu): giao tiếp giữa 8259A với bus dữ liệu của CPU. Cascade buffer / comparator (đệm nối tầng và so sánh): lưu trữ và so sánh số hiệu của các kiểu ngắt trong trường hợp dùng nhiều mạch 8259A. Phạm Hùng Kim Khánh Trang 19
  • 20. Tài liệu Lập trình hệ thống Chương 1 Data bus buffer Read / Write Logic Cascade buffer / comparator ISR (Interrupt Service Register) INTERNAL BUS Hình 1.16 – Sơ đồ khối của PIC 8259A ™ Các tín hiệu điều khiển: INTA INT Control logic PR (Priority Resolver) IRR (Interrupt Request Register) IMR (Interrupt Mask Register) IR0 IR1 IR7 CAS0 ÷ 2 (In, Out): các ngõ vào chọn mạch 8259A tớ (slave) từ mạch 8259A chủ RD WR A0 CS CAS0 CAS1 CAS2 SP / EN (master) trong trường hợp dùng nhiều mạch 8259A để tăng yêu cầu ngắt. SP / EN (In, Out) (Slave Program / Enable Buffer): nếu 8259A hoạt động ở chế độ không dùng đệm dữ liệu thì tín hiệu này dùng để xác định mạch 8259A là mạch chủ (SP = 1) hay tớ (SP = 0). Nếu 8259A hoạt động ở chế độ có đệm dữ liệu thì tín hiệu này dùng để cho phép giao tiếp giữa 8259A và CPU, khi đó mạch 8259A là master hay slave phải dựa vào từ lệnh khởi động ICW4. INT (Out): tín hiệu yêu cầu ngắt đưa đến CPU (chân INTR). INTA (In): nhận trả lời chấp nhận ngắt hay không từ CPU (chân INTA) A0: cho phép chọn các từ điều khiển của 8259A. 8259A cho phép xử lý 8 ngắt với 8 mức ưu tiên khác nhau. Trong trường hợp hệ thống có số lượng ngắt lớn hơn thì có thể mắc nhiều 8259A liên tầng. Phạm Hùng Kim Khánh Trang 20
  • 21. Tài liệu Lập trình hệ thống Chương 1 D0 D1 D2 D3 D4 D5 D6 D7 A0 CS RD WR SP/EN INT INTA IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 CAS0 CAS1 CAS2 8259A - Master 11 10 987654 27 132 16 17 26 18 19 20 21 22 23 24 25 12 13 15 Vcc Hình 1.17 – 8259A mắc liên tầng D0 D1 D2 D3 D4 D5 D6 D7 A0 CS RD WR SP/EN INT INTA IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 CAS0 CAS1 CAS2 8259A - Slave 11 10 987654 27 132 16 17 26 18 19 20 21 22 23 24 25 12 13 15 40 39 38 37 36 35 34 33 32 GND VCC AD14 AD15 AD13 A16/S3 AD12 A17/S4 AD11 A18/S5 AD10 A19/S6 AD9 BHE/S7 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND RESET MN/MX RD 10 11 HOLD (RQ/GT0) 12 HLDA (RQ/GT1) 13 WR (LOCK) 14 IO/M (S2) 15 DT/R (S1) 16 DEN (S0) 17 ALE (QS0) 18 INTA (QS1) 19 TEST 20 READY 21 8086 123456789 31 30 29 28 27 26 25 24 23 22 4.5. Chip điều khiển truy nhập bộ nhớ trực tiếp DMAC 8237 (Direct Memory Access Controller) DMAC 8237 có thể thực hiện truyền dữ liệu theo 3 kiểu: kiểu đọc (từ bộ nhớ ra thiết bị ngoại vi), kiểu ghi (từ thiết bị ngoại vi đến bộ nhớ) và kiểu kiểm tra. A0 A1 A2 A3 A4 A5 A6 A7 CLK DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DAK0 DAK1 DAK2 DAK3 19 18 17 16 MEMR MEMW DRQ0 DRQ1 DRQ2 DRQ3 EOP IOR IOW HLDA READY RESET CS 8237 30 29 28 27 26 23 22 21 25 24 14 15 34 98 10 32 33 34 35 37 38 39 40 12 36 7 12 6 13 11 5 AEN ASTB HRQ VX Phạm Hùng Kim Khánh Trang 21
  • 22. Tài liệu Lập trình hệ thống Chương 1 Timing and control Priority encoder and rotating prority logic Decrementor Temp word count register Incrementor Temp address register I/O buffer Output buffer Bus 16 bit Read buffer Base address Base word count R/W buffer Current address Current word count Write buffer Read buffer Command control A8 – A15 D0 – D1 A0 – A3 A4 – A7 Command I/O buffer Mask Request RD R/W Mode Status Temp Hình 1.18 – Sơ đồ chân và sơ đồ khối của DMAC 8237A ™ Khối Timing and Control (định thời và điều khiển): DACK0 – DACK3 DB0 – DB7 Tạo các tín hiệu định thời và điều khiển cho bus ngoài (external bus). Các tín hiệu EOP RESET CS READY CLK AEN ADSTB MEMW MEMR IOW IOR DRQ0 – DRQ3 HLDA HRQ này được đồng bộ với xung clock đưa vào DMAC (tần số xung clock tối đa là 5 MHz). ™ Khối Priority encoder and rotating priority logic (mã hóa ưu tiên và quay mức ưu tiên): DMAC 8237A có 2 mô hình ưu tiên: mô hình ưu tiên cố định (fixed priority) và mô hình ưu tiên quay (rotating priority). Trong mô hình ưu tiên cố định, kênh 0 sẽ có mức ưu tiên cao nhất còn kênh 3 có mức ưu tiên thấp nhất. Còn đối với mô hình ưu tiên quay thì mức ưu tiên khi khởi động giống như mô hình ưu tiên cố định nhưng khi yêu cầu DMA tại một kênh nào đó được phục vụ thì sẽ được đặt xuống mức ưu tiên thấp nhất. ™ Khối Command Control (điều khiển lệnh): Giải mã các thanh ghi lệnh (xác định thanh ghi sẽ được truy xuất và loại hoạt động cần thực hiện). Phạm Hùng Kim Khánh Trang 22
  • 23. Tài liệu Lập trình hệ thống Chương 1 ™ Các thanh ghi: DMAC 8237A có tất cả 12 loại thanh ghi nội khác nhau: Tên Kích thước (bit) Số lượng Thanh ghi địa chỉ cơ sở (Base Address Register) Thanh ghi đếm từ cơ sở (Base Word Count Register) Thanh ghi địa chỉ hiện hành (Current Address Register) Thanh ghi đếm từ hiện hành (Current Word Count Register) Thanh ghi địa chỉ tạm (Temporary Address Register) Thanh ghi đếm từ tạm (Temporary Word Count Register) Thanh ghi trạng thái (Status Register) Thanh ghi lệnh (Command Register) Thanh ghi tạm (Temporary Register) Thanh ghi chế độ (Mode Register) Thanh ghi mặt nạ (Mask Register) Thanh ghi yêu cầu (Request Register) 16 16 16 16 16 16 8 8 8 6 4 4 4 4 4 4 1 1 1 1 1 4 1 1 ™ Chức năng các chân của 8237A: CLK (Input): tín hiệu xung clock của mạch. Tín hiệu này thường được lấy từ 8284 sau khi qua cổng đảo. CS (Input): thường được nối với bộ giải mã địa chỉ. RESET (Input): khởi động 8237A, được nối với ngõ RESET của 8284. Khi Reset thì thanh ghi mặt nạ được lập còn các phần sau bị xóa: + Thanh ghi lệnh + Thanh ghi trạng thái + Thanh ghi yêu cầu + Thanh ghi tạm + Flip-flop đầu/cuối (First/Last flip-flop) READY (Input): nối với READY của CPU để tạo chu kỳ đợi khi truy xuất các thiết bị ngoại vi hay bộ nhớ chậm. HLDA (Hold Acknowledge)(Input): tín hiệu chấp nhận yêu cầu treo từ CPU DRQ0 – DRQ3 (DMA Request)(Input): các tín hiệu yêu cầu treo từ thiết bị ngoại vi. DB0 – DB7 (Input, Output): nối đến bus địa chỉ và dữ liệu của CPU Phạm Hùng Kim Khánh Trang 23
  • 24. Tài liệu Lập trình hệ thống Chương 1 IOR , IOW (Input, Output): sử dụng trong các chu kỳ đọc và ghi EOP (End Of Process)(Input,Output): bắt buộc DMAC kết thúc quá trình DMA nếu là ngõ vào hay dùng để báo cho một kênh biết là dữ liệu đã chuyển xong (Terminal count – TC), thường dùng như yêu cầu ngắt để CPU kết thúc quá trình DMA. A0 – A3 (Input, Output): chọn các thanh ghi trong 8237A khi lập trình hay dùng để chứa 4 bit địa chỉ thấp. A4 – A7 (Output): chứa 4 bit địa chỉ HRQ (Hold Request)(Output): tín hiệu yêu cầu treo đến CPU DACK0 – DACK3 (DMA Acknowledge)(Output): tín hiệu trả lời yêu cầu DMA cho các kênh. AEN (Output): cho phép lấy địa chỉ vùng nhớ cần trao đổi ADSTB (Address Strobe)(Output): chốt các bit địa chỉ cao A8 – A15 chứa trong các chân DB0 – DB7 MEMR, MEMW (Output): dùng để đọc / ghi bộ nhớ. ™ Các thanh ghi nội: Các thanh ghi nội trong DMAC 8237A được truy xuất nhờ các bit địa chỉ thấp A0 – A3. Bit địa chỉ A3 A2 A1 A0 Địa chỉ Chọn chức năng R/W? 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 XA XB XC XD XE XF Thanh ghi địa chỉ bộ nhớ kênh 0 Thanh ghi đếm từ kênh 0 Thanh ghi địa chỉ bộ nhớ kênh 1 Thanh ghi đếm từ kênh 1 Thanh ghi địa chỉ bộ nhớ kênh 2 Thanh ghi đếm từ kênh 2 Thanh ghi địa chỉ bộ nhớ kênh 3 Thanh ghi đếm từ kênh 3 Thanh ghi trạng thái / lệnh Thanh ghi yêu cầu Thanh ghi mặt nạ cho một kênh Thanh ghi chế độ Xóa flip-flop đầu/cuối Xóa toàn bộ các thanh ghi / đọc thanh ghi tạm Xóa thanh ghi mặt nạ Thanh ghi mặt nạ R/W R/W R/W R/W R/W R/W R/W R/W R/W W W W W W/R W W Phạm Hùng Kim Khánh Trang 24
  • 25. Tài liệu Lập trình hệ thống Chương 1 Địa chỉ các thanh ghi nội dùng ghi / đọc địa chỉ: Kênh IOR IOW A3 A2 A1 A0 Thanh ghi R/W? 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 Địa chỉ cơ sở và địa chỉ hiện hành Địa chỉ hiện hành Bộ đếm cơ sở và bộ đếm hiện hành Bộ đếm hiện hành W R W R 1 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 Địa chỉ cơ sở và địa chỉ hiện hành Địa chỉ hiện hành Bộ đếm cơ sở và bộ đếm hiện hành Bộ đếm hiện hành W R W R 2 1 0 1 0 0 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 Địa chỉ cơ sở và địa chỉ hiện hành Địa chỉ hiện hành Bộ đếm cơ sở và bộ đếm hiện hành Bộ đếm hiện hành W R W R 3 1 0 1 0 0 1 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 Địa chỉ cơ sở và địa chỉ hiện hành Địa chỉ hiện hành Bộ đếm cơ sở và bộ đếm hiện hành Bộ đếm hiện hành W R W R Địa chỉ các thanh ghi trạng thái và điều khiển: IOR ` IOW A3 A2 A1 A0 Thanh ghi 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 1 1 Ghi thanh ghi lệnh Đọc thanh ghi trạng thái Ghi thanh ghi yêu cầu Ghi thanh ghi mặt nạ Ghi thanh ghi chế độ Xóa flip-flop đầu/cuối Xóa tất cả các thanh ghi nội 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 Địa chỉ cơ sở và địa chỉ hiện hành Địa chỉ hiện hành Bộ đếm cơ sở và bộ đếm hiện hành Bộ đếm hiện hành Mạch 8273A-5 chứa 4 kênh trao đổi dữ liệu DMA với mức ưu tiên lập trình được. 8237A-5 có tốc độ truyền 1 MBps cho mỗi kênh và 1 kênh có thể truyền 1 mảng có độ dài 64 KB. Để có thể sử dụng mạch DMAC 8237A, ta cần tạo tín hiệu điều khiển như sau: Phạm Hùng Kim Khánh Trang 25
  • 26. Tài liệu Lập trình hệ thống Chương 1 Vcc 1A 1B 2A 2B 3A 3B 4A 4B G A/B 1Y 2Y 3Y 4Y 74LS257 2356 11 10 14 13 15 1 4 7 9 12 RD WR AEN IO/M IOR IOW MEMR MEMW Hình 1.19 – Tín hiệu điều khiển cho hệ thống làm việc với DMAC 8237A Tín hiệu AEN từ 8237A dùng để cấm các tín hiệu điều khiển từ CPU khi DMAC đã nắm quyền điều khiển bus. 4.6. Chip điều khiển màn hình CRTC 6845 (Cathode Ray Tube Controller) RST (Reset): khởi động lại 6845. MA0 ÷ MA13 (Memory Address): 14 địa chỉ nhớ cho RAM màn hình. DE (Display Enable): cho phép (=1) hay không (=0) các tín hiệu điều khiển và địa chỉ vùng hiện lên màn hình. LPSTD (Light Pen Strobe): lưu trữ địa chỉ hiện hành của RAM màn hình trong thanh ghi bút sáng. CPU đọc thanh ghi và xác định vị trí bút sáng trên màn hình. CURSOR: vị trí con trỏ đã quét (=1) hay chưa (=0). RA0 RA1 RA2 RA3 RA4 CURSOR D0 D1 D2 D3 D4 D5 D6 D7 LPSTD RST 6845 456789 10 11 12 13 14 15 16 17 38 37 36 35 34 19 33 32 31 30 29 28 27 26 21 23 32 24 22 25 18 39 40 MA0 MA1 MA2 MA3 MA4 MA5 MA6 MA7 MA8 MA9 MA10 MA11 MA12 MA13 CLK E RS R/W CS DE HS VS Hình 1.20 – Sơ đồ chân của 6845 Phạm Hùng Kim Khánh Trang 26
  • 27. Tài liệu Lập trình hệ thống Chương 1 VS (Vertical Synchronization): ngõ ra tín hiệu đồng bộ quét dọc HS (Horizontal Synchronization): ngõ ra tín hiệu đồng bộ quét ngang RA0 ÷RA4 (Row Address): phân định hàng quét của ký tự trong chế độ văn bản (32 hàng quét). Trong chế độ đồ họa, chúng kết hợp với MA0 ÷ MA13 tạo các địa chỉ cho các bank RAM màn hình. D0 ÷ D7: đường dữ liệu. CS : chọn chip. RS (Regigter Select): chọn thanh ghi địa chỉ (=0) hay thanh ghi dữ liệu (=1). E: xung âm kích hoạt bus dữ liệu và dùng như xung clock cho 6845 đọc / ghi dữ liệu vào các thanh ghi bên trong. R/W : đọc / ghi dữ liệu vào các thanh ghi. CLK: dùng đồng bộ với tín hiệu của màn hình và thường bằng tốc độ hiện ký tự trên màn hình. 4.7. Chip đồng xử lý toán học 8087/80287/80387 (Mathematical co-processor) Các bộ đồng xử lý toán 80x87 hỗ trợ CPU trong việc tính toán các biểu thức dùng dấu chấm động như cộng, trừ, nhân, chia các số dấu chấm động, căn thức, logarit, … Chúng cho phép xử lý các phép toán này nhanh hơn nhiều so với CPU. Thời gian xử lý giữa 8087 và 8086 như sau (dùng xung clock 8 MHz): Phép toán 8087 [μs] 8086 [μs] Cộng / trừ 10.6 1000 Nhân 11.9 1000 Chia 24.4 2000 Căn bậc hai 22.5 12250 Tang 56.3 8125 Lũy thừa 62.5 10680 Lưu trữ 13.1 750 ™ 8087: 8087 gồm một đơn vị điều khiển (CU – Control Unit) dùng để điều khiển bus và một đơn vị số học (NU – Numerical Unit) để thực hiện các phép toán dấu chấm động trong các mạch tính lũy thừa (exponent module) và mạch tính phần định trị (mantissa module). Khác với 8086, thay vì dùng các thanh ghi rời rạc là một ngăn xếp thanh ghi. Phạm Hùng Kim Khánh Trang 27
  • 28. Tài liệu Lập trình hệ thống Chương 1 Đơn vị điều khiển nhận và giải mã lệnh, dọc và ghi các toán hạng, chạy các lệnh điều khiển riêng của 8087. Do đó, CU có thể đồng bộ với CPU trong khi NU đang thực hiện các công việc tính toán. CU bao gồm bộ điều khiển bus, bộ đệm dữ liệu và hàng lệnh. CU - Control Unit NU - Numerical Unit Từ điều khiển Từ trạng thái Đệm dữ liệu Điều khiển bus Bộ điều khiển số Module lũy thừa Từ thẻ Thanh ghi Hình 1.21 – Sơ đồ khối của 8087 INT (8259) IRx (8259) AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 CLK BUSY QS0 QS1 READY RQ/GT0 RQ/GT1 RST BHE/S7 8087 16 15 14 13 12 11 10 9 19 23 25 24 22 31 33 21 34 8765432 39 38 37 36 35 26 27 28 32 AD8 AD9 AD10 AD11 AD12 AD13 AD14 AD15 A16/S3 A17/S4 A18/S5 A19/S6 S0 S1 S2 INT 16 15 14 13 12 11 10 9 19 18 33 17 22 31 30 21 23 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 CLK INTR MX NMI READY RQ/GT0 RQ/GT1 RST TEST Hình 1.22 – Sơ đồ kết nối 8087 và CPU 8086 Module định trị ngăn xếp Bus dữ liệu Địa chỉ trạng thái CLK (8284) 8086 8765432 39 38 37 36 35 26 27 28 34 29 25 24 32 AD8 AD9 AD10 AD11 AD12 AD13 AD14 AD15 A16/S3 A17/S4 A18/S5 A19/S6 S0 S1 S2 BHE/S7 LOCK QS0 QS1 RD Phạm Hùng Kim Khánh Trang 28
  • 29. Tài liệu Lập trình hệ thống Chương 1 Ngăn xếp thanh ghi có tất cả 8 thanh ghi từ R0 ÷ R7, mỗi thanh ghi dài 80 bit trong đó bit 79 là bit dấu, bit 64 ÷ 78 dùng cho số mũ và phần còn lại là phần định trị. Dữ liệu truyền giữa các thanh ghi này được thực hiện rất nhanh do 8087 có độ rộng bus dữ liệu là 84 bit và không cần phải biến đổi định dạng. Ngay sau khi reset PC, bộ đồng xử lý kiểm tra xem nó có được nối với PC hay không bằng các đường BHE /S7. 8087 sẽ điều chỉnh độ dài của hàng lệnh cho phù hợp với CPU (nếu dùng 8086 thì độ dài là 6 byte). 8087 có một thanh ghi trạng thái là thanh ghi từ thẻ (tag word) gồm các cặp bit Tag0 ÷ Tag7 để lưu trữ các thông tin liên quan đến nội dung của các thanh ghi R0 ÷ R7 để cho phép thực hiện một số tác vụ nhanh hơn. Mỗi thanh ghi từ thẻ có 2 bit xác định 4 giá trị khác nhau của các thanh ghi Ri. Tag = 00: xác định Tag = 01: zero Tag = 10: NAN, giá trị bất thường Tag = 11: rỗng ™ 80287: S0 S1 CLK CLK286 CMD0 CMD1 COD/INTA CKM HLDA NPS1 NPS2 NPRD NPWR PEACK READY RESET 80287 23 22 21 20 19 18 17 16 15 14 12 11 8765 26 25 24 21 32 37 29 31 3 39 38 34 33 27 28 36 40 35 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 ERROR BUSY PEREQ S0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 CAP CLK BUSY ERROR HOLD INTR NMI PEREQ READY 80286 36 38 40 42 44 46 48 50 37 39 41 43 45 47 49 51 52 31 54 53 64 57 59 61 63 29 RST S1 Hình 1.23 – Sơ đồ kết nối giữa 80286 và 80287 S0 S1 S0 13 S1 X1 X2 ARDY AYEN EFI F/C RES SRDY SYEN CLK PCLK READY RESET 82284 15 16 78 1 17 5 6 11 23 10 4 12 82288 19 3 18 2 15 14 76 1 13 12 11 89 5 16 17 4 S0 S1 M/IO CLK CEN/AEN CENL CMDLY MB READY INTA IORC IOWC MRDC MWTC ALE DEN DT/R MCE 34 33 32 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 87 54 1 66 65 68 67 6 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 BHE COD/INTA HLDA LOCK M/IO PEACK S0 S1 S0 13 S1 X1 X2 ARDY AYEN EFI F/C RES SRDY SYEN 82284 15 16 78 1 17 5 6 11 23 10 4 12 CLK PCLK READY RESET Phạm Hùng Kim Khánh Trang 29 S0 S0 S1 S1
  • 30. Tài liệu Lập trình hệ thống Chương 1 Do 80286 có chế độ mạch bảo vệ nên mạch ghép nối giữa 80286 và 80287 được thiết kế khác 8087 ở đơn vị điều khiển CU. Bộ đồng xử lý ở đây không thực hiện truy xuất bộ nhớ trực tiếp. Để truy xuất được bộ nhớ, 80287 không những cần một đơc vị định địa chỉ đơn giản của nó mà còn phải được tăng cường thêm chức năng quản lý bộ nhớ của 80286. Cấu trúc bên trong của 80287 cũng tương tự như 8087, chỉ có đơn vị bus thay đổi cho phù hợp với 80286. Khác vơi 8087, 80287 hoạt động không đồng bộ với CPU nên có thể dùng xung clock riêng. ™ 80387: Ưu điểm của 80387 so với 80287 là có thể thực hiện các phép toán số học nhanh hơn. No có bus dữ liệu 32 bit như CPU và sử dụng công nghệ CMOS nên công suất tiêu thụ thấp hơn. 5. Bộ thanh ghi μP 8086/8088 có tất cả 14 thanh ghi nội. Các thanh ghi này có thể phân loại như sau: - Thanh ghi dữ liệu (data register) - Thanh ghi chỉ số và con trỏ (index & pointer register) - Thanh ghi đoạn (segment register) - Thanh ghi trạng thái và điều khiển (status & control register) 5.1. Các thanh ghi dữ liệu Các thanh ghi dữ liệu gồm có các thanh ghi 16 bit AX, BX, CX và DX trong đó nửa cao và nửa thấp của mỗi thanh ghi có thể định địa chỉ một cách độc lập. Các nửa thanh ghi này (8 bit) có tên là AH và AL, BH và BL, CH và CL, DH và DL. Các thanh ghi này được sử dụng trong các phép toán số học và logic hay trong quá trình chuyển dữ liệu. Bảng 2.8: Thanh ghi Sử dụng trong AX MUL, IMUL (toán hạng nguồn kích thước word) DIV, IDIV (toán hạng nguồn kích thước word) IN (nhập word) OUT (xuất word) CWD Các phép toán xử lý chuỗi (string) AL MUL, IMUL (toán hạng nguồn kích thước byte) DIV, IDIV (toán hạng nguồn kích thước byte) IN (nhập byte) OUT (xuất byte) XLAT AAA, AAD, AAM, AAS (các phép toán ASCII) CBW (đổi sang word) Phạm Hùng Kim Khánh Trang 30
  • 31. Tài liệu Lập trình hệ thống Chương 1 DAA, DAS (số thập phân) Các phép toán xử lý chuỗi (string) AH MUL, IMUL (toán hạng nguồn kích thước byte) DIV, IDIV (toán hạng nguồn kích thước byte) CBW (đổi sang word) BX XLAT CX LOOP, LOOPE, LOOPNE Các phép toán string với tiếp dầu ngữ REP CL RCR, RCL, ROR, ROL (quay với số đếm byte) SHR, SAR, SAL (dịch với số đếm byte) DX MUL, IMUL (toán hạng nguồn kích thước word) DIV, IDIV (toán hạng nguồn kích thước word) AX (ACC – Accumulator): thanh ghi tích luỹ BX (Base): thanh ghi cơ sở CX (Count): đếm DX (Data): thanh ghi dữ liệu 5.2. Các thanh ghi chỉ số và con trỏ Bao gồm các thanh ghi 16 bit SP, BP, SI và DI, thường chứa các giá trị offset (độ lệch) cho các phần tử định địa chỉ trong một phân đoạn (segment). Chúng có thể được sử dụng trong các phép toán số học và logic. Hai thanh ghi con trỏ (SP – Stack Pointer và BP – Base Pointer) cho phép truy xuất dễ dàng đến các phần tử đang ở trong ngăn xếp (stack) hiện hành. Các thanh ghi chỉ số (SI – Source Index và DI – Destination Index) được dùng để truy xuất các phần tử trong các đoạn dữ liệu và doạn thêm (extra segment). Thông thường, các thanh ghi con trỏ liên hệ đến đoạn stack hiện hành và các thanh ghi chỉ số liên hệ đến doạn dữ liệu hiện hành. SI và DI dùng trong các phép toán chuỗi. 5.3. Các thanh ghi đoạn Bao gồm các thanh ghi 16 bit CS (Code segment), DS (Data segment), SS (stack segment) và ES (extra segment), dùng để định địa chỉ vùng nhớ 1 MB bằng cách chia thành 16 đoạn 64 KB. Tất cả các lệnh phải ở trong đoạn mã hiện hành, được định địa chỉ thông qua thanh ghi CS. Offset (độ lệch) của mã được xác định bằng thanh ghi IP. Dữ liệu chương trình thường được đặt ở đoạn dữ liệu, định vị thông qua thanh ghi DS. Stack định vị thông qua thanh ghi SS. Thanh ghi đoạn thêm có thể sử dụng để định địa chỉ các toán hạng, dữ liệu, bộ nhớ và các phần tử khác ngoài đoạn dữ liệu và stack hiện hành. 5.4. Các thanh ghi điều khiển và trạng thái Thanh ghi con trỏ lệnh IP (Instruction Pointer) giống như bộ đếm chương trình (Program Counter). Thanh ghi điều khiển này do BIU quản lý nhằm lưu trữ offset từ bắt đầu đoạn mã đến lệnh thực thi kế tiếp. Ta không thể xử lý trực tiếp trên thanh ghi IP. Phạm Hùng Kim Khánh Trang 31
  • 32. Tài liệu Lập trình hệ thống Chương 1 Thanh ghi cờ (Flag register) hay từ trạng thái 16 bit chứa 3 bit điều khiển (TF, IF và DF) và 6 bit trạng thái (OF, SF, ZF, AF, PF và CF) còn các bit còn lại mà 8086/8088 không sử dụng thì không thể truy xuất được. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 X X X X OF DF IF TF SF ZF X AF X PF X CF - OF (Overflow - tràn): OF = 1 xác định tràn số học, xảy ra khi kết quả vượt ra ngoài phạm vi biểu diễn - DF (Direction- hướng): xác định hướng chuyển string, DF = 1 khi μP làm việc với string theo thứ tự từ phải sang trái. - IF (Interrupt - ngắt): cho phép hay cấm các interrupt có mặt nạ - TF (Trap - bẫy): đặt μP vào chế độ từng bước, dùng cho các chương trình gỡ rối (debugger). - SF (Sign - dấu): dùng để chỉ các kết quả số học là số dương (SF = 0) hay âm (SF = 1). - ZF (Zero): = 1 nếu kết quả của phép toán trước là 0. - AF (Auxiliary – nhớ phụ): dùng trong các số thập phân để chỉ nhớ từ nửa byte thấp hay mượn từ nửa byte cao. - PF (Parity): PF = 1 nếu kết quả của phép toán là có tổng số bit 1 là chẵn (dùng để kiểm tra lỗi truyền dữ liệu) - CF (Carry): CF = 1 nếu có nhớ hay mượn từ bit cao nhất của kết quả. Cờ này cũng dùng cho các lệnh quay. Phạm Hùng Kim Khánh Trang 32