TRƯỜNG ĐẠI HỌC KỸ THUẬT
KHOA CÔNG NGHỆ THÔNG TIN
WX
LUẬN VĂN TỐT NGHIỆP
Đề tài:
Thiết kế, thi công và viết chương trình điều khiển
mạch thực hành cho Z80 CPU.
Giao tiếp với máy tính qua ngõ máy in. WX WX
3
MỤC LỤC
Mở đầu ...............................................................................................................trang 4
) Chương I Phân tích yêu cầu
1.1 Phân tích yêu cầu.........................................................................................trang 5
1.2 Phương hướng giải quyết vấn đề ................................................................trang 5
) Chương II Thiết kế phần cứng
z 2.1. Phân tích các chức năng của cổng ghép nối với máy in........................trang 8
z 2.2. Kiến trúc Z80 CPU. .................................................................................trang 10
4
Lời nói đầu
Sự phát triển đi lên vượt bậc của ngành kỹ thuật máy tính và điện tử hiện nay đã được minh
chứng cụ thể qua cuộc sống hằng ngày của chúng ta trong tất cả các lónh vực.
Việc ứng dụng máy vi tính vào kỹ thuật đo lường và điều khiển đã đem lại những kết quả đầy
tính ưu việt. Các thiết bò, hệ thống đo lường và điều khiển ghép nối với máy tính có độ chính xác
cao, thời gian thu thập số liệu ngắn, nhưng đáng quan tâm hơn là mức độ tự động hoá trong việc
thu nhận và xử lý dữ liệu.
Kỹ thuật số ra đời đã khắc phục được các khuyết điểm của kỹ thuật tương tự, làm cho các bộ
phận máy móc trở nên đơn giản, gọn nhẹ, ít tốn kém năng lượng và xử lý thông tin nhanh, chính
xác hơn so với kỹ thuật tương tự.
Tuy vậy, nếu sử dụng các bộ điều khiển dùng các IC số chúng vẫn còn mắc một số khuyết
điểm mà so với kỹ thuật vi xử lý nó vẫn tồn tại như:
- Kích thước lớn.
- Năng lượng tiêu thụ lớn.
- Tính mềm dẽo thấp, khó thay đổi.
- Khó sửa chữa, bảo trì.
Vi xử lý là một vi mạch điện tử có mật độ tích hợp cao, trong đó gồm các mạch số có khả
năng nhận, xử lý và xuất dữ liệu. Đặc biệt là quá trình xử lý dữ liệu được điều khiển theo một
chương trình gồm tập hợp các lệnh từ bên ngoài mà người sử dụng có thể thay đổi được một cách
dễ dàng. Một vi xử lý có thể thực hiện rất nhiều yêu cầu điều khiển khác nhau.
Kỹ thuật vi xử lý ra đời với sự kết hợp giữa phần cứng và phần mềm đã làm cho hoạt động
của các mạch điện trở nên mềm dẽo hơn với những phần mềm rất linh hoạt mà ta có thể sửa
chữa, thay đổi hoặc bổ sung làm cho chương trình điều khiển thêm phong phú tùy theo nhu cầu
của người sử dụng.
Kỹ thuật vi xử lý có tính phức tạp trong hoạt động, thiết kế nhưng lại rất kinh tế vì giá thành
hạ và kích thước chiếm chỗ không nhiều, có dung lượng cao. Ngoài ra về mặt kỹ thuật cũng hơn
hẳn kỹ thuật số vì quá trình hoạt động rất mềm dẽo, tốc độ xử lý cao và lại có thể mở rộng tính
Z80 CPU là một vi xử lý 8 bit của hãng ZILOG được thiết kế để có thể làm việc một cách độc
lập, có thể giao tiếp với các bộ xử lý khác thông qua các thiết bò ngoại vi.
Đặc điểm chung:
- Data bus: 8 bits.
- Addr bus: 16 bits.
- Tập thanh ghi được phân thành 3 loại:
. Tập thanh ghi chính (8 bit).
. Tập thanh ghi phụ (8 bit).
. Tập thanh ghi chuyên dụng (16 bits)
- Tập lệnh CPU Z80 có thể chia làm nhiều nhóm khác nhau theo nhiều cách. Ở đây
có thể chia thành 4 nhóm sau:
. Nhóm lệnh xử lý dữ kiện.
. Nhóm lệnh truyền dữ kiện.
. Nhóm lệnh kiểm soát chương trình.
. Nhóm lệnh kiểm soát trạng thái.
Phần mô tả chi tiết Z80 CPU sẽ được nói kỹ trong chương II.
1.2. Phương hướng giải quyết vấn đề.
1.2.1. Giao tiếp giữa PC & KIT Z80.
Để có thể thực hiện việc giao tiếp giữa máy tính và một KIT Z80 có thể dùng một trong hai
phương pháp sau: 6
Phương pháp thứ nhất: Thực hiện việc bắt tay giữa máy tính và KIT Z80 khi thao tác truyền
dữ liệu. Muốn thực hiện được điều này thì máy tính và KIT Z80 sẽ ở trong trạng thái sẵn sàng
hoạt động trước khi thực hiện thao tác bắt tay để truyền dữ liệu. Như vậy trên KIT Z80 sẽ có một
cho Z80 CPU nên trong phần thiết kế đã cố gắng tránh can thiệp nhiều vào Z80 CPU. Để Z80
CPU có thể chạy được ở chế độ Debug chỉ cần lấy tín hiệu CSROM và M1 để điều khiển quá
trình. Như vậy, có thể dùng KIT để làm 1 bộ mô phỏng ( simulator) cho các thiết kế khác có sử
dụng Z80 CPU. Sơ đồ khối như sau :
KIT Z80 bất kỳ
Simulator
Rom
chương
trình
WX WX
7
8
Chương II. Thiết kế phần cứng
2.1. Phân tích các chức năng của cổng ghép nối với máy in.
Sự sắp xếp các chân ra ở cổng máy in với tất cả các đường dẫn được mô tả trên hình 2.1.
Chân Ký hiệu Vào/Ra Mô tả
1 STB Output Bit 0 của thanh ghi điều khiển
2 D0 Output Đường dữ liệu D0
3 D1 Output Đường dữ liệu D1
4 D2 Output Đường dữ liệu D2
5 D3 Output Đường dữ liệu D3
6 D4 Output Đường dữ liệu D4
7 D5 Output Đường dữ liệu D5
8 D6 Output Đường dữ liệu D6
9 D7 Output Đường dữ liệu D7
10 ACK Input Bit 6 của thanh ghi trạng thái
11 BUSY Input Bit 7 của thanh ghi trạng thái
12 PE Input Bit 5 của thanh ghi trạng thái
13 SLCT Input Bit 4 của thang ghi trạng thái
14 AF Output Bit 1 của thanh ghi điều khiển
15 ERROR Input Bit 3 của thanh ghi trạng thái
D4 (pin 6)
D5 (pin 7)
D6 (pin 8)
D7 (pin 9)
Thanh ghi trạng thái (Đòa chỉcơ bản + 1)
D7 D6 D5 D4 D3 0 0 0
ERROR (pin 15)
SLCT (pin 13)
PE (pin 12)
ACK (pin 10)
BUSY (pin 11)
Thanh ghi điều khiển (Đòa chỉ cơ bản + 2)
D7 D6 D5 D4 D3 D2 D1 D0
STB (pin 1)
AF (pin 14)
INIT (pin 16)
SLCTIN (pin 17)
IRQ-Enable
Hình 2.2. Thanh ghi ở cổng máy in của máy tính PC.
Đòa chỉ đầu tiên đạt đến được của cổng máy in được xem như là đòa chỉ cơ bản. Ở các máy
tính PC đòa chỉ cơ bản của cổng máy in được sắp xếp như sau:
LPT1 (Cổng máy in thứ nhất) => Đòa chỉ cơ bản = 378H
Hoặc là 3BCH ở máy Laptop
LPT2 (Cổng máy in thứ hai) => Đòa chỉ cơ bản = 278H
Đòa chỉ cơ bản đồng nhất với thanh ghi dữ liệu. Thanh ghi trạng thái có đòa chỉ = đòa chỉ cơ bản
+ 1. Cần chú ý rằng mức logic của BUSY (chân 11) được sắp xếp ngược với bit D7 của thanh ghi
hệ thống
& CPUThanh ghi
Kiểm soát đòa chỉ
Bus đòa chỉ 16 bitsHình 1-1: Sơ đồ khối Z80 CPU.
Sơ đồ khối của kiến trúc bên trong Z80 CPU được cho trong hình 1-1. Sơ đồ này trình bày tất cả
các phần tử chính trong CPU và nó sẽ được xem xét kỹ qua các phần mô tả sau.
2.2.2. Các thanh ghi của CPU.
Z80 CPU chứa một bộ nhớ R/W 208 bit. Bộ nhớ này có thể được truy xuất bởi người lập trình.
Hình 1-2 cho thấy bộ nhớ này được cấu tạo bởi 8 thanh ghi 8 bit và 4 thanh ghi 16 bit. Tất cả các
thanh ghi của Z80 CPU đều dùng RAM tónh. Cc thanh ghi bao gồm 2 tập 6 thanh ghi đa dụng,
tập các thanh ghi này có thể được sử dụng độc lập như là các thanh ghi 8 bit hoặc từng cặp như
là các thanh ghi 16 bit. Có hai tập ( chính và phụ) thanh ghi tích lũy, thanh ghi cờ và sáu thanh
ghi đặc biệt.
Tập các thanh ghi đặc biệt.
Program Counter (PC): giữ đòa chỉ mười sáu bit của lệnh hiện tại đang được lấy về từ bộ
cho mục đích kiểm tra, nhưng thanh ghi này thì thường không được người lập trình dùng. Trong
thời gian làm tươi, nội dung của thanh ghi I được đặt lên 8 bit cao của bus đòa chỉ.
Thanh ghi tích lũy và thanh ghi cờ: CPU bao gồm hai thanh ghi tích lũy độc lập và được kết
hợp với các thanh ghi cờ 8 bit. Thanh ghi tích lũy lưu giữ kết quả của phép toán logic và số học
trong khi thanh ghi cờ cho biết các điều kiện xác đònh khi thực hiện các phép toán 8 bit hay 16 bit
như là cho biết kết quả của 1 phép tính có bằng 0 hay không. Người lập trình lựa chọn thanh ghi
tích lũy và thanh ghi cờ với 1 lệnh hoán chuyển đơn vì có thể làm việc với một trong hai cặp.
Các thanh ghi đa dụng: Có 2 tập đối xứng các thanh ghi đa dụng. Mỗi tập chứa 6 thanh ghi 8
bit hay như cặp thanh ghi 16 bit. Tập thứ nhất được gọi là BC, DE và HL trong khi tập lệnh tương
ứng được gọi là BC’, DE’ và HL’. Trong bất kỳ thời điểm nào người lập trình có thể chọn 1 trong
các tập thanh ghi để làm việc qua 1 lệnh hoán chuyển đơn. Trong các hệ thống yêu cầu đáp ứng
ngắt nhanh, một tập của tập thanh ghi đa dụng và một thanh ghi cờ /tích lũy có thể được dự trữ
để giải quyết chương trình rất nhanh này. Chỉ cần một lệnh đơn giản được thực thi để chạy giữa
các chương trình. Điều này thu giảm thời gian phục vụ ngắt do việc loại bỏ yêu cầu cất và khôi
phục nội dung thanh ghi ở ngăn xếp trong thời gian ngắt hay xử lý chương trình con. Các thanh
ghi đa dụng này được dùng cho nhiều ứng dụng bởi người lập trình.
Thanh ghi tích lũy
A
Thanh ghi cờ
F
Thanh ghi tích lũy A’ Thanh ghi
cờ F’
B C B’ C’
11
D E D’ E’
Thanh ghi
đa dụng
Dòch trái, dòch phải hay quay ( Số học và logic)
Phép toán tăng
Phép toán giảm
Set bit
Reset bit
Test bit
2.2.4. Điều khiển CPU và thanh ghi lệnh.
Mỗi 1 lệnh được lấy về từ bộ nhớ, nó được đặt vào trong thanh ghi lệnh và được giải mã. Các
phần điều khiển thi hành chức năng này, phát và cấp các tín hiệu điều khiển cần thiết để đọc
hoặc ghi data từ (hoặc đến) các thanh ghi, điều khiển ALU và đáp ứng các yêu cầu của tín hiệu
điều khiển bên ngoài.
2.2.5. Chức năng các chân của Z80.
a. Giới thiệu.
Sơ đồ các chân của Z80 CPU được mô tả trong hình sau : Z80 CPU
A0
30
D0
14
D1
15
D2
12
D3
8
D4
7
D5
9
D6
10
D7
13
/M1
27
/MREQ
19
/IORQ
20
/RD
21
/WR
22
/RFSH
28
/HALT
18
Mạch ngoài có thể dùng những đường này ngay lúc này.
• /BUSREQ: Bus request (input, active low) bus request có độ ưu tiên cao hơn /NMI và nó luôn
được nhận diện vào cuối chu kỳ máy hiện tại. /Busreq đòi hỏi address bus, data bus và các tín
hiệu điều khiển: /MREQ, /IORQ, /RD, /WR phải ở trạng thái trở kháng cao để các thiết bò
khác có thể điều khiển các đường này. Bus request thường được nối vào cổng OR và yêu cầu
điện trở kéo lên bên ngoài cho các ứng dụng kiểu này.
• D7 ÷ D0: Data bus (input / output, active high, 3 trạng thái) D7 ÷ D0 tạo thành data bus 8 bit
hai chiều, sử dụng để trao đổi data với bộ nhớ và I/O.
• /HALT: Halt (output, active low) báo rằng CPU đang thực thi 1 lệnh Halt và sẽ chờ 1 trong
hai tín hiệu: /NMI hoặc /INT (với mask cho phép) trước khi sự điều khiển được khôi phục.
Trong thời gian Halt, CPU thực thi các lệnh NOP để duy trì việc làm tươi bộ nhớ.
• /INT: Interrup request (input, active low) Interrup request được thiết bò I/O phát ra. CPU chấp
nhận yêu cầu ngắt tại thời điểm cuối của lệnh hiện tại nếu được phần mềm cho phép. /INT
thường được nối vào các cổng OR và cần một trở kéo lên cho các ứng dụng loại này.
• /IORQ: Input/ Output Request (output, active low, 3 trạng thái) báo nửa thấp của address bus
giữ 1 đòa chỉ I/O hợp lệ cho hoạt động đọc hay ghi I/O. /IORQ cũng được phát đồng thời với
/M1 trong 1 chu kỳ công nhận ngắt để báo rằng 1 vertor đáp ứng ngắt có thể được đặt lên
data bus.
• /M1: Machine cycle one (output, active low) /M1 cùng với /MREQ báo rằng chu kỳ máy hiện
tại là chu kỳ lấy mã lệnh. /M1 cùng với /IORQ báo cho biết rằng đang ở chu kỳ công nhận
ngắt.
• /MREQ: Memory request (output, active low, 3 trạng thái) /MREQ báo rằng address bus
đang giữ một đòa chỉ hợp lệ cho việc đọc ghi bộ nhớ.
• /NMI: Non Maskable Interrup (input, tích cực cạnh xuống) /NMI có độ ưu tiên cao hơn /INT.
/NMI luôn luôn được chấp nhận tại chu kỳ cuối của lệnh hiện hành, độc lập với trạng thái của
Flip-Flop interrupt và tự động đưa CPU đến vò trí 0066h.
• /RD: Read (output, active low, 3 trạng thái) báo rằng CPU muốn đọc data từ bộ nhớ hay thiết
bò I/O. Thiết bò I/O được chỉ đònh hay bộ nhớ sẽ dùng tín hiệu này để đưa data lên data bus.
• /RESET: Reset (input, active low) /RESET khởi động CPU như sau: reset IFF1 & IFF2 xóa
PC và các thanh ghi I & R, đặt trạng thái interrupt đến chế độ 0. Trong thời gian reset, addr
chúng có thể có từ 3 đến 5 chu kỳ T (trừ khi bò kéo dài bởi trạng thái Wait để đồng bộ với tốc
độ thiết bò bên ngoài). Đoạn sau đây mô tả việc đònh thời (xảy ra trong bất kỳ chu kỳ máy nào).
Trong khoảng thời gian T
2
và mỗi T
W
sau đó, CPU lấy mẫu đường Wait tại sườn xuống của xung
clock. Nếu đường Wait được tích cực tại thời điểm này, một trạng thái Wait khác sẽ được thêm
vào trong chu kỳ sau. Dùng kỹ thuật này thì việc đọc có thể kéo dài để phù hợp với thời gian
truy xuất của bất kỳ kiểu thiết bò bộ nhớ nào. Chu kỳ T
/Clk
T1 T2 T3 T4 T1 T2 T3 T1 T2 T3
Chu kỳ máy M1
Đọc bộ nhớ M2
Chu kỳ lệnh
Hình 3 -1 : Giản đồ thời gian cơ bản
Ghi bộ nhớ M3
c. Đọc và ghi bộ nhớ.
/RFSH
D7÷D0
/M1
/WAIT
/RD
/MREQ
A15÷A0
Refresh address
PC
T1 T2
T3
T4 T1
Chu kỳ M1
Hình 3-2: Chu kỳ đọc ghi bộ nhớ.
MEMORY ADDR
D7÷D0
/WAIT
/RD
/MREQ
A15÷A0
MEMORY ADDR
T1 T2
T3
T1 T2
Chu kỳ đọc bộ nhớ
/Clk
I
T3
/WR
DATA OUT
D7÷D0
Hình 3-4: Chu kỳ xuất / nhập.
D7÷D0
/WAIT
/RD
/IORQ
A15÷A0
PORT ADDRESS
T1 T2
TW
T3 T1
/Clk
IN
/WR
/BUSACK
Hình 3-5: CHU KỲ BUS REQ/ACK
D7÷D0
/MERQ
/RD, /WR
/IORQ
/RFSH
/BUSRQ
A15÷A0
Trạng thái
T cuối
Tx Tx
/Clk
CHU KỲ M BẤT KỲ
/MREQ
REFRESH
/IORQ
Hình 3-6: CHU KỲ NGẮT REQ/ACK
/M1
Trạng thái
T cuối
T2 Tw’
/Clk
CHU KỲ M CUỐI LỆNH
/MREQ
REFRESH
/RD
Hình 3-7 : Giản đồ thời gian của NMI.
/M1
Trạng thái
T cuối
T2 T3
/Clk
CHU KỲ M CUỐI LỆNH
Hình 3-8: Thoát khỏi trạng thái HALT
/HALT
T2 T3
/Clk
M
1
T4 T1
M1
T1
/INT
HAY
/NMI
M1
được đưa vào để thoát khỏi trạng thái power-down.
/HALT
/Clk
T1
T2
T3
T4
T1
/M1
Hình 3-10: Power – Down Release Cycle No.1
/NMI
/HALT
/Clk
/M1
Hình 3-11: Power – Down Release Cycle No.2
/RESET
25
2.2.7.TẬP LỆNH Z80 CPU.
a. Giới thiệu.
Z80 CPU có thể thực thi 158 lệnh khác nhau bao gồm cả 78 lệnh của 8080A CPU. Các lệnh có
thể được chia thành các nhóm chính sau :
• Load và Exchange
• Block transfer và Search
• Arithmetic và Logical
• Rotate và shift
• Bit manipulation ( set, reset, test )
• Jump, call, và Return
• Input hay Out put
• Basic CPU control
b. Các kiểu lệnh.
Lệnh Load chuyển data giữa các thanh ghi CPU với nhau và giữa thanh ghi CPU với bộ nhớ
ngoài. Tất cả các lệnh phải xác đònh nguồn và đích. Ví dụ như việc truyền data từ thanh ghi C
đến thanh ghi B. Nhóm này bao gồm cả Load tức thời tới thanh ghi CPU hoặc bộ nhớ ngoài bất
kỳ. Các kiểu khác của lệnh Load cho phép truyền giữa các thanh ghi CPU và bộ nhớ. Lệnh
exchange có thể chuyển nội dung của hai thanh ghi.
Một tập duy nhất của nhóm lệnh truyền khối được cung cấp bên trong Z80. Với một lệnh đơn
giản, một khối bộ nhớ với kích thước bất kỳ có thể được chuyển đến vò trí khác trong bộ nhớ. Các
lệnh chuyển khối có lợi khi phải xử lý một chuỗi dữ liệu lớn. Với 1 lệnh đơn, khối bộ nhớ ngoài
với chiều dài tùy thích có thể tìm được 1 ký tự 8 bit bất kỳ. Khi ký tự được tìm thấy hay gặp cuối
khối , lệnh sẽ tự động chấm dứt. Cả hai lệnh chuyển và tìm khối đều có thể bò ngắt trong lúc thực
thi do đó không chiếm giữ CPU trong chuỗi thời gian dài.