Giá trị số cần hiện thị của mỗi con số được gửi đến cổng PB của 8255A từ CPU dưới
dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển
thích hợp đưa đến các chân catốt a, b,., g của LED. Mỗi giá trị cần hiện thị được đưa đến
cổng PB cứ mỗi 2 ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ
liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định.
85 trang |
Chia sẻ: phanlang | Lượt xem: 3240 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
bộ nhớ với thời gian thâm nhập cà 420ns làm việc.
Trong biểu đồ thời gian ghi ta thấy phải có một thời gian giữ dữ liệu tối thiểu để ghi
tgiữW = 88ns sau khi WR đột biến từ 0 lên 1. trong thực tế thời gian này gần như bằng 0 đối
với bộ nhớ thông dụng. Độ dài của xung ghi đối với CPU 8088 - 5MHz là TWR = 340ns cũng
là phù hợp với các bộ nhớ với thời gian thâm nhập cà 420ns.
Tín hiệu vào READY tạo ra các chu kỳ đợi cho các bộ nhớ hoặc thiết bị ngoại vi chậm.
Một chu kỳ đợi Tw bao gồm một hoặc nhiều chu kỳ đồng hồ T được chèn vào giữa T2 và T3
nhằm kéo dài chu kỳ bus. Nếu một chu kỳ đợi Tw = T được chèn vào thì thời gian thâm nhập
bộ nhớ, thường cỡ 420 ns, sẽ được kéo dài một chu kỳ đồng hồ T (200 ns) thành 640 ns.
Tín hiệu READY được lấy mẫu ở cuối chu kỳ T2 (hoặc ở giữa các chu kỳ T của Tw).
Nếu READY = 0 ở cuối T2 thì T3 được trễ và Tw được chèn vào giữa T2 và T3. Tín hiệu
READY được kiểm tra bằng 0 khi xung đồng hồ tại cuối chu kỳ T2 chuyển từ 1 sang 0 và
được kiểm tra bằng 1 khi xung đồng hồ ở giữa các chu kỳ T của Tw chuyển từ 0 sang 1. Tín
hiệu READY yêu cầu rất chặt chẽ về thời gian, yêu cầu này được đảm bảo bằng mạch tạo
xung nhịp 8284A.
Trên hình dưới đây là một mạch dùng để xem thêm chu kỳ đợi với thời gian đợi tuỳ
chọn nT (n=0-7). Bằng cách thay đổi đầu nối đến các đầu ra của mạch vào song song ra nối
tiếp 74LS164 cho đến khi có sườn dương của T2.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 53
5.2. Phối ghép 8088 với bộ nhớ
5.2.1. Bộ nhớ bán dẫn
Trước khi nói về phối ghép 8088 với bộ nhớ ta nói qua một chút về các bộ nhớ bán dẫn
thường dùng với bộ vi xử lý.
Các bộ nhớ bán dẫn thường dùng với bộ vi xử lý bao gồm :
+ Bộ nhớ cố định ROM (read only memory, bộ nhớ có nội dung ghi sẵn chỉ để đọc ra).
Thông tin ghi trong mạch không bị mất khi mất nguồn điện nuôi cho mạch.
+ Bộ nhớ bán cố định EPROM (aerraseble programmable ROM là bộ nhớ ROM có
thể lập trình được bằng xung điện và xoá được bằng tia cực tím).
+ Bộ nhớ không cố định RAM ( random access memory, bộ nhớ ghi/đọc) thông tin ghi
trong mạch bị mất khi mất nguồn điện nuôi cho mạch. Trong các bộ nhớ RAM ta còn phân
biệt ra loại RAM tĩnh (stiatic RAM hay SRAM, trogn đó mỗi phần tử nhỏ là một mạch lật hay
trạng thái ổn định) và loại RAM động (dyamic RAM hay DRAM, trong đó mỗi phần tử nhớ
là một tụ điện rất nhỏ được chế tạo bằng công nghệ MOS).
Một bộ nhớ thường được chế tạo nên từ nhiều vi mạch nhớ. Một vi mạch nhớ thường có dạng
cấu trúc tiêu biểu như sau:
Sơ đồ khối 1 vi mạch nhớ.
Theo sơ đồ khối này ta thấy một l vi mạnh nhớ có các nhóm tín hiệu sau :
Nhóm tín hiệu địa chỉ :
Các tín hiệu địa chỉ có tác dụng chọn ra một ô nhớ (từ nhớ cụ thể để ghi/đọc). Các ô nhớ có
độ dài khác nhau tuỳ theo nhà sản xuất : 1, 4, 8, bit. Số đường tín hiệu địa chỉ có liên quan
đến dung lượng của mạch nhớ. Với một mạch nhớ có m bit địa chỉ thì dung lượng của mạnh
nhớ đó là 2m từ nhớ. Ví dụ, với m = 10(có 10 chân địa chỉ A0 – A10) ta có dung lượng mạch
nhớ là 1K ô nhớ (1 kilô = 210 = 1024) và với m=20 ta có dung lượng mạch nhớ là 1M ô nhớ (1
Mêga = 2
20
= 1048576).
Nếu vi mạch nhớ có dung lượng 1 K (210 = 1024 = 400H) ô nhớ với địa chỉ ô nhớ đầu
tiên là 10000H thì địa chỉ của ô nhớ cuối cùng sẽ là 10400H - 1H = 103FFH. Nếu vi mạch
nhớ có dung lượng 4 K (212 = 1000H) ô nhớ với địa chỉ ô nhớ đầu tiên là 14000H thì địa chỉ
của ô nhớ cuối cùng sẽ là 15000H - 1H = 14FFFH.
Nhóm tín hiệu dữ liệu :
Tất cả các vi mạch nhớ đều có các chân dữ liệu ra (đối với vi mạch nhớ ROM) hoặc
chân dữ liệu vào/ra (đối với vi mạch nhớ RAM). Các chân dữ liệu thường có tên từ D0 đến Dn
(thường là từ D0 đến D7). Số chân dữ liệu quyết định độ dài ô nhớ của vi mạch. Ví dụ vi mạch
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 54
nhớ có 8 chân dữ liệu thì các ô nhớ trong vi mạch nhớ có độ dài 8 bit. Thông thường người ta
hay nói dung lượng kèm theo độ dài ô nhớ, ví dụ nói vi mạch nhớ có dung lượng 1 KB, nghĩa
là vi mạch nhớ có số ô nhớ 1 K, mỗi ô nhớ có độ dài 1 byte (8 bit). Trong các catalog của vi
mạch nhớ thường ghi số ô nhớ nhân với số bit trên một ô nhớ, ví dụ: một vi mạch nhớ có
dung lượng 1K, mỗi ô nhớ có độ dài 8 bit thường được ghi là 1K×8.
Nhóm tín hiệu chọn vi mạch (chọn vỏ) :
Các tín hiệu chọn võ là CS (chip select) hoặc CE (Chip enable) thường được dùng để
tạo ra vi mạch nhớ cụ thể để ghi/đọc. Tín hiệu chọn võ ở các mạch RAM thường la CS , còn ở
mạch ROM thường là CE . Các tín hiệu chọn võ thường được nối với đầu ra của bộ giải mã
địa chỉ. Khi một mạnh nhớ không được chọn thì bus dữ liệu của nó bị treo (ở trạng thái trở
kháng cao)
Nhóm tín hiệu điều khiển :
Tín hiệu điều khiển cần có trong tất cả các mạch nhớ. Các mạch nhớ ROM thường có
một đầu vào điều khiển OE (output enable) để cho phép dữ liệu được đưa ra bus. Một mặt
nhớ không được mở bởi OE thì bus dữ liệu của nó bị treo.
Một mạch nhớ Ram nếu chỉ có một tín hiệu điều khiển thì thường đó là R /W để điều
khiển quá trình ghi/đọc. Nếu mạch nhớ RAM có hai tín hiệu điều khiển đó thường là WE
(write enable) để điều khiển ghi và OE để điều khiển đọc. Hai tín hiệu này phải ngược pha
nhau để điều khiển việc ghi/đọc mạch nhớ.
Một thông số đặc trưng khác của bộ nhớ là thời gian thâm nhậm tac. Nói chung nó
được định nghĩa như là thưòi gian kể từ khi có xung địa chỉ trên bus địa chỉ cho đến khi có dữ
liệu ra ổn định trên bus dữ liệu. Thời gian thâm nhậm bộ nhớ phụ thuộc rất nhiều vào công
nghệ chế tạo nên nó. Các bộ nhớ làm bằng công nghệ lưàng cực có thời gian thâm nhập nhỏ
(10 - 30ns) còn các bộ nhớ làm bằng công nghệ MOS có thời gian thâm nhập lớn hơn nhiều
(cà 150ms hoặc hơn nữa).
Sau đây là ví dụ một số loại bộ nhớ thường dùng :
o Bộ nhớ EPROM :
Các bộ nhớ EPROM thông dụng tồn tại dưới nhiều kiểu mạch khác nhau. Họ 27xxx có
các loại makchj sau : 2708 (1Kx8), 2716 (2Kx8), 2732 (4Kx8), 2764 (8Kx8), 27128 (16Kx8),
27256 (32Kx8), 27512 (64Kx8) với tac = 250-450ns tuỳ theo loại cụ thể. Trên hình dưới là sơ
đồ các tín hiệu và bảng chức năng của 2716.
Mạch nhớ 2716 có thời gian thâm nhập tac = 450ns, như vậy để ghép và làm việc được
với CPU 8088 5MHz nó cần phải thêm chu kỳ đợi. Ngược lại mạch nhớ 2716 - 1 lại có tac =
250ns nên không cần thêm chu kỳ đợi.
Cần lưu ý là trong chế độ duy trì công suất tiêu thụ của mạch giảm được 75% so với
công suất khi nó ở chế độ tích cực
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 55
Bộ nhớ EPROM 2716 (2Kx8)
Là bộ nhớ ROM có thể lập trình được bằng xung điện hoặc xóa bằng tia cực tím. Họ EPROM
27xxx có các loại sau: 2704 (512x8), 2708 (1Kx8), 2716 (2Kx8), 2732 (4Kx8), 2764 (8Kx8),
27128 (16Kx8), 27256 (32Kx8), 27512 (64Kx8) và 271024 (128Kx8).
Vi mạch nhớ EPROM 2716 có thời gian truy nhập tacc = 450 ns nên để ghép nối với 8088-
5MHz nó cần thêm chu kỳ đợi. Trong chế độ duy trì,công suất tiêu thụ của EPROM 2716
giảm được 75% so với công suất tiêu thụ khi nó ở chế độ tích cực. Ở trên là sơ đồ chân và các
chế độ hoạt động của 2716.
o Bộ nhớ RAM tĩnh (SRAM) :
Bộ nhớ SRAM có khả năng lưu giữ thông tin trong nó chừng nào nó còn được cấp
điện. Các bộ nhớ SRAM và EPROM cùng dung lượng thường có cách bố trí chân giống nhau
để dể bề dày thay thế lẫn trong qua trình phát triển hệ thống. Dưới đây là sơ đồ chân tin hiếu
của SRAM 4016 2K8 với thời gian thâm nhập tac = 250ns.
Đã tồn tại trong thực tế mạch nhớ SRAM dung lượng 32Kx8 (62256LP-10) với thời
gian thâm nhập cà 100ns chế tạo theo công nghệ CMOS và một loại SRAM khác chês tạo
theo công nghệ lưỡng cực 8KB - 120KB có thời gian thâm nhập 15ns.
Bộ nhớ RAM tĩnh TMS 4016 (2Kx8).
o Bộ nhớ RAM động (DRAM) :
Bộ nhớ DRAM lưu giữ thông tin bằng cách nạp hay không nạp điện tích lên các tụ
điện công nghệ MOS. Mỗi phần từ nhớ của bộ nhớ DRAM vì vậy cần được làm tươi lại (bằng
cách ghi hay đọc phần tử đó) sau một khoảng thời gian cà 15,6 s , nếu không điện tích trên
các tụ điện sẽ bị tiêu tán và dẫn đến mất thông tin. Các mạch DRAM cần có các mạch logic
phụ để đảm bảo việc làm tươi và vì thế việc phối ghép đó với bộ vi xử lý là rất phức tạp. Bù
lại nhược điểm này các mạch nhớ DRAM lại có ưu điểm là có thể chế tạo được một số lượng
rất lớn các phần tử nhớ trên 1 đơn vị điện tích, các vi mạch này do vậy cũng cần rất nhiều
chân cho các tín hiệu địa chỉ. Để làm giảm bớt số lượng chân địa chỉ trên một vi mạch nhớ,
người ta thường chia địa chỉ ra làm hai nhóm : địa chỉ hàng và địa chỉ cột dồn kênh chúng trên
các chân địa chỉ, đồng thời cung cấp thêm các tín hiệu cho phép chốt giữ riêng lẽ địa chỉ hàng
( RAS ) và cột (CAS ) ở bên trong vi mạch nhớ
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 56
Bộ nhớ RAM động TMS 4464 (64Kx4).
Các mạch nhớ DRAM thường được chế tạo với độ dài 1 hoặc 4 bit. Đã tồn tại trong
thực tế mạch nhớ DRAM dung lượng 1 Mx1, 4 Mx1, và 16 Mx1 và chúng thường được tổ
hợp thành bộ nhớ kiểu SIMM (single in-line memory module) hay SIP (single in-line
package) dùng trong các máy tính thế hệ mới. Trên hình 5.15 là ví dụ của vi mạch nhớ
TMX4C1024 dung lượng 1 Mx1 với thời gian thâm nhập 60ns.
5.2.2. Giải mã địa chỉ cho bộ nhớ
Mỗi mạch nhớ nối ghép với CPU cần phải được CPU qui chiếu tới một cách chính
xác khi thực hiện các thao tác ghi/đọc. Điều đó có nghĩa là mỗi mạch nhớ phải được gán cho
một vùng riêng biệt có địa chỉ xác định nằm trong không gian địa chỉ tổng thể của bộ nhớ.
Việc gán địa chỉ cụ thể cho mạch nhớ được thực hiện nhờ một xung chọn vỏ lấy từ mạch giải
mã địa chỉ. Việc phân định không gian địa chỉ tổng thể thành các cùng nhớ khác nhau để thực
hiện những chức năng nhất định gọi là phân vùng bộ nhớ. Ví dụ, đối với CPU 8088 thì không
gian địa chỉ tổng thể dành cho bộ nhớ là 1MB, trong đó vùng nhớ dung lượng 1 KB kể từ địa
chỉ thấp nhất 00000H nhất thiết phải được dành cho RAM (vì tại đây ta phải có chỗ để cho
một bảng gồm 256 vectơ ngắt của 8088), tại còn vùng nhớ có chứa địa chỉ FFFF0H thì lại
nhất thiết phải dành cho ROM hay EPROM ( vì FFFF0H là địa chỉ khởi động của CPU).
Về nguyên tắc một bộ giải mã địa chỉ thường có cấu tạo như trên hình dưới đây :
Đầu vào của bộ giải mã là các tín hiệu địa chỉ và tín hiệu điều khiển. Các tín hiệu địa
chỉ gồm các bit địa chỉ có quan hệ nhất định vơi các tín hiệu chọn vỏ ở đầu ra. Tín hiệu điều
khiển thường là tín hiệu IO/ M dùng để phân biệt đối tượng mà CPU chọn làm việc là bộ nhớ
hay thiết bị vào/ra. Mạch giải mã là một trong những khâu gây ra việc trễ thời gian của tín
hiệu từ CPU tới bộ nhớ hoặc thiết bị ngoại vi mà trong khi chọn mạch nhớ/ngoại vi ta phải
tính đến. Tuỳ theo quy mô của mạch giải mã mà ta có thể có ở đầu ra một hay nhiều tín hiệu
chọn vỏ.
Giải mã đầy đủ cho một mạch nhớ đòi hỏi ta phải đưa đến đầu vào của mạch giải mã
các tín hiệu địa chỉ sao cho tín hiệu ở đầu ra của nó chỉ chọn riêng mạch nhớ đã định. Trong
trường hợp này ta phải dùng tổ hợp đầu đủ của các đầu vào địa chỉ tương ứng để chọn được
mạch nhớ, vì xung nhận được từ mạch giải mã ngoài việc chọn mạch nhớ ở vùng đã định sẽ
có thể chon ra các mạch nhớ ở các vùng nhớ khác nữa.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 57
Như vậy, giải mã thiếu thì tiết kiệm được linh kiện khi thực hiện bộ giải mã nhưng lại
làm mất tính đơn trị của xung chọn thu được ở đầu ra.
Thông thường khi thiết kế mạch giải mã người ta hay tính dôi ra một chút để dự
phòng, sao cho sau này nếu có sự thay đổi do phải tăng thêm dung lượng củabộ nhớ thì vẫn có
thể sử dụng được mạch giải mã đã được thiết kế .
Thực hiện mạch giải mã bàng các mạch NAND
Bằng các mạch kiểu mạch cửa NAND ta có thể xây dựng được mạch giải mã địa chỉ
đơn giản với số đầu ra hạn chế, ta phải đưa đến đầu vào của mạch cửa nhiều lối và một tổ hợp
thích hợp của các bit địa chỉ để nhận được ở đầu ra của nó tín hiệu chọn vỏ cho mạch nhớ.
Ví dụ ta sử dụng vi mạch mhớ EPROM 2716 2K8 làm bộ nhớ. Khi nối ghép với bộ
vi xử lý 8088, các chân từ A10 - A0 của 8088 được nối tới các đầu vào địa chỉ từ A10 - A0
của EPROM, các chân còn lại của 8088 (A19 - A11) được nối tới đầu vào của bộ giải mã
cổng NAND. Bộ giải mã có nhiệm vụ chọn một phần 2 KB (vi mạch EPROM) trong 1 MB
bộ nhớ mà 8088 có thể quản lý được.
Trong mạch giải mã đơn giản cho EPROM này, xung chọn vỏ sẽ có tác động khi ta đọc bộ
nhớ tại địa chỉ nằm trong khoảng EF800H - FFFFFH, tức là vùng địa chỉ có chứa địa chỉ khởi
động của CPU 8088. 9 bit địa chỉphần cao của bus địa chỉ (A11-A19) ở mức 1 sẽ phối hợp
cùng xung IO/ M (đã được đảo) để tạo ra xung chọn vùng nhớ 2 KB đặt tại địa chỉ cao nhất
trong không gian địa chỉ của 8088. mỗi ô nhớ cụ thể trong 2 KB của mạch nhớ EPROM
2716-1 sẽ do các bit thấp còn lại của bus địa chỉ (A0 - A10) chọn ra. Để kiểm chứng nhanh
điều này ta cần nhớ rằng với các bit địa chỉ A10 ta chọn ra được các mạch nhớ 1KB và với bit
A11 ta chọn ra được các mạch nhớ 2 KB các mãng nhớ này nằm rãi rác trong không gian của
bộ nhớ.
Đầu ra của cổng NAND có logic 0 khi các chân địa chỉ A19 - A11 nối tới đầu vào của nó
đều có logic 1 và tín hiệu điều khiển IO/ M = 0. Đầu ra logic 0 của bộ giải mã cổng NAND
được đưa tới đầu vào CE của vi mạch nhớ EPROM và sẽ chọn vi mạch này. Nếu đầu vào
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 58
OE cũng có logic 0 thì dữ liệu sẽ được đọc từ EPROM. OE được kích hoạt bằng tín hiệu
RD của 8088.
Vì chỉ khi các bit A19 - A11 bằng 1 thì EPROM mới được chọn, do đó địa chỉ 20 bit của các
ô nhớ trong EPROM có dạng: 9 bit bên trái bằng 1 còn 11 bit bên phải tùy ý.
1111 1111 1XXX XXXX XXXX
Từ đây ta suy ra khoảng địa chỉ dành cho EPROM là
từ 1111 1111 1000 0000 0000 = FF800H
đến
1111 1111 1111 1111 1111 = FFFFFH
Trong thực tế bộ giải mã cổng NAND hiếm khi được dùng vì mỗi vi mạch nhớ cần một
bộ giải mã.
Thực hiện bộ giải mã dùng mạch giải mã kiểu 74LS138 :
Khi ta muốn có nhiều đầu ra chọn vỏ từ bộ giải mã mà vẫn dùng các mạch logic đơn
giản thì thiết kế sẽ trở nên rất cồng kềnh do số lượng các mạch cửa tăng lên. Trong trường
hợp như vậy ta thường sử dụng các mạch giải mã có sẵn.
74LS138 là bộ giải mã ở dạng vi mạch (IC), được sử dụng khá phổ biến.
Từ bảng chân lý ta thấy tại bất kỳ thời điểm nào cũng chỉ có một đầu ra bằng 0. Để có
đầu ra bằng 0 thì 3 đầu vào cho phép bộ giải mã hoạt động đều phải ở mức tác động, tức là
G2A=0, G2B=0 và G1=1. Khi bộ giải mã được phép hoạt động thì các đầu vào C, B và A sẽ
chọn đầu ra nào bằng 0. Các đầu ra của bộ giải mã sẽ được nối tới các đầu vào CE hay CS
của vi mạch nhớ.
Ví dụ
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 59
Giả thiết ta cần dùng riêng vùng nhớ 64 KB có địa chỉ F0000H-FFFFFH. Cho các
mạch nhớ EPROM 8 KB (dùng 8x2764-15, tac = 150ns). Hãy dùng mạch giải mã kiểu
74LS138 để thực hiện.
Giải
Ta có thể dùng mạch 74LS138 và bố trí các đường địa chỉ như trên hình bên dưới
Ở thí dụ này ta cần lưu ý rằng bit địa chỉ A13 có khả năng chọn ra các mãng nhớ 8
KB nằm rãi rác trong không gian nhớ của 8088. chính vì vậy ta dùng nó như đầu vào A của
74LS138, cùng với các địa chỉ bit A14 và A15 tại các chân B và C ta sẽ chọn ra được 8 vùng
nhớ liền nhau, mỗi vùng có dung lượng là 8 KB hay toàn vùng là 64 KB này ở phần cao nhất
trong không kgian nhớ.
Điều này có thể đạt được một cách dể dàng bằng việc dùng tổ hợp 4 bit địa chỉ cao
nhất A16 - A19 ở trạng thái 1 (A19 thông qua đầu vào G1 và A16 -A18 qua 1 mạch NAND 3
đầu vào để đưa đến G2A của mạch 74LS138).
Trong mạch trên các đầu ra của bộ giải mã 74LS138 được nối tới đầu vào CE , còn tín
hiệuRD từ 8088 được nối tới đầu vào OE của 8 vi mạch nhớ EPROM 2764. Tại bất kỳ thời
điểm nào cũng chỉ có một đầu ra bằng 0 và do đó chỉ có một vi mạch nhớ được chọn và gửi
dữ liệu của nó trên bus dữ liệu khi tín hiệu RD = 0.
Nhìn vào mạch điện ta thấy, khi tất cả các bit địa chỉ từ A19 - A16 đều bằng 1 và có tín hiệu
chọn bộ nhớ từ 8088 (IO/ M = 0) sẽ làm cho G2A = 0, G2B = 0, G1 = 1, và do đó kích hoạt
bộ giải mã. Khi bộ giải mã đã hoạt động thì các bit địa chỉ từ A15 - A13 sẽ xác định đầu ra nào
bằng 0 và tương ứng vi mạch nhớ nào sẽ được chọn.
Như vậy, dạng địa chỉ của một ô nhớ được giải mã là
1111 XXXX XXXX XXXX XXXX
Từ đây suy ra khoảng địa chỉ của cả bộ nhớ là từ
1111 0000 0000 0000 0000 = F0000H
đến
1111 1111 1111 1111 1111 = FFFFFH
Ta cũng có thể xác định được khoảng địa chỉ của từng vi mạch nhớ nối tới đầu ra của
bộ giải mã. Ví dụ xác định khoảng địa chỉ của vi mạch nhớ nối tới đầu ra 0: vì vi mạch này
được chọn khi CBA = 000 nên địa chỉ của ô nhớ trong vi mạch này có dạng
CBA
1111 000X XXXX XXXX XXXX
Từ đây suy ra khoảng địa chỉ của vi mạch nhớ là từ
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 60
1111 0000 0000 0000 0000 = F0000H
đến
1111 0001 1111 1111 1111 = F1FFFH
CBA
1111 001X XXXX XXXX XXXX
Từ đây suy ra khoảng địa chỉ của vi mạch nhớ là từ
1111 0010 0000 0000 0000 = F2000H
đến
1111 0011 1111 1111 1111 = F3FFFH
Tại thí dụ này ta thấy mạch giải mã có sẵn 74LS138 có số lượng đầu vào địa chỉ và
đầu vào cho phép hạn chế. Nếu ta có số lượng đầu vào cho địa chỉ lớn mà ta lại phải giải mã
đầy đủ để thực hiện bộ giải mã đã hoàn chỉnh ta vẫn phải dùng thêm các mạch logic phụ. Đây
cũng là lý do để người ta thay thế các bộ giải mã kiểu này bằng các bộ giải mã dùng PROM
hoặc PLA (programable logic array) với ưu điểm chính là chúng có rất nhiều đầu vào cho các
bit địa chỉ và vì thế rất thích hợp trong các hệ vi xử lý sau này với không gian địa chỉ lớn.
5.2.3. Phối ghép CPU 8088 - 5MHz với bộ nhớ
Sau khi đã giới thiệu các phương pháp giải mã cho mạch nhớ trong phần này ta sẽ giới
thiệu cách phối ghép 8088 với bộ nhớ. Có thể nói tổng quát rằng nếu -không có xung đột giữa
tốc độ thâm nhập mạch nhớ và tốc độ CPU thì việc phối ghép CPU với bộ nhớ đơn giản chỉ là
việc giải mã địa chỉ trong mạch nhớ. Trong phần lớn các trường hợp điều này có thể đúng cho
các mạch nhớ RAM và các mạch nhớ EPRAM có thời gian thâm nhập nhỏ hoen hoặc bằng
250 ms, cách phối ghép CPU với cac mạch này về cơ bản là giống nhau. Đối với các mạch
nhớ EPROM như 2716, 2732 ... loại tốc độ 450 ms khi thực hiện phối ghép với 8088 - 5MHz
thì cần phải tính toán thận trọng hơn.
Trong phần đầu của chương này ta đã tính được rằng muốn phối ghép được với CPU
8088 - 5MHz thì các mạch nhớ phải có thời gian thâm nhập dài nhất là cà 450 ms, vì vậy nếu
ta muốn ghép EPROM 2732 tốc độ 450ms vào bộ nhớ thì chắc chắn phải có cách để báo cho
CPU xen thêm chu kỳ đợi trên hình 5.21 là sơ đồ mạch phối ghép EPROM 2732 có thêm
mạch NAND để tạo tín hiệu cho phép mạch giải mã và tín hiệu yêu cầu đợi để đưa đến chân
RDI1 của 8284 (đã được trình bày ở phần trước). Bằng cách này mỗi khi CPU đợi EPROM
2732 tốc độ chậm thì 1 chu kỳ đợi sẽ được tự động xen thêm.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 61
Phối ghép EPROM 2732 - 450 ns với CPU 8088 - 5MHz.
Việc phối ghép SRAM với 8088 thường đơn giản hơn so với EPROM vì SROM có tốc
độ nhanh nên không cần mạch xen thêm chu kỳ đợi.
5.3. Phối ghép 8088 với thiết bị ngoại vi
5.3.1. Các kiểu phối ghép vào/ra
Đối với 8088 (hay họ 80x86 nói chung) có 3 cách phối ghép CPU với các thiết bị ngoại vi
(các cổng vào/ra, I/O) : a) thiết bị ngoại vi có không gian địa chỉ tách biệt với bộ nhớ và b)
thiết bị ngoại có không gian địa chỉ chung với bộ nhớ.
Thiết bị vào/ra có không gian địa chỉ tách biệt
Trong cách phối ghép này, bộ nhớ được độc quyền dùng không gian 1MB mà CPU
dành cho nó. Các thiết bị ngoại vi (các cổng) sẽ được dành riêng một không gian 64KB cho
mỗi loại cổng vào hoặc ra. Tất nhiên ta phải dùng tín hiệu IO/M, và các lệnh trao đổi dữ liệu
một cách thích hợp cho mỗi không gian đó
Đây là cách phối ghép thường được trong các hệ vi xử lý Intel. Trong cách phối ghép
này không gian địa chỉ của I/O tách biệt với không gian địa chỉ bộ nhớ. Bởi vậy người sử
dụng có thể mở rộng bộ nhớ tới kích thước cực đại (1 MB). Địa chỉ của thiết bị vào/ra trong
cách phối ghép này được gọi là cổng. Bất lợi của cách phối ghép này là phải sử dụng cách
lệnh IN, INS, OUT và OUTS để truyền dữ liệu giữa bộ vi xử lý và I/O. Các tín hiệu điều
khiển như IO/ M ,RD và WR cần cho phối ghép này. Trong máy tính cá nhân, các cổng I/O
được dùng để nối ghép với các thiết bị ngoại vi. Các cổng 8 bit dùng để truy nhập các
thiết bị đặt trên mainboard như đồng hồ và bàn phím, còn các địa chỉ cổng 16 bit dùng để
truy nhập các cổng nối tiếp và song song cũng như các thiết bị video và các ổ đĩa.
Ví dụ về phân vùng địa chỉ I/O cho máy tính cá nhân
Các cổng từ 0000H đến 03FFH thường dành cho máy tính. Còn các cổng từ 0400H
đến FFFFH dành cho người sử dụng. Bộ đồng xử lý toán học 80287 sử dụng địa chỉ I/O
00F8H - 00FFH để trao đổi thông tin. Vì lý do này mà Intel để dành các cổng từ 00F0H đến
00FFH.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 62
Thiết bị vào/ra và bộ nhớ có chung không gian địa chỉ
Trong cách phối ghép này, bộ nhớ và thiết bị ngoại vi cùng chia nhau không gian địa
chỉ 1M mà CPU 8088 có khả năng địa chỉ hóa. Các thiết bị ngoại vi sẽ chiếm một vùng nào
đó trong không gian địa chỉ 1M, phần còn lại là của bộ nhớ. Các thiết bị ngoại vi được đối
xử như một ô nhớ trong bộ nhớ. Bởi vậy, các lệnh IN, INS, OUT và OUTS không được sử
dụng nữa, thay vào đó là các lệnh chuyển dữ liệu giữa bộ vi xử lý và bộ nhớ (chẳng hạn
lệnh MOV). Bất lợi chính của cách phối ghép này là một phần bộ nhớ phải dành cho thiết bị
ngoại vi.
5.3.2. Giải mã địa chỉ cho thiết bị vào/ra
Việc giải mã địa chỉ cho thiết bị vào/ra gần giống như giải mã địa chỉ cho bộ nhớ. Việc
giải mã địa chỉ cho thiết bị vào/ra có không gian địa chỉ chung với bộ nhớ giống hệt như
giải mã địa chỉ cho bộ nhớ nên ta không trình bày ở đây.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 63
Sự khác nhau chính giữa giải mã địa chỉ cho bộ nhớ và giải mã địa chỉ cho thiết bị
ngoại vi có không gian địa chỉ tách biệt với bộ nhớ là số chân địa chỉ nối tới bộ giải mã: với
bộ nhớ là A19 - A0, còn với thiết bị vào/ra là A15 - A0.
Địa chỉ của các cổng 8 bit xuất hiện trên bus địa chỉ A15 - A0 trong khoảng từ 0000H
đến 00FFH. Nếu một hệ thống định thiết kế mà tương lai không bao giờ có hơn 256 thiết bị
ngoại vi thì chúng ta chỉ cần giải mã cho các bit địa chỉ từ A7 - A0, bỏ các bit địa chỉ từ
A15 - A8. (Lưu ý là với máy tính cá nhân phải giải mã cả 16 bit).
Dưới đây là ví dụ sử dụng bộ giải mã 74LS138 để giải mã địa chỉ cho các cổng
vào/ra có địa chỉ F0H - F7H. Mạch giải mã này giống như mạch giải mã địa chỉ bộ nhớ,
ngoại trừ các bit địa chỉ nối tới đầu vào bộ giải mã chỉ từ A7 - A0.
5.3.3. Các lệnh vào/ra dữ liệu
Các lệnh thực hiện việc trao đổi dữ liệu giữa bộ vi xử lý với các thiết bị ngoại vi
gồm có lệnh OUT để đưa dữ liệu từ bộ vi xử lý tới một thiết bị ngoại vi và lệnh IN để đọc dữ
liệu một thiết bị ngoại vi vào bộ vi xử lý. Các bộ vi xử lý sau 8086/8088 có thêm lệnh
OUTS và INS để di chuyển chuỗi dữ liệu giữa bộ nhớ và một thiết bị ngoại vi.
Cả lệnh IN và OUT đều di chuyển dữ liệu giữa thanh ghi chứa của bộ vi xử lý (AL,
AX) với một thiết bị ngoại vi. Địa chỉ của cổng vào/ra có thể là địa chỉ cổng 8 bit đặt ngay
sau mã lệnh hoặc địa chỉ cổng 16 bit đặt trong thanh ghi DX. Intel gọi địa chỉ cổng 8 bit (ký
hiệu là p8) là địa chỉ cố định vì nó được lưu trong bộ nhớ cùng với lệnh, còn địa chỉ cổng
16 bit để trong DX gọi là địa chỉ biến đổi. Các lệnh INS và OUTS chỉ sử dụng địa chỉ 16
bit để trong DX.
Khi dữ liệu được di chuyển bằng các lệnh IN và OUT, địa chỉ của cổng vào ra
(thường gọi là số cổng) xuất hiện trên bus địa chỉ. Cổng 8 bit xuất hiện trên các chân địa chỉ
A7 - A0 với các chân địa chỉ A15 - A8 bằng 0000 00002, các chân còn lại A19 - A16 không
dùng cho các lệnh vào/ra. Cổng 16 bit để trong DX xuất hiện trên các chân địa chỉ A15 -
A0. Mạch phối ghép vào/ra sẽ giải mã địa chỉ cổng này giống như cách giải mã địa chỉ bộ
nhớ.
Các lệnh INS và OUTS sử dụng địa chỉ cổng để trong DX nhưng không truyền dữ
liệu giữa thanh ghi chứa của bộ vi xử lý và thiết bị vào ra mà truyền dữ liệu giữa bộ nhớ và
thiết bị vào/ra. Địa chỉ bộ nhớ được chỉ ra bởi ES:DI (cho lệnh INS) và DS:SI (cho lệnh
OUTS). Cũng giống như các lệnh di chuyển chuỗi khác, nội dung của các thanh ghi con trỏ
tăng hay giảm phụ thuộc vào bit cờ DF. Cả hai lệnh INS và OUTS đều có thể sử dụng tiếp
đầu ngữ REP để cho phép di chuyển nhiều hơn một byte giữa bộ nhớ và thiết bị vào ra.
Dưới đây là một vài ví dụ về lệnh vào/ra dữ liệu:
Lệnh Độ rộng dữ liệu Chức năng
IN AL,p8 8 Đọc 1 byte từ cổng p8 vào AL
IN AX,p8 16 Đọc 1 từ từ cổng p8 vào AX
IN AL,DX 8 Đọc 1 byte từ địa chỉ cổng trong DX vào AL
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 64
IN AX,DX 16 Đọc 1 từ từ địa chỉ cổng trong DX vào AX
INSB 8 Đọc 1 byte từ địa chỉ cổng trong DX vào ô
nhớ ES:DI, sau đó DI = DI 1
INW 16 Đọc 1 từ từ địa chỉ cổng trong DX vào ô nhớ
ES:DI, sau đó DI = DI 2
OUT p8,AL 8 Đưa 1 byte từ AL ra cổng p8
OUT p8,AX 16 Đưa 1 từ từ AX ra cổng p8
OUT DX,AL 8 Đưa 1 byte từ AL ra địa chỉ cổng trong DX
OUT DX,AX 16 Đưa 1 từ từ AX ra địa chỉ cổng trong DX
OUTSB 8 Đưa 1 byte từ ô nhớ DS:SI ra địa chỉ cổng
trong DX, sau đó SI = SI 1
OUTSW 16 Đưa 1 từ từ ô nhớ DS:SI ra địa chỉ cổng trong
DX, sau đó SI = SI 2
5.3.4. Mạch phối ghép vào/ra song song lập trình đƣợc 8255A
Mạch 8255A thường được gọi là mạch phối ghép vào/ra lập trình được (program
mable peripheral interface, PPI). Do khả năng mềm dẻo trong các ứng dụng thực tế nó là
mạch phối ghép được dùng rất phổ biến cho các hệ vi xử lý 8-16 bit.
Các chân tín hiệu của 8255A có ý nghĩa khá rõ ràng. Chân Reset phải được nối với tín
hiệu reset chung của toàn hệ (khi reset thì các cổng được định nghĩa là cổng vào để không gây
ra sự cố cho các mạch điều khiển). Vi mạch 8255 có 3 cổng A, B và C được lập trình theo
hai nhóm 12 chân. Nhóm A gồm cổng A và phần cao của cổng C (PC7 - PC4), nhóm B gồm
cổng B và phần thấp của cổng C(PC3 - PC0). CS được nối với mạch tạo xung chọn thiết bị để
đặt mạch 8255A vào một địa chỉ cơ sở nào đó. các tín hiệu địa chỉ A0, A1 sẽ chọn ra 4 thanh
ghi bên trong 8255A 1 thanh ghi để ghi từ điều khiển cho hoạt động của 8255A (viết tắt là
CWR, control word register) và 3 thanh ghi khác ứng với các cổng (port) là PA, PB, PC để
ghi/đọc dữ liệu . Theo bảng dưới ta nhận thấy địa chỉ cho PA cũng chính là địa chỉ cơ sở của
8255A.
A1 A0 Cổng
0 0 Cổng A
0 1 Cổng B
1 0 Cổng C
1 1 Thanh ghi điều khiển
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 65
Có 2 loại từ điều khiển cho 8255A:
+ Từ điều khiển định nghĩa cấu hình cho các cổng PA, PB, PC
+ Từ điều khiển lập/xóa từng bit ở đầu ra của PC
Sơ đồ khối cấu trúc bên trong của 8255A
CS A1 A0 Chọn ra
1 x x không chọn
0 0 0 PA
0 0 1 PB
0 1 0 PC
0 1 1 CWR
Từ điều khiển định nghĩa cấu hình
NHOÙM A
COÅNG A
COÅNG C
NHOÙM A
COÅNG C
NHOÙM B
COÅNG B
NHOÙM B
(CAO)
(THAÁP)
NHOÙM A
NHOÙM B
Ñieàu khieån
Ñieàu khieån
BusD
Ñeäm
Logic
Ñieàu khieån
ghi / ñoïc
Bus noäi boä
DO-D7
RD
WR
AO
A1
RESET
CS
PAO-PA7
PCO-PC3
PBO-PB7
PC4-PC7
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 66
Từ điều khiển lập/xoá bit ra PCi:
Dạng thức của từ điều khiển để lập/xoá PCi được thể hiện trên hình dưới
Như ta thấy ở trên, các chế độ (mode) làm việc của mạch cổng 8255A có thể được định nghĩa
bằng từ điều khiển CWR. Cụ thể 8255A có 4 chế độ làm việc:
+ Chế độ 0: "Vào/ra cơ sở" (còn gọi là "vào ra đơn giản"). Trong chế độ này mỗi
cổng PA. PB. PCH và PCL đều có thể được định nghĩa là các cổng vào hoặc ra.
Ở chế độ 0, 8255 có chức năng như một thiết bị vào được đệm hoặc thiết bị ra được
chốt. Các định nghĩa chức năng cho chế độ 0:
• Hai cổng 8 bit (cổng A và B) và hai cổng 4 bit (phần cao và phần thấp cổng C)
• Bất kỳ cổng nào cũng có thể là cổng vào hoặc ra
• Các cổng ra được chốt, các cổng vào không được chốt
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 67
• Với 4 cổng, có thể xây dựng 16 cấu hình vào/ra khác nhau
+ Chế độ 1: "Vào/ra có xung cho phép". Trong chế độ này mỗi cổng PA. PB có thể
được định nghĩa thành cổng vào hoặc ra với tín hiệu móc nối (handshaking) do các bit tương
ứng của cổng PC trong cùng nhóm đảm nhiệm.
+ Chế độ 2: "Vào ra 2 chiều".Trong chế độ này chỉ riêng cổng PA có thể được định
nghĩa thành cổng vào/ra 2 chiều với các tín hiệu móc nối do các bit của cổng PC đảm nhiệm.
Cổng PB có thể làm việc trong chế độ 0 hoặc 1.
Sau đây là một vài ví dụ về cách lập trình cho 8255A.
Ví dụ 1: Giả thiết mạch 8255A có các địa chỉ sau:
Địa chỉ Thanh ghi (cổng)
7Ch PA
7Dh PB
7Eh PC
7Fh CWR
Lập trình để định nghĩa chế độ 0 cho 8255A với cấu hình các cổng như sau:
PA: Ra
PB: Vào
PCH: Ra
PCL: Vào
Sau đó đọc các giá trị dữ liệu có tại PB rồi đưa ra PA và
PCL rồi đưa ra PCH.
Giải: Có thể định nghĩa các hằng cho cổng, thanh ghi từ điều khiển và cho từ điều khiển nhờ
lệnh giả EQU:
PA EQU 7CH
PB EQU 7DH
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 68
PC EQU 7EH
CWR EQU 7FH
CW EQU 83H ; từ điều khiển cho yêu
; cầu trên 83H=10000011
và sau đó dùng hằng đó vào việc định nghĩa cấu hình cho 8255A:
MOV AL, CW ; từ điều khiển trong AL
OUT CWR, AL ; đưa CW vào CWR
IN AL, PB ; đọc cổng PB
OUT PA, AL ; đưa dữ liệu đọc được ra cổng PA
IN AL, PC ; đọc cổng PCL
MOV CL, 4 ; số lần quay AL
ROL AL, CL ; chuyển 4 bit thấp thành 4 bit cao
OUT PC, AL ; đưa dữ liệu đọc được ra cổng PCH
Ví dụ 2: Lập trình để bit PC4 của 8255A ở ví dụ trên tạo ra 256 xung với T=50ms, độ rộng
50%. Giả thiết đã có sẵn chương trình con trễ 25ms là TRE25MS.
Giải: Sử dụng các ký hiệu ở ví dụ trên và các định nghĩa mới
PC4ON EQU 09H ; từ điều khiển để PC4=1 (On): 00001001B
PC4OF EQU 08H ; từ điều khiển để PC4=0 (Off): 00001000B
ta có mẫu chương trình sau:
MOV CX, 100H ; số xung phải tạo ra
CLI ; cấm ngắt để yên tâm mà
; tạo xung
Lap: MOV AL, PC4ON ; từ điều khiển cho PC4=1.
OUT PC, AL ; PC4=1
CALL TRE25MS ; kéo dài 25ms.
MOV AL,PC4OFF ; PC4=0
CALL TRE25MS ; Lặp cho đủ số xung
STI ; cho phép ngắt trở lại
...
Trong ví dụ trên ta chú ý lệnh CLI (để cấm ngắt) và lệnh STI (để cho phép ngắt) ở đầu
và cuối đoạn chương trình tính thời gian tạo ra dãy xung. Điều này là cần thiết vì ta dùng
chương trình để tạo ra các khoảng thời gian và vì thế ta muốn các yêu cầu ngắt (nếu có)
không ảnh hưởng tới việc tạo ra các khoảng thời gian đó.
Ví dụ 3: có mạch 8255A với địa chỉ cơ sở là 30H nối với các phần tử ngoại vi đơn giản
(hình 5.42). Lập trình để có U1>U2 thì đọc trạng thái công tắc K, nếu K đóng thì cho đèn LED
tắt, K mở thì cho đèn LED sáng.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 69
Giải:
Ta phải định nghĩa các hằng và từ điều khiển để định nghĩa cấu hình: PA là vào, PB là
vào và PCH là ra. Khi U1>U2 thì ta đọc được PB7=1 (còn khi 21 UU thì PB7=0). Lúc này ta
phải đọc trạng thái công tắc K để điều khiển đèn LED, nếu K đóng thì ta đọc được PB7=0 và
ta phải đưa ra PC4=) để tắt đèn.
Định nghĩa các hằng
PA EQU 30H
PB EQU 31H
PC EQU 32H
CWR EQU 33H
CW EQU 92H ; từ điều khiển cho yêu
; cầu trên 92H=10010010
đoạn chương trình còn lại là:
MOV AL, CW ; từ điều khiển trong AL
OUT CWR, AL ; đưa CW vào CWR
DocPB: IN AL, PB ; đọc cổng PB
AND AL, 80H ; PB7=1?
JZ DocPB ; đọc lại
IN AL, PA ; đọc cổng PA
And AL, 01H ; khoá K đóng (PA1=0)?
JZ Tat ; đúng, tắt đèn
MOV CL, 4
ROL AL, CL ; đổi bit0 lên bit4
OUT PC, AL ; đưa tín hiệu thắp đèn
Tat: OUT PC, AL ; đưa tín hiệu tắt đèn
Ra:...
5.4. Một số phối ghép cơ bản
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 70
5.4.1. Phối ghép với bàn phím
Bàn phím là một thiết bị vào rất thông dụng trong các hệ vi xử lý. Trong trường hợp
đơn giản nhất đó có thể chỉ là 1 công tắc có gắn phím nối với 1 chân nào đó của bộ vi xử lý; ở
mức phức tạp hơn đó có thể là hàng chục công tắc có gắn phím được tổ chức theo một ma
trận; phức tạp hơn nữa, đó là một hệ vi xử lý chuyên dụng quản lý cả trăm công tắc có gắn
phím với nhiệm vụ nhận ra phím được gõ và tạo mã đưa đến cho hệ vi xử lý.
Dù là đơn lẻ hay là tập hợp các phím, khi phối ghép chúng với bộ vi xử lý ta cũng phải
thoả mãn một số yêu cầu đặc biệt để đảm bảo cả hệ thống hoạt động đúng.
Có rất nhiều loại công tắc được dùng trong phối ghép với bộ vi xử lý nhưng có thể xếp
chúng vào 2 nhóm:
+ Công tắc có tiếp xúc cơ khí (kiểu điện trở: điện trở thay đổi khi ấn và khi nhả phím),
+ Công tắc không có tiếp xúc cơ khí (kiểu điện dung: điện dung thay đổi khi ấn và khi
nhả phím hoặc kiểu hiệu ứng Hall: điện áp thay đổi khi ấn và khi nhả phím).
Trong các loại công tắc đó, loại công tắc kiểu điện trở dựa trên tiếp xúc cơ khí là rất
thông dụng trong thực tế. Hình dưới là cách nối công tắc vào mạch điện và đáp ứng của nó
khi có lực tác động vào phím (ấn phím).
Nhìn vào đáp ứng về mặt cơ-điện của công tắc trên hình trên, ta nhận thấy: vì công tắc
là một hệ thống có quán tính, do đó khi ta ấn phím rồi nhả phím, xung điện thu được ở đầu ra
của nó không phải là liên tục mà bị ngắt quãng tại các giai đoạn quá độ (lúc bắt đầu nhấn
phím và lúc bắt đầu nhả phím). Điều này xảy ra là do trong kết cấu của công tắc có các bộ
phận đàn hồi, khi bị tác động của lực bên ngoài các kết cấu động của công tắc bị giao động
làm cho bề mặt tiếp xúc của công tắc bị biến đổi. Trong thực tế thì mỗi quá trình quá độ trên
kéo dài khoảng 10-20 ms. Nếu trong thời kỳ quá độ ta đọc thông tin từ công tắc thì rất dễ
nhận được thông tin sai lệch về trạng thái của công tắc, vì vậy người ta thường phải chờ cà
10-20 ms sau khi công tắc bị ấn hoặc nhả để đọc được trạng thái của công tắc trong giai đoạn
xác lập.
Khi một công tắc được nối thẳng vào một chân nào đó của bộ vi xử lý hoặc các mạch
phụ trợ, có một cách khác để tránh các hiệu ứng phụ không mong muốn có thể tác động lên
hoạt động của bộ vi xử lý do việc công tắc bị rung gây ra là dùng các mạch tích phân nối bên
cạnh công tắc như trong trường hợp tạo tín hiệu cho đầu vào RESET của hệ vi xử lý.
Tiếp theo ta xét trường hợp một số công tắc nhất định được tổ chức theo ma trận gồm
các hàng và các cột để tạo thành bàn phím cho một hệ vi xử lý. Với tổng số phím khoảng 20-
30 (bàn phím HEXA) thì đó là trường hợp thường thấy trong các hệ thống nhỏ: các máy vi
tính trên một bảng mạch in hoặc các bảng mạch điều khiển nhỏ (hay được gọi là "kit"). Trong
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 71
các máy tính cá nhân như IBM PC chẳng hạn thì tổng số phím có thể là từ 80-101 hoặc 104
phím tuỳ theo thế hệ máy.
Để nhận được thông tin chính xác về trạng thái của một phím trong các hệ thống như vậy ta
thường phải làm 3 khối công việc chính như sau:
+ Phát hiện có ấn phím,
+ Chờ công tắc ở trạng thái ổn định (chống rung),
+ Tìm phím được ấn và tạo mã cho phím đó.
Và để có được một phối ghép bàn phím với bộ vi xử lý thực hiện các chức năng đã
nêu ở trên trong thực tế người ta có thể làm theo 2 cách:
+ dùng bộ vi xử lý để quản lý trực tiếp bàn phím được ghép qua một số mạch cổng. Có thể
thấy rằng ở đây CPU làm việc trong chế độ thăm dò. Bằng cách này CPU phải để một phần
thời gian để quản lý bàn phím nhưng ta lại đạt được sự đơn giản về phần cứng.
+ dùng một mạch quản lý bàn phím chuyên dụng để phối ghép với bàn phím. ở đây CPU làm
việc với bộ quản lý bàn phím qua yêu cầu ngắt. Bằng cách này ta giải phóng được CPU để nó
có thể dành thời gian cho các việc khác quan trọng hơn.
CPU trực tiếp quản lý bàn phím
Trong cách làm này, để đơn giản trong tình bày, ta giả thiết trường hợp bàn phím hệ 16
gồm 16 công tắc - phím đánh dấu từ 0 - FH ghép với bộ vi xử lý thông qua các mạch cổng
như trên hình trên. Các mạch cổng có thể là các mạch IC như 74LS373 hoặc một phần của
PPI 8255A được lập trình thích hợp.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 72
Lưu đồ thuật toán chương trình phối ghép bàn phím.
Thuật toán của chương trình điều khiển việc phối ghép CPU - bàn phím theo sơ đồ
phần cứng nói trên được trình bày bằng lưu đồ trên hình trên.
Đầu tiên ta phải kiểm tra tình trạng (tốt, xấu) của bàn phím khi nó chưa được ấn (đúng
ra là khi ta chưa kịp ấn phím nào hoặc chưa kịp ấn phím tiếp theo) xem liệu có phím nào bị
kẹt (dính) không bằng cách đưa 0 ra các hàng và đọc các cột để quét toàn bộ các phím. Nếu
có một công tắc nào đó nối hàng và cột, mức điện áp 0 ở hàng sẽ truyền sang cột và ta sẽ đọc
được ở cột tương ứng mức điện áp 0. Một bàn phím tốt sẽ không có các tiếp điểm của một
công tắc nào được nối trong lúc này và ta sẽ đọc được mức 1 ở tất cả các cột. Chương trình
theo lưu đồ trên sẽ bị quẩn nếu bàn phím của ta bị dính. Một cải tiến có thể được thêm vào
chương trình trên để thoát ra khỏi vòng quẩn đó và đưa ra thông báo bàn phím bị hỏng.
Nếu bàn phím không bị kẹt thì ta mới đi vào phần phát hiện xem liệu có một phím nào
đó được ấn không. Nếu phát hiện ra có một phím được ấn ta sẽ phải chờ cà 20 ms để cho công
tắc có thời gian ổn định trạng thái. Tiếp theo ta phải xác định lại xem có đúng là có một phím
được ấn không, nếu có thì ta mới tiến hành xác định cụ thể xem đó là phím nào trong số các
phím. Ta làm việc này bằng cách đưa 0 ra lần lượt từng hàng và đọc các cột. Khi đã biết được
toạ độ hàng và cột của một phím bị ấn thì công việc tiếp theo là tạo mã cho phím đó. Trong sơ
đồ đơn giản như sơ đồ trên hình 9.3 thì việc tạo mã cho phím vừa tìm thấy được thực hiện
bằng cách đọc 8 bit từ cổng vào (4 bit cao chứa thông tin về toạ độ hàng còn 4 bit thấp chứa
thông tin về tọa độ cột) rồi chuyển thành mã hệ 16 tương ứng với phím bằng cách tra một
bảng thích hợp.
Chương trình 8.1. CPU-HexKeyboard cpu_kbd.asm
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 73
.Model Small
.Stack 100
.Data
;0 1 2 3 4 5 6 7
Key DB 77H 7BH 7DH 7EH 0B7H 0BBH 0BDH 0BEH
;8 9 A B C D E F
DB 0D7H 0DBH ODOH ODEH 0E7H 0EBH 0EDH 0EEH
PA EQU 60H
PB EQU 61H
CWR EQU 63H
CW EQU 88H ;chế độ 0,PA:ra;PB&PC:vào
.Code Main Proc
MOV AX,@Data ;khởi đầu DS MOV DS,AX
MOV AL,CW ;khởi đầu 8255A OUT CWR,AL
CALL RD_KBD ;gọi chương trình đọc phím
Xuly:... ;các xử lý tiếp theo Main Endp
RD_KBD Proc
; thủ tục đọc và tạo mã cho phím bị ấn
; Ra: AL: mã phím,
; AH=00H khi không có lỗi,
; AH=01 khi có lỗi
PUSHF ;cất các thanh ghi PUSH BX
PUSH CX
PUSH DX
MOV AL,00 ;đưa 0 ra mọi hàng
OUT PA,AL
MOV CX,3 ;số lần kiểm tra dính
Wait_Open:
IN AL,PB ;đọc cột để kiểm tra dính
AND AL,0FH ;che các bit cao
CMP AL,0FH ;có phím dính?
LOOPNE
Wait_Open ;đúng, chờ khỏi dính
JCXZ Sai ;"quá tam ba bận": phím bị kẹt
Wait_Pres: IN AL,PB ;đọc cột để kiểm tra ấn phím
AND AL,0FH ;che các bit cao
CMP AL,0FH ;có phím ấn?
JE Wait_Pres ;không,chờ ấn phím
MOV CX,5880 ;có,trễ 20ms để chống rung Tre:
LOOP Tre
;đọc để kiểm tra lại phím bị ấn IN AL,PB
AND AL,0FH ;che các bit cao
CMP AL,0FH ;có phím ấn?
JE Wait_Pres ;không,chờ ấn phím
;tìm phím bị ấn
MOV AL,0FEH ;mẫu bit để đưa 0 ra từng hàng
MOV CL,AL ;cất mẫu
Hgsau: OUT PA,AL ;đưa 0 ra 1 hàng
IN AL,PB ;đọc các cột và kiểm tra
AND AL,0FH
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 74
CMP AL,0FH ;đã tìm thấy phím bị ấn?
JNE Taoma ;đúng,tạo mã
ROL CL,1 ;không thấy,đổi mẫu
MOV AL,CL
JMP Hgsau ;làm tiếp với hàng sau Taoma:
MOV BX,000FH ;BX chỉ vào mã của phím F
IN AL,PB ;đọc toạ độ hàng và cột
Tiep: CMP AL,Key[BX] ;đúng với mã chuẩn?
JE Thoi ;đúng,mã của phím trong BX
DEC BX ;sai,chỉ vào mã khác
JNS Tiep ;tìm tiếp
Sai: MOV AH,01 ;AH để báo có lỗi
JMP Ra ;đi ra
Thoi: MOV AL,BL ;mã của phím hệ 16 trong AL
MOV AH,00 ;AH để báo không có lỗi
Ra: POP DX ;lấy lại các thanh ghi
POP CX
POP BX
POPF
RET ;trở về chương trình chính
RD_KBD Endp
END Main
Dùng mạch chuyên dụng để quản lý bàn phím
Thí dụ trên cho thấy một cách phối ghép đơn giản giữa CPU và bàn phím. Trong trường
hợp CPU còn phải dành thời gian để làm nhiều công việc khác của hệ thống hoặc số lượng
phím nhiều, thường người ta sử dụng các mạch quản lý bàn phím có sẵn để làm các công việc
đã nêu liên quan đến bàn phím. Như vậy bộ vi xử lý được giải phóng khỏi công việc quét bàn
phím và khi cần thiết nó chỉ việc đọc mã của phím bị ấn do mạch quản lý chuyên dụng đưa
đến.
Mạch AY5-2376 của General Instrument là một vi mạch chuyên dụng như vậy. Nó làm
việc đúng theo cách của một chương trình quét bàn phím mà ta đã mô tả ở thí dụ trên và khi
đã tạo xong mã cho phím bị ấn, nó đưa ra xung STB (xung cho phép chốt dữ liệu) để báo cho
bộ vi xử lý biết. Bộ vi xử lý có thể nhận biết xung STB khi làm việc theo kiểu thăm dò
(polling) hoặc có thể đáp ứng với xung STB theo kiểu ngắt nếu xung này được sử dụng như
một xung tác động đến đầu vào yêu cầu ngắt che được INTR. Mạch AY5-2376 còn có khả
năng quản lý không nhầm lẫn đối với bàn phím ngay cả trong trường hợp có 2 phím được ấn
gần như đồng thời.
Một trường hợp đặc biệt của việc quản lý bàn phím dùng vi mạch chuyên dụng là bàn
phím cho các máy IBM PC và các thiết bị đầu cuối. Tại đây người ta sử dụng một hệ vi xử lý
chuyên dụng cho công việc quản lý bàn phím. Hạt nhân của hệ này là vi mạch 8048 - máy vi
tính trong 1 vỏ, bao gồm CPU 8bit, ROM, RAM, cổng I/O và một bộ đếm/định thời gian lập
trình được. Chương trình trong ROM của 8048 điều khiển việc kiểm tra các mạch điện tử của
bàn phím khi nó vừa được nối với nguồn điện và thực hiện việc quyét bàn phím theo 3 công
đoạn đã nêu ở trên. Khi có một phím được ấn, mạch 8048 đưa ra tín hiệu yêu cầu ngắt đến
CPU và truyền mã của phím bị ấn đến CPU. Mã này được truyền đi dưới dạng dữ liệu nối tiếp
để giảm bớt số đường dây cần dùng cho việc truyền tín hiệu.
Trong thực tế còn tồn tại những mạch kết hợp các phối ghép bàn phím - đèn LED trong
một vi mạch để tạo thuận lợi cho người sử dụng khi xây dựng các kit vi xử lý. Đó là trường
hợp mạch 8279 của Intel, một vi mạch tổ hợp cà lớn lập trình được. Sau khi được CPU lập
trình (ghi từ điều khiển), mạch 8279 có khả năng quản lý bàn phím theo 3 công đoạn kinh
điển đã nêu và đồng thời có khả năng điều khiển bộ phận hiện thị gồm nhiều nhất là 16 đèn
LED 7 nét ở chế độ động.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 75
Dùng 8255 để phối ghép 8088 với bàn phím.
Bàn phím có nhiều kích thước khác nhau, từ bàn phím chuẩn 101 phím đến các bàn
phím nhỏ, chuyên dụng chỉ có 4-16 phím. Chúng ta sẽ tìm hiểu phối ghép với bàn phím 16
phím. Mối phím là một công tắc, các công tắc được tổ chức thành ma trận 44 gồm 4 hàng
(ROW0 - ROW3) và 4 cột (COL0 - COL3). Mỗi hàng được nối vào nguồn 5.0 V qua một
điện trở 10 K.
Bộ giải mã lập trình được PAL 16L6 giải mã địa chỉ cho 8255 tại các cổng 50H-53H.
Cổng A được lập trình là cổng vào để đọc các hàng, cổng B được lập trình là cổng ra để
chọn các cột. Ví dụ, nếu cổng B đưa ra 1110 tại các chân PB3-PB0 thì cột 0 sẽ có logic 0 và
do đó bốn phím trong cột 0 sẽ được chọn, nghĩa là chỉ có các công tắc 0-3 mới có thể đặt
logic 0 vào cổng A. Tương tự như vậy, nếu cổng B đưa ra 1101 thì các công tắc 4-7 được
chọn…
Để cổng A là cổng vào, cổng B là cổng ra ta phải lập trình 8255 bằng đoạn chương
trình sau (53H là địa chỉ của thanh ghi điều khiển).
MOV AL,10010000B ;Noi dung thanh ghi dieu khien
OUT 53H,AL
Lưu đồ thuật giải để đọc một phím từ ma trận phím và giữ phím gồm ba phần chính.
Phần đầu tiên đợi nhả phím, phần thứ hai đợi nhấn phím và phần thứ ba tính mã của phím
được nhấn.
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 76
Chương trình thực hiện thuật giải trên gồm có: thủ tục SCAN quét các phím, thủ tục
DELAY tạo ra thời gian trễ 10 ms để giữ phím và thủ tục chính KEY gọi thủ tục SCAN và
DELAY.
;Thu tuc quet phim va tra ve ma so cua phim trong AL
;
ROWS EQU 4 ;So hang
COLS EQU 4 ;So cot
PORTA EQU 50H ;Dia chi cong A
PORTB EQU 51H ;Dia chi cong B
KEY PROC NEAR USES CX
CALL SCAN ;Kiem tra tat ca cac phim
JNZ KEY ;Neu phim van nhan
CALL DELAY ;Doi khoang 10 ms
CALL SCAN ;Kiem tra tat ca cac phim
JNZ KEY ;Neu phim van nhan
KEY1:
CALL SCAN ;Kiem tra tat ca cac phim
JZ KEY1 ;Neu khong co phim nao duoc nhan
CALL DELAY ;Doi khoang 10 ms
CALL SCAN ;Kiem tra tat ca cac phim
JZ KEY1 ;Neu khong co phim nao duoc nhan
PUSH AX ;Cat ma hang vao ngan xep
MOV AL,COLS ;Bat dau tinh ma phim
SUB AL,CL
MOV CH,ROWS
MUL CH
MOV CL,AL
DEC CL
POP AX
KEY2:
ROR AL,1 ;Tim vi tri hang INC CL
JC KEY2
MOV AL,CL ;Ma phim de vao AL RET
KEY ENDP
SCAN PROC NEAR USES BX
MOV CL,ROWS ;Tao mat na hang
MOV BH,0FFH
SHL BH,CL
MOV CX,COLS ;Nap so cot
MOV BL,0FEH ;Lay ma chon
SCAN1:
MOV AL,BL ;Chon cot OUT PORTB,AL
ROL BL,1
IN AL,PORTA ;Doc hang OR AL,BH
CMP AL,0FFH ;Kiem tra phim nhan JNZ SCAN2
LOOP SCAN1
SCAN2: RET
SCAN ENDP
DELAY PROC NEAR USES CX
MOV CX,5000 ;10 ms (clock 8 MHz)
DELAY1:
LOOP DELAY1
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 77
RET
DELAY ENDP
5.4.2. Phối ghép với đèn Led
Điốt phát sáng - LED là một phần tử phối ghép với bộ vi xử lý ở đầu ra rất thông
dụng. Trong trường hợp đơn giản, đó có thể là một vài đèn LED đơn lẻ để báo hiệu một vài
trạng thái nào đó. Phức tạp hơn, đó là các đèn LED được tổ hợp thành đèn chỉ thị 7 nét hoặc
nhiều hơn để hiện thị các thông tin dưới dạng số hoặc chữ.
Để điều khiển được các đèn LED này sáng, bộ vi xử lý hoặc các mạch cổng của nó
cần được tăng cường khả năng tải bằng các mạch khuếch đại đệm (bằng transistor, bằng mạch
SN7400 hay SN7406) hoặc các mạch điều khiển đèn LED 7 nét chuyên dụng (như SN7447)
để đảm bảo đưa ra được tín hiệu với công suất nhất định cần thiết cho hoạt động của đèn
LED.
CPU - SN7447 - LED 7 nét ở chế độ tĩnh
Một trong các phối ghép giữa vi xử lý và đèn LED 7 nét thường thấy là dùng mạch
SN7447 để giải mã số BCD ra 7 nét và để điều khiển bộ đèn chỉ thị. Đây là kiểu điều khiển
đèn LED ở chế độ hiện thị tĩnh với đặc điểm là khá đơn giản về kết cấu nhưng rất tốn năng
lượng: để thắp sáng các nét của đèn LED thì cần có dòng điện liên tục đi qua.
Ta có thể tính sơ bộ để thấy sự tiêu tốn năng lượng của việc hiện thị theo cách này.
Một đèn LED 7 nét tiêu tốn năng lượng nhiều nhất khi nó phải hiện ra số 8 và lúc này nó tiêu
thụ dòng điện cỡ 140 mA (khoảng 20mA/nét tuỳ theo chủng loại). Bản thân một mạch
SN7447 khi hoạt động cũng tiêu thụ cỡ 14 mA. Nếu ta dùng 8 đèn LED này để chỉ thị 8 chữ
số (địa chỉ và dữ liệu) thì riêng cho mạch hiện thị ta đã phải cung cấp gần 1,5 A !
CPU - 7447 - LED 7 nét ở chế độ động - dồn kênh
Để khắc phục nhược điểm của mạch phối ghép hiện thị tĩnh như đã được nêu ở trên,
người ta thường sử dụng mạch phối ghép hiện thị động làm việc theo nguyên tắc dồn kênh:
toàn bộ các đèn hiện thị dùng chung 1 bộ điều khiển SN7447 và các đèn LED không được
được thắp sáng liên tục mà luân phiên nhau sáng theo một chu kỳ nhất định. Công suất tiêu
thụ nhờ thế mà giảm đi rất nhiều mà vẫn đạt được hiệu quả hiện thị.
Sơ đồ mạch của cách phối ghép này được thể hiện trên hình dưới :
Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam
Phạm Trung Minh – Khoa CNTT 78
Nguyên tắc hoạt động
Giá trị số cần hiện thị của mỗi con số được gửi đến cổng PB của 8255A từ CPU dưới
dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển
thích hợp đưa đến các chân catốt a, b,..., g của LED. Mỗi giá trị cần hiện thị được đưa đến
cổng PB cứ mỗi 2 ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ
liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định.
Như vậy cứ mỗi 2 ms thì phải ta đưa dữ liệu ra PB rồi PA và cho hiện ra được một giá
trị số trên 1 đèn. Nếu cả thảy có 8 LED 7 nét thì ta mất 16 ms để cho hiện số ra cả dãy đèn.
Quá trình trên lặp đi lặp lại (1 lần hết 16 ms hay 60 lần trong 1 s) làm cho ta có cảm giác là
các đèn sáng liên tục mặc dù trong thực tế chúng được điều khiển để sáng không liên tục.
Một phương pháp phối ghép giống như trên nhưng không dùng đến mạch giải mã
SN7447 cũng rất hay được sử dụng. Thay vì mạch SN7447 như ở trên, tại đây ta dùng một bộ
khuếch đại đệm chỉ để nâng cao khả năng tải của cổng PB. Vì thế trong trường hợp này CPU
phải đưa đến PB không phải là 4 bit mã BCD của giá trị số cần hiện thị mà là các mẫu 7 bit để
làm sáng các nét tương ứng với giá trị số đó. Như vậy CPU phải để thì giờ để chuyển đổi từ
giá trị số hệ 16 sang mẫu bit dành cho các nét của LED và ta có khả năng hiện được các số từ
0-FH.
Để giải phóng hoàn toàn được bộ vi xử lý khỏi công việc điều khiển đèn LED ta có thể
dùng mạch điều khiển 8279 đã được nói đến trong mục trước.
Các file đính kèm theo tài liệu này:
- thang_6_2014_17301_ky_thuat_vi_xu_ly_296.pdf