Có rất nhiều cách để chỉ vị trí của số liệu như trình bày sau đây: Định địa chỉ trực tiếp bằng thanh ghi: Trong phương pháp này, toán hạng là kí hiệu của các thanh ghi và dữ liệu cần xử
Trang 1CHƯƠNG I GIỚI THIỆU CHUNG
Trang 2I LỊCH SỬ PHÁT TRIỂN CỦA VI XỬ LÍ
1 Tóm tắt lịch sử phát triển của vi xử lí:
Sự phát triển của Vi xử lí có thể chia ra thành 5 thế hệ sau:
Thế hệ thứ nhất (1971 - 1973):
Năm 1971, trong khi phát triển các vi mạch cho máy tính cầm tay, INTEL đã cho ra đời máy tính đầu tiên là 4004 (4 bit số liệu) và 8008 (8 bit) đặc điểm chung của Vi xử lí thế hệ này này là:
Độ dài từ thường là 4 bit (có thể dài thêm)
Công nghệ chế tạo PMOS (tốc độ thấp, giá rẻ, khả năng đưa
ra dòng tải nhỏ)
Tốc độ thực hiện lệnh là 1 –10 µs/lệnh với tần số xung đồng hồ là 0,1 – 0,8 MHz
Tập lệnh đơn giản, cần có nhiều vi mạch phụ trợ
Thế hệ thứ 2 (1974 - 1977):
Đại diện cho thế hệ này là các Vi xử lí 8080, 8085 của INTEL và 6800, 6809 của MOTOROLA và Z80 của ZILOG Ở thế hệ này, các Vi xử lí có tập lệnh phong phú hơn, có khả năng phân biệt địa chỉ bộ nhớ với dung lượng 64 Kbyte Một số Vi xử lí có khả năng phân biệt đươc 265 địa chỉ cho các thiết bị ngoại vi Tất cả các Vi xử lí thế hệ này là được sản xuất bằng công nghệ NMOS hoặc CMOS, tốc độ thực hiện lệnh là 1 – 8 µs/lệnh với tần số xung đồng hồ là 1 – 5 MHz
Thế hệ thứ 3 (1978 - 1982):
Đại diện cho thế hệ này là các bộ Vi xử lí 8086/80186/80286 của INTEL và 68000 /68010 của MOTOROLA Điểm ưu việt của các Vi xử lí thế hệ này so với các thế trước đó là chúng có tập lệnh đa dạng với các lệnh nhân, chia và lệnh thao tác với chuỗi kí tự Khả năng phân biệt địa chỉ cho bộ nhớ hoặc các thiết bị ngoại
vi từ 1 Mbyte đến 16 Mbyte Các Vi xử lí thế hệ này được sản xuất bằng công nghệ HMOS và cho phép đạt được tốc độ từ 0,1 µs/lệnh - 1µs/lệnh với tần số đồng hồ là 5 – 10 MHz
Thế hệ thứ 4 (1983 - 1989):
Các bộ Vi xử lí đại diện cho thế hệ này là các vi xử lí 32 bit 80386/80486 và 64 Bit Pentium của INTEL, các vi xử lí 32 Bit 68020/68030/68040/68060 của MOTOROLA Đặc điểm của các Vi xử
lí thế hệ này là Bus địa chỉ đều là 32 Bit và có khả năng làm việc với bộ nhớ ảo Các bộ vi xử lí này đều có bộ quản lí bộ nhớ (MMU)
Trang 3và nhiều khi có cả các bộ đồng xử lí toán học ở bên trong Các Vi xử lí thế hện này đều được sản xuất bằng công nghệ HCMO.
Thế hệ thứ 5 (1990 - ?):
Trang 43 Cấu tạo cơ bản của vi xử lí:
Về cơ bản vi xử lí có thể chia làm 3 khối chính:
Đơn vị số học – logic (arithmatic – logic unit):
Cơ sở của đơn vị số học - logic là một mạch cộng n bit, mạch cộng này còn được mở rộng thêm để thực hiện các phép xử lí khác nhau như tính số bù bậc hai, phép trừ, các hàm logic
Các thanh ghi (Registers):
Thanh ghi giống như ô nhớù bên trong vi xử lí, điểm khác biệt
ở chỗ là thanh ghi được phân biệt bằng tên thay vì bằng địa chỉ như ô nhớù Thanh ghi dùng để chứa dữ liệu, các kết quả trung gian của phép tính, số lượng thanh ghi ảnh hưởng rất lớn đến tốc độ xử
lí vì số lần truy xuất bộ nhớ sẽ ít đi Vì vậy, các vi xử lí hiện đại thường có nhiều thanh ghi
Đơn vị điều khiển (Control unit):
Là phần quan trọng nhất trong vi xử lí, mọi hoạt động của máy tính được phối hợp một cách chặt chẽ bởi các tín hiệu được tạo ra từ đơn vị điều khiển
Máy tính thi hành tuần tự từng chỉ thị của chương trình cho đến khi có lệnh dừng hoặc thao tác vòng lặp Chương trình điều khiển được chứa trong bộ nhớ dưới dạng tổ hợp các bit gọi là mã đối tượng Nhưng để dễ viết chương trình một chỉ thị thường được viết dưới dạng gợi nhớ
Ở dạng gợi nhớ một chỉ thị được chia làm hai phần:
Mã công tác (operation code): Cho biết thao tác mà vi xử lí phải thực hiện
Toán hạng (operand): Được viết theo sau mã công tác, cho biết vị trí dữ liệu cần phải xử lí Ở dạng mã đối tượng, một chỉ thị được tạo nên từ một hoặc nhiều byte Byte đầu tiên chính là mã công tác Quá trình thi hành một chỉ thị được chia làm hai giai đoạn:
Giai đoạn 1: Nhập mã công tác vào thanh ghi chỉ thị bằng
một chu kì đọc dữ liệu của ô nhớ có nội dung của bộ đếm chương trình
Giai đoạn 2: Thi hành chỉ thị bao gồm cả việc đọc các byte
kế tiếp trong bộ nhớ (đối với các chỉ thị nhiều byte) Sau đó, các toán hạng được xử lí theo qui định của mã công tác
Trong thực tế hai giai đọan thi hành chỉ thị nêu trên lại được chia làm nhiều bước nhỏ gọi là vi chỉ thị Đơn vị điều khiển phát
Trang 5ra tín hiệu để điều khiển các vi chỉ thị theo một chương trình gọi là chương trình vi mô.
4 Đặc điểm của vi xử lí:
Độ dài từ dữ liệu (Data word): Đây là đặc điểm quan trọng
của vi xử lí, nói lên khả năng trao đổi dữ liệu giữa vi xử lí với các thiết bị khác Hiện nay, có nhiều vi xử lí với độ dài từ dữ liệu từ: 8bit, 16 bit, 32 bit, 64 bit Bảng dưới đây liệt kê một số vi xử lí 8 bit thông dụng:
Ưu điểm của vi xử lí nhiều bit là:
Cùng thời gian truy xuất bộ nhớ thì lượng thông tin thì lượng thông tin truyền đi nhiều hơn
Độ chính xác cũng tăng mà không làm tăng thời gian tính toán
Độ dài từ dữ liệu tăng cũng làm tăng số lượng dây dẫn trong bus dữ liệu Do đó số chân vi xử lí cũng phải nhiều Điền này được giải quyết bằng cách dùng phương pháp đa lộ thời gian (Timer multiplexer), phương pháp này làm giảm vận tốc truyền dữ liệu Dưới đây là một số vi xử lí 16 bit thông dụng:
Độ dài từ địa chỉ: Độ dài 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 cần thiết cho việc định địa chỉ (thanh ghi địa chỉ, bộ đếm chương trình) cũng phải có kích thước tương ứng Thông thường độ dài từ địa chỉ
ít nhất là 16 bit tương đương 64K địa chỉ
Tập lệnh và các cách đặt địa chỉ : Tập lệnh (Instruction Set)
là tập hợp tất cả các lệnh điều khiển vi xử lí Do cấu tạo phân cứng khác nhau nên mỗi vi xử lí có một tập lệnh khác nhau Số lượng các lệnh cơ sở (không kể khả năng định địa chỉ khác nhau)
Trang 6đối với vi xử lí 8 bit khoảng từ 50 đến 80, vi xử lí 16 bit còn có thêm các lệnh phức tạp cho đơn vị số học – logic và khối xuất - nhập nên có vào khoảng 90 lệnh.
Cấu tạo một lệnh gồm hai phần: Mã công tác cho biết thao tác mà máy phảùi thực hiện, và toán hạng cho biết vị trí của lệnh cần xử lí Có rất nhiều cách để chỉ vị trí của số liệu như trình bày sau đây:
Định địa chỉ trực tiếp bằng thanh ghi: Trong phương pháp này, toán hạng là kí hiệu của các thanh ghi và dữ liệu cần xử lí là nội dung chứa trong thanh ghi đó
Định địa chỉ gián tiếp bằng thanh ghi: Trong trường hợp này
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 vị trì nơi chứa địa chỉ của số liệu
Định địa chỉ trực tiếp: Toán hạng là địa chỉ của dữ liệu cần
Công nghệ chế tạo linh kiện
Số lượng nguồn cung cấp
Tần số xung đồng hồ
Khả năng truy xuất bộ nhớ: 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í Các vi xử lí đầu tiên bị giới hạn về khả năng truy xuất bộ nhớ Vi xử lí 4004 có
14 đường địa chỉ nên có thể truy xuất được 214 = 16384 ô nhớ Vi xử
lí 8 bit có 16 đường địa chỉ nên có thể truy xuất được 216 = 65536 ô nhớ Vi xử lí 32 bit như 80386 hay 68020 có thể truy xuất 4G ô nhớ Vi xử lí có khả năng truy xuất bộ nhớ càng lớn nên có thể truy xuất các chương trình lớn Tùy theo ứng dụng cụ thể mà chọn
vi xử lí thích hợp
Tốc độ làm việc của vi xử lí: Tần số xung clock cung cấp cho
vi xử lí làm việc quyết định đến tốc độ làm việc của vi xử lí Vi xử
lí có tốc độ làm việc càng lớn thì khả năng xử lí lệnh càng nhanh Tần số xung clock làm việc của các vi xử lí được cho bởi các nhà chế tạo
Trang 7Tên Tần số xung clock Chiều dài từ dữ
II CẤU TRÚC PHẦN CỨNG VI XỬ LÍ 8085A
1 GIỚI THIỆU CHUNG
a Các họ vi xử lí 8 bit:
Vi xử lí 8 bit là sự cải tiến của vi xử lí 4 bit Các vi xử lí này
ra đời vào thập niên 70, có rất nhiều hãng chế tạo ra vi xử lí 8 bit như Intel, Motorola, Zilog…
Các vi xử lí của Intel luôn bắt đầu từ các con số 80XX, được tính từ vi xử lí 8 bit trở về sau như 8085, 8086, 80186
Bảng sau đây sẽ liệt kê một số vi xử lí của hãng Intel:
Trang 8Tên Năm Chiều dài thanh
Chú ý : K = Kilo(210) , M = Mega(220) , T = Tera(240)
b Các đặc tính cơ bản của Vi xử lí 8085A:
Vi xử lí 8085A là một vi xử lí bit kênh N có các đặc tính sau:
Nguồn nuôi 5v ± 10% ; I max = 170 mA
Tần số xung đồng hồ 6 Mhz
Mạch tạo xung đồng hồ được tích hợp, có thể dùng thạch anh,
RC hoặc LC ráp thêm bên ngoài
Chức năng điều khiển hệ thống được tích hợp trên mạch
Có 4 vectơ ngắt: Trong đó có một yêu cầu ngắt không che được (Non-markable interrupt) và một tích hợp với 8080A
Có cổng I/O nối tiếp
Phần mềm tương thích 100% với 8080A
Thực hiện được các phép tính số học: Thập phân, nhị phân và số 16 bit
Định địa chỉ trực tiếp 64 Kbyte ô nhớ
Họ 8085 của hãng Intel là một sản phẩm mới có tập lệnh tương thích 100% với họ 8080A và được thiết kế nhằm tăng tốc độ làm việc của hệ thống dùng 8080 trước đây, nhờ mật độ tích hợp cao của vi mạch cho phép giảm tới mức tối thiểu số lượng linh kiện Trong mạch còn 3 IC cơ bản: 8085(CPU); 8155(RAM) và 8355/8755 (ROM/PROM), 8085 còn kết hợp tất cả các tính năng của vi mạch tạo xung đồng hồ 8224 và vi mạch điều khiển hệ thống 8228
Trang 9Vi xử lí 8085 có cấu tạo Bus dữ liệu đa lộ, địa chỉ được tách
ra từ 8 bit chung địa chỉ/dữ liệu, chốt địa chỉ bên trong của vi mạch nhớ 8155/8355/8755 cho phép ghép trực tiếp với 8085
2 CẤU TRÚC PHẦN CỨNG 8085:
a Sơ đồ chân:
Hình 2 1: Sơ đồ chân của Vi xử lí 8085
b Chức năng, dạng tín hiệu, trạng thái các chân của
vi xử lí 8085 được liệt kê ở bảng sau:
3 state
Ý nghĩa
1 , 2 X1 , X2 I X1, X2: là hai ngõ vào đặt thạch anh, mạch
RC, LC để xác định tần số xung đồng hồ, có thể đưa xung dao động ngoài vào X1 thay cho thạch anh
CPU đang trong trạng thái Reset, có thể dùng để đặt lại hệ thống
điều khiển bởi lệnh SIM
5 SID I Serial input data: Ngõ vào nối tiếp được
đặt vào bit 7 của bộ tích lũy khi thi hành chỉ thị RIM
được nhận dạng cùng lúc như INTR và có mức ưu tiên cao nhất trong các yêu cầu
A9 A10 A12
A15 A14 A11
X2
SOD TRAP
AD1
X1
RESET SID
RST 7.5 RST 6.5 RST 5.5 INTR INTA\
AD0 AD2 AD3 AD4 AD5 AD6 AD7
VSS A8
A13
S0ALE WR\RD\
S1IO/M\READYRESET IN CLK OUT HLDA HOLDVcc
Trang 10công dụng chung, ngắt chỉ được lấy mẫu trong suốt chu kì xung đồng hồ cuối cùng của chỉ thị Khi ngắt tác động đến bộ đếm chương trình sẽ không tăng nội dung và tín hiệu INTA\ sẽ được tạo ra trong suốt chu
kì lệnh Restart hoặc CALL có thể được chèn vào để nhảy đến chương trình phục vụ ngắt, INTR được cho phép và ngăn bằng phần mềm Ngắt này mất hiệu lực khi reset và được chấp nhận tức thời sau một ngắt khác
RD\ trong chu kì lệnh sau khi một INTR chấp nhận, tín hiệu này có thể được dùng để tác động vi xử lí ngắt 8259 hoặc các cổng ngắt khác
địa chỉ của bộ nhớ hoặc cổng I/O trong khoảng thời gian chu kì xung đồng hồ đầu tiên và là 8 bit dữ liệu trong khoảng chu kì đồng hồ thứ hai và thứ ba, các chân này ở trạng thái Z cao trong chế độ HOLD và HALT
21-28 A15-A8 0-3 Byte cao địa chỉ của bộ nhớ 8 bit, các chân
này ở trạng thái Z cao trong các chế độ HOLD và HALT
ở mức cao trong khoảng thời gian chu kì đồng hồ đầu tiên (lúc này các chân AD0-AD7 là byte thấp địa chỉ), cho phép địa chỉ được đưa vào chốt địa chỉ trên mạch ngoại
vi, các chân này được treo lên trạng thái Z cao trong chế độ HOLD và HALT
ghi vào bộ nhớ hoặc cổng I/O, dữ liệu được thiết lập lại tại cạnh xuống của xung WR\, chân này treo lên trạng thái Z cao ở chế độ HOLD và HALT
Trang 1132 RD\ 0-3 Read: Dữ liệu được đọc từ bộ nhớ hoặc cổng
I/O và truyền trên bus dữ liệu, ở trạng thái
Z cao trong chế độ HOLD và HALT
IO/M\
0-3 Ba bit này cho biết trạng thái chu kì máy
kì đọc hoặc ghi có nghĩa là bộ nhớ hoặc thiết bị ngoại vi đã sẵn sàng để gởi hoặc nhận dữ liệu Khi Ready ở mức thấp CPU sẽ chờ trước khi hoàn tất chu kì đọc/ghi
không, xóa cờ cho phép ngắt và FF HOLDA, các cờ và các thanh ghi khác không ảnh hưởng (ngoại trừ thanh ghi chỉ thị), CPU sẽ duy trì trạng thái reset khi chân này ở mức thấp
tần số dao động tại X1
hiệu này để yêu cầu CPU nhường quyền sử dụng bus địa chỉ và dữ liệu , khi nhận được yêu cầu này CPU sẽ nhường bus ngay sau khi hoàn tất chu kì máy hiện hành CPU chỉ có thể chiếm lại bus khi không còn tín hiệu HOLD , khi chấp nhận lệnh HOLD của các đường địa chỉ , dữ liệu , RD\ , WR\ , IO/M\ và ALE được treo lên trạng thái Z cao
38 HLDA O Hold acknowledge : Tín hiệu ra cho biết
CPU đã chấp nhận yêu cầu HOLD và nó sẽ nhường bus trong chu kì đồng hồ kế tiếp , HOLDA về mức thấp khi không còn yêu cầu HOLD , CPU chiếm lại bus trong vòng nữa chu kì đồng hồ sau khi HOLDA ở mức thấp
c Giản đồ thời gian của chu kì bus
Trang 12Hình 1.2 : Giản đồ của chu kì đọcMỗi chu kì bus tương đương với chu kì máy Mối liên hệ thời gian của các tín hiệu luôn khác nhau đối với mỗi loại chu kì máy
8085 có 4 loại chu kì máy: chu kì READ, chu kì WRITE, chu kì INTERRUPT ACKNOWLEDGE và chu kì DMA
Đối với chu kì đọc, có 3 sự thay đổi: đọc bộ nhớ, đọc IO và đón giải mã lệnh Sơ đồ thời gian đọc bộ nhớ hoặc đọc IO không có trạng thái chờ
Ở chu kì T1 , bus AD7-AD0 đóng vai trò là bus địa chỉ A7-A0, tín hiệu ALE lên mức logic 1 ở chu kì T1 nên tín hiệu ALE dùng để chốt 8 bit địa chỉ thấp A7-A0 vào một IC chốt Tín hiệu RD\ vẫn ở mức logic 1 nên quá trình giao tiếp dữ liệu chưa xảy ra
Ở chu kì T2 và T3 , bus AD7-AD0 đóng vai trò là bus dữ liệu
D7-D0 Tín hiệu ALE lên mức logic 0 nên địa chỉ trong IC vẫn không thay đổi Tín hiệu RD\ xuống mức logic 0 nên bus dữ liệu
D7-D0 chưa đóng vai trò là bus nhận dữ liệu
Trong cả 3 chu kì T1, T2 , T3 các đường địa chỉ A15- A8, IO/M\ , S1 , S2, vẫn ở ổn định trạng thái Trong chu kì bus D7-D0
nhận dữ liệu các bit địa chỉ A7-A0 được chốt trong IC chốt và các bit địa chỉ cao A15-A8 vẫn không thay đổi nên vi xử lí sẽ nhận đúng dữ liệu của ô nhớ cần truy xuất
Vi xử lí đang đọc bộ nhớ I/O chỉ được phân biệt bằng tín hiệu IO/M\ Chu kì máy thực hiện một lệnh gồm 4 đến 6 chu kì xung clock Chu kì thực hiện được chia làm hai quá trình đón lệnh và
Trang 13thực hiện lệnh Quá trình đón lệnh giống như quá trình đọc bộ nhớ tốn khoảng 3 chu kì xung clock từ T1 đến T3 Quá trình giải mã và thực hiện lệnh tốn thêm 1 đến 3 chu kì xung clock từ T4 đến T6 tùy theo độ phức tạp của lệnh.
Trong trường hợp vi xử lí có tốc độ làm việc cao hơn bộ nhớ khi có dữ liệu truy xuất sẽ bị sai Ở chu kì đọc từ bộ nhớ hay ghi dữ liệu lên bộ nhớ luôn xảy ra ở chu kì T2 và T3 Nếu bộ nhớ có tốc độ làm việc chậm hơn không kịp gởi dữ liệu ra ở 2 chu kì này thì
vi xử lí sẽ nhận một dữ liệu không xác định hay dữ liệu gởi đến bộ nhớ sẽ bị mất Trường hợp này được xử lí bằng cách xen thêm một vài chu kì xung clock vào giữa chu kì T2 và T3 bằng cách dùng chân tín hiệu vào READY Các chu kì xung clock thêm vào gọi là các chu
kì đợi TW
Hình 1.3Giản đồ thời gian của các tín hiệu khi vi xử lí bị tác động bởi các tín hiệu ngắt khác nhau Trong một quá trình ngắt, vi xử lí sẽ mất một vài chu kì để thực hiện yêu cầu ngắt đó tùy thuộc vào lệnh được cung cấp bởi thiết bị ngắt đó
Khi tác động đến INTR , chu kì máy đầu tiên dùng đều nhập lệnh cần thực hiện Do đó, ngắt INTR có cùng giản đồ thời gian ở chu kì T1 và tín hiệu INTA\ được gởi đi thay thế cho tín hiệu RD\ và trạng thái của nó dùng để báo cho thiết bị yêu cầu ngắt biết vi xử lí chấp nhận yêu cầu ngắt này nếu ở mức logic 0
Nếu lệnh ngắt là lệnh Restart thì vi xử lí cần thêm hai chu
kì máy ghi dữ liệu vào bộ nhớ để cất địa chỉ trở về sau khi thực hiện xong chương trình
Khi Vi xử lí làm việc thì cả 3 Bus ddữ liệu, điều khiển, địa chỉ do vi xử lí sử dụng và DMA ở trạng thái ngừng làm việc, khi muốn chuyển dữ liệu DMA sẽ tác động đến ngõ vào HOLD của Vi
Trang 14xử lí Nếu Vi xử lí chấp nhận thì nó sẽ trả lời bằng cách tác động đến ngõ HLDA ở mức logic 1 và các ngõ ra dữ liệu, địa chỉ và điều khiển ở trạng thái tổng trở cao để không ảnh hưởng đến dữ liệu.
Vi xử lí luôn kiểm tra ngõ vào HOLD, nếu tín hiệu này xuống mức logic 0 thì Vi xử lí sẽ trở lại thực hiện đúng công việc đang xử lí
Hình 1.4
d Sơ đồ khối của vi xử lí:
Cấu trúc của tất cả các vi xử lí đều có các khối cơ bản như ALU, các thanh ghi, khối điều khiển là các mạch logic Để nắm rõ nguyên lí làm việc của vi xử lí cần phải khảo sát nguyên lí kết hợp các khối với nhau để xử lí một chương trình
Sơ đồ khối của vi xử lí sẽ trình bày cấu trúc của một vi xử
lí Mỗi vi xử lí khác nhau đều có cấu trúc khác nhau Ví dụ vi xử
lí 8 bit sẽ khác với vi xử lí 16 bit
Với mỗi vi xử lí đều có một sơ đồ cấu trúc bên trong và được cho trong các sổ tay của nhà chế tạo Sơ đồ cấu trúc ở dạng khối rất tiện lợi và dễ trình bày nguyên lí hoạt động của vi xử lí :
Trang 15Hình 1.5 :Sơ đồ cấu trúc của Vi xử líTrong sơ đồ khôái của vi xử lí bao gồm các khối chính như sau: Khối ALU, các thanh ghi, khối Control logic Ngoài ra sơ đồ khối còn trình bày các đường truyền tải tín hiệu từ nơi này đến nơi khác và ngoài hệ thống:
e Chức năng từng khối
α .Chức năng của khối ALU :
ALU là khối quan trọng nhất của vi xử lí, khối ALU chứa các mạch điện logic chuyên về xử lí dữ liệu Khối ALU có hai ngõ vào có tên là “IN” chính là các ngõ vào dữ liệu cho ALU xử lí và một ngõ ra có tên là “OUT” chính là ngõ ra kết quả dữ liệu sau khi ALU xử lí dữ liệu xong Dữ liệu trước khi vào ALU được chứa ở trong thanh ghi đệm (Temporarily register) có tên là Temp 1 và Temp 2 Bus dữ liệu bên trong vi xử lí được kết nối với hai ngõ vào
“IN” của ALU thông qua hai thanh ghi đệm Sự kết nối cho phép ALU có thể lấy bất kì dữ liệu nào trên Bus dữ liệu bên trong vi xử
lí Thường thì ALU luôn lấy dữ liệu từ một thanh ghi đặc biệt có
CK READY RD\ WR\ ALE S0 S1 IO/M\ HOLD HLDA RE.IN RE.OUT A8 A15 AD0 AD7
INTR INTA\ RST 5.5 RST 6.5 RST 7.5 TRAP
Trang 16tên là Accumulator Ngõ ra “OUT” của ALU cho phép ALU có thể gởi kết quả dữ liệu sau khi xử lí xong trên Bus dữ liệu bên trong vi xử lí, do đó thiết bị kết nối với Bus bên trong đều có thể nhận dữ liệu này Thường thì ALU gởi dữ liệu sau khi đã xử lí xong tới thanh ghi Accumulator
Ví dụ khi ALU cộng hai dữ liệu thì một trong hai dữ liệu được chứa trong thanh ghi Accumulator, sau khi phép cộng được thực hiện bởi ALU thì kết quả sẽ gởi trở lại thanh ghi Accumulator và lưu trữ ở thanh ghi này ALU xử lí một dữ liệu hay hai dữ liệu tùy thuộc vào lệnh hay yêu cầu điều khiển, ví dụ khi cộng hai dữ liệu thì ALU sẽ xử lí hai dữ liệu và dùng hai ngõ vào “IN” để nhập dữ liệu , khi tăng một dữ liệu nào đó lên một đơn vị hay lấy bù một dữ liệu, khi đó ALU chỉ xử lí một dữ liệu và chỉ cần một ngõ vào “IN”
Khối ALU có thể thực hiện các phép toán xử lí sau
Subtract Shift right Increment
Như vậy, chức năng chính của khối ALU là làm thay đổi dữ liệu hay chuyên về xử lí dữ liệu nhưng không lưu trữ dữ liệu Để hiểu rõ thêm chức năng đặc biệt của khối ALU cần khảo sát một vi xử lí cụ thể
β Các thanh ghi bên trong của vi xử lí:
Các thanh ghi bên trong có chức năng lưu trữ tạm thời các dữ liệu khi xử lí Trong số các thanh ghi có một vài thanh ghi đặc biệt khi thực hiện các lệnh đặc biệt, các thanh ghi còn lại gọi là các thanh ghi thông dụng Với sơ đồ minh họa ở trên, các thanh ghi thông dụng có tên Reg B, Reg C, Reg D, Reg E Các thanh ghi thông dụng rất hữu dụng cho người lập trình điều này sẽ thấy rõ qua các chương trình Số lượng các thanh ghi thông dụng thay đổi tùy thuộc vào vi xử lí
Số lượng và cách sử dụng các thanh ghi thông dụng tùy thuộc vào cấu trúc của từng vi xử lí, nhưng chúng có một vài điểm cơ bản giống nhau Càng nhiều thanh ghi thông dụng thì vấn đề lập trình đơn giản hơn
Các thanh ghi cơ bản luôn có trong một vi xử lí và Accumulator register(A), Program counter register (PC), Stack pointer(SP), Status register (F), các thanh ghi thông dụng, thanh
Trang 17ghi lệnh (Instruction register), thanh ghi địa chỉ.
Thanh ghi Accumulator:
Thanh ghi Accumulator là một thanh ghi quan trọng của vi xử lí có chức năng lưu trữ dữ liệu khi tính toán Hầu hết các phép toán số học và các phép toán logic đều xảy ra giữa ALU và Accumulator
Ví dụ khi thực hiện một lệnh cộng một dữ liệu A với một dữ liệu B thì một dữ liệu phải chứa trong thanh ghi Accumulator giả sử là Thanh ghi, sau đó sẽ thực hiện lệnh cộng dữ liệu A (chứa trong Accumulator) với dữ liệu B (có thể chứa trong ô nhớ hoặc trong thanh ghi thông dụng), kết quả của lệnh cộng là dữ liệu C sẽ được đặt trong thanh ghi A thay thế cho dữ liệu A trước đó
Chú ý:
Kết quả sau khi thực hiện ALU thường gởi vào thanh ghi Accumulator làm cho dữ liệu trước đó chứa trong Accumulator sẽ bị mất
Một chức năng quan trọng của thanh ghi Accumulator là truyền dữ liệu từ bộ nhớ hoặc từ các thanh ghi bên trong vi xử lí ra các thiết bị điều khiển bên ngoài thì dữ liệu đó phải chứa trong thanh ghi Accumulator
Thanh ghi Accumulator còn nhiều chức năng quan trọng khác sẽ được thấy rõ qua tập lệnh của một vi xử lí cụ thể, số bit của thanh ghi Accumulator chính là đơn vị đo của vi xử lí, vi xử lí 8 bit thì thanh ghi Accumulator có độ dài 8 bit
Thanh ghi PC trong vi xử lí có chiều dài từ dữ liệu lớn hơn chiều dài từ dữ liệu của vi xử lí Ví dụ đối với các vi xử lí 8 bit có 65.536 ô nhớ thì thanh ghi PC phải có chiều dài là 16 bit để có thể truy xuất từng ô nhớ bắt đầu từ ô nhớ 0 đến ô nhớ thứ 65.535
Nội dung chứa trong thanh ghi PC cũng chính là nội dung chứa trong thanh ghi địa chỉ Trước khi vi xử lí thực hiện một
Trang 18chươ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”.
Địa chỉ của lệnh đầu tiên được gởi đến IC nhớ thông qua Bus địa chỉ 16 bit Sau đó bộ nhớ sẽ đặt nội dung của ô nhớ lên Bus dữ liệu Các nội dung này chính là lệnh, quá trình này gọi là đón lệnh từ bộ nhớ Tiếp theo vi xử lí sẽ tự động tăng nội dung của PC để chuẩn bị đón lệnh kế PC chỉ được tăng khi vi xử lí bắt đầu thực hiện lệnh được đón trước đó Một trong những chương trình có thể nạp vào PC một giá trị mới, khi lệnh làm thay đổi PC giá trị mới được thực hiện thì lệnh kế tiếp có thể xảy ra ở một địa chỉ mới
Thanh ghi trạng thái (Status register):
Thanh ghi trạng thái 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 cần kiểm tra Việc lưu trữ các kết quả kiểm tra cho phép người lập trình thực hiện việc rẽ nhánh trong chương trình Khi chương trình rẽ nhánh, chương trình sẽ bắt đầu tại một vị trí mới Trong nhánh rẽ có điều kiện, chương trình rẽ nhánh chỉ được thực hiện khi kết quả kiểm tra thỏa mãn điều kiện Thanh ghi trạng thái sẽ lưu trữ kết quả kiểm tra này
Các bit thường có một thanh ghi trạng thái được trình bày ở hình vẽ sau:
Chức năng các Bit :
Bit S :(Bit Signal): Bit dấu S = 1 Khi kết quả là số âm
S = 0 Khi kết quả là số dương
Z = 0 Khi kết quả khác khôngBit AC (Bit tràn) AC = 0 Khi phép tính không tràn
AC = 1 Khi phép tính bị tràn lên
Bit P (Parity) :Bit chẳn lẽ P = 0 Khi kết quả là số chẳn
P = 1 Khi kết quả là số lẽBit C (Carry) :Bit nhớ C = 0 Khi kết quả không có số nhớ
C = 1 Khi kết quả có số nhớBit x : Không có ý nghĩa
Các lệnh xảy ra trong thanh ghi thường ảnh hưởng đến thanh ghi trạng thái, ví dụ khi thực hiện một lệnh cộng hai dữ liệu 8 bit, nếu kết quả lớn hơn 111111112 thì bit carry có giá trị là
Trang 191, bit carry chứa trong thanh ghi trạng thái Vậy phép cộng làm cho bit carry có giá trị là 1 Ngược lại nếu kết quả của phép cộng có giá trị nhỏ hơn 111111112 thì bit carry có giá trị là 0 Ví dụ lệnh tăng hay giảm giá trị của một thanh ghi, nếu kết quả trong thanh ghi khác 0 thì bit Z bằng 1.
Ý nghiã của các bit trong thanh ghi trạng thái:
1 Carry/ borrow: Là bit carry khi thực hiện một phép cộng có giá trị tùy thuộc vào kết quả của phép cộng Kết quả tràn thì bit carry =1, ngược lại thì carry=0 Là bit borrow khi thực hiện một phép tính trừ: Nếu số bị trừ lớn hơn số trị thì bit borrow = 0, ngược lại thì bit borrow = 1 Bit carry hay bit borrow là 1 bit chỉ được phân biệt khi thực hiện lệnh cụ thể
2 Zero: Bit Z = 1 khi kết quả của phép toán bằng 0, ngược lại bit Z= 0
3 Negative: Bit N = 1 khi bit MSB của thanh ghi có giá trị là 1, ngược lại bit N = 0
4 Intermadiate carry: Giống như bit carry nhưng chỉ có tác dụng đối với phép cộng hay trừ 4 bit thấp
5 Interrupt Flag: Bit IF có giá trị là 1 khi người lập trình muốn cho phép ngắt, ngược lại thì không cho phép ngắt
6 Overflow: Bit này bằng 1 khi bit carry của phép toán cộng với bit dấu của dữ liệu
Parity: Bit này có giá trị là 1 khi kết quả của phép toán là số chẵn, ngược lại thì bit P = 0
Số lượng các bit có trong thanh ghi trạng thái tùy thuộc vào từng vi xử lí Trong một số vi xử lí có thể xóa hoặc đặt các bit trạng thái của thanh ghi trạng thái
Thanh ghi con trỏ ngăn xếp (Stack pointer):
Thanh ghi con trỏ ngăn xếp là một thanh ghi quan trọng của
vi xử lí, độ dài từ dữ liệu thanh ghi SP bằng thanh ghi PC, chức năng của thanh ghi SP gần giống như thanh ghi PC dùng để quản
lí bộ nhớ ngăn xếp khi muốn lưu trữ tạm thời dữ liệu vào ngăn xếp Trong hầu hết các vi xử lí, SP giảm (để chỉ đến ô nhớ tiếp theo trong ngăn xếp) sau khi thực hiện xong lệnh cất dữ liệu vào ngăn xếp Do đó khi được thiết lập giá trị cho thanh ghi SP là địa chỉ cuối cùng của ô nhớ
Stack pointer phải chỉ đến một ô nhớ nào đó do người lập
Trang 20trình thiết lập, quá trình này gọi là khởi tạo con trỏ ngăn xếp Nếu không khởi tạo, con trỏ ngăn xếp sẽ chỉ đến một ô nhớ ngẫu nhiên nào đó Khi đó lệnh cất dữ liệu vào ngăn xếp có thể ghi đè lên dữ liệu quan trọng khác làm chương trình xử lí sai hoặc SP chỉ đến vùng nhớ không phải vùng nhớ của RAM làm chương trình thực hiện không đúng Tổ chức của ngăn xếp là vào sau ra trước (Last in, first out).
Thanh ghi địa chỉ bộ nhớ:
Mỗi khi vi xử lí truy xuất bộ nhớ thì thanh ghi địa chỉ phải tạo ra đúng địa chỉ mà vi xử lí muốn Ngõ ra của thanh ghi địa chỉ phải được đặt lên Bus địa chỉ 16 bit Bus địa chỉ dùng để lựa chọn
ô nhớ hay lựa chọn một port In/Out
Nội dung của thanh ghi địa chỉ ô nhớ và nội dung của thanh ghi PC là giống nhau khi vi xử lí truy xuất bộ nhớ để đón lệnh, khi lệnh đang được giải mã thì PC tăng để đón lệnh tiếp theo, trong khi đó nội dung của thanh ghi địa chỉ bộ nhớ không tăng trong suốt chu kì thực hiện lệnh, nội dung của thanh ghi địa chỉ phụ thuộc vào lệnh đang thực hiện Nếu lệnh yêu cầu vi xử lí truy xuất bộ nhớ thì thanh ghi địa chỉ bộ nhớ được dùng lần thứ hai trong khi thực hiện lệnh
Trong tất cả các vi xử lí, thanh ghi địa chỉ bộ nhớ bằng thanh ghi PC
Thanh ghi lệnh (Instruction Register):
Thanh ghi lệnh dùng để chứa lệnh vi xử lí đang thực hiện Một chu kì lệnh bao gồm đón lệnh từ bộ nhớ và thực hiện lệnh Đầu tiên là lệnh được đón từ bộ nhớ, sau đóù PC chỉ đến lệnh kế trong bộ nhớ Khi một lệnh được đón có nghĩa là dữ liệu trong ô nhớ đó được chép vào vi xử lí thông qua Bus dữ liệu đến thanh ghi lệnh Tiếp theo lệnh sẽ đượïc thực hiện, trong khi thực hiện lệnh, bộ giải mã lệnh đọc nội dung của thanh ghi lệnh Bộ giải mã sẽ giải mã lệnh để báo cho vi xử lí thực hiện chính xác công việc mà lệnh yêu cầu Chiều dài từ dữ liệu của thanh ghi lệnh tùy thuộc vào từng vi xử lí
Thanh ghi lệnh do vi xử lí sử dụng, người lập trình không sử dụng thanh ghi này
Thanh ghi chứa dữ liệu tạm thời (Temporary data Register):
Thanh ghi lưu trữ dữ liệu tạm thời dùng để ALU thực hiện
Trang 21các phép toán xử lí dữ liệu Do ALU không có chức năng xử lí dữ liệu nên bất kì dữ liệu nào đến ngõ vào của ALU đều sẽ xuất hiện
ở ngõ ra
Dữ liệu xuất hiện tại ngõ ra của ALU được quyết định bởi lệnh trong chương trình yêu cầu ALU thực hiện ALU sẽ lấy dữ liệu từ Bus dữ liệu bên trong vi xử lí để xử lí dữ liệu, sau đó đặt dữ liệu vừa xử lí xong trở lại Thanh ghi Accumulator, do đó cần phải có thanh ghi lưu trữ dữ liệu tạm thời để ALU thực hiện Người lập trình không được phép sử dụng thanh ghi này Số lượng thanh ghi tùy thuộc vào từng vi xử lí
χ Khối điều khiển logic (Control logic) và khối giải mã (Instruction decode):
Chức năng của khối giải mã lệnh là nhận lệnh từ thanh ghi lệnh sau đó giải mã để gởi tín hiệu điều khiển đến cho khối điều khiển logic
Chức năng của khối điều khiển logic là nhận lệnh hay tín hiệu điều khiển từ bộ giải mã lệnh, sau đó thực hiện đúng yêu cầu của lệnh Khối điều khiển logic được xem là một vi xử lí nhỏ trong
vi xử lí
Các tín hiệu điều khiển của khối điều khiển logic là các tín hiệu điều khiển bộ nhớ, điều khiển các thiết bị ngoại vi, các đường tín hiệu đọc ghi và các tín hiệu điều khiển vi xử lí từ các thiết bị ngoài Các đường tín hiệu này sẽ được trình bày cụ thể trong sơ đồ của từng vi xử lí cụ thể
Ngõ tín hiệu vào quan trọng nhất của khối điều khiển logic là tín hiệu clock cần thiết cho khối điều khiển logic hoạt động Nếu không có tín hiệu clock thì vi xử lí không làm việc Mạch tạo xung clock là các mạch dao động, tín hiệu được đưa đến ngõ vào clock của vi xử lí Có nhiều vi xử lí tích hợp mạch tạo dao động ở bên trong, khi đó chỉ cần thêm thạch anh bên ngoài
δ Bus dữ liệu bên trong vi xử lí (Internal data bus):
Bus dữ liệu dùng để kết nối các thanh ghi bên trong và ALU với nhau, tất cả các dữ liệu điều khiển chuyển trong vi xử lí đều thông qua Bus dữ liệu này Các thanh ghi bên trong có thể nhận dữ liệu từ Bus hay có thể đặt dữ liệu lên Bus nên Bus này là Bus hai chiều Bus dữ liệu bên trong có thể kết nối ra Bus bên ngoài khi vi xử lí cần truy xuất dữ liệu từ bộ nhớ bên ngoài hay các thiết
bị vào/ra Bus dữ liệu bên ngoài cũng là Bus dữ liệu hai chiều vì vi
Trang 22xử lí có thể nhận dữ liệu từ bên ngoài hay gởi dữ liệu ra.
Để biết trình tự làm việc của Bus dữ liệu bên trong vi xử lí hoạt động như thế nào, hãy cho vi xử lí thực hiện một lệnh cộng hai số nhị phân chứa trong hai thanh ghi: Thanh ghi Accumulator (gọi tắt là A) = 1101 11102 và thanh ghi D = 1101 10102
Trình tự cộng như sau:
Trước khi thực hiện lệnh cộng, nội dung của hai thanh ghi phải chứa hai dữ liệu và hai thanh ghi này có thể đang kết nối với các thiết bị khác Để thực hiện lệnh cộng nội dung hai thanh ghi A và D thì thanh ghi lệnh phải mang đúng mã lệnh của phép cộng này và giả sử lệnh đó là ADD
Dữ liệu của thanh ghi A được đặt lên Bus dữ liệu bên trong vi xử lí, một trong hai thanh ghi lưu trữ dữ liệu tạm thời được kết nối với bus dữ liệu Thanh ghi tạm thời sẽ chép dữ liệu chứa trong thanh ghi A và thanh ghi tạm thời được kết nối với Bus tại thời điểm này
Dữ liệu trong thanh ghi D được kết nối với Bus dữ liệu và thanh ghi tạm thời còn lại cũng được phép kết nối với Bus dữ liệu Thanh ghi tạm thời sẽ chép nội dung thanh ghi D Chỉ có thanh ghi D và thanh ghi tạm thời được kết nối với Bus tại thời điểm này
ALU sẽ cộng trực tiếp hai dữ liệu tại hai ngõ vào Ngõ ra của ALU được kết nối với thanh ghi A, kết quả của phép cộng sẽ được chứa trong thanh ghi A
Sau khi đặt kết quả thanh ghi A và cập nhật sự thay đổi các bit trong thanh ghi trạng thái thì sự kết nối giữa A và ALU chấm dứt Các thanh ghi tạm thời trở lại trạng thái sẵn sàng chờ lệnh tiếp theo
Trang 23CHƯƠNG II THIẾT KẾ PHẦN CỨNG
Trang 24I THIẾT KẾ MAINBOARD
1 Thiết kế bộ nhớ
Bộ nhớ là nơi lưu trữ các chương trình do người thiết kế muốn yêu cầu vi xử lí làm việc, bao gồm các chương trình hệ thống, chương trình phụ Các chương trình này được nạp vào ROM nhằm mục đích tránh mất dữ liệu khi mất điện
a.Đặt vấn đề :
Bộ nhớ phải đủ dung lượng để chứa tất cả các chương trình và dữ liệu cần xử lí Bộ nhớ trong máy tính bao gồm 3 IC nhớ là: 2 EPROM và 1 RAM dung lượng của mỗi linh kiện là 8 Kbyte Mỗi
IC chiếm 13 đường địa chỉ từ A0 - A12 Chương trình hệ thống và các chương trình phụ được nạp lần lượt bắt đầu tại địa chỉ 0000H
đến địa chỉ cuối cùng của ROM là 3FFFH Ngoài ra còn có 1 RAM dùng để chuyển dữ liệu từ ROM ra mạch quang báo Do dung lượng của RAM còn hạn chế nên các câu thông báo cần xuất ra Quang báo tương đối không dài
b Thiết kế chi tiết
Kết nối tổng quát Vi xử lí với bộ nhớ :
Vi xử lí và bộ nhớ giao tiếp qua 3 Bus chính là Bus địa chỉ, Bus dữ liệu và Bus điều khiển Sơ đồ kết nối được minh họa bằng hình ảnh dưới đây:
Hình 2 1Hoạt động :
Trang 25Hoạt động giao tiếp chủ yếu của vi xử lí và bộ nhớ là việc ghi và đọc dữ liệu từ bộ nhớ của vi xử lí Hai hoạt động trên tiến hành theo tuần tự các bước sau :
♦ Hoạt động ghi dữ liệu:
Vi xử lí tạo ra một địa chỉ của ô nhớ cần lưu trữ dữ liệu, sau đó đặt địa chỉ này lên Bus dữ liệu IC giải mã địa chỉ sẽ giúp Vi xử
lí xác định địa chỉ của ô nhớ nào cần lưu trữ dữ liệu
Vi xử lí đặt dữ liệu cần lưu trữ lên bus dữ liệu
Vi xử lí tác động tín hiệu điều khiển lên bus điều khiển, cụ thể là tín hiệu WR\
♦ Hoạt động đọc dữ liệu
Vi xử lí tạo ra một địa chỉ của ô nhớ cần đọc dữ liệu, sau đó đặt địa chỉ lên bus địa chỉ IC giải mã sẽ giúp cho Vi xử lí chọn địa chỉ chính xác
Vi xử lí tác động tín hiệu điều khiển đọc ở bus điều khiển, cụ thể là lệnh RD\
IC nhớ đặt dữ liệu từ ô nhớ đã được chọn lên bus dữ liệu để truyền vào Vi xử lí
Kết nối chi tiết Vi xử lí với bộ nhớ :
Việc kết nối giữa Vi xử lí và bộ nhớ phải nắm rõ các yêu cầu sau:
Vi xử lí 8085 có dung lượng bộ nhớ là 64 Kbyte có địa chỉ từ
0000H - FFFFH (quản lí tất cả 65536 ô nhớ ) Do đó , khi thiết kế thì dung lượng bộ nhớ không quá 64 Kbyte Vì đây là mạch kit điều khiển quang báo nên không cần dung lượng bộ nhớ cao , nên mạch chỉ thiết kế với bộ nhớ có dung lượng là 24 Kbyte bao gồm :
2 EPROM có dung lượng 8 Kbyte/1 IC và một SRAM có dung lượng là 8 Kbyte
Như vậy vùng nhớ 64 kbyte chỉ sử dụng 24 Kbyte đầu tiên có địa chỉ từ 0000H - 5FFFH Trong đó, vùng nhớ của 2 EPROM từ
0000H - 3FFFH, vùng còn lại của SRAM
Sơ đồ kết nối chi tiết: Trang sau
Trang 27Các chân A12 - A0 của các IC nhớ được đưa lên bus địa chỉ và nối vào chân A12 - A0 của vi xử lí Tuy nhiên Vi xử lí 8085 có chân
AD0 - AD7 được tích hợp giữa các đường địa chỉ từ A7 - A0 và đường dữ liệu D7 - D0 Do đó, để tách các chân này ra thì ta phải dùng đến một IC chốt địa chỉ 74373 Hoạt động chốt địa chỉ này được điều khiển bởi Vi xử lí thông qua các chân ALE và HLDA Ngõ ra của IC 74373 được đưa lên bus địa chỉ để nối vào các đường địa chỉ từ A0 - A7
Bus dữ liệu D7 - D0 của các IC nhớ được nối thẳng đến các chân AD7 - AD0 của Vi xử lí Bus dữ liệu là đường trao đổi dữ liệu giữa Vi xử lí với bộ nhớ và các thiết bị ngoại vi nên có thể xuất nhập tùy vào lệnh điều khiển, do đó Bus dữ liệu thường được gọi là Bus 2 chiều (Bi-directional Bus)
Trong mạch quang báo này, cả hai EPROM đều được dùng để chứa chương trình hệ thống và các chương trình con nên Bus dữ liệu giữa ROM với Vi xử lí là Bus một chiều Bus dữ liệu giữa RAM với Vi xử lí là Bus hai chiều
c Thiết kế mạch giải mã địa chỉ :
Bộ nhớ và Vi xử lí giao tiếp qua 13 đường địa chỉ Để việc truy xuất địa chỉ được chính xác tránh nhầm lẫn thì ta phải thiết kế mạch giải mã địa chỉ
Việc thực hiện giải mã địa chỉ theo tuần tự các bước sau:
♦ Lập bảng đồ địa chỉ
♦ Sơ đồ khối
♦ Sơ đồ mạch
♦ Giải thích
Bản đồ giải mã địa chỉ của bộ nhớ:Trang sau
Trang 28Như vậy ta thấy rằng các chân A15 - A13 thay đổi ứng với 8 trạng thái ngõ ra Ở đây ta chỉ chọn 3 ngõ ra là 74LS138 là O0, O1
và O2, các ngõ ra còn lại không dùng đến đều được bỏ trống Các ngõ ra này đều được lần lượt nối đền CS\ của EPROM1, EPROM2
và RAM
Tuy nhiên, để 74138 làm việc theo đúng yêu cầu thì ta phải nối chân G1 lên Vcc, còn chân G2\, G3\ xuống mức thấp Để phân biệt được việc giải mã bộ nhớ hay IO thì vi xử lí còn có thêm chân IO/M\ Chân này có hai trạng thái làm việc, khi ở mức logic thấp nghĩa là Vi xử lí yêu cầu việc giải mã kiểu bộ nhớ, còn khi ở mức logic cao nghĩa là Vi xử lí yêu cầu giải mã kiểu IO
Sơ đồ mạch giải mã kiểu bộ nhớ:
Hình 2 3
2 THIẾT KẾ KHỐI GIAO TIẾP XUẤT NHẬP :
Khối IO là bộ phận giao tiếp giữa Vi xử lí với các thiết bị bên ngoài, cụ thể là bàn phím và màn hình quang báo Khối này thực hiện việc xuất hay nhập tùy thuộc vào từ điều khiển do Vi xử lí gởi ra
a Đặt vấn đề:
Mạch quang báo giao tiếp bên ngoài gồm bàn phím và màn hình quang báo (Matrận led), do đó ta dùng hai vi mạch giao tiếp là 8255A với hai chức năng khác nhau:
IC 8255-I dùng để quét phím và IC còn lại dùng để xuất dữ liệu ra Ma trận Led
IC 8255A giao tiếp với Vi xử lí bằng 8 byte cao có địa chỉ từ A8 - A15 Khi được thiết kế làm thiết bị I/O, do đó việc giải mã cũng phức tạp hơn giải mã kiểu bộ nhớ Tương tự như bộ nhớ, IC 8255A cũng có địa chỉ rõ ràng khi vi xử lí cần truy xuất tới
b Thiết kế chi tiết :
Lý thuyết :
Trang 29IC 8255A thứ nhất được thiết kế kiểu I/O nên IC này giao tiếp với Vi xử lí thông qua 3 bus chính là Bus dữ liệu, Bus điều khiển, Bus địa chỉ Trong đó, Bus địa chỉ dùng từ A15 - A8 của Vi xử
lí, trong đó hai chân A0 , A1 của IC 8255A được nối vào A8 , A9 của
Vi xử lí , các chân còn lại từ A10 - A15 được đưa qua mạch giải mã địa chỉ để chọn đúng IC cần truy xuất
Các đường dữ liệu D7 - D0 cũng được nối trực tiếp AD7 - AD0
của Vi xử lí , đồng thời nối song song với tất cả các bus dữ liệu của bộ nhớ
Vì được thiết kế kiểu I/O nên Bus dữ liệu của IC 8255A là Bus hai chiều , đọc ra hay viết vào đều phụ thuộc vào hai chân RD\ , WR\ giữa Vi xử lí vớ 8255A
IC 8255A giao tiếp với Vi xử lí bằng hai chân A0 , A1 và khi truy xuất I/O thì Vi xử lí sử dụng các đường từ A8 - A15 Như vậy , ngoài hai chân A8 , A9 đã nối vào A0 , A1 thì các chân còn lại từ A10
- A15 sẽ được đưa vào mạch giải mã địa chỉ
Vì chỉ có hai đường địa chỉ nên IC 8255A chỉ sử dụng 4 đường địa chỉ, do đó nhóm thiết kế như sau :
♦ IC 8255A thứ nhất dùng để quét phím có địa chỉ từ 00H - 03H
Trong đó :
Port A có địa chỉ là 00H
Port B có địa chỉ là 01H
Port C có địa chỉ là 02H
Thanh ghi điều khiển có địa chỉ là 03H
Từ điều khiển gởi ra thanh ghi điều khiền của IC này là ;
CW = 92H
♦ IC 8255A thứ hai dùng để quét Ma trận có địa chỉ từ 10H đến
13H
Trong đó :
Port A có địa chỉ là 10H
Port B có địa chỉ là 11H
Port C có địa chỉ là 12H
Thanh ghi điều khiển có địa chỉ là 13H
Từ điều khiển gởi ra thanh ghi điều khiển của IC này là :
CW = 80H
Từ các yêu cầu trên , ta xây dựng bảng đồ địa chỉ như sau :
A15 A14 A13 A12 A11 A10 A9 A8
Trang 3003 0 0 0 0 0 0 1 18255I
Ba chân A12 - A10 lần lượt nối vào ngõ A , B , C của IC 74LS138
Chân A13 nối vào G2\ của IC 74LS138
Chân A14 và A15 được đưa qua cổng OR , sau đó đầu ra của cổng OR được nối vào chân G2\ của IC 74LS138
Ngõ ra O0 và O1 được nối lần lượt vào CS\ của 8255A thứ nhất và 8255A thứ hai
Sơ đồ mạch cụ thể :
Hình 2.4Hoạt động của mạch như sau :
Khi A12 A11 A10 = 000 thì mạch sẽ chọn IC 8255A thứ nhất , khi đó tùy thuộc vào A9 A8 (nối vào A1A0) mà Vi xử lí sẽ chọn Port nào Để 74LS138 hoạt động giải mã theo đúng yêu cầu thì cả
A13A14A15 = 000H
Khi A10 A11 A12 = 001H thì Vi xử lí sẽ chọn IC 8255A thứ hai
II THIẾT KẾ BÀN PHÍM :
Bàn phím dùng để nhập dữ liệu từ bên ngoài , tùy thuộc vào người sư dụng muốn hiển thị nội dung như thế nào điểm khác biệt giữa mạch quang báo chỉ dùng EPROM và mạch quang báo
Trang 31điều khiển bằng Kit Vi xử lí là ở bàn phím vì Kit vi xử lí có thể cho phép người sử dụng thay đổi nội dung cần hiển thị dễ dàng bằng cách nhập trực tiếp từ bàn phím Chương trình nhận dạng phím do người lập trình tạo ra và được lưu trữ trong ROM
1 Yêu cầu :
Khi thiết kế bàn phím phải quan tâm tới các yêu cầu sau :
♦ Có kết cấu cơ khí chắc chắn
♦ Các tiếp điểm phải tiếp xúc tốt , nhạy
♦ Phải có khả năng chống dội
♦ Phím nhấn phải rõ ràng , gọn nhẹ
2 Thiết kế cụ thể :
Từ các yêu cầu trên ta thiết kế bàn phím như sau :
Bàn phím được xây dựng dựa trên cơ sở quét hàng và cột , sử dụng IC 8255A thứ nhất (đã trình bày ở phần trước) để giao tiếp với Vi xử lí
Port A của IC 8255A thứ nhất sẽ được dùng làm Port quét hàng (nhập dữ liệu), Port C sẽ được thiết kế quét cột (xuất dữ liệu) Do yêu cầu của mạch nên nhóm thiết kế mạch bao gồm 8 hàng và 7 cột (56 phím)
Sữ dụng phần mềm để chống dội cho các phím
Bàn phím được xây dựng cho bảng chữ cái tiếng Việt và tiếng Anh , sơ đồ phân bố phím như sau :
Hình 4.4Chức năng của các phím đặc biệt :
Trang 32Phím ENTER (RUN): Cho phép chạy dòng thông báo
Phím LEFT : Xóa một kí tự bên trái dấu nhắc.Backspace : Chèn một kí tự trắng
Phím PRO : Cho phép nhập dữ liệu
3 Sơ đồ mạch nguyên lý bàn phím :Trang sau
Trang 33Hình 2.5 : Sơ đồ nguyên lý mạch bàn phím của quang báo
Trang 34Hoạt động của bàn phím :
Trạng thái bình thường của Port A (từ PA0 - PA7) là
111111112 nếu Port C xuất ra một giá trị là 00H , lúc này có một phím được nhấn thì một trong 8 đường của Port A xuống mức logic
0 Hoạt động quét như sau : Đầu tiên Port C sẽ xuất ra giá trị là
00H để quét cột, sau đó đọc vào Port A nhằm kiểm tra xem có phím nào được ấn hay không, nếu một phím được nhấn thì một trong 7 đường của Port A sẽ xuống mức 0 lúc này ta chỉ biết được hàng nào có phím ấn mà thôi
Để xác định chính xác vị trí của phím được ấn thì Port C sẽ xuất dữ liệu để quét cột Tùy vào giá trị cột nào xuống mức thấp mà ta định được vị trí của phím được ấn
III THIẾT KẾ MÀN HÌNH QUANG BÁO
1 Yêu cầu:
Mạch phải hiển thị rõ ràng, các kí tự dịch từng cột
Có khả năng hiển thị chữ tiếng Việt và tiếng Anh
Phải hiển thị đủ 6 kí tự tiếng Việt
2 Thiết kế :
a Đặt vấn đề :
Các LED trong Matrận led có thể sáng riêng lẽ nhau nếu ta đưa tín hiệu điều khiển hàng và cột riêng biệt Mỗi Led có thể sáng nếu ta cấp cho nó một điện áp là 1,7V ÷ 2V với dòng tối đa là
30 mA Vì Ma trận Led có cột hiển thị ở mức cao, hàng mức thấp nên ta cấp điện áp cho cột và hàng dùng để xuất dữ liệu Vì tất cả các cột đều được điều khiển bởi ngõ ra của 74ls164, có dòng ra rất thấp Do đó, để đủ dòng cấp cho các LED sáng bình thường thì ta phải thiết kế thêm mạch khuếch đại công suất cho LED
Sơ đồ mạch cụ thể:
Trang 36b Hoạt động :
Khi tín hiệu quét cột nhận điện áp 5V làm cho Q1 dẫn bão hòa, lúc đó điện áp 5V qua điện trở RC1 (hạn dòng) sẽ chạy qua LED Nhưng để cho led sáng thì tín hiệu hàng phải xuất ra mức cao khi qua cổng NOT (74LS05) thì sẽ xuống mức logic 0, lúc đó cathode của led được nối xuống mức thấp nên led sẽ sáng
3 Tính toán giá trị :
♦ Xét luới 1:
5v = RB IB + VBE + VLED
Để led sáng tối đa : VLED =1.8V
Chọn Q1 là transitor loại silic nên : VBE = 0.6V
IC = β.IB = I LED = β 2.6mA
Để 1 led sáng tối đa là 30mA Trong khi đó với ma trận led 5×8 thì một cột gồm 8 led nên để led sáng bình thường thì IC
= 8 × ILED
Vậy : β 2.6 mA = 240 mA
⇒ β = 2402 6, = 104 Chọn β = 150
Tra bảng ta chọn Transitor SC828, có các tiêu chuẩn sau (Tra từ sổ tay các linh kiện điện tử): P = 400mW, β = 130 ÷ 520 , VCBO = 30V , VEBO = 7V
Ghi chú : Để tín hiệu trên led dịch từng cột thì ta có thể
dùng tín hiệu quét cột qua vào IC 74LS164 mỗi IC này có 8 ngõ
ra với điện áp 5V Vì mạch quang báo có 7 led (35 cột), nên ta dùng 5 IC 74LS164 để quét
Tín hiệu quét cột lấy ra từ port C của 8255thứ hai còn tín hiệu quét hàng lấy ra từ port A của 8255thứ hai
Tín hiệu quét cột sẽ dịch theo từng nhịp xung clock do người lập trình tạo ra Cứ mỗi nhịp xung thì dịch một cột Khi đó tín hiệu quét hàng cũng gởi dữ liệu theo từng thời điểm mà cột quét Như vậy tín hiệu quét hàng và cột đòi hỏi phải luôn đồng bộ với nhau
Trang 37Để hiển thị các chữ cái tiếng Việt lẫn tiếng Anh thì ta cần xuất dữ liệu chính xác từng điểm trên ma trận led Các điểm sáng sẽ tạo nên dạng chữ cần hiển thị Dữ liệu gởi ra hàng được chứa trong vùng nhớ của ROM, bắt đầu từ địa chỉ 2000H - 20F0H Sau đây là kiểu kí tự hiển thị trên Matrận Led.
Trang 381C 22 22 26 14 3E 08 08 08 3E 22 22 3E 22 22
Trang 3924 22 3C 20 20 3E 08 14 22 22 3E 02 02 02 02
3E 10 08 10 3E 3E 10 08 04 3E 1C 22 22 22 1C
3E 28 28 28 10
Trang 401C 22 22 26 1E 3E 28 2C 2A 12 12 2A 2A 2A 24
20 20 3E 20 20 3C 02 02 02 3C 02 02 02 02 02
38 04 02 04 38 3E 04 08 04 3E 22 14 08 14 22