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?
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:
- vi_xu_ly_8051.pdf