chương Lập trình cho cổng vào - I/0 4.1 Mô tả chân 8051 Mặc dù thành viên họ 8051 (ví dụ 8751, 89C51, DS5000) có kiểu đóng vỏ khác nhau, chẳng hạn hai hàng chân DIP (Dual In-Line Pakage) dạng vỏ dẹt vuông QFP (Quad Flat Pakage) dạng chíp chân đỡ LLC (Leadless Chip Carrier) chúng có 40 chân cho chức khác vào I/0, đọc RD , ghi WR , địa chỉ, liệu ngắt Cần phải lưu ý số hÃng cung cấp phiên 8051 có 20 chân với số cổng vào-ra cho ứng dụng yêu cầu thấp Tuy nhiên, hầu hết nhà phát triển sử dụng chíp đóng vỏ 40 chân với hai hàng chân DIP nên ta tập chung mô tả phiên P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD) P3.0 (TXD) P3.1 (NT0) P3.2 (NT1) P3.3 (T0) P3.4 (T1) P3.5 (WR) P3.6 (RD) P3.7 XTAL2 XTAL1 GND 10 11 12 13 14 15 16 17 18 19 20 8051 (8031) 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Vcc P0.0 (AD0) P0.1 (AD1) P0.2 (AD2) P0.3 (AD3) P0.4 (AD4) P0.5 (AD5) P0.6 (AD6) P0.6 (AD6) EA/CPP ALE/PROG PSEN P2.7 (A15) P2.6 (A14) P2.5 (A13) P2.4(A12) P2.3 (A11) P2.2 (A10) P2.1 (A9) P2.0 (AB) Hình 4.1: Sơ đồ bố trí chân 8051 Trên hình 4.1 sơ đồ bố trí chân 8051 Ta thấy 40 chân có 32 chân dành cho cổng P0, P1, P2 P3 với cổng có chân Các chân lại dành cho nguồn VCC, đất GND, chângiao động XTAL1 XTAL2 tái lập RST cho phép chốt địa ALE truy cập địa EA , cho phép cất chương trình PSEN Trong chân chân VCC , GND, XTAL1, XTAL2, RST EA họ 8031 8051 sử dụng Hay nói cách khác chúng phải CuuDuongThanCong.com https://fb.com/tailieudientucntt nối hệ thống làm việc mà không cần biết vi điều khiển thuộc họ 8051 hay 8031 Còn hai chân khác PSEN ALE sử dụng chủ yếu hệ thống dựa 8031 Chân VCC: Chân số 40 VCC cấp điện áp nguồn cho chíp Nguồn điện áp +5V Chân GND: Chân GND: Chân số 20 GND Chân XTAL1 XTAL2: 8051 có giao động chíp yêu cầu có xung đồng hồ để chạy Bộ giao động thạch anh thường xuyên nối tới chân đầu vào XTAL1 (chân 19) XTAL2 (chân 18) Bộ giao động thạch anh nối tới XTAL1 XTAL2 cần hai tụ điện giá trị 30pF Một phía tụ điện nối xuống đất trình bày hình 4.2a Cần phải lưu ý có nhiều tốc độ khác họ 8051 Tốc độ coi tần số cực đại giao động nối tới chân XTAL Ví dụ, chíp 12MHz thấp Tương tự vi điều khiển yêu cầu tinh thể có tần số không lớn 20MHz Khi 8051 nối tới giao động tinh thể thạch anh cấp nguồn ta quan sát tần số chân XTAL2 máy sóng Nếu ta định sử dụng nguồn tần số khác giao động thạch anh chẳng hạn giao động TTL nối tới chân XTAL1, chân XTAL2 để hở không nối hình 4.2b C2 XTAL2 C1 XTAL1 30pF XTAL2 NC EXTERRNAL OSCILLATAOR SIGNAL XTAL1 GND GND H×nh 4.2: a) Nèi XTAL tíi 8051 b) Nối XTAL tới nguồn đồng Chân RST Chân số chân tái lập RESET Nó đầu vào có mức tích cực cao (b×nh thêng ë møc thÊp) Khi cÊp xung cao tới chân vi điều khiển tái lập kết thúc hoạt động Điều thường coi tái bật nguồn Khi kích hoạt tái bật nguồn làm giá trị ghi Bảng 4.1 cung cấp cách liệt kê ghi 8051 giá trị chúng sau tái bật nguồn Bảng 4.1: Giá trị số ghi sau RESET CuuDuongThanCong.com https://fb.com/tailieudientucntt Register PC ACC B PSW SP DPTR Reset Value 0000 0000 0000 0000 0000 0007 0000 Lu ý r»ng gi¸ trị đếm chương trình PC tái lập để ép CPU nạp mà lệnh từ nhớ ROM vị trí ngăn nhớ 0000 Điều có nghĩa ta phải đặt dòng mà nguồn vị trí ngăn nhớ ROM mà CPU tĩnh thức tìm lệnh Hình 4.3 trình bày hai cách nối chân RST với mạch bật nguồn Vcc + Vcc 31 30mF 10mF 8.2K 30mF EA/Vpp 19 X1 11.0592 MHz 18 X2 RST 10mF 31 EA/Vpp X1 X2 RST 8.2K Hình 4.3: a) Mạch tái bật nguồn RESET b) Mạch tái bật nguồn với Debounce Nhằm làm cho đầu vào RESET có hiệu phải có tối thiểu chu kỳ máy Hay nói cách khác, xung cao phải kéo dài tối thiểu chu kú m¸y tríc nã xng thÊp Trong 8051 chu kỳ máy định nghĩa 12 chu kỳ dao động đà nói chương trình bày vị trí 4.1 Chân EA : Các thành viên họ 8051 8751, 98C51 DS5000 có ROM chíp lưu cất chương trình Trong trường hợp chân EA nối tới VCC Đối với thành viên củ họ 8031 8032 mà ROM chíp mà chương trình lưu cất nhớ ROM chúng nạp cho 8031/32 Do vậy, 8031 chân EA phải nối đất để báo mà chương trình cất ë ngoµi EA cã nghÜa lµ truy cËp ngoµi (External Access) chân số 31 vỏ kiểu DIP Nó chân đầu vào phải nối với VCC GND Hay nói cách khác không để hở CuuDuongThanCong.com https://fb.com/tailieudientucntt chương 14 trình bày cách 8031 sử dụng chân kết hợp với PSEN để truy cập chương trình cất nhớ ROM 8031 Trong chíp 8051 với nhớ ROM chíp 8751, 89C51 DS5000 EA nối với VCC Ví dụ 4: HÃy tìm chu kỳ máy a) XTAL = 11.0592MHz b) XTAL = 16MHz Lêi gi¶i: a) 11.0592MHz/12 = 921.6kHz Chu kú m¸y = 1/921.6kHz = 1.085ms b) 16MHz/12 = 1.333MHz Chu kú m¸y = 1/1.333MHz = 0.75ms Các chân mô tả phải nối mà không cần thành viên sử dụng Còn hai chân sử dụng chủ yếu hệ thống dựa 8031 trình bày chi tiết chương 11 Chân PSEN : Đây chân đầu cho phép cất chương trình (Program Store Enable) hệ thống dựa 8031 chương trình cất nhớ ROM chân nối tới chân OE ROM Chi tiết bàn chương 14 Chân ALE: Chân cho phép chốt địa ALE chân đầu tích cực cao Khi nối 8031 tới nhớ cổng cấp địa liệu Hay nói cách khác 8031 dồn địa liệu qua cổng để tiết kiệm số chân Chân ALE sử dụng để phân kênh địa liệu cách nối tới chân G chíp 74LS373 Điều nói chi tiết chương 14 Các chân cổng vào chức chúng Bốn cổng P0, P1, P2 P3 sử dụng chân tạo thành cổng bít Tất cổng RESET cấu đầu ra, sẵn sàng để sử dụng cổng đầu Muốn sử dụng cổng số cổng làm đầu vào phải lập trình Cổng P0 Cổng chiếm tất chân (từ chân 32 đến 39) Nó dùng cổng đầu ra, để sử dụng chân cổng vừa làm đầu ra, vừa làm đầu vào chân phải nối tới điện trở kéo bên 10kW Điều thực tế cổng P0 màng mở khác với cổng P1, P2 P3 Khái niệm máng mở sử dụng chíp MOS chừng mực giống Cô-lec-tơ hở chíp TTL Trong hệ thống sử dụng 8751, 89C51 DS5000 ta thường nối cổng P0 tới điện trở kéo, Xem hình 4.4 cách ta có ưu điểm cổng P0 cho đầu đầu vào Với điện trở kéo nối tái lập cổng P0 cấu cổng đầu Ví dụ, đoạn mà sau liên tục gửi cổng P0 giá trị 554 vµ AAH BACK: MOV A, #554 MOV P0, A ACALL DELAY CuuDuongThanCong.com https://fb.com/tailieudientucntt CPL SJMP A BACK Vcc 10K P0.0 P0.1 P0.2 Port DS5000 8751 8951 P0.3 P0.4 P0.5 P0.6 P0.7 Hình 4.4: Cổng P0 với điện trở kéo a) Cổng P0 đầu vào: Với điện trở nối tới cổng P0 nhằm để tạo thành cổng đầu vào phải lập trình cách ghi tới tất bit Đoạn mà cấu hình P0 lúc đầu đầu vào cách ghi đến sau liệu nhận từ gửi đến P1 b) BACK: MOV MOV A,#FFH P0, A MOV MOV SJMP A, P0 P1, A BACK ; G¸n A = FF dạng Hex ; Tạo cổng P0 làm cổng đầu vào cách ; Ghi tất bit nã ; NhËn d÷ liƯu tõ P0 ; Gưi nã đến cổng ; Lặp lại b) Vai trò kép cổng P0: Như trình bày hình 4.1, cổng P0 gán AD0 AD7 cho phép sử dụng vừa cho địa chỉ, vừa cho liệu Khi nối 8051/31 tới nhớ cổng cung cấp địa liệu 8051 dồn liệu địa qua cổng P0 để tiết kiệm số chân ALE báo P0 có địa hay d÷ liƯu ALE nã cÊp d÷ liƯu D0 - D7 Do vậy, ALE sử dụng để tách địa liệu với trợ giúp chốt 74LS373 mà ta biết cụ thể chương 14 10 Cỉng P1 Cỉng P1 cịng chiÕm tÊt c¶ chân (từ chân đến chân 8) sử dụng đầu vào đầu So với cổng P0 cổng không cần đến điện trở kéo đà có điện trở kéo bên Trong trình tái lạp cổng P1 cấu cổng đầu Ví dụ, đoạn mà sau gửi liên tục giá trị 55 AAH cổng P1 BACK: MOV MOV CuuDuongThanCong.com A, #55H P1, A https://fb.com/tailieudientucntt ACALL DELAY SJMP BACK Cổng P1 đầu vào: Để biến cổng P1 thành đầu vào phải lập trình cách ghi đến tất bit Lý điều bàn mục lục Appendix C.2 Trong đoạn mà sau, cổng P1 lúc đầu đươc cấu cổng đầu vào cách ghi vào bit sau liệu nhận từ cổng cất vào R7, R6 vµ R5 MOV MOV A, #0FFH P1, A MOV MOV ACALL MOV MOV ACALL MOV MOV A, P1 R7, A DELAY A, P1 R6, A DELAY A, P1 R5, A ; N¹p A = FF ë d¹ng hex ; T¹o cổng P1 thành cổng đầu vào ; cách ghi vào bit ; Nhận liệu tõ P1 ; CÊt nã vµo ghi R7 ; Chờ ; Nhận liệu khác từ P1 ; Cất vào ghi R6 ; Chờ ; Nhận liệu khác từ cổng P1 ; Cất vào ghi R5 11 Cỉng P2: Cỉng P2 cịng chiÕm chân (các chân từ 21 đến 28) Nó sử dụng đầu vào đầu giống cổng P1, cổng P2 không cần điện trở kéo đà có điện trở kéo bên Khi tái lập, cổng P2 cấu cổng đầu Ví dụ, đoạn mà sau gửi liên tục cổng P2 giá trị 55H AAH Đó tất bit P2 lªn xng liªn tơc BACK: MOV MOV ACALL CPL SJMP A, #55H P2,A DELAY A BACK a) Cæng P2 đầu vào Để tạo cổng P2 đầu vào phải lập trình cách ghi số tới tất chân Đoạn mà sau cấu hinh P2 cổng vào cách ghi đến tất chân sau liệu nhận từ P2 gửi liên tục đến P1 BACK: MOV MOV A, 0FFH P2, A MOV MOV SJMP A, P1, A BACK ; Gán A giá trị FF dạng Hex ; Tạo P2 cổng đầu vào cách ; ghi đến chân ; Nhận liệu từ P2 ; Gửi đến P1 ; Lặp lại b) Vai trò kép P2 CuuDuongThanCong.com https://fb.com/tailieudientucntt Trong hệ thống dựa 8751, 89C51 DS5000 P2 dùng đầu đơn giản Tuy nhiên hệ thống dựa 80312 cổng P2 phải dùng với P0 để tạo địa 16 brt nhớ Như hình 4.1 cổng P2 định A8 - A15 báo chức kép Vì 8031 có khả trung cập 64k byte nhớ ngoài, cần đường địa 16 bÝt Trong P.0 cung cÊp bit thÊp qua A0 - A7 Công việc P2 cung cấp bít địa A8 - A15 Hay nói cách khác 8031được nối tới nhớ P2 dùng cho bít địa 16 bit dùng cho vào Điều trình bày chi tiết chương 14 Từ trình bày ta kết luận hệ thống dựa vi điều khiển 8751, 89C51 DS5000 ta có cống P0, P1và P2 cho thao tác vào đủ cho ứng dụng với hầu hết vi điều khiển Còn cấp P3 làđể dành cho ngắt ta bàn 11 - Cổng P3: Cổng P3 chiếm tổng cộng chân từ chân 10 đến chân 17 Nó sử dụng đầu vào đầu Cống P3 không cần điện trở kéo P1 P2 Mặc dù cống P3 cấu cống đầu tái lập, cách ứng dụng phổ biến Cống P3 có chức bỉ xung lµ cung cÊp mét sè tÝn hiƯu quan trọng đặc biệt chẳng hạn ngắt Bảng 4.2 cung cấp chức khác cống P3 Thông tin áp dụng cho 8051 8031 Bảng 4.2: Các chức khác cống P3 Bít cèng P3 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Chức Nhận liệu (RXD) Phát liệu (TXD) Ngắt 0(INT0) Ngắt 1(INT1) Bộ định thời (TO) Bộ định thời 1(T1) Ghi (WR) Đọc (RD) chân số 10 11 12 13 14 15 16 17 C¸c bit P3.0 P3.1 dùng cho tín hiệu nhận phát liệu truyền thông liệu nối tiếp Xem chương 10 đết biết chúng nối ghép Các bit P3.2 P3.3 dành cho ngắt chúng trình bày chi tiết chương 11 Bit P3.4 P3.5 dùng cho định thêm 1và chi tiết trình bày chương Cuối bit P3.6 P3.7 cấp cho tín hiệu ghi đọc nhớ nối tới hệ thống dựa 8031 Chương 14 trình bày cách chúng sử dụng hệ thống dựa 8031 Trong hệ thống dựa 8751, 89C51 D35000 chân P3.6 P3.7 dùng cho vào - chân khác P3 sử dụng bình thường vai trò chức thay đổi 4.2 Lập trình vào - ra: thao t¸c bit 4.2.1 c¸c c¸ch kh¸c ®Ĩ truy cËp toµn bé bit CuuDuongThanCong.com https://fb.com/tailieudientucntt Trong đoạn mà nhiều ví dụ vào trước toàn bit cổng P1 cập BACK: MOV MOV ACALL MOV MOV ACALL SJMP A, # 55H P1,A DELAY A, #0AAH P1, A DELAY BACK Đoạn mà chốt bit P1 cách liên tục Chúng ta đà thắng biến chương trình trước Bây ta viết lại đoạn mà theo cách hiệu cách truy cập trực tiếp cổng mà kh«ng qua ghi tỉng nh sau: BACK: MOV ACALL MOV CALL SJMP P1, # 55H DELAY P1, #00H DELAY BACK Ta viết dạng khác đoạn mà kỹ thuật đọc - sửa đổi ghi mục 4.2.2 4.2.2 Đặc điểm Đọc- sửa đổi - ghi (Read - Modify Write) Các cống 8051 truy cập bằngkỹ thuật gọi Đọc-sửa đổi-ghi Đặc điểm tiết kiệm nhiều dòng lệnh cách kết hợp tất thao tác: 1đọc cống, sửa đổi nóvà ghi cống vào lệnh đơn Đoạn mà trước hết đặt 01010101(nhị phân) vào cống Sau đólệnh XLR P1, #0FFH thực phép lô-gích OR loại trừ XOR cống p1 với 1111 1111 ( nhị phân ) sau ghi kết trë l¹i cèng P1 AGAIN: MOV XLR ACALL SJMP P1, #55H P1,# 0FFH DELAY AGAIN ; P1 = 01010101 ; EX - 0R P1 víi 1111 1111 Lu ý r»ng lệnh X0R 55H FFH cho kết AAH Tương tự lệnh X0R AAH với FFH lại cho giá trị kết 55H Các lệnh lô-gích trình bày chương 4.2.3 Khả đánh địa theo bít cống Cã nhiỊu lóc chóng ta cÇn truy cËp chØ hoặc2 bít cống thay truy cập bit cổng Một điểm mạnh cổng 8051 chúng có khả truy cập bít riêng rẽ mà không làm thay đổi bít lại cổng ví dụ, đoạn mà chốt bit P1.2 liªn tơc: BACK: CPL CuuDuongThanCong.com P1.2 ; LÊy bï chØ riªng bit P1.2 https://fb.com/tailieudientucntt ACALL DELAY SJMP BACK Một biến thể khác đoạn mà là: AGACN: SETB ACALL CLR ACALL SJMP P1.2 DELAY P1.2 DELAY AGAIN ; Chỉ thay đổi bít P1.2 lên cao ; Xo¸ bÝt P1.2 xuèng thÊp Lu ý r»ng bÝt P1.2 bít thứ cổng P1, bít thứ nhÊt lµ P1.0 vµ bit thø hai lµ P1.1 v.v Bảng 4.3 trình bày bít cổng vµo cđa 8051 Xem vÝ dơ 4.2 vỊ thao tác bít bít vào - Lưu ý ví dụ 4.2 bit không dùng đến không bị ảnh hưởng Đây khả đánh địa theo bit cổng vào - điểm mạnh vi điều khiển 8051 Ví dụ 4.2: hÃy viết chương trình thực công việc sau: a) Duy trì hiển thị bit P1.2 lên cáp b) Khi P1.2 lên cao, hÃy ghi giá trị 45H vµo cỉng P0 c) Gưi mét xung cao xng thÊp (H-to-L) tíi P2.3 Lêi gi¶i: AGAIN: SET MOV JNB MOV SETB CLR P1.2 A, #45H P1.2, AGAIN P0, A P2.3 P2.3 ; Tạo bit P1.2 đầu vào ; Gán A = 45H ; Tho¸t P1.2 = ; Xuất A tới cổng P0 ; Đưa P2.3 lên cao ; Tạo P2.3 xuống thấp để có xung H-T0-L Trong chương trình lệnh JNB P1.2, AGCN (JNB có nghĩa nhảy không bit) lại vòng lặp cho ®Õn P1.2 cha lªn cao Khi P1.2 lªn cao thoát khỏi vòng lặp ghi giá trị 45H tới cổng P0 tạo xung H-to-L chuỗi lệnh SETB CLR CuuDuongThanCong.com https://fb.com/tailieudientucntt ... P0 v? ?i ? ?i? ??n trở k? ?o a) Cổng P0 đầu v? ?o: V? ?i ? ?i? ??n trở n? ?i t? ?i cổng P0 nhằm để t? ?o thành cổng đầu v? ?o ph? ?i lập trình cách ghi t? ?i tất bit ? ?o? ??n mà cấu hình P0 lúc đầu đầu v? ?o cách ghi đến sau liệu... vai trò chức thay đ? ?i 4.2 Lập trình v? ?o - ra: thao tác bit 4.2.1 cách khác để truy cập toàn bit CuuDuongThanCong.com https://fb.com/tailieudientucntt Trong ? ?o? ??n mà nhiều ví dụ v? ?o trước toàn bit... thường n? ?i cổng P0 t? ?i ? ?i? ??n trở k? ?o, Xem hình 4.4 cách ta có ưu ? ?i? ??m cổng P0 cho đầu đầu v? ?o V? ?i ? ?i? ??n trở k? ?o n? ?i t? ?i lập cổng P0 cấu cổng đầu Ví dụ, ? ?o? ??n mà sau liên tục g? ?i cổng P0 giá trị 554