Tài liệu Đồ án Giới thiệu về hệ vi xử lý: PHẦN I: Giới thiệu về Hệ vi xử lý
I. Sơ lược về Hệ thống Vi xử lý:
Hệ thống Vi xử lý bao gồm: bộ xử lý trung tâm (CPU: Central Processing Unit), bộ nhớ và bộ giao tiếp thiết bị ngoại vi. Các khối này liên lạc với nhau thông qua các bus địa chỉ, bus dữ liệu và bus điều khiển.
Bộ xử lý trung tâm
CPU
Bộ nhớ
(Memory)
ROM-RAM
Bộ giao tiếp
vào ra
(I/O)
Các thiết bị
vào ra
Bus địa chỉ
Bus điều khiển
Bus dữ liệu
Sơ đồ khối của một hệ Vi xử lý
Chức năng của từng khối:
1. Khối xử lý trung tâm (CPU:Central Processing Unit):
Là khối quan trọng nhất và được xem là bộ não của cả hệ thống. Các hệ Vi xử lý, các máy tính sử dụng các bộ Vi xử lý làm đơn vị trung tâm xử lý dữ liệu (CPU). CPU điều khiển tất cả các linh kiện còn lại trong hệ thống thông qua mã lệnh. CPU có rất nhiều chức năng như thực hiện giao tiếp với bên ngoài, thực hiện các phép toán ...
41 trang |
Chia sẻ: hunglv | Lượt xem: 1243 | Lượt tải: 1
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Giới thiệu về hệ vi xử lý, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
PHẦN I: Giới thiệu về Hệ vi xử lý
I. Sơ lược về Hệ thống Vi xử lý:
Hệ thống Vi xử lý bao gồm: bộ xử lý trung tâm (CPU: Central Processing Unit), bộ nhớ và bộ giao tiếp thiết bị ngoại vi. Các khối này liên lạc với nhau thông qua các bus địa chỉ, bus dữ liệu và bus điều khiển.
Bộ xử lý trung tâm
CPU
Bộ nhớ
(Memory)
ROM-RAM
Bộ giao tiếp
vào ra
(I/O)
Các thiết bị
vào ra
Bus địa chỉ
Bus điều khiển
Bus dữ liệu
Sơ đồ khối của một hệ Vi xử lý
Chức năng của từng khối:
1. Khối xử lý trung tâm (CPU:Central Processing Unit):
Là khối quan trọng nhất và được xem là bộ não của cả hệ thống. Các hệ Vi xử lý, các máy tính sử dụng các bộ Vi xử lý làm đơn vị trung tâm xử lý dữ liệu (CPU). CPU điều khiển tất cả các linh kiện còn lại trong hệ thống thông qua mã lệnh. CPU có rất nhiều chức năng như thực hiện giao tiếp với bên ngoài, thực hiện các phép toán số học-logic, vận chuyển số liệu, xuất kết quả, điều khiển giao tiếp với các thiết bị khác.
2. Bộ nhớ (Memory):
Có vai trò quan trọng trong một hệ vi xử lý, là nơi lưu trữ chương trình điều khiển, các dữ liệu, kết quả trung gian trong qúa trình tính toán, xử lý. Được chia thành hai loại:
- ROM (Read Only Memory): chứa chương trình điều khiển của hệ thống, các dữ liệu nạp trong ROM không bị xóa đi khi hệ Vi xử lý hoạt động và không bị mất đi khi hệ thống bị mất nguồn điện cung cấp.
- RAM (Random Access Memory): khi hệ Vi xử lý hoạt động thì chương trình hệ thống sẽ thiết lập trong RAM những vùng nhớ cần thiết cho hoạt động của hệ thống để chứa một phần chương trình ứng dụng và các kết quả của chương trình.
3. Khối giao tiếp vào-ra (I/O Interface):
Đây là chiếc cầu nối giữa CPU với thế giới bên ngoài. Một hệ thống Vi xử lý muốn đưa dữ liệu ra để điều khiển các thiết bị bên ngoài hoặc muốn nhận các dữ liệu từ bên ngoài vào để xử lý thì phải thông qua bộ giao tiếp vào ra. Các bộ giao tiếp còn được gọi là các bộ xử lý ngoại vi (PPU: Peripheral Processing Unit).
4. Hệ thống Bus:
Hệ thống các Bus (nhóm nhiều dây hay tín hiệu có cùng chức năng liên lạc) đảm bảo cho sự liên lạc được thông suốt giữa CPU, các bộ nhớ và bộ giao tiếp ngoại vi.
Có ba loại bus:
- Bus địa chỉ (address bus): dùng để xác định vị trí, dò tìm thông tin trên bộ nhớ, bộ giao tiếp ngoại vi, chỉ có một chiều là truyền từ CPU ra.
- Bus dữ liệu (data bus): được nối song song từ CPU ra các bộ nhớ và bộ giao tiếp ngoại vi. Bus này là hai chiều nhưng tại một thời điểm chỉ là thu hoặc phát thông tin.
- Bus điều khiển (control bus): là bus chỉ định cho nhiều động tác khác nhau. CPU dùng để điều khiển trạng thái các linh kiện bên ngoài. Mỗi đường trong Control bus chỉ là hoặc ra hoặc vào đối với CPU.
II. Giới thiệu về Vi xử lý:
Vi xử lý là một vi mạch điện tử có mật độ tích hợp cao, trong đó bao gồm các vi mạch số có khả năng nhận, xử lý và xuất dữ liệu. Vi xử lý có chức năng hoạt động như là một đơn vị xử lý trung tâm (CPU - Central Processing Unit) trong máy tính số. Hoạt động chính của Vi xử lý là xử lý dữ liệu, quá trình này đượ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 tùy theo yêu cầu của công việc. Một Vi xử lý có khả năng hiểu và thực hiện rất nhiều yêu cầu điều khiển khác nhau một cách chính xác trong thời gian rất ngắn. Vi xử lý phải nằm trong một Hệ thống Vi xử lý thì nó mới phát huy được tác dụng, có nghĩa là Vi xử lý phải được kết nối với các mạch điện bên ngoài và các thiết bị giao tiếp khác.
Chức năng chính của Vi xử lý là xử lý dữ liệu. Để thực hiện được công việc này, Vi xử lý phải có các mạch logic cho việc xử lý, điều khiển dữ liệu và các mạch logic điều khiển khác. Các mạch logic sẽ chuyển dữ liệu từ nơi này đến nơi khác và thực hiện các phép toán trên dữ liệu còn mạch điều khiển sẽ quyết định mạch điện nào cho việc xử lý dữ liệu. Các công việc mà Vi xử lý thực hiện được điều khiển bằng một hay nhiều lệnh. Tập hợp các lệnh để thực hiện xong một yêu cầu đặt ra được gọi là một chương trình.
Quá trình thực hiện một lệnh của Vi xử lý là đầu tiên Vi xử lý sẽ đón lệnh từ bộ nhớ, sau đó các mạch logic điều khiển sẽ giải mã lệnh nhằm xác định xem lệnh này yêu cầu Vi xử lý thực hiện công việc gì, cuối cùng Vi xử lý sẽ thực hiện đúng công việc của các lệnh đã yêu cầu.
III. Cấu trúc và hoạt động của Vi xử lý:
1. Cấu trúc cơ bản của một Vi xử lý:
Một Vi xử lý về cơ bản gồm có ba khối chức năng: Đơn vị thực thi, bộ điều khiển tuần tự và bus giao tiếp.
Data Register
Address Register
ALU
Instruction Decoder
Program Counter
Control Logic
Sơ đồ khối cấu trúc cơ bản của một Vi xử lý.
2. Các đặc điểm bên trong của Vi xử lý:
a. Chiều dài từ dữ liệu:
Đặc điểm quan trọng nhất của Vi xử lý là chiều dài từ dữ liệu. Vi xử lý đầu tiên có chiều dài từ dữ liệu là 4 bit, các Vi xử lý sau này có chiều dài từ dữ liệu là 8 bit, 16 bit, 32 bit và 64 bit. Độ dài của từ dữ liệu nói lên tốc độ làm việc và khả năng truy xuất bộ nhớ của Vi xử lý. Nếu Vi xử lý có chiều dài từ dữ liệu lớn thì tốc độ xử lý công việc nhanh và khả năng truy xuất bộ nhớ lớn, được dùng trong các công việc xử lý dữ liệu, điều khiển phức tạp. Nếu Vi xử lý có chiều dài từ dữ liệu nhỏ hơn thì sẽ có tốc độ xử lý công việc chậm hơn và khả năng truy xuất bộ nhớ cũng bị hạn chế hơn, được dùng trong các công việc điều khiển và xử lý đơn giản. Các Vi xử lý 8 bit như: 8080A, 8085A của Intel; MC6800, MC6802 của Motorola; Z80 của Zilog; TMS9985 của Texas Instrument; ... Các Vi xử lý 16 bit như 8086, 8088 của Intel; MC68000 của Motorola; Z8000 của Zilog; ...
b. Độ dài từ địa chỉ:
Dung lượng bộ nhớ mà Vi xử lý có thể truy xuất là một phần trong cấu trúc của Vi xử lý. Để truy xuất được bộ nhớ thì Vi xử lý phải biết được địa chỉ của từng ô nhớ cụ thể, địa chỉ của ô nhớ được xác định bằng từ địa chỉ. Độ dài của từ địa chỉ cho biết số lượng ô nhớ mà Vi xử lý có thể liên hệ trực tiếp, độ dài của các thanh ghi rất cần thiết cho việc định địa chỉ cũng phải có khả năng tương ứng.
c. Tốc độ làm việc:
Tần số xung clock cung cấp cho Vi xử lý làm việc quyết định tốc độ làm việc của Vi xử lý, tốc độ này được cho bởi nhà chế tạo. Tốc độ xung clock càng cao thì Vi xử lý làm việc với tốc độ càng lớn và khả năng xử lý lệnh càng nhanh.
d. Các thanh ghi:
Trong cấu trúc củaVi xử lý, các thanh ghi giữ một vai trò quan trọng, chúng được dùng để xử lý dữ liệu. Có nhiều loại thanh ghi trong Vi xử lý với các chức năng khác nhau, số lượng thanh ghi đóng vai trò rất quan trọng đối với Vi xử lý và người lập trình. Nếu Vi xử lý có số lượng thanh ghi càng nhiều thì người lập trình có thể viết các chương trình điều khiển Vi xử lý đơn giản hơn bởi việc sử dụng các thanh ghi được linh động và đa dạng, điều này làm tăng tốc độ và khả năng xử lý chương trình của Vi xử lý.
e. Tập lệnh:
Bất kì một Vi xử lý nào muốn hoạt động được thì phải có tập lệnh. Do cấu tạo phần cứng khác nhau nên mỗi Vi xử lý có tập lệnh khác nhau. Tập lệnh của Vi xử lý là một trong những yếu tố cơ bản để đánh giá tốc độ làm việc của Vi xử lý. Nếu Vi xử lý có nhiều mạch điện logic bên trong để thực hiện thì số lượng lệnh điều khiển của Vi xử lý càng nhiều, khi đó Vi xử lý càng lớn và độ phức tạp càng lớn. Tập lệnh của Vi xử lý càng nhiều thì rất có ích cho người lập trình khi viết chương trình điều khiển cho Vi xử lý.
3. Vi xử lý 8 bit:
Mỗi loại Vi xử lý sẽ có cấu trúc khác nhau nhưng thường có các khối chính như sau:
- Khối đơn vị số học/logic (ALU - Arithmetic Logic Unit).
- Các thanh ghi (Registers).
- Khối điều khiển logic (Control Logic).
Chức năng và nguyên lý hoạt động của các khối như sau:
a. Khối Đơn vị số học-logic (ALU - Arithmetic Logic Unit):
Đây là khối quan trọng nhất của Vi xử lý, khối này chứa các mạch điện logic có chức năng chính là làm thay đổi dữ liệu. ALU có hai ngõ vào là IN, đó chính là các ngõ vào dữ liệu cho ALU xử lý và một ngõ ra OUT là ngõ ra kết quả dữ liệu đã được ALU xử lý. Dữ liệu trước khi đưa vào ALU được chứa ở thanh ghi đệm là TEMP1 và TEMP2. Thông thường, ALU luôn lấy dữ liệu từ một thanh ghi đặc biệt có tên gọi là Bộ tích lũy (Accumulator). Ngõ ra OUT cho phép ALU có thể gởi dữ liệu đã được xử lý lên bus dữ liệu bên trong Vi xử lý, do đó thiết bị nào kết nối với bus đều có thể nhận dữ liệu này, thường thì ALU gởi dữ liệu đã được xử lý tới Bộ tích lũy. Khối ALU có thể thực hiện các phép tính và xử lý sau:
Add Subtract And Or Exclusive Or
Shift right Shift left Increment Decrement Complement
Control
logic
Memory Address
Register
High | Low
SP
PC
Accumulator
(A)
Status
Register
Register B
Register C
Register D
Register E
Register H
Register L
TEMP1
TEMP2
8 bit
Data
Bus
16 bit
Address Bus
8-bit internal data bus
External input & output
control lines
IN
IN
OUT
ALU
Instruction
Register
Instruction
Decoder
Sơ đồ khối của một Vi xử lý 8 bit.
b. Các thanh ghi (Registers):
Các thanh ghi cơ bản luôn có trong một Vi xử lý là A, PC, SP, F, các thanh ghi thông dụng là B, C, D, E, thanh ghi lệnh, thanh ghi địa chỉ.
Thanh ghi A (Accumulator): hay bộ tích lũy, đây là thanh ghi quan trọng của Vi xử lý, nó có chức năng là lưu trữ dữ liệu khi tính toán. Hầu hết các phép tính logic và số học đều diễn ra giữa thanh ghi này và ALU. Nó có chức năng quan trọng khác là truyền dữ liệu từ ô nhớ hay từ các thanh ghi bên trong ra các thiết bị ngoại vi.
Thanh ghi PC (Program Counter): hay bộ đếm chương trình, là thanh ghi cơ bản của Vi xử lý. Chức năng của thanh ghi PC là quản lý lệnh đang thực hiện và lệnh sẽ được thực hiện tiếp theo. Trước khi Vi xử lý thực hiện một chương trình thì thanh ghi PC phải được nạp một con số, đó chính là địa chỉ của ô nhớ chứa lệnh đầu tiên của chương trình. Sau thực hiện việc đón lệnh từ bộ nhớ, Vi xử lý sẽ tự động tăng nội dung PC để chuẩn bị đón lệnh kế, PC chỉ tăng khi Vi xử lý bắt đầu thực hiện lệnh đón trước đó.
Thanh ghi trạng thái (Status Register): còn được gọi là thanh ghi cờ (Flag Register), dùng để lưu trữ kết quả của một số lệnh kiểm tra có ảnh hưởng đến thanh ghi này. Các bit thường có trong thanh ghi cờ là:
- Bit Carry “C”: khi kết quả tràn thì C = 1, ngược lại C = 0.
- Bit Zero “Z” : kết quả bằng 0 thì Z = 1, ngược lại Z = 0.
- Bit Negative “N”: khi bit MSB của thanh ghi là 1 thì N = 1, ngược lại N = 0.
- Bit Intermediate Carry “I”: giống như bit Carry nhưng chỉ có tác dụng với phép cộng hay trừ trên 4 bit thấp.
- Bit Interupt Flag “IF”: IF = 1 khi người lập trình cho phép ngắt, ngược lại IF = 0.
- Bit Overflow “O”: O = 1 khi bit Carry của phép toán cộng với bit dấu của dữ liệu.
- Bit Parity “P”: P = 1 khi kết quả phép toán là số chẵn, ngược lại P = 0.
Thanh ghi con trỏ ngăn xếp SP (Stack Pointer): chức năng của thanh ghi con trỏ ngăn xếp là quản lý bộ nhớ ngăn xếp khi có dữ liệu được lưu trữ tạm thời vào ngăn xếp. Cũng giống như PC, SP cũng tự động chỉ đến ô nhớ kế. Các dữ liệu chứa trong ngăn xếp được tổ chức theo nguyên tắc vào sau ra trước (LIFO: Last In First Out). Trong hầu hết các Vi xử lý, SP tự giảm sau khi thực hiện lệnh cất giữ dữ liệu vào ngăn xếp và ngược lại SP sẽ tự tăng lên để chỉ đến ô nhớ tiếp theo trong ngăn xếp sau khi Vi xử lý thực hiện lệnh lấy dữ liệu ra khỏi ngăn xếp. Vì thế giá trị cho SP khi thiết lập thường là địa chỉ cuối cùng của bộ nhớ. Quá trình này do người lập trình thiết lập được gọi là khởi tạo con trỏ ngăn xếp. Nếu không được khởi tạo, con trỏ ngăn xếp sẽ chỉ đến một ô nhớ ngẫu nhiên. Khi đó dữ liệu cất vào ngăn xếp có thể ghi đè lên dữ liệu khác làm chương trình xử lý sai.
Thanh ghi địa chỉ (Address Register): khi Vi xử lý cần truy xuất bộ nhớ, thanh ghi địa chỉ phải tạo ra đúng địa chỉ mà Vi xử lý mong muốn. Ngõ ra của thanh ghi địa chỉ được đặt lên bus địa chỉ, bus địa chỉ dùng để lựa chọn một ô nhớ hay một port I/O cần truy xuất.
Thanh ghi lệnh (Instruction Register): dùng để chứa lệnh Vi xử lý đang thực hiện. Thanh ghi này do Vi xử lý sử dụng, người lập trình không sử dụng.
Thanh ghi chứa dữ liệu tạm thời (Temporary Register): dùng để ALU thực hiện các phép toán xử lý dữ liệu, người lập trình không sử dụng thanh ghi này.
c. Khối giải mã lệnh và khối điều khiển logic:
Chức năng của khối giải mã lệnh là nhận lệnh từ thanh ghi lệnh sau đó tiến hành giải mã lệnh rồi đưa tín hiệu điều khiển đến khối điều khiển logic.
d. Các đường bus:
Các khối bên trong Vi xử lý liên hệ với nhau thông qua tập hợp các đường dây để truyền dữ liệu gọi là bus hệ thống. Chúng được chia ra làm ba loại:
- Bus địa chỉ: có nhiệm vụ định ra địa chỉ của thiết bị cần truy xuất nên mang tính một chiều, chỉ có Vi xử lý mới đưa dữ liệu lên bus địa chỉ.
- Bus dữ liệu: dùng để kết nối các thanh ghi bên trong Vi xử lý và ALU, tất cả dữ liệu di chuyển bên trong Vi xử lý từ khối này đến khối khác đều thông qua bus dữ liệu, do đó bus dữ liệu mang tính hai chiều. Khi Vi xử lý cần truy xuất dữ liệu từ bộ nhớ hay các thiết bị I/O bên ngoài thì bus dữ liệu bên trong phải được nối với bus dữ liệu bên ngoài.
- Bus điều khiển: gồm các tín hiệu điều khiển để đảm bảo sự hoạt động đồng bộ giữa các khối, mỗi tín hiệu điều khiển có một chiều nhất định. Khi hoạt động, Vi xử lý đưa các tín hiệu điều khiển tới các khối khác trong hệ thống, đồng thời Vi xử lý cũng nhận tín hiệu từ các khối khác gởi về. Điều này không có nghĩa bus điều khiển là hai chiều vì Vi xử lý gởi tín hiệu đi hay nhận tín hiệu về trên các đường tín hiệu khác nhau bên trong bus điều khiển.
4. Tập lệnh (Instructions) của Vi xử lý:
Mỗi loại Vi xử lý có tập lệnh riêng, số lượng lệnh cũng tùy thuộc vào từng loại Vi xử lý. Tập lệnh của Vi xử lý có thể được chia làm các nhóm cơ bản sau:
- Nhóm lệnh truyền dữ liệu.
- Nhóm lệnh số học và logic
- Nhóm lệnh trao đổi, truyền khối dữ liệu và tìm kiếm.
- Nhóm lệnh xoay và dịch.
- Nhóm lệnh điều khiển
- Nhóm lệnh về bit.
- Nhóm lệnh nhảy.
- Nhóm lệnh gọi, trở về.
- Nhóm lệnh xuất, nhập.
Mỗi lệnh của Vi xử lý là dữ liệu ở dạng số nhị phân. Khi Vi xử lý nhận được một lệnh thì từ dữ liệu nhị phân này yêu cầu Vi xử lý thực hiện công việc mà lệnh yêu cầu. Chiều dài của một lệnh bằng với chiều dài từ dữ liệu của Vi xử lý. Mỗi lệnh mà Vi xử lý thực hiện gồm hai yếu tố:
- Mã công tác: cho biết thao tác mà Vi xử lý phải thực hiện.
- Toán hạng: được viết theo sau mã công tác, cho biết vị trí dữ liệu cần phải xử lý.
Có nhiều cách để chỉ vị trí của số liệu:
- Định địa chỉ trực tiếp bằng thanh ghi: toán hạng là ký hiệu của các thanh ghi và dữ liệu cần xử lý chính là nội dung chứa trong thanh ghi đó.
- Định địa chỉ gián tiếp bằng thanh ghi: toán hạng không phải là địa chỉ của số liệu mà chỉ là dấu hiệu cho biết nơi chứa dữ liệu.
- Định địa chỉ trực tiếp: toán hạng là địa chỉ của dữ liệu cần được xử lý.
- Định địa chỉ tức thời: toán hạng chính là dữ liệu cần được xử lý.
- Định địa chỉ ngầm định: vị trí hoặc giá trị của dữ liệu cần được xử lý được hiểu ngầm nhờ mã công tác.
PHẦN II: Vi xử lý 8085A
I. Giới thiệu:
Vi xử lý 8085A được hãng Intel chế tạo vào năm 1974. Đây là một Vi xử lý 8 bit, có chiều dài từ dữ liệu là 8 bit, chiều dài từ địa chỉ là 16 bit.
1. Đặc tính:
- Nguồn cung cấp : 5V ± 10%.
- Dòng điện cực đại: Imax = 170mA.
- Tần số xung clock chuẩn 6MHz.
- Mạch tạo xung clock được tích hợp, có thể dùng thạch anh, RC hay RC bên ngoài.
- Có 5 yêu cầu ngắt: Trong đó có một yêu cầu ngắt không che được (NMI - Non Maskable Interrupt) và một tương thích với 8080A.
- Có cổng Input/Output nối tiếp.
- Phần mềm tương thích 100% với 8080A.
2. Sơ đồ chân và sơ đồ logic:
8085A
X1
X2
Reset Out
SOD
SID
Trap
RST 7.5
RST 6.5
RST 5.5
INTR
INTA\
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
Vss
Vcc
HOLD
HLDA
CLK Out
Reset In
Ready
IO/M\
S1
RD\
WR\
ALE
S0
A15
A14
A13
A12
A11
A10
A9
A8
8085A
Ready
Hold
Intr
RST 7.5
RST 6.5
RST 5.5
Trap
Reset In
X1
X2
SID
Vcc
Vss
A15 - A8
AD7 - AD0
ALE
S0
S1
RD\
WR\
HLDA
INTA
Reset Out
SOD
CLK Out
Sơ đồ chân
A8..A15 - Address bus (output)
Byte cao của địa chỉ ô nhớ 16 bit hoặc địa chỉ cổng 8 bit, có cấu tạo ngõ ra 3 trạng thái. Trạng thái Hi-Z ở chế độ HOLD, HALT và trong lúc RESET.
AD0..AD7 - Address/Data bus (input/output)
Bus địa chỉ/dữ liệu, làm việc theo phương pháp đa lộ thời gian: Ở chu kỳ đồng hồ đầu tiên là byte thấp của địa chỉ ô nhớ hoặc khối xuất nhập, ở hai chu kỳ tiếp theo là dữ liệu, cấu tạo ngõ ra 3 trạng thái. Trạng thái Hi-Z ở chế độ HOLD, HALT và trong lúc RESET.
ALE - Address Latch Enable (output)
Ở chu kỳ đầu tiên của xung đồng hồ, ALE = [1] cho biết AD0..AD7 là bus địa chỉ.
T1
T2
T3
T1
T2
T3
xung clock
A15-A8
AD7-AD0
ALE
RD\
WR\
T
T
T
T
T
T
Address A15-A8
Address A15-A8
A7-A0
A7-A0
Data D7-D0
Data D7-D0
Chu kỳ viết
Chu kỳ đọc
Phương pháp đa lộ thời gian
Bus địa chỉ
Chốt
S0 S1 HLDA HOLD
8085A
RESET
RDY CLK INTA ALE RD WR IO/M\ OUT AD7 - AD0 A15 - A8
RESET IN
Bus điều khiển
Bus dữ liệu
Tín hiệu ngắt
Vi xử lý và chốt địa chỉ
RD\ - Read control (output)
Tác động mức thấp cho biết dữ liệu đang được đọc từ bộ nhớ hoặc cổng. Cấu tạo ngõ ra 3 trạng thái. Trạng thái Hi-Z ở chế độ HOLD, HALT và trong lúc RESET.
WR\ - Write control (output)
Tác động mức thấp cho biết dữ liệu đang được viết vào bộ nhớ hoặc cổng. Cấu tạo ngõ ra 3 trạng thái. Trạng thái Hi-Z ở chế độ HOLD, HALT và trong lúc RESET.
READY (input)
Mức cao trong chu kỳ đọc hoặc viết cho biết bộ nhớ hoặc thiết bị ngoại vi đã sẵn sàng gởi hoặc nhận dữ liệu, Vi xử lý sẽ đợi nếu ngõ này ở mức thấp.
S0, S1, IO/M\ - status (output)
Ba ngõ ra cho biết trạng thái hoạt động của Vi xử lý.
IO/M\
S1
S0
Trạng thái
0
0
1
Viết vào bộ nhớ
0
1
0
Đọc vào bộ nhớ
1
0
1
Viết ra cổng
1
1
0
Đọc từ cổng
0
1
1
Nhận lệnh
1
1
1
Nhận lệnh
* trạng thái Hi-Z
x không xác định
1
1
1
Nhận yêu cầu ngắt
*
0
0
HALT
*
x
x
HOLD
*
x
x
RESET
HLDA - Hold Acknowledge (output)
Tín hiệu ra cho biết Vi xử lý chấp nhận quyền sử dụng bus địa chỉ và bus dữ liệu ở chu kỳ kế tiếp, ngõ này trở về mức thấp khi không còn yêu cầu HOLD.
INTR - Interrupt Request (input)
Được dùng cho các yêu cầu ngắt công dụng chung, Vi xử lý sẽ nhận ra sau khi thực hiện xong một chỉ thị, ngắt này có thể được che bằng phần mềm và không có hiệu lực trong lúc RESET hoặc trong khi Vi xử lý đang thi hành một chương trình phục vụ ngắt.
INTA - Interrupt Acknowledge (output)
Ngõ ra mức thấp cho biết Vi xử lý chấp thuận yêu cầu ngắt.
RST 5.5, RST 6.5, RST 7.5 - Restart Interrupt (input)
Ba yêu cầu ngắt có mức độ ưu tiên cao hơn INTR, được điều khiển bởi lệnh SIM.
TRAP (input)
Yêu cầu ngắt có mức độ ưu tiên cao nhất và không che được bằng phần mềm.
Tên
Mức ưu tiên
Địa chỉ ngắt (1)
Tín hiệu tác động
TRAP
1
24h
Cạnh lên và mức cao
RST 7.5
2
3Ch
Cạnh lên
RST 6.5
3
34h
Mức cao
RST 5.5
4
2Ch
Mức cao
INTR
5
(2)
Mức cao
(1) Vi xử lý cất PC vào ngăn xếp trước khi nhảy đến địa chỉ ngắt.
(2) Phụ thuộc vào địa chỉ gọi ngắt.
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Đệm
ba
trạng
thái
1 1 1
INTR\ INTA
Vi xử lý
1 1
D0
D1
D2
D3
D4
D5
D6
D7
A8 ... A15
AD0 ... AD7
74148
Các ngắt được gọi bằng lệnh RST
INTERRUPT
INT
RESTART
D7 D6 D5 D4 D3 D2 D1 D0
Địa chỉ bộ nhớ
(Hex)
0
1 1
0 0 0
1 1 1
0 0 0 0
1
1 1
0 0 1
1 1 1
0 0 0 8
2
1 1
0 1 0
1 1 1
0 0 1 0
3
1 1
0 1 1
1 1 1
0 0 1 8
4
1 1
1 0 0
1 1 1
0 0 2 0
5
1 1
1 0 1
1 1 1
0 0 2 8
6
1 1
1 1 0
1 1 1
0 0 3 0
7
1 1
1 1 1
1 1 1
0 0 3 8
RESET IN\ (input)
Mức thấp đặt lại bộ đếm chương trình về 0000H, xóa FF cho phép ngắt và HLDA. Bus địa chỉ, bus dữ liệu và bus điều khiển ở trạng thái Hi-Z trong lúc RESET.
RESET OUT (output)
Báo cho biết CPU đang ở trạng thái RESET, dùng để đặt lại toàn bộ hệ thống, ngõ ra tương thích TTL.
X1, X2 (input)
Ngõ đặt thạch anh, RC hoặc LC để tạo xung đồng hồ, X1 còn là ngõ vào của tín hiệu đồng hồ từ mạch bên ngoài.
CLK - Clock (output)
Ngõ ra xung đồng hồ có tần số bằng phân nửa tín hiệu tại X1.
SID - Serial Input Data line (input)
Ngõ vào dữ liệu nối tiếp nạp vào bit 7 của bộ tích lũy khi có lệnh RIM.
SOD - Serial Output Data line (output)
Ngõ ra dữ liệu nối tiếp được xác định bởi lệnh SIM.
Vcc Nguồn nuôi +5V.
Vss Mass.
Cấu tạo 8085A:
Cấu tạo bên trong của Vi xử lý 8085A có đầy đủ tất cả các khối của một Vi xử lý 8 bit đã được giới thiệu, nhưng có một số điểm khác biệt được thể hiện qua sơ đồ khối sau:
HOLD
INTERRUPT CONTROL
SERIAL I/O CONTROL
ACCUMULATOR (8)
TEMP REG(8)
FLAG (8)
FLIP FLOP
ALU
INSTRUCTION
DECODER AND
MACHINE CYCLE
ENCODING
ADDRESS
BUFFER
DATA/ADDRESS
BUFFER
B
REG (8)
C
REG (8)
D
REG (8)
E
REG (8)
H
REG (8)
L
REG (8)
STACK POINTER
PROGRAM COUNTER
INCREMENTER/
DECREMENTER
TIMING AND CONTROL
CONTROL STATUS DMA RESET
8 BIT INTERNAL DATA BU S
X1
X2
CLOCK OUT
READY
RD\ WR\ ALE
S0 S1 IO/M\
A15..A8
ADDRESS BUS
AD7..AD0
DATA/ADDRESS BUS
INTR INTA\ RST 7.5 RST 6.5 RST 5.5 TRAP
SID SOD
HLDA
RESET IN
RESET OUT
INSTRUCTION
REGISTER (8)
Cấu trúc Vi xử lý 8085A
Cấu tạo Vi xử lý 8085A gồm 3 phần: Đơn vị số học-logic, các thanh ghi và đơn vị điều khiển. Các thanh ghi trong 8085A được chia ra như sau:
Bộ đếm chương trình (PC) và con trỏ ngăn xếp (SP): là hai thanh ghi có độ dài 16 bit nên Vi xử lý có thể truy xuất được một lượng ô nhớ là 216 = 65536 byte hay 64Kbyte.
Bộ tích lũy (Accummulator): Có ký hiệu là A, độ dài 8 bit. Đây là thanh ghi quan trọng nhất trong Vi xử lý, hầu hết các quá trình tính toán đều xảy ra trên thanh ghi này.
Thanh ghi trạng thái (Status Register): Có tên khác là thanh ghi cờ (Flag), ký hiệu là F, thanh ghi này có độ dài 8 bit trong đó có 5 bit trạng thái dùng để phản ánh trạng thái của Vi xử lý khi thực hiện xong một lệnh.
S
Z
x
AC
x
P
x
Cy
S - Sign (bit dấu)
S = 1 Khi kết quả là số âm.
S = 0 Khi kết quả là số dương.
Z - Zero (bit zero)
Z = 1 Khi kết quả bằng 0.
Z = 0 Khi kết quả khác 0.
AC - Auxiliary Carry (bit số nhớ phụ)
AC = 1 Khi phép tính bị tràn trên bit 3.
AC = 0 Khi phép tính không tràn trên bit 3.
P - Parity (bit chẵn lẻ)
P = 1 Khi kết quả là số chẵn.
P = 0 Khi kết quả là số lẻ.
Số chẵn là số có tổng số bit [1] là chẵn, và ngược lại số lẻ là số có tổng số bit [1] là lẻ.
Cy - Carry (bit số nhớ)
Cy = 1 Khi kết quả có số nhớ.
Cy = 0 Khi kết quả không số nhớ.
Các thanh ghi công dụng chung: Gồm 6 thanh ghi có độ dài 8 bit được ký hiệu lần lượt là B, C, D, E, H và L. Các thanh ghi này có thể kết hợp thành từng cặp 16 bit: BC, DE, HL và AF, trong đó A, B, D và H là các thanh ghi cao và F, C, E và L là các thanh ghi thấp.
II. TẬP LỆNH 8085A:
Tập lệnh của 8085A được chia thành các nhóm như sau:
- Nhóm lệnh truyền dữ liệu
- Nhóm lệnh số học - logic
- Nhóm lệnh so sánh
- Nhóm lệnh nhảy
- Nhóm lệnh về ngăn xếp
- Nhóm lệnh về xuất nhập
- Nhóm lệnh điều khiển
1. Nhóm lệnh truyền dữ liệu:
MOV ds, sr Truyền dữ liệu từ thanh ghi sr đến thanh ghi ds.
MOV ds, M Truyền dữ liệu từ ô nhớ có địa chỉ chứa trong cặp thanh ghi HL vào thanh ghi ds.
MOV M, sr Truyền dữ liệu từ thanh ghi sr vào ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
MVI ds, data Truyền tức thời dữ liệu 8 bit vào thanh ghi ds.
MVI M, data Truyền tức thời dữ liệu 8 bit vào ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
LXI rp, dw Nạp tức thời dữ liệu 16 bit vào cặp thanh ghi rp.
LDA addr Nạp trực tiếp nội dung ô nhớ có địa chỉ là addr vào thanh ghi A.
LDAX rp Nạp gián tiếp nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi rp vào thanh ghi A.
LHLD addr Nạp trực tiếp nội dung ô nhớ có địa chỉ là addr vào thanh ghi L, nội dung ô nhớ có địa chỉ addr+1 vào thanh ghi H.
STA addr Lưu trữ trực tiếp nội dung thanh ghi A vào ô nhớ có địa chỉ addr.
STAX rp Lưu trữ gián tiếp nội dung thanh ghi A vào ô nhớ có địa chỉ chứa trong cặp thanh ghi rp.
SHLD addr Lưu trữ trực tiếp nội dung thanh ghi L vào ô nhớ có địa chỉ addr, nội dung thanh ghi H vào ô nhớ có địa chỉ addr+1.
XCHG Hoán chuyển nội dung giữa cặp thanh ghi HL với cặp thanh ghi DE.
2. Nhóm lệnh số học - logic:
ADD sr Cộng không lưu ý số nhớ nội dung thanh ghi A với nội dung thanh ghi sr.
ADD M Cộng không lưu ý số nhớ nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
ADI data Cộng không lưu ý số nhớ nội dung thanh ghi A với dữ liệu.
ADC sr Cộng có lưu ý số nhớ nội dung thanh ghi A với nội dung thanh ghi sr.
ADC M Cộng có lưu ý số nhớ nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
ACI data Cộng có lưu ý số nhớ nội dung thanh ghi A với dữ liệu.
SUB sr Trừ không lưu ý số thiếu nội dung thanh ghi A với nội dung thanh ghi sr.
SUB M Trừ không lưu ý số thiếu nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
SUI data Trừ không lưu ý số thiếu nội dung thanh ghi A với dữ liệu.
SBB sr Trừ có lưu ý số thiếu nội dung thanh ghi A với nội dung thanh ghi sr.
SBB M Trừ có lưu ý số thiếu nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
SBI data Trừ có lưu ý số thiếu nội dung thanh ghi A với dữ liệu.
ANA sr AND giữa nội dung thanh ghi A với nội dung thanh ghi sr.
ANA M AND giữa nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
ANI data AND giữa nội dung thanh ghi A với dữ liệu.
ORA sr OR giữa nội dung thanh ghi A với nội dung thanh ghi sr.
ORA M OR giữa nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
ORI data OR giữa nội dung thanh ghi A với dữ liệu.
XRA sr EXOR giữa nội dung thanh ghi A với nội dung thanh ghi sr.
XRA M EXOR giữa nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
XRI data EXOR giữa nội dung thanh ghi A với dữ liệu.
INR reg Tăng nội dung thanh ghi reg.
INR M Tăng nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
DCR reg Giảm nội dung thanh ghi reg.
DCR M Giảm nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
INX rp Tăng nội dung cặp thanh ghi rp.
DCX rp Giảm nội dung cặp thanh ghi rp.
RRC Đẩy nội dung thanh ghi A về phía phải.
RLC Đẩy nội dung thanh ghi A về phía trái.
RAR Đẩy nội dung thanh ghi A về phía phải ngang qua cy.
RAL Đẩy nội dung thanh ghi A về phía trái ngang qua cy.
DAD rp Cộng nội dung cặp thanh ghi HL với nội dung cặp thanh ghi rp.
DAA Điều chỉnh nội dung bộ tích lũy A.
CMA Nghịch đảo nội dung bộ tích lũy A.
STC Đặt bit cy là [1].
CMC Nghịch đảo bit cy.
3. Nhóm lệnh so sánh:
CMP sr So sánh nội dung thanh ghi A với nội dung thanh ghi sr.
CMP M So sánh nội dung thanh ghi A với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL.
CPI data So sánh nội dung thanh ghi A với dữ liệu.
4. Nhóm lệnh nhảy:
JMP addr Nhảy đến địa chỉ addr không điều kiện.
Jcondition addr Nhảy đến địa chỉ addr nếu thỏa điều kiện:
- JNZ Z = 0
- JZ Z = 1
- JNC Cy = 0
- JC Cy = 1
- JPO P = 0
- JPE P = 1
- JP S = 0
- JM S = 1
CALL addr Gọi chương trình con tại địa chỉ addr.
Ccondition addr Gọi chương trình con tại địa chỉ addr nếu thỏa điều kiện:
- CNZ Z = 0
- CZ Z = 1
- CNC Cy = 0
- CC Cy = 1
- CPO P = 0
- CPE P = 1
- CP S = 0
- CM S = 1
RET Trở về từ chương trình con không điều kiện.
Rcondition Trở về từ chương trình con nếu thỏa điều kiện:
- RNZ Z = 0
- RZ Z = 1
- RNC Cy = 0
- RC Cy = 1
- RPO P = 0
- RPE P = 1
- RP S = 0
- RM S = 1
RST c Gọi chương trình phục vụ ngắt số hiệu c.
PCHL Nạp bộ đếm chương trình PC từ cặp thanh ghi HL.
5. Nhóm lệnh về ngăn xếp:
PUSH rp Chuyển dữ liệu của cặp thanh ghi rp vào ngăn xếp.
POP rp Lấy dữ liệu từ ngăn xếp chuyển vào cặp thanh ghi rp.
XTHL Hoán chuyển dữ liệu giữa ngăn xếp với cặp thanh ghi HL.
SPHL Chuyển nội dung cặp thanh ghi HL vào thanh ghi SP.
6. Nhóm lệnh xuất nhập:
IN port Nhập dữ liệu từ cổng port vào thanh ghi A.
OUT port Xuất dữ liệu từ thanh ghi A ra cổng port.
7. Nhóm lệnh điều khiển:
NOP Lệnh trống.
HLT Lệnh dừng chương trình cho đến khi có lệnh ngắt hoặc RESET.
EI Cho phép yêu cầu ngắt.
DI Không cho phép yêu cầu ngắt.
8. Nhóm lệnh đặc biệt:
SIM Lệnh này sử dụng các bit trong thanh ghi A để thực hiện các công việc sau:
SOD
SOE
x
R 7.5
MSE
M 7.5
M 6.5
M 5.5
M 7.5 - M 6.5 - M5.5 = [0]: Cho phép yêu cầu ngắt.
= [1]: Ngăn yêu cầu ngắt.
MSE = [0]: Các bit từ 0 đến 2 của thanh ghi A có tác dụng.
= [1]: Các bit từ 0 đến 2 của thanh ghi A không tác dụng.
RST 7.5 = [0]: Không ảnh hưởng.
= [1]: Reset Flip Flop RST 7.5
SOE = [0]: Bit thứ 7 của thanh ghi A không gửi ra ngõ SOD.
= [1]: Bit thứ 7 của thanh ghi A được gửi ra ngõ SOD.
SOD : Chứa dữ liệu cần gửi đến ngõ ra nối tiếp SOD.
RIM Kết quả của lệnh RIM sau khi thực hiện được trả lại trong thanh ghi A cho biết các trạng thái sau:
SID
I 7.5
I 6.5
I 6.5
IE
M 7.5
M 6.5
M 5.5
M 7.5 - M 6.5 - M 5.5 = [0]: Yêu cầu ngắt bị ngăn.
= [1]: Yêu cầu ngắt được phép.
IE = [0]: Vi xử lý không chấp nhận yêu cầu ngắt.
= [1]: Vi xử lý chấp nhận yêu cầu ngắt.
I 7.5 -I 6.5 - I 5.5 = [0]: Cho biết không có yêu cầu ngắt.
= [1]: Cho biết yêu cầu ngắt đang chờ.
SID : Chứa dữ liệu của ngõ vào nối tiếp SID.
PHẦN III: Thiết kế Hệ Vi xử lý 8085.
I. Phương án thiết kế:
Yêu cầu đặt ra là thiết kế hệ Vi xử lý 8085 có 40 phím, hiển thị tám LED 7 đoạn.
- Về bộ nhớ: chọn EPROM 2764 chứa chương trình hệ thống, SRAM 6264 chứa dữ liệu tạm thời và các biến hệ thống. Đồng thời cũng thiết kế thêm đế cắm dành cho EPROM 2764 mở rộng khi cần, khe cắm này có thể cắm được SRAM 6264 và có thể chuyển đổi chức năng RAM/ROM bằng một jumper.
- Về giao tiếp nội bộ: sử dụng một vi mạch 8255A để quét đèn và quét phím. Vi mạch này làm việc theo kiểu bộ nhớ, mỗi port tương ứng với một vị trí ô nhớ. Dữ liệu quét đèn và phím là tác động mức thấp nên sử dụng các LED hiển thị là loại Cathode chung.
- Về giao tiếp với các thiết bị ngoài: sử dụng hai vi mạch 8255A, lý do sử dụng tới hai vi mạch là để mở rộng số cổng giao tiếp khi cần thiết (lên tới 6 cổng).
- Về giải đa hợp: để tách giữa dữ liệu và địa chỉ trên các chân AD0-AD7 của 8085A có thể dùng 74LS373 hoặc 74LS573 là vi mạch chốt, chức năng của hai loại là như nhau. Trong thiết kế sử dụng 74LS573, 74LS573 có các đường dữ liệu vào và ra nằm ở hai bên vi mạch, vì thế việc thiết kế mạch in dễ dàng hơn.
- Về giải mã địa chỉ: sử dụng 74LS138 là vi mạch giải mã 3 đường ra 8 đường. Trong thiết kế sử dụng hai vi mạch 74LS138, một cho giao tiếp nội bộ, một cho giao tiếp với các thiết bị ngoài. Đồng thời cũng sử dụng thêm một vi mạch 74LS32 trong việc giải mã địa chỉ.
- Về chương trình hệ thống: bàn phím có 40 phím, trong đó 10 phím dùng cho các phím số từ 0 đến 9, 26 phím dùng cho các phím chữ cái từ A đến Z, tổng cộng là 36 phím. Còn lại 4 phím dùng làm các phím chức năng: phím +, -, PC, ESCAPE. Chương trình Monitor có nhiệm vụ quét đèn và đọc phím nhấn, cho phép nhập chương trình vào và thi hành chương trình đó, nhận biết phím chức năng và thực hiện các công việc tương ứng.
II. Phần cứng:
1. Khảo sát các vi mạch được sử dụng trong thiết kế:
a. Bộ nhớ EPROM 2764:
EPROM 2764 là bộ nhớ chỉ đọc được chế tạo theo công nghệ NMOS, dùng một nguồn đơn +5V, dung lượng bộ nhớ là 65536 bit, được tổ chức thành 8192x8 bit (8KByte). 2764 là loại EPROM có thể xóa bằng tia cực tím và có thể ghi lại được nhiều lần. Có hai kiểu họat động: bình thường và chờ. Ở trạng thái chờ, công suất tiêu thụ là 132mW so với 525mW khi ở trạng thái đọc dữ liệu, thời gian truy xuất là 200ns.
2764
CE\
OE\
VPP
D0-D7
A0-A12
Vpp
A12
A7
A6
A5
A4
A3
A2
A1
A0
O0
O1
O2
GND
2764
Vcc
PGM\
N.C
A8
A9
A11
OE\
A10
CE\
O7
O6
O5
O4
O3
Sơ đồ chân và sơ đồ logic
Mode \ Pin
CE\
OE\
PGM\
VPP
Output
Read
L
L
H
Vcc
Dout
Stand-by
H
x
x
Vcc
Hi-Z
Program
L
x
L
Vpp
Din
Program Verify
L
L
H
Vpp
Dout
Program Inhibit
H
x
x
Vpp
Hi-Z
Bảng trạng thái
b. Bộ nhớ SRAM 6264:
SRAM 6264 là bộ nhớ được chế tạo theo công nghệ CMOS, có dung lượng 65536 bit được tổ chức thành 8192x8 bit (8KByte), điện áp cung cấp là +5V, thời gian truy cập khoảng 150ns. Ngõ vào/ra dữ liệu được dùng chung, các ngõ vào/ra này tương thích TTL. Công suất tiêu tán ở trạng thái chờ rất thấp chỉ khoảng 0,1mW so với khi hoạt động bình thường là 200mW.
6264
DQ0-DQ7
A0-A12
CE1\
CE2
OE\
WE\
N.C
A12
A7
A6
A5
A4
A3
A2
A1
A0
DQ0
DQ1
DQ2
Vss
6264
Vcc
WE\
CE2
A8
A9
A11
OE\
A10
CE1\
DQ7
DQ6
DQ5
DQ4
DQ3
Sơ đồ chân và sơ đồ logic
Mode \ Pin
WR\
CE1\
CE2
OE\
Output
Not Select
x
H
x
x
Hi-Z
x
x
L
x
Output Disable
H
L
H
H
Hi-Z
Read
H
L
H
L
Dout
Write
L
L
H
H
Din
Bảng trạng thái
c. Vi mạch giao tiếp ngoại vi 8255A:
Vi mạch 8255A là vi mạch giao tiếp ngoại vi lập trình được. Nó được dùng để kết nối giao tiếp song song giữa Vi xử lý và thiết bị điều khiển bên ngoài.
PA3
PA2
PA1
PA0
RD\
CS\
GND
A1
A0
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
PA4
PA5
PA6
PA7
WR\
RESET
D0
D1
D2
D3
D4
D5
D6
D7
Vcc
PB7
PB6
PB5
PB4
PB3
8255A
8255A
D0-D7
RD\
WR\
RESET
A0
A1
CS\
PA0-PA7
PB0-PB7
PC0-PC3
PC4-PC7
Sơ đồ chân và sơ đồ logic
A1
A0
RD\
WR\
CS\
Hoạt động
L
L
L
H
L
Port A à Bus dữ liệu
L
H
L
H
L
Port Bà Bus dữ liệu
H
L
L
H
L
Port Cà Bus dữ liệu
L
L
H
L
L
Bus dữ liệu à Port A
L
H
H
L
L
Bus dữ liệu à Port B
H
L
H
L
L
Bus dữ liệu à Port C
H
H
H
L
L
Bus dữ liệu à Từ điều khiển
x
x
x
x
H
Bus dữ liệu ở trạng thái Hi-Z
H
H
L
H
L
Cấm
x
x
H
H
L
Bus dữ liệu ở trạng thái Hi-Z
Bảng trạng thái
Cơ chế hoạt động của 8255A:
Khi chân RESET ở mức 1, 8255A sẽ được khởi động, nó sẽ thả nổi tất cả 24 chân liên quan tới các cửa vào/ra. Trạng thái này kéo dài tới khi chương trình ứng dụng viết từ điều khiển vào thanh ghi điều khiển để xác định chế độ làm việc của 8255A. Ba chế độ hoạt động cơ bản của 8255A là:
- Chế độ 0: vào/ra thông thường.
- Chế độ 1: chốt vào/ra.
- Chế độ 2: bus hai chiều.
Từ điều khiển dùng để định nghĩa chế độ làm việc cho 8255A.
Cấu trúc từ điều khiển của 8255A:
D7
D6
D5
D4
D3
D2
D1
D0
Nhóm B
Port C (thấp)
1 = nhập
0 = xuất
Port B
1 = nhập
0 = xuất
Chọn chế độ
0 = chế độ 0
1 = chế độ 1
Nhóm A
Port C (cao)
1 = nhập
0 = xuất
Port A
1 = nhập
0 = xuất
Chọn chế độ
00 = chế độ 0
01 = chế độ 1
1x = chế độ 2
Cờ lập chế độ
1 = tích cực
Chế độ 0:
Từ điều khiển
1
0
0
D4
D3
0
D1
D0
Chế độ 0 xác lập hai port 8 bit (A và B) và hai port 4 bit (nửa cao và nửa thấp của port C). Bất kỳ port nào cũng có thể nhập hoặc xuất dữ liệu tùy theo các bit D4, D3, D1 và D0. Dữ liệu được chốt khi nhập (còn khi xuất thì không).
Chế độ 1:
Từ điều khiển
1
0
1
D4
D3
1
D1
D0
Chế độ này cả hai port A và B làm việc ở chế độ xuất/nhập có chốt. Port A và B hoạt động độc lập nhau, mỗi port có 4 bit điều khiển/dữ liệu được hình thành từ 4 bit cao và 4 bit thấp của port C.
Nhóm A được cấu hình ở chế độ 1:
* Port A là port nhập dữ liệu:
Từ điều khiển
PC4
PC5
PC3
INTE
A
RD\
PC6,7
PA0-PA7
I/O
INTRA
IBFA
STBA\
1
0
1
1
D3
x
x
x
PC6,7
1 = nhập
0 = xuất
- STBA\ (PC4): mức 0 tại ngõ vào này sẽ làm cho dữ liệu được chốt vào port A. Thiết bị ngoại vi dùng tín hiệu này để báo cho 8255A biết dữ liệu vào đã sẵn sàng.
- IBFA (PC5): ngõ ra này lên mức 1 để báo rằng bộ đệm đã đầy. Khi chân này ở mức 0 thì thiết bị ngoại vi có thể gởi dữ liệu mới tới 8255A.
- INTRA (PC3): tín hiệu ở ngõ ra này được dùng như một yêu cầu ngắt. Ngõ ra này lên mức 1 khi STBA ở mức 0, IBFA và cờ hiệu INTRA ở mức 1. Tín hiệu INTEA tự động được xóa khi CPU nhập từ 8255A. Cờ hiệu cho phép ngắt (INTE) được điều khiển bằng cách đặt hoặc xóa bit PC4.
- Các bit PC6 và PC7 là các bit xuất nhập bình thường phụ thuộc vào bit D3 trong từ điều khiển.
* Port A là port xuất dữ liệu:
Từ điều khiển
PC6
PC7
PC3
INTE
A
WR\
PC4, 5
PA0-PA7
I/O
INTRA
ACKA\
OBFA\
1
0
1
0
D3
x
x
x
PC4, 5
1 = nhập
0 = xuất
- OBFA\ (PC7): ngõ ra này sẽ xuống mức 0 khi bộ đệm xuất đầy để báo cho thiết bị ngoại vi biết port A đang xuất ra dữ liệu mới.
- ACKA\ (PC6): ngõ vào này được thiết bị ngoại vi đặt mức 0 để báo cho 8255A biết dữ liệu port A được chấp nhận.
- INTRA (PC3): ngõ ra này có cùng mục đích như trong trường hợp nhập. Cờ cho phép ngắt được điều khiển bằng cách đặt hoặc xóa bit PC6.
- Các bit PC4 và PC5 là các bit xuất nhập bình thường phụ thuộc vào bit D3 trong từ điều khiển.
Nhóm B được cấu hình ở chế độ 1:
* Port B là port nhập dữ liệu:
Từ điều khiển
PC2
PC1
PC0
INTE
B
RD\
PC4,5
PB0-PB7
I/O
INTRB
IBFB
STBB\
1
x
x
x
x
1
1
x
- STBB\ (PC2), IBFB (PC1) và INTRB (PC0) có chức năng tương tự như trong trường hợp port A nhập. Cờ hiệu cho phép ngắt (INTE) được điều khiển bằng cách đặt hoặc xóa bit PC2.
* Port B là port xuất dữ liệu:
Từ điều khiển
PC2
PC1
PC0
INTE
B
WR\
PC4, 5
PB0-PB7
I/O
INTRB
ACKB\
OBFB\
1
x
x
x
x
1
0
x
Chế độ 2:
Chế độ này là chế độ xuất/nhập hai chiều được chốt. Trong chế độ này, port A được dùng cho xuất và nhập, 5 bit của port C được dùng để chỉ trạng thái và điều khiển port A.
Từ điều khiển
PC7
PC6
PC4
INTE
1
WR\
PC2, 1,0
PA0-PA7
I/O
STBA\
ACKA\
OBFA\
RD\
PC3
INTRA\
PC5
INTE
2
IBFA
1
1
x
x
x
D2
D1
D0
Chế độ nhóm B
0 = chế độ 0
1 = chế độ 1
Port B
1 = nhập
0 = xuất
PC0-2
1 = nhập
0 = xuất
- OBFA\ (PC6): bộ đệm ngõ ra đã đầy.
- ACKA\ (PC7): tín hiệu báo chấp nhận dữ liệu.
- IBFA (PC5): bộ đệm ngõ vào đầy.
- STBA\ (PC4): dữ liệu đang sẵn sàng ở ngõ vào.
- INTRA (PC3): tín hiệu yêu cầu ngắt, được sử dụng cho xuất/nhập.
Khi nhóm A ở chế độ 2 thì nhóm B chỉ có thể ở chế độ 0 hoặc 1. Tuy nhiên, nếu nhóm B ở chế độ 0 thì chỉ có 3 bit PC0-PC2 được sử dụng cho xuất/nhập vì nhóm A đã mượn bit PC3 để sử dụng như một yêu cầu ngắt. Thông thường, nếu nhóm A ở chế độ 2 thì các bit PC0-PC2 sẽ được nối với các chân trạng thái và điều khiển của thiết bị nối với port A. Port B cũng có thể được dùng cho mục đích này.
Việc đặt/xóa bit đối với port C: ta có khả năng lập và xóa từng bit. Nếu bit 7 của từ điều khiển là 0, 8255A sẽ hiểu là lệnh lập/xóa bit port C có nghĩa, cho phép lập/xóa bất kỳ bit nào của port C. Khả năng lập/xóa từng bit riêng lẻ là rất thuận tiện cho ứng dụng khi các bit riêng rẽ được dùng để điều khiển tách biệt các chức năng bên ngoài.
Từ điều khiển đặt/xóa bit
D7
x
x
x
D3
D2
D1
D0
Đặt/xóa bit
1 = đặt (set)
0 = xóa (reset)
Chọn bit
0
1
2
3
4
5
6
7
0
1
0
1
0
1
0
1
0
0
1
1
0
0
1
1
0
0
0
0
1
1
1
1
Cờ đặt/xóa bit
0 = tích cực
Vcc
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
E
OE\
D0
D1
D2
D3
D4
D5
D6
D7
GND
74573
d. Vi mạch chốt 74573:
74573
D0-D7
Q0-Q7
OC\
E
Sơ đồ chân và sơ đồ logic
OUTPUT
CONTROL
ENABLE
G
D
OUTPUT
L
H
H
H
L
H
L
L
L
L
x
Q0
H
x
x
HI-Z
Bảng trạng thái
e. Vi mạch giải mã 3 đường à 8 đường 74138:
74138
A
B
C
Y0 ...Y7
G2A\
G2B
G1
A
B
C
G2A
G2B
G1
Y7
GND
Vcc
Y0
Y1
Y2
Y3
Y4
Y5
Y6
74138
Sơ đồ chân và sơ đồ logic
INPUTS
OUTPUTS
ENABLE
SELECT
G1
G2
C
B
A
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
x
H
x
x
x
H
H
H
H
H
H
H
H
L
x
x
x
x
H
H
H
H
H
H
H
H
H
L
L
L
L
L
H
H
H
H
H
H
H
H
L
L
L
H
H
L
H
H
H
H
H
H
H
L
L
H
L
H
H
L
H
H
H
H
H
H
L
L
H
H
H
H
H
L
H
H
H
H
H
L
H
L
L
H
H
H
H
L
H
H
H
H
L
H
L
H
H
H
H
H
H
L
H
H
H
L
H
H
L
H
H
H
H
H
H
L
H
H
L
H
H
H
H
H
H
H
H
H
H
L
G2 = G2A + G2B
Bảng trạng thái
f. Vi mạch 7432:
A
B
Y
1A
1B
1Y
2A
2B
2Y
GND
Vcc
4B
4A
4Y
3B
3A3Y
7432
Sơ đồ chân và sơ đồ logic
A
B
Y
L
L
L
L
H
H
H
L
H
H
H
H
Bảng trạng thái
2. Kết nối:
a. Bộ nhớ:
Vi xử lý 8085A có khả năng truy xuất tới 64KB bộ nhớ. Tuy nhiên, trong thiết kế chỉ sử dụng 16K bộ nhớ: 8K cho ROM và 8K cho RAM, đồng thời cũng dành một vị trí 8K cho ROM/RAM mở rộng. Các bộ giao tiếp nội bộ (bàn phím, hiển thị) cũng được định địa chỉ như là vùng nhớ. Bản đồ bộ nhớ được chia thành 4 vùng nhớ khác nhau. Sử dụng vi mạch 74LS138 có thể chọn để làm việc với từng vùng nhớ khác nhau tùy thuộc vào các địa chỉ cung cấp cho các ngõ vào của bộ giải mã.
Các đường địa chỉ
HEX
A15
A14
A13
A12-A0
0
0
0
0
0000H
0
0
0
1
1FFFH
0
0
1
0
2000H
0
0
1
1
3FFFH
0
1
0
0
4000H
0
1
0
1
5FFFH
0
1
1
0
6000H
0
1
1
1
7FFFH
1
0
0
0
8000H
1
0
0
1
9FFFH
1
0
1
0
A000H
1
0
1
1
BFFFH
1
1
0
0
C000H
1
1
0
1
DFFFH
1
1
1
0
E000H
1
1
1
1
FFFFH
Trong thiết kế sử dụng địa chỉ từ 0000H -1FFFH cho ROM hệ thống, địa chỉ từ 4000H -5FFFH cho RAM, địa chỉ từ 2000H - 3FFFH cho RAM/ROM mở rộng, địa chỉ từ 8000H - 8003H cho giao tiếp bàn phím và hiển thị.
CPU
74138
Tới CE\ của EPROM
Tới CE\ của ROM/RAM mở rộng
Tới CS\ của RAM
Tới CS\ của 8255A giao tiếp nội bộ
A
B
C
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
G1
G2A
G2B
A13
A14
A15
IO/M\
Vcc
Sơ đồ kết nối bộ nhớ
b. Bàn phím:
Bàn phím được thiết kế là loại bàn phím ma trận, sử dụng phần mềm để quét phím rồi giải mã phím. Ma trận phím bao gồm 8 cột và 5 hàng. Trong thiết kế sử dụng vi mạch 8255A để giao tiếp bàn phím, trong đó PB0-PB7 là các ngõ ra dữ liệu dùng để quét cột, PA0-PA4 là các ngõ vào dữ liệu đọc hàng. 8255A hoạt động ở chế độ 0 với port A là port đọc, port B là port xuất.
W
O
G
8
0
X
P
H
9
1
Y
Q
I
A
2
Z
R
J
B
3
ES
S
K
C
4
PC
T
L
D
5
-
U
M
E
6
+
V
N
F
7
Sơ đồ bàn phím
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
PA4
PA3
PA2
PA1
PA0
Vcc
D7...D0
A0
A1
RD\
WR\
CS\
8255A
Sơ đồ kết nối bàn phím
Nguyên lý hoạt động:
Để kiểm tra xem có phím nào được nhấn hay không, CPU sẽ gởi dữ liệu 00H ra port B rồi nhận dữ liệu từ port A, nếu không có phím nào được nhấn thì kết quả là 1FH, nếu có bất kỳ phím nào được nhấn thì một trong 5 đường đọc vào của port A sẽ xuống mức 0 vì thế dữ liệu đọc vào sẽ khác 1FH, lúc này chỉ biết được vị trí hàng của phím. Để xác định vị trí cột của phím thì CPU phải lần lượt xuất dữ liệu ra từng cột. Dữ liệu xuất ra port B ở lần quét đầu tiên là 0EFH, có nghĩa là chỉ cột đầu tiên được xuống mức 0 trong khi các cột khác ở mức 1. Lúc này CPU sẽ đọc dữ liệu vào từ port A để so sánh với 1FH. Nếu dữ liệu đọc vào bằng với 1FH thì có nghĩa là phím được ấn không nằm ở cột thứ nhất, CPU tiếp tục xuất dữ liệu ra port B để quét cột thứ hai, giá trị của dữ liệu lúc này là 0DFH ứng với trường hợp cột thứ hai được xuống mức 0 trong khi các cột khác ở mức 1. CPU đọc dữ liệu từ port A để kiểm tra xem phím có nằm trên cột này không, nếu vẫn chưa phát hiện được thì CPU tiếp tục quét cột kế tiếp cho tới khi phát hiện phím được nhấn. Khi phát hiện được một cột nào đó chứa phím được nhấn thì vị trí này chính là mã cột của phím. Kết hợp giữa mã hàng và mã cột, CPU sẽ xác định được chính xác vị trí của phím nhấn.
c. Hiển thị:
Bộ hiển thị dùng tám LED 7 đoạn, mỗi LED dùng để hiển thị một chữ số HEX, chữ số được tạo thành bởi các đoạn độc lập được ký hiệu là a, b, c, d, e, f, và g. Trong thiết kế sử dụng các LED Cathod chung nên để hiển thị được thì chân Cathode chung phải được nối xuống mức thấp, trong khi các đoạn phải được cung cấp dữ liệu phù hợp ở mức cao. 8255A sử dụng port B làm port xuất dữ liệu quét để chọn đèn được hiển thị, port C là port xuất dữ liệu hiển thị.
LED 7
8255A
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
a
b
c
d
e
f
g
dp K
a
b
c
d
e
f
g
dp K
LED 0
. . .
.
.
.
T8
T1
PB7
.
.
.
PB0
Sơ đồ kết nối bộ hiển thị
Nguyên lý hoạt động:
Bộ hiển thị theo phương pháp quét cho phép các LED trong bộ hiển thị sử dụng chung port xuất dữ liệu. Dữ liệu chứa trong các ô nhớ ở dạng nhị phân, do đó trước khi đưa vào các LED chúng phải được chuyển sang mã 7 đoạn, việc này được thực hiện bởi chương trình đổi mã đèn.
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
3F
06
5B
4F
66
6D
7D
07
7F
67
77
7C
39
5E
79
71
Mã 7 đoạn của các số HEX
Việc quét đèn được thực hiện như sau: CPU xuất dữ liệu của đèn thứ nhất ra port C, kế đó CPU xuất dữ liệu quét ra port B để chọn đèn thứ nhất, lúc đó các đèn khác đều tắt do không được chọn. Sau một khoảng thời gian trì hoãn để hiển thị, dữ liệu 00H được đưa ra port C để tắt đèn. Dữ liệu của đèn thứ hai tiếp tục được đưa ra port C và dữ liệu chọn đèn thứ hai được đưa ra port B để cho phép đèn thứ hai hiển thị ... Sau khi quét đến đèn cuối cùng thì quá trình lại được lặp lai từ đèn thứ nhất. Tốc độ quét phải đủ lớn để tất các các số xuất hiện trên các đèn được cảm nhận đồng thời.
d. Giao tiếp ngoại vi:
CPU giao tiếp với thế giới bên ngoài qua các thiết bị giao tiếp ngoại vi. Trong thiết kế sử dụng 2 vi mạch 8255A nên có được 6 port giao tiếp. Các 8255A này hoạt động theo chế độ I/O. Vi xử lý 8085A có thể định số địa chỉ I/O tối đa là 256 port, các địa chỉ được chọn cho các 8255A là:
Địa chỉ (Hexa)
Port
10H
Port A của 8255A-I
11H
Port B của 8255A-I
12H
Port C của 8255A-I
13H
Port điều khiển của 8255A-I
20H
Port A của 8255A-II
21H
Port B của 8255A-II
22H
Port C của 8255A-II
23H
Port điều khiển của 8255A-II
Sử dụng vi mạch 74LS138 kết hợp với một số cổng OR để giải mã địa chỉ cho các vi mạch giao tiếp 8255A.
Các đường địa chỉ
HEXA
A7
A6
A5
A4
A3
A2
A1
A0
0
0
0
1
0
0
x
x
10H-13H
0
0
1
0
0
0
x
x
20H-23H
Địa chỉ hoạt động của các vi mạch 8255A.
Dùng 74LS138 với các ngõ vào A, B và C là các đường địa chỉ A4, A5, và A6. Các đường địa chỉ A0, A1 vào trực tiếp các 8255A. Như vậy, nếu không sử dụng các đường địa chỉ A2, A3 và A7 thì các địa chỉ 14H, 18H, 90H và địa chỉ 10H được xem là như nhau, tương tự như vậy cho các địa chỉ khác.
Để định địa chỉ chính xác tuyệt đối thì phải sử dụng các cổng OR và các đường địa chỉ A2, A3 và A7.
Tới
CS\
8255A-II
Tới
CS\
8255A-I
74138
A4
A5
A6
IO/M\
A
B
C
G1
G2A\
G2B\
A2
A3
A7
A2 + A3
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
A2 + A3 + A7
Sơ đồ kết nối giải mã địa chỉ cho giao tiếp ngoại vi
e. Jumper RAM/ROM:
Chân 27 là Vpp đối với EPROM và là WR\ đối với RAM, ta có thể thay đổi chức năng RAM/ROM bằng cách đặt một jumper nối chân này lên Vcc nếu là EPROM và nối với WR\ của CPU nếu là RAM. Chân 1 là NC nếu là EPROM và là chân CS1 nếu là RAM, vì thế chân này luôn được nối lên Vcc.
6264/
2764
Vcc Vcc
WR\
1
27
RAM/ROM jumper
Sơ đồ kết nối
III. Phần mềm:
1. Chương trình quét phím:
Chương trình sẽ quét bàn phím để kiểm tra xem có phím nào được ấn hay không. Nếu phát hiện có phím được ấn thì chương trình sẽ nhận ra phím đó bằng cách xác định mã hàng và mã cột của phím đó rồi tra bảng để lấy mã của phím.
2. Chương trình quét đèn:
Dữ liệu cần hiển thị được chứa trong bộ nhớ dưới dạng nhị phân. Để hiển thị được trên LED 7 đoạn thì các dữ liệu này phải được đổi sang mã 7 đoạn, chương trình sẽ giúp CPU thực hiện công việc này đồng thời cũng còn thực hiện chức năng quét đèn để hiển thị dữ liệu lần lượt trên từng đèn vì thế mạch hiển thị được đơn giản.
3. Chương trình minh họa:
; CHUONG TRINH LAY MA PHIM AN
GET:
LDA (KEYIN)
ANI 1Fh
CPI 1Fh
RZ ; khong co phim an
MVI B, 00h
LPROW:
RRC
JNC ROWFD ; co phim duoc an
INR B ; hang ke tiep
JMP LPROW
ROWFD:
PUSH B ; luu vi tri hang
MVI B, 00h
MVI A, 0FEh ; bat dau tu cot 0
LPCOL:
MOV D, A
STA (DRIVE)
LDA (KEYIN)
ANI 1Fh
CPI 1Fh
JNZ COLFD
MOV A, D
RLC
RNC ; du 8 cot
INR B
JMP LPCOL
COLFD: ; B = vi tri cot
POP AF ; lay lai vi tri hang
STC
CMC ; cy = 0
RAL
RAL
RAL ; hang = hang * 8
ADD B ; ma phim = hang*8 +cot
PUSH AF
LPFD:
CALL DLDIS1 ; tri hoan co hien thi
MVI A, 00h
STA (DRIVE)
LDA (KEYIN)
ANI 1Fh
CPI 1Fh
JNZ LPFD ; doi nha phim
CALL DLDIS ; tri hoan co hien thi
POP AF
LXI H, KEYTBL ; lay bang tra ma phim
CALL ADDAX
MOV A, M ; tra ma phim
STA (KEY) ; luu ma phim
MVI A, 01h
STA (KEYFLG) ; bao co phim duoc an
RET
; BANG TRA MA PHIM
KEYTBL:
DEFB 00h ; 0
DEFB 01h ; 1
DEFB 02h ; 2
DEFB 03h ; 3
DEFB 04h ; 4
DEFB 05h ; 5
DEFB 06h ; 6
DEFB 07h ; 7
DEFB 08h ; 8
DEFB 09h ; 9
DEFB 0Ah ; A
DEFB 0Bh ; B
DEFB 0Ch ; C
DEFB 0Dh ; D
DEFB 0Eh ; E
DEFB 0Fh ; F
DEFB 10h ; G
DEFB 11h ; H
DEFB 12h ; I
DEFB 13h ; J
DEFB 14h ; K
DEFB 15h ; L
DEFB 16h ; M
DEFB 17h ; N
DEFB 18h ; O
DEFB 19h ; P
DEFB 1Ah ; Q
DEFB 1Bh ; R
DEFB 1Ch ; S
DEFB 1Dh ; T
DEFB 1Eh ; U
DEFB 1Fh ; V
DEFB 20h ; W
DEFB 21h ; X
DEFB 22h ; Y
DEFB 23h ; Z
; phim chuc nang
DEFB 80h ; ESC
DEFB 81h ; PC
DEFB 82h ; '-'
DEFB 83h ; '+'
; CHUONG TRINH HIEN THI DU LIEU RA LED 7 DOAN
PUT:
MVI A, 0FEh ; tu den so 0
LHLD (DISPTR) ; con tro den vung dem hien thi
MUX:
PUSH AF
MOV A, M
STA (SEGDRV)
POP AF
STA (DRIVE)
PUSH AF
PUSH H
CALL DLPUT ; tri hoan de nhin thay
MVI A, 00h
STA (SEGDRV)
STA (DRIVE)
LDA (KEYIN)
ANI 1Fh
CPI 1Fh
JZ LP002 ; khong co phim an
CALL GET ; doc ma phim
LP002:
LXI H, LP1
PUSH H
LHLD (MNPTR) ; thi hanh chuong trinh co dia chi
PCHL ; duoc MNPTR chi den
LP1:
POP H
POP AF
RLC
JNC PUT ; het 8 den, bat dau lai tu den 0
INX H
JMP MUX ; den ke tiep
; GIAI MA SO HEX RA LED 7 DOAN
DISCOD:
PUSH B
PUSH D
PUSH H
MVI B, 04h
LXI H, HEXBUF ; vung dem hien thi
LP01:
MOV A, M
ANI 0F0h
RRC
RRC
RRC
RRC
MOV D, A
MOV A, M
ANI 0Fh
MOV E, A
PUSH D
INX H
DCR B
JNZ LP01
LXI H, DISBUF + 7
MVI B, 04h
LP02:
POP D
MOV E, D
CALL SUBDIS
DCX H
CALL SUBDIS
DCX H
DCR B
JNZ LP02
POP H
POP D
POP B
RET
; Tra ma LED
SUBDIS:
MOV A, E
PUSH H
LXI H, DISTBL ; lay bang tra ma LED
CALL ADDAX
MOV A, M
POP H
MOV M, A
RET
; BANG TRA MA LED 7 DOAN
DISTBL:
DEFB 3Fh ; 0
DEFB 06h ; 1
DEFB 5Bh ; 2
DEFB 4Fh ; 3
DEFB 66h ; 4
DEFB 6Dh ; 5
DEFB 7Dh ; 6
DEFB 07h ; 7
DEFB 7Fh ; 8
DEFB 6Fh ; 9
DEFB 77h ; A
DEFB 7Ch ; B
DEFB 39h ; C
DEFB 5Eh ; D
DEFB 79h ; E
DEFB 71h ; F
; CHUONG TRINH CONG A VAO HL
ADDAX:
PUSH B
MVI B, 00h
MOV C, A
DAD B
POP B
RET
; CHUONG TRINH DOC PHIM
RDKEY:
MVI A, 00h
STA (KEYFLG)
LDA (KEY)
RET
; CAC CHUONG TRINH DELAY
DLKP:
PUSH H
LXI H, 6000h
JMP LPDL
DLPUT:
PUSH H
LXI H, 0080h
JMP LPDL
DLAYHL:
PUSH H
LPDL:
DCX H
MOV A, H
CPI 00h
JNZ LPDL
MOV A, L
CPI 00h
JNZ LPDL
POP H
RET
; CHUONG TRINH DELAY VAN HIEN THI
DLDIS:
PUSH AF
PUSH B
MVI B, 08h
LAB1:
CALL DLDIS1
DCR B
JNZ LAB1
POP B
POP AF
RET
DLDIS1:
MVI A, 0FEh
STA (DRIVE)
LDA (DISBUF)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0FDh
STA (DRIVE)
LDA (DISBUF + 1)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0FBh
STA (DRIVE)
LDA (DISBUF + 2)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0F7h
STA (DRIVE)
LDA (DISBUF + 3)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0EFh
STA (DRIVE)
LDA (DISBUF + 4)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0DFh
STA (DRIVE)
LDA (DISBUF + 5)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 0BFh
STA (DRIVE)
LDA (DISBUF + 6)
STA (SEGDRV)
CALL DLPUT
MVI A, 00h
STA (SEGDRV)
MVI A, 7Fh
STA (DRIVE)
LDA (DISBUF + 7)
STA (SEGDRV)
CALL DLPUT
RET
; CAC NHAN SU DUNG
MNPTR EQU 5F20h
DISPTR EQU 5F30h ; con tro den vung dem hien thi
DISBUF EQU 5F40h ; vung dem hien thi
HEXBUF EQU 5F48h ; vung dem so HEXA
KEY EQU 5F70h ; chua ma phim
KEYFLG EQU 5F80h ; =1 neu co phim nhan
KEYIN EQU 8000h
DRIVE EQU 8001h
SEGDRV EQU 8002h
SYSIO EQU 8003h
Các file đính kèm theo tài liệu này:
- DAVM.DOC