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

Như đã nói ở chương 14 trong quá trình nối ghép 8031/51 với bộ nhớ
ngoài thì hai cổng P0 và P2 bị mất. Trong chương này chúng ta sẽ trình bày làm
thế nào để mở rộng các cổng vào/ ra I/O của 8031/51 bằng việc nối nó tới chíp
8255.
15.1 Lập trình 8255.
Trong mục này ta nghiên cứu 8255 như là một trong những chíp vào/ ra
được sử dụng rộng rãi nhất. Trước hết ta mô tả những đặc tính của nó và sau đsó
chỉ ra cách nối 8031/51 với 8255 như thế nào? 
pdf 17 trang thamphan 27/12/2022 3020
Bạn đang xem tài liệu "Giáo trình Vi điều khiển - Chương 15: Phép ghép 8031/51 với 8255", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfgiao_trinh_vi_dieu_khien_chuong_15_phep_ghep_803151_voi_8255.pdf

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

  1. CHƯƠNG 15 Phép ghép 8031/51 với 8255 Như đã nói ở chương 14 trong quá trình nối ghép 8031/51 với bộ nhớ ngoài thì hai cổng P0 và P2 bị mất. Trong chương này chúng ta sẽ trình bày làm thế nào để mở rộng các cổng vào/ ra I/O của 8031/51 bằng việc nối nó tới chíp 8255. 15.1 Lập trình 8255. Trong mục này ta nghiên cứu 8255 như là một trong những chíp vào/ ra được sử dụng rộng rãi nhất. Trước hết ta mô tả những đặc tính của nó và sau đsó chỉ ra cách nối 8031/51 với 8255 như thế nào? 15.1 Lập trình 8255. Trong mục này ta nghiên cứu 8255 như là một trong những chíp vào/ PA3 1 40 PA 2 ra được sử dụng rộng rãi nhất. Trước PA2 39 PA PA1 3 38 PA hết ta mô tả những đặc tính của nó và sau đó chỉ ra cách nối 8031/51 với 8255 PA0 4 37 PA 5 36 W như thế nào? P1.4 P1.5 6 35 RES 15.1.1 Các đặc tính của 8255. GN 7 34 D 8255 là một chíp DIP 40 chân A1 8 8 33 D (xem hình 15.1). Nó có 3 cổng truy cập A0 9 2 32 D 5 được riêng biệt. Các cổng đó có tên A, PC 10 31 D 11 5 D B và C đều là các cổng 8 bit. Các cổng PC6 30 PC5 12 A D này đều có thể lập trình như cổng đầu 29 PC4 13 D vào hoặc đầu ra riêng rẽ và có thể thay 28 PC0 14 27 D đổ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 PC1 15 26 VC PC PB cho phép giao diện với các thiết bị khác 16 25 PC 17 24 PB cũng có giá trị tín hiệu bắt tay như các PB0 18 23 PB máy in chẳng hạn. Khả năng bắt tay của PB1 19 22 PB 8255 sẽ được bàn tới ở mục 15.3. PB 20 21 PB Hình 15.1: Chíp 8255. 15.1.1.1 Các chân PA0 - PA7 (cổng A). Cả 8 bít của cổng A PA0 - PA7 có thể được lập trình như 8 bit đầu vào hoặc 8 bit đầu ra hoặc cả 8 bít hai chiều vào/ ra.S D7 D0 8 PA RD 2 PB WR 5 5 PC A0 A1 RESET CS
  2. Chế độ BSR: Đây là chế độ thiết lập/ xoá bit (Bit Set/ Reset). ở chế độ này chỉ có những bit riêng rẽ của cổng C có thể được lập trình (sẽ được trình bày ở mục 15.3). Bảng 15.1: Chọn cổng của 8255. CS A1 A0 Chọn cổng 0 0 0 Cổng A 0 0 1 Cổng B 0 1 0 Cổng C 0 1 1 Thanh ghi điều khiển 1 x X 8255 không được chọn Group A Group A D7 D6 D5 D4 D3 D2 D1 D0 Pont A Mode Port 0 1 = I/O 1 = Input Selcction (Lowe PC3 Mode 0 = 0 = Mode 0 - PCC) Ot t 1 = Input Mode Port C Selection (Upper PC7 Port B 00 = Mode 0 - PCA) 1 = Input 01 = Mode 1 1 = Input 0 = Output 1Md2 0Ott Hình 15.3: Định dạng từ điều khiển của 8255 (chế độ vào/ ra). 15.1.3 Lập trình chế độ vào/ ra đơn giản. Hãng Intel gọi chế độ 0 là chế độ vào/ ra cơ sở. Một thuật ngữ được dùng chung hơn là vào/ ra đơn giản. Trong chế độ này thì một cổng bất kỳ trong A, B, C được lập trình như là cổng đầu vào hoặc cổng đầu ra. Cần lưu ý rằng trong chế độ này một cổng đã cho không thể vừa làm đầu vào lại vừa làm đầu ra cùng một lúc. Ví dụ 15.1: Hãy tìm từ điều khiển của 8255 cho các cấu hình sau: Tất cả các cổng A, B và C đều là các cổng đầu ra (chế độ 0). PA là đầu vào, PB là đầu ra, PCL bằng đầu vào và PCH bằng đầu ra. Lời giải: Từ hình 15.3 ta tìm được: a) 1000 0000 = 80H; b) 1001 000 = 90H 15.1.4 Nối ghép 8031/51 với 8255. Chíp 8255 được lập trình một trong bốn chế độ vừa trình bày ở trên bằng cách gửi một byte (hãng Intel gọi là một từ điều khiển) tới thanh ghi điều khiển của 8255. Trước hết chúng ta phải tìm ra các địa chỉ cổng được gán cho mỗi cổng A, B, C và thanh ghi điều khiển. Đây được gọi là ánh xạ cổng vào/ ra (mapping).
  3. Hình 15.4: Nối ghép 8051 với 8255 cho ví dụ 15.2. Ví dụ 15.3: Đối với hình 15.5: a) Tìm các địa chỉ cổng vào ra được gán cho các cổng A, B, C và thanhg ghi điều khiển. b) Tìm byte điều khiển đối với PA bằng đầu vào, PB bằng đầu ra, PC bằng đầu ra c) Viết một chương trình để nhận dữ liệu từ PA gửi nó đến cả cổng B và cổng C. Lời giải: a) Giả sử tất các các bit không dùng đến là 0 thì địa chỉ cổng cơ sở cho 8255 là 1000H. Do vậy ta có: 1000H là PA; 1001H là PB; 1002H là PC và 1003H là thanh ghi điều khiển. b) Từ điều khiển cho trường hợp này là 10010000 hay 90H. c) MOV A, #90H ; PA là đầu vào, PB là đầu ra, PC là đầu ra MOV DPTR, #1003H ; Nạp địa chỉ cổng của thanh ghi điều khiển MOVX @DPTR, A ; Xuất từ điều khiển MOV DPTR, #1000H ; Địa chỉ PA MOVX A, @DPTR ; Nhận dữ liệu từ PA INC DPTR ; Địa chỉ PB MOVX @DPTR, A ; Gửi dữ liệu ra PB INC DPTR ; Địa chỉ PC MOVX @DPTR, A ; Gửi dữ liệu ra PC 8051 RD P3.7 WR P3.6 A15 P2.7 WR RD CS A12 PA ALE G 8255 PB P0.7 AD7 DQ A1 A1 PC P0.0 74LS373 A0 AD0 A0 D7 D0 RE OC D7 D0
  4. Ví dụ 15.4: Cho hình 15.6: a) Hãy tìm các địa chỉ cổng vào/ ra được gán cho các cổng A, B, C và thanh ghi điều khiển. b) Tìm từ điều khiển cho trường hợp PA là đầu ra, PB là đầu vào, PC - PC3 là đầu vào và CP4 - CP7 là đầu ra. c) Viết một chương trình để nhận dữ liệu từ PB và gửi nó ra PA. Ngoài ra, dữ liệu từ PC1 được gửi đến CPU. Lời giải: a) Các địa chỉ cổng được tìm thấy như sau: BB CS A1 A0 Địa chỉ Cổng 0010 00 0 0 20H Cổng A 0010 00 0 1 21H Cổng B 0010 00 1 0 22H Cổng C 0010 00 1 1 23H Thanh ghi điều khiển b) Từ điều khiển là 10000011 hay 83H. c) CONTRBYT EQU 83H ; PA là đầu ra, PB,PCL là đầu vào APORT EQU 20H BPORT EQU 21H CPORT EQU 22H CNTPORT EQU 23H MOV A, #CONTRBYT MOV A, #CONTRBYT ; PA, PCU là đầu ra, PB và PCL là đầu vào MOV R0, #CNTPORT ; Nạp địa chỉ của cổng thanh ghi điều khiển MOVX @R0, A ; Xuất từ điều khiển MOV R0, #BPORT ; Nạp địa chỉ PB MOVX A, @R0 ; Đọc PB DEC R0 ; Chỉ đến PA (20H) MOVX @R0, A ; Gửi nó đến PA MOV R0, #CPORT ; Nạp địa chỉ PC MOVX A, @R0 ; Đọc PCL ANL A, #0FH ; Che phần cao SWAP A ; Trao đổi phần cao và thấp MOVX @R0, A ; Gửi đến PCU 8051 RD P3.7 WR P3.6 A7 WR RD CS PA A2 ALE G 8255 PB P0.7 AD7 A1 PC DQ A1 74LS373 A0 PCU P0.0 D7 D0 RE AD0 OC A0 D7
  5. Hình 15.8: Nối 8031 tới một ROM chương trình ngoài và 8255. 15.2 Nối ghép với thế giới thực. 15.2.1 Phối ghép 8255 với động cơ bước. Chương 13 đã nói chi tiết về phối ghép động cơ bước với 8051, ở đây ta trình bày nối ghép động cơ bước tới 8255 và lập trình (xem hình 15.9). 0855 ULN200 Stepper Motor D0 D0 1 16 D7 PA0 from D7 WR 2 15 8051 PA1 RD 3 14 A0 A0 PA2 4 13 A1 A1 PA3 A2 CS Decoding A7 Circuyiry ULN2003 Conection for Stepper Motor CO Pin 8 = GND CO Pin 9 = +5v +5V Hình 15.9: Nối ghép 8255 với một động cơ bước. Chương trình cho sơ đồ nối ghép này như sau: MOV A, #80H ; Chọn từ điều khiển để PA là đầu ra MOV R1, #CRPORT ; Địa chỉ cổng thanh ghi điều khiển MOVX @R1, A ; Cấu hình cho PA đầu ra MOV R1, #APORT ; Nạp địa chỉ cổng PA MOV A, #66H ; Gán A = 66H, chuyển xung của động cơ bước AGAIN: MOVX @R1, A ; Xuất chuỗi động cơ đến PA
  6. MOV A, # 00000100B ; RS=0, R/W=1, E=1 cho xung cao xuống thấp MOVX @R0, A ; Kích hoạt các chânRS, R/W, E của LCD NOP ; Tạo độ xung cho chân E NOP MOV A, # 00000000B ; RS=0, R/W=1, E=1 cho xung cao xuống thấp MOVX @R0, A ; Chốt thông tin trên chân dữ liệu của LCD RET ; Chương trình con ghi lệnh DATAWRT ghi dữ liệu ra LCD. CMDWRT: MOV R0, # APORT ; Nạp địa chỉ cổng A MOVX @R0, A ; Xuất thông tin tới chân dữ liệu của LCD MOV R0, # BPORT ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp MOV A, # 00000101B ; Kích hoạt các chân RS, R/W, E MOVX @R0, A ; Tạo độ xung cho chân E NOP NOP MOV A, # 00000001B ; Đặt RS=1, R/W=0, E=0 cho xung cao xuống thấp MOVX @RC, A ; Chốt thông tin trên chân dữ liệu của LCD RET Chương trình 15.2: ; Ghi các lệnh và dữ liệu tới LCD có sử dụng kiểm tra cờ bận. ; Giả sử PA của 8255 được nối tới D0 - D7 của LCD và ; PB0 = RS, PB1 = R/W, PB2 = E đối với 8255 tới các chân điều khiển LCD MOV A, #80H ; Đặt tất cả các cổng 8255 là đầu ra MOV R0, #CNTPORT ; Nạp địa chỉ thanh ghi điều khiển MOVX @R0, A ; Xuất từ điều khiển MOV A, #38H ; Chọn LCD có hai dòng và ma trận 5×7 ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 0EH ; Lệnh của LCD cho con trỏ bật ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 01H ; Xoá LCD ACALL NMDWRT ; Ghi lệnh ra LCD MOV A, # 06 ; Lệnh dịch con trỏ sang phải ACALL CMDWRT ; Ghi lệnh ra LCD ; v.v cho tất cả mọi lệnh LCD MOV A, # 'N' ; Hiển thị dữ liệu ra (chữ N) ACALL NCMDWRT ; Gửi dữ liệu ra LCD để hiển thị MOV A, # '0' ; Hiển thị chữ "0" ACALL NDADWRT ; Gửi ra LCD để hiển thị ; v.v cho các dữ liệu khác ; Chương trình con ghi lệnh NCMDWRT có hiển thị 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
  7. 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. ADC804 5V RD VCC 10k 150pF WR CLK R 8255 CLK IN D0 PA0 D0 D7 Vin(+) 10K Vin(-) POT A GND Vref/2 PA7 D7 GN A2 Decoding INTR A7 Circuyiry PC0 CS RESET 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?
  8. ACALL DELAY ACALL DELAY MOV A, #00001100B ; PC6 = 0 ACALL DELAY ; Thời gian giữ chậm SJMP AGAIN ControlWord-Mode1Output PC4 Port A Output D7 D6 D5 D4 D3 D2 D1 D0 PC4 INTEA PC7 OBFA 1 0 1 0 1/0 1 0 X PC4.51=Input,0=Outpput PC6 Port A Mode1 Port A Mode1 Port A Mode1 Port B Mode1 S ACKA Port A Output Port B Output Port B Output I/O Mode Port A with INTEA Hanshake Signals PC6 INTEB PC1 OBFB PC2 ACKB StatusWord-Mode1Output D7 D6 D5 D4 D3 D2 D1 D0 INTEB INTEB iNTEA INTEA OBFA OBFB INTEB I/O I/O Port B with PC0 Hanshake Signals WR PB7 Port A Output PB0 s INTEA is controlled by PC6 in PC4.5 BSR mode INTEB is controlled by PC2 in BSR mode Hình 15.14: Biểu đồ đầu ra của 8255 ở chế độ 1. WR OBF INTEB ACK Output 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.
  9. (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 STROBE 11 Bận (busy) 2 Dữ liệu D0 12 Hết giấy (out of paper) 3 Dữ liệu D1 13 Chọn (select) 4 Dữ liệu D2 14 Tự nạp ( Autofeed) 5 Dữ liệu D3 15 6 Dữ liệu D4 16 Lỗi ( Error ) 7 Dữ liệu D5 17 Khởi tạo máy in 8 Dữ liệu D6 18-25 Chọn đầu vào (Select input ) 9 Dữ liệu D7 Đất (ground) 10 ACK (chấp nhận) 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.