Giáo trình Vi điều khiển 8051 Assembly - Chương 15: Phép ghép 8031/51 với 8255

8255 là một chíp DIP 4 chân

(xem hình 15.1). Nó có 3 cổng truy cập

được riêng biệt. Các cổng đó có tên A,

B và C đều là các cổng 8 bit. Các cổng

này đều có thể lập trình như cổng đầu

vào hoặc đầu ra riêng rẽ và có thể thay

đổi một cách năng động. Ngoài ra, các

cổng 8255 có khả năng bắt tay. Do vậy

cho phép giao diện với các thiết bị khác

cũng có giá trị tín hiệu bắt tay như các

máy in chẳng hạn. Khả năng bắt tay của

8255 sẽ được bàn tới ởmục 15.3.

pdf16 trang | Chuyên mục: Kiến Trúc Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 2920 | Lượt tải: 4download
Tóm tắt nội dung Giáo trình Vi điều khiển 8051 Assembly - Chương 15: Phép ghép 8031/51 với 8255, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ác chân RD và RS 
MOV R0, APORT ; Nạp địa chỉ cổng A 
 READY: MOVX @R0 ; Đọc thanh ghi lệnh 
 RLC A ; Chuyển D7 (cờ bận) vào bit nhớ carry 
 JC READY ; Chờ cho đến khi LCD sẵn sàng 
 MOV A, #80H ; Đặt lại PA, PB thành đầu ra 
 MOV R0, #CNTPORT ; Nạp địa chỉ cổng điều khiển 
 MOVX @R0, A ; Xuất từ điều khiển tới 8255 
 MOV A, R2 ; Nhận giá trị trả lại tới LCD 
 MOV R0, #APORT ; Nạp địa chỉ cổng A 
 MOVX @R0, A ; Xuất thông tin tới các chân dữ liệu của LCD 
 MOV R0, #BPORT ; Nạp địa chỉ cổng B 
 MOV A, #00000100B ; Đặt RS=0, R/W=0, E=1 cho xung thấp lên cao 
 MOVX @R0, A ; Kích hoạt RS, R/W, E của LCD 
 NOP ; Tạo độ rộng xung của chân E 
 NOP 
 MOV A, #00000000B ; Đặt RS=0, R/W=0, E=0 cho xung cao xuống thấp 
 MOVX @R0, A ; Chốt thông tin ở chân dữ liệu LCD 
 RET 
 ; Chương trình con ghi dữ liệu mới NDATAWRT sử dụng cờ bận 
 NCMDWRT: MOV R2, A ; Lưu giá trị thanh ghi A 
 MOV A, #90H ; Đặt PA là cổng đầu vào để đọc trạng thái LCD 
 MOV R0, # CNTPORT ; Nạp địa chỉ thanh ghi điều khiển 
 MOVX @R0, A ; Đặt PA đầu vào, PB đầu ra 
 MOV A, # 00000110B ; RS=0, R/W=1, E=1 đọc lệnh 
 MOV @R0, BPORT ; Nạp địa chỉ cổng B 
 MOVX R0, A ; RS=0, R/W=1 cho các chân RD và RS 
MOV R0, APORT ; Nạp địa chỉ cổng A 
 READY: MOVX @R0 ; Đọc thanh ghi lệnh 
 RLC A ; Chuyển D7 (cờ bận) vào bit nhớ carry 
 JC READY ; Chờ cho đến khi LCD sẵn sàng 
 MOV A, #80H ; Đặt lại PA, PB thành đầu ra 
 MOV R0, #CNTPORT ; Nạp địa chỉ cổng điều khiển 
 MOVX @R0, A ; Xuất từ điều khiển tới 8255 
 MOV A, R2 ; Nhận giá trị trả lại tới LCD 
 MOV R0, #APORT ; Nạp địa chỉ cổng A 
 MOVX @R0, A ; Xuất thông tin tới các chân dữ liệu của LCD 
 MOV R0, #BPORT ; Nạp địa chỉ cổng B 
 MOV A, #00000101B ; Đặt RS=1, R/W=0, E=1 cho xung thấp lên cao 
 MOVX @R0, A ; Kích hoạt RS, R/W, E của LCD 
 NOP ; Tạo độ rộng xung của chân E 
 NOP 
 MOV A, #00000001B ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp 
 MOVX @R0, A ; Chốt thông tin ở chân dữ liệu LCD 
 RET 
15.2.3 Nối ghép ADC tới 8255. 
 Các bộ ADC đã được trình bày ở chương 12. Dưới đây một chương trình 
chỉ một bộ ADC được nối tới 8255 theo sơ đồ cho trên hình 115.11. 
 MOV A, #80H ; Từ điều khiển với PA = đầu ra và PC = đầu vào 
 MOV R1, #CRPORT ; Nạp địa chỉ cổng điều khiển 
 MOVX @R1, A ; Đặt PA = đầu ra và PC = đầu vào 
 BACK: MOV R1, #CPORT ; Nạp địa chỉ cổng C 
 MOVX A, @R1 ; Đọc địa chỉ cổng C để xem ADC đã sẵn sàng chưa 
 ANL A,, #00000001B ; Che tất cả các bít cổng C để xem ADC đã sẵn 
sàng chưa 
 JNZ BACK ; Giữ hiển thị PC0 che EOC 
 ; Kết thúc hội thoại và bây giờ nhận dữ liệu của ADC 
 MOV R1, #APORT ; Nạp địa chỉ PA 
 MOVX A, @R1 ; A = đầu vào dữ liệu tương tự 
 Cho đến đây ta đã được trao đổi chế độ vào/ ra đơn giản của 8255 và trình 
bày nhiều ví dụ về nó. Ta xét tiếp các chế độ khác. 
 Hình 15.11: Nối ghép ADC 804 với 8255. 
15.3 Các chế độ khác của 8255. 
15.3.1 Chế độ thiết lập/ xoá bit BSR. 
 Một đặc tính duy nhất của cổng C là các bit có thể được điều khiển riêng 
rẽ. Chế độ BSR cho phép ta thiết lập các bit PC0 - PC7 lên cao xuống thấp như 
được chỉ ra trên hình 15.12. Ví dụ 15.6 và 15.7 trình bày cách sử dụng chế độ này 
như thế nào? 
D0 
D7 
Decoding 
Circuyiry 
A2 
A7 
D0 
D7 
PA0 
PA7 
PC0 INTR 
RESET 
8255 
VCC 
CLK R 
CLK IN 
Vin(+) 
Vin(-) 
A GND 
Vref/2 
GND 
CS
10K 
POT 
10k 150pF 
5V 
ADC804 
RD
WR
 Hình 15.12: Từ điều khiển của chế độ BSR. 
Ví dụ 15.6: 
 Hãy lập trình PCA của 8255 ở chế độ BSR thì bit D7 của từ điều khiển 
phải ở mức thấp. Để PC4 ở mức cao, ta cần một từ điều khiển là "0xxx1001" và ở 
mức thấp ta cần "0xxx1000". Các bít được đánh dấu x là ta không cần quan tâm 
và thường chúng được đặt về 0. 
 MOV A, 00001001B ; Đặt byte điều khiển cho PC4 =1 
 MOV R1, #CNTPORT ; Nạp cổng thanh ghi điều khiển 
 MOVX @R1, A ; Tạo PC4 = 1 
 ACALL DELAY ; Thời gian giữ chậm cho xung cao 
 MOV A, #00001000B ; Đặt byte điều khiển cho PC4 = 0 
 MOVX @R1, A ; Tạo PC4 = 0 
 ACALL DELAY 
 Hình 15.13: Cấu hình cho ví dụ 15.6 và 15.7. 
Ví dụ 15.7: 
 Hãy lập trình 8255 theo sơ đồ 15.13 để: 
a) Đặt PC2 lên cao 
b) Sử dụng PC6 để tạo xung vuông liên tục với 66% độ đầy xung. 
Lời giải: 
 a) MOV R0, # CNTPORT 
 MOV A, # 0XXX0101 ; Byte điều khiển 
 MOV @R0, A 
 b) 
 AGAIN: MOV A, #00001101B ; Chọn PC6 = 1 
 MOV R0, #CNTPORT ; Nạp địa chỉ thanh ghi điều khiển 
 MOVX @R0, A ; Tạo PC6 = 1 
 ACALL DELAY 
 ACALL DELAY 
 MOV A, #00001100B ; PC6 = 0 
 0 x x x Bit Select S/R 
BSR 
Mode 
D7 D6 D5 D4 D3 D2 D1 D0 
Not Used. 
Generally = 0. 
000=Bit0 100=Bit4 
001 = Bit1 101=Bit5 
010 = Bit2 110=Bit6 
011 = Bit3 111=Bit7 
Set=1 
Reset=0 
Decoding 
Circuyiry 
A2 
A7 
D0 
D7 
CS
WR
RD RD
WR
A0 
A7 A7 
A0 PC4 
8255 
 ACALL DELAY ; Thời gian giữ chậm 
 SJMP AGAIN 
S 
s 
 Hình 15.14: Biểu đồ đầu ra của 8255 ở chế độ 1. 
 Hình 15.15: Biểu đồ định thời của 8255 ở chế độ 1. 
15.3.2 8255 ở chế độ 1: Vào/ ra với khả năng này bắt tay. 
 Một trong những đặc điểm mạnh nhất của 8255 là khả năng bắt tay với các 
thiết bị khác. Khả năng bắt tay là một quá trình truyền thông qua lại của hai thiết 
bị thông minh. Ví dụ về một thiết bị có các tín hiệu bắt tay là máy in. Dưới đây ta 
trình bày các tín hiệu bắt tay của 8255 với máy in. 
 Chế độ 1: Xuất dữ liệu ra với các tín hiệu bắt tay. 
 Như trình bày trên hình 15.14 thì cổng A và B có thể được sử dụng như 
các cổng đầu ra để gửi dữ liệu tới một thiết bị với các tín hiệu bắt tay. Các tín 
hiệu bắt tay cho cả hai cổng A và B được cấp bởi các bit của cổng C. Hình 15.15 
biểu đồ định thời của 8255. 
PC4 
PC4 
PC7 
PC6 
INTEA 
PC6 
Port A Output 
PC1 
PC2 
INTEB 
PC0 
PB7 
PB0 
Port A Output 
PC4.5 
INTEB 
INTEA 
OBFA
ACKA
OBFB
ACKB
P
or
t A
 w
ith
H
an
sh
ak
e 
Si
gn
al
s 
Po
rt 
B 
w
ith
H
an
sh
ak
e 
S
ig
na
ls
WR
1 0 1/0 1 0 X 1 0 
D7 D6 D5 D4 D3 D2 D1 D0 
Port B
 O
utput 
P
ort B
 M
ode1 
Port B
 O
utput 
Port A
 O
utput 
P
ort A
 M
ode1 
P
ort A
 M
ode1 
I/O
 M
ode 
PC
4.51=Input,0=O
utpput 
ControlWord-Mode1Output 
D7 D6 D5 D4 D3 D2 D1 D0 
IN
TE
B 
IN
TE
B 
I/O
I/O
iN
TE
A 
StatusWord-Mode1Output 
IN
TE
A 
O
BFA 
O
BFB 
INTEA is controlled by PC6 in BSR 
mode 
INTEB is controlled by PC2 in BSR 
mode 
INTEB 
OBF
WR
ACK
Output 
 Dưới đây là các phần giải thích về các tín hiệu bắt tay và tính hợp lý của 
chúng đối với cổng A, còn cổng B thì hoàn toàn tương tự. 
 Tín hiệu OBFa : Đây là tín hiệu bộ đệm đầu ra đầy của cổng A được tích 
cực mức thấp đi ra từ chân PC7 để báo rằng CPU đã ghi 1 byte dữ liệu tới cổng A. 
Tín hiệu này phải được nối tới chân STROBE của thiết bị thu nhận dữ liệu (chẳng 
hạn như máy in) để báo rằng nó bây giờ đã có thể đọc một byte dữ liệu từ chốt 
cổng. 
 Tín hiệu ACKa : Đây là tín hiệu chấp nhận do cổng A có mức tích cực 
mức thấp được nhân tại chân PC6 của 8255. Qua tín hiệu ACKa thì 8255 biết 
rằng tín hiệu tại cổng A đã được thiết bị thu nhận lấy đi. Khi thiết bị nhận lấy dữ 
liệu đi từ cổng A nó báo 8255 qua tín hiệu ACKa . Lúc này 8255 bật OBFa lên 
cao để báo rằng dữ liệu tại cổng A bây giờ là dữ liệu cũ và khi CPU đã ghi một 
byte dữ liệu mới tới cổng A thì OBFa lại xuống thấp v.v... 
 Tín hiệu INTRa: Đây là tín hiệu yêu cầu ngắt của cổng A có mức tích cực 
cao đi ra từ chân PC3 của 8255. Tín hiệu ACK là tín hiệu có độ dài hạn chế. Khi 
nó xuống thấp (tích cực) thì nó làm cho OBFa không tích cực, nó ở mức thấp một 
thời gian ngắn và sau đó trở nên cao (không tích cực). Sườn lên của ACK kích 
hoạt INTRa lên cao. Tín hiệu cao này trên chân INTRa có thể được dùng để gây 
chú ý của CPU. CPU được thông báo qua tín hiệu INTRa rằng máy in đã nhận 
byte cuối cùng và nó sẵn sàng để nhận byte dữ liệu khác. INTRa ngắt CPU ngừng 
mọi thứ đang làm và ép nó gửi byte kế tiếp tới cổng A để in. Điều quan trọng là 
chú ý rằng INTRa được bật lên 1 chỉ khi nếu INTRa, OBFa và ACKa đều ở mức 
cao. Nó được xoá về không khi CPU ghi một byte tới cổng A. 
 Tín hiệu INTEa: Đây là tín hiệu cho phép ngắt cổng A 8255 có thể cấm 
INTRa để ngăn nó không được ngắt CPU. Đây là chức năng của tín hiệu INTEa. 
Nó là một mạch lật Flip - Flop bên trong thiết kế để che (cấm) INTRa. Tín hiệu 
INTRa có thể được bật lên hoặc bị xoá qua cổng C trong chế độ BSR vì INTEa là 
Flip - Plop được điều khiển bởi PC6. 
 Từ trạng thái: 8255 cho phép hiển thị trạng thái của các tín hiệu INTR, 
OBF và INTE cho cả hai cổng A và B. Điều này được thực hiện bằng cách đọc 
cổng C vào thanh ghi tổng và kiểm tra các bit. Đặc điểm này cho phép thực thi 
thăm dò thay cho ngắt phần cứng. 
 Hình 15.16: Đầu cắm DB-25. 
 (hình 15.17 mờ quá không vẽ được) 
 Hình 15.17: Đầu cáp của máy in Centronics. 
 Bảng 15.2: Các chân tín hiệu của máy in Centronics. 
1 13 
14 25 
Chân số Mô tả Chân số Mô tả 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
STROBE 
Dữ liệu D0 
Dữ liệu D1 
Dữ liệu D2 
Dữ liệu D3 
Dữ liệu D4 
Dữ liệu D5 
Dữ liệu D6 
Dữ liệu D7 
ACK (chấp nhận) 
11 
12 
13 
14 
15 
16 
17 
18-25 
Bận (busy) 
Hết giấy (out of paper) 
Chọn (select) 
Tự nạp ( Autofeed ) 
Lỗi ( Error ) 
Khởi tạo máy in 
Chọn đầu vào ( inputSelect ) 
Đất (ground) 
 Các bước truyền thông có bắt tay giữa máy in và 8255. 
Một byte dữ liệu được gửi đến bus dữ liệu máy in. 
Máy in được báo có 1 byte dữ liệu cần được in bằng cách kích hoạt tín 
hiệu đầu vào STROBE của nó. 
Khi máy nhận được dữ liệu nó báo bên gửi bằng cách kích hoạt tín hiệu 
đầu ra được gọi là ACK (chấp nhận). 
Tín hiệu ACK khởi tạo quá trình cấp một byte khác đến máy in. 
 Như ta đã thấy từ các bước trên thì chỉ khi một byte dữ liệu tới máy in là 
không đủ. Máy in phải được thông báo về sự hiện diện của dữ liệu. Khi dữ liệu 
được gửi thì máy in có thể bận hoặc hết giấy, do vậy máy in phải được báo cho 
bên gửi khi nào nó nhận và lấy được dữ liệu của nó. Hình 15.16 và 15.17 trình 
các ổ cắm DB25 và đầu cáp của máy in Centronics tương ứng. 

File đính kèm:

  • pdfVi_dieu_khien_8051_ Assembly_15_GhepNoi.pdf