Vi xử lý 8051

5.2.6 Hạn chế của chế độ đánh địa chỉ gián tiếp thanh ghi trong 8051.

Nh− đM nói ở phần trước rằng R0 và R1 là các thanh ghi duy nhất có thể đ−ợc

dùng để làm các con trỏ trong chế độ đánh địa chỉ gián tiếp thanh ghi. Vì R0 và R1

là các thanh ghi 8 bit, nên việc sử dụng của chúng bị hạn chế ở việc truy cập mọi

thông tin trong các ngăn nhớ RAM bên trong (các ngăn nhớ từ 30H đến 7FH và các

thanh ghi SFR). Tuy nhiên, nhiều khi ta cần truy cập dữ liệu đ−ợc cắt trong RAM

ngoài hoặc trong không gian mM lệnh của ROM trên chip. Hoặc là truy cập bộ nhớ

RAM ngoài hoặc ROM trên chíp thì ta cần sử dụng thanh ghi 16 bit đó là DPTR.

5.2.7 Chế độ đánh địa chỉ theo chỉ số và truy cập bộ nhớ ROM trên chíp.

Chế độ đánh địa chỉ theo chỉ số đ−ợc sử dụng rộng rMi trongviệc truy cập các

phân tử dữ liệu của bảng trong không gian ROM ch−ơng trình của 8051. Lệnh đ−ợc

dùng cho mục đích này là “Move A, @ A + DPTR”. Thanh ghi 16 bit DPTR là thanh

ghi A đ−ợc dùng để tạo ra địa chỉ của phân tử dữ liệu đ−ợc l−u cất trong ROM trên

chíp. Do các phân tử dữ liệu đ−ợc cất trong không gian mM (ch−ơng trình) của ROM

trên chip của 8051, nó phải dùng lệnh Move thay cho lệnh Mov (chủ C ở cuối lệnh là

chỉ mà lệnh Code). Trong lệnh này thì nội dung của A đ−ợc bổ xung vào thanh ghi

16 bit DPTR để tạo ra địa chỉ 16 bit của dữ liệu cần thiết. Xét ví dụ 5.6.

Ví dụ 5.6:

Giả sử từ “VSA” được lưu trong ROM có đĩa chỉ bắt đầu từ 200H và ch−ơng

trình đ−ợc ghi vào ROM bắt đầu từ địa chỉ 0. HMy phân tích cách ch−ơng trình hoạt

động và hMy phát biểu xem từ “VSA” sau ch−ơng trình này đ−ợc cất vào đâu?

 

pdf199 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: tuando | Lượt xem: 636 | Lượt tải: 0download
Tóm tắt nội dung Vi xử lý 8051, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trê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 
Ebook Team www.updatesofts.com 
 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. 
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 
Ebook Team www.updatesofts.com 
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? 
 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: 
 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 
Ebook Team www.updatesofts.com 
 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 
 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. 
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 
S
ig
na
ls
P
or
t 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 
P
ort B
 O
utput 
P
ort B
 M
ode1 
P
ort B
 O
utput 
P
ort A
 O
utput 
P
ort A
 M
ode1 
P
ort A
 M
ode1 
I/O
 M
ode 
P
C
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
TEA
StatusWord-Mode1Output 
IN
TEA
O
B
FA
O
B
FB
INTEA is controlled by PC6 in BSR 
mode 
INTEB is controlled by PC2 in BSR 
mode 
INTEB 
OBF 
WR 
ACK 
Output 
Ebook Team www.updatesofts.com 
 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. 
 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 ACKkí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. 
1 13 
14 25 
Ebook Team www.updatesofts.com 
 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. 
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_xu_ly_8051.pdf