Giáo trình Vi điều khiển - Chương 4: Lập trình cho cổng vào-ra I/0

4.1 Mô tả chân của 8051.
Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89C51, DS5000) đều có các
kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line Pakage)
dạng vỏ dẹt vuông QFP (Quad Flat Pakage) và dạng chíp không có chân đỡ LLC
(Leadless Chip Carrier) thì chúng đều có 40 chân cho các chức năng khác nhau như
vào ra I/0, đọc RD , ghi WR , địa chỉ, dữ liệu và ngắt. Cần phải lưu ý rằng một số
hãng cung cấp một phiên bản 8051 có 20 chân với số cổng vào-ra ít hơn cho các ứng
dụng yêu cầu thấp hơn. Tuy nhiên, vì hầu hết các nhà phát triển chính sử dụng chíp
đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập chung mô tả phiên bản này 

pdf 9 trang thamphan 27/12/2022 3680
Bạn đang xem tài liệu "Giáo trình Vi điều khiển - Chương 4: Lập trình cho cổng vào-ra I/0", để 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_4_lap_trinh_cho_cong_vao_ra.pdf

Nội dung text: Giáo trình Vi điều khiển - Chương 4: Lập trình cho cổng vào-ra I/0

  1. CHƯƠNG 4 Lập trình cho cổng vào - ra I/0 4.1 Mô tả chân của 8051. Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89C51, DS5000) đều có các kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line Pakage) dạng vỏ dẹt vuông QFP (Quad Flat Pakage) và dạng chíp không có chân đỡ LLC (Leadless Chip Carrier) thì chúng đều có 40 chân cho các chức năng khác nhau như vào ra I/0, đọc RD , ghi WR , địa chỉ, dữ liệu và ngắt. Cần phải lưu ý rằng một số hãng cung cấp một phiên bản 8051 có 20 chân với số cổng vào-ra ít hơn cho các ứng dụng yêu cầu thấp hơn. Tuy nhiên, vì hầu hết các nhà phát triển chính sử dụng chíp đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập chung mô tả phiên bản này. P1.0 1 40 Vc P1.1 2 39 P0.0 P1.2 3 38 P0.1 P1.3 4 37 P0.2 P1.4 5 36 P0.3 6 P1.5 35 P0.4 7 34 P1.6 P0.5 8 33 P1.7 8051 P0.6 RST 9 32 P0.6 (RXD) 10 (8031) 31 EA/CP (TXD) 11 30 ALE/PRO (NT0) 12 29 PSEN (NT1) 13 28 P2.7 (T0) 14 27 P2.6 (T1) 15 26 P2.5 (WR) 16 25 P2.4(A12 (RD) 17 24 P2.3 XTAL 18 23 P2.2 XTAL1 P2.1 (A9) 19 22 GND 20 21 P2.0 (AB) Hình 4.1: Sơ đồ bố trí chân của 8051. Trên hình 4.1 là sơ đồ bố trí chân của 8051. Ta thấy rằng trong 40 chân thì có 32 chân dành cho các cổng P0, P1, P2 và P3 với mỗi cổng có 8 chân. Các chân còn lại được dành cho nguồn VCC, đất GND, các chângiao động XTAL1 và XTAL2 tái lập RST cho phép chốt địa chỉ ALE truy cập được địa chỉ ngoài EA , cho phép cất chương trình PSEN . Trong 8 chân này thì 6 chân VCC , GND, XTAL1, XTAL2,
  2. Register Reset Value PC 0000 ACC 0000 B 0000 PSW 0000 SP 0000 DPTR 0007 0000 Lưu ý rằng giá trị của bộ đếm chương trình PC là 0 khi tái lập để ép CPU nạp mã lệnh đầu tiên từ bộ nhớ ROM tại vị trí ngăn nhớ 0000. Điều này có nghĩa là ta phải đặt dòng đầu tiên của mã nguồn tại vị trí ngăn nhớ 0 của ROM vì đây là mã CPU tĩnh thức và tìm lệnh đầu tiên. 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 30μF 31 + 10μF EA/Vpp EA/Vpp 10μF 31 19 X1 X1 11.0592 30 F 8.2K μ 18 X2 X2 RST RST 9 9 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 quả thì nó phải có tối thiểu 2 chu kỳ máy. Hay nói cách khác, xung cao phải kéo dài tối thiểu 2 chu kỳ máy trước khi nó xuống thấp. Trong 8051 một chu kỳ máy được định nghĩa bằng 12 chu kỳ dao động như đã nói ở chương 3 và được trình bày tại vị trí 4.1. 5. Chân EA : Các thành viên họ 8051 như 8751, 98C51 hoặc DS5000 đều có ROM trên chíp lưu cất chương trình. Trong các trường hợp như vậy thì chân EA được nối tới VCC. Đối với các thành viên củ họ như 8031 và 8032 mà không có ROM trên chíp thì mã chương trình được lưu cất ở trên bộ nhớ ROM ngoài và chúng được nạp cho 8031/32. Do vậy, đối với 8031 thì chân EA phải được nối đất để báo rằng mã
  3. MOV A, #554 BACK: MOV P0, A ACALL DELAY CPL A SJMP BACK Vcc 10K P0.0 DS500 P0.1 Port 0 0 P0.2 8751 P0.3 8951 P0.4 P0.5 P0.6 P0.7 Hình 4.4: Cổng P0 với các điện trở kéo. a) Cổng P0 đầu vào: Với các điện trở được nối tới cổng P0 nhằm để tạo nó thành cổng đầu vào thì nó phải được lập trình bằng cách ghi 1 tới tất cả các bit. Đoạn mã dưới đây sẽ cấu hình P0 lúc đầu là đầu vào bằng cách ghi 1 đến nó và sau đó dữ liệu nhận được từ nó được gửi đến P1. b) MOV A,#FFH ; Gán A = FF dạng Hex MOV P0, A ; Tạo cổng P0 làm cổng đầu vào bằng cách ; Ghi tất cả các bit của nó. BACK: MOV A, P0 ; Nhận dữ liệu từ P0 MOV P1, A ; Gửi nó đến cổng 1 SJMP BACK ; Lặp lại b) Vai trò kép của cổng P0: Như trình bày trên hình 4.1, cổng P0 được gán AD0 - AD7 cho phép nó được sử dụng vừa cho địa chỉ, vừa cho dữ liệu. Khi nối 8051/31 tới bộ nhớ ngoài thì cổng 0 cung cấp cả địa chỉ và dữ liệu 8051 dồn dữ liệu và địa chỉ qua cổng P0 để tiết kiệm số chân. ALE báo nếu P0 có địa chỉ hay dữ liệu khi ALE - 0 nó cấp dữ liệu D0 - D7. Do vậy, ALE được sử dụng để tách địa chỉ và dữ liệu với sự trợ giúp của chốt 74LS373 mà ta sẽ biết cụ thể ở chương 14. 10. Cổng P1. Cổng P1 cũng chiếm tất cả 8 chân (từ chân 1 đến chân 8) nó có thể được sử dụng như đầu vào hoặc đầu ra. So với cổng P0 thì cổng này không cần đến điện trở kéo vì nó đã có các điện trở kéo bên trong. Trong quá trình tái lạp thì cổng P1 được
  4. ; ghi một đến các chân của nó BACK: MOV A, P2 ; Nhận dữ liệu từ P2 MOV P1, A ; Gửi nó đến P1 SJMP BACK ; Lặp lại b) Vai trò kép của P2. Trong các hệ thống dựa trên 8751, 89C51 và DS5000 thì P2 được dùng như đầu ra đơn giản. Tuy nhiên trong hệ thống dựa trên 80312 thì cổng P2 phải được dùng cùng với P0 để tạo ra địa chỉ 16 brt đối với bộ nhớ ngoài. Như chỉ ra trên hình 4.1 cổng P2 cũng được chỉ định như là A8 - A15 báo chức năng kép của nó. Vì một bộ 8031 có khả năng truy cập 64k byte bộ nhớ ngoài, nó cần một đường địa chỉ 16 bít. Trong khi P.0 cung cấp 8 bit thấp qua A0 - A7. Công việc của P2 là cung cấp các bít địa chỉ A8 - A15. Hay nói cách khác khi 8031được nối tới bộ nhớ ngoài thì P2 được dùng cho 8 bít cao của địa chỉ 16 bit và nó không thể dùng cho vào ra. Điều này sẽ được trình bày chi tiết ở chương 14. Từ những trình bày trên đây ta có thể kết luận rằng trong các hệ thống dựa trên các bộ vi điều khiển 8751, 89C51 hoặc DS5000 thì ta có 3 cống P0, P1và P2 cho các thao tác vào ra và như thế là có thể đủ cho các ứng dụng với hầu hết các bộ vi điều khiển. Còn cấp P3 làđể dành cho ngắt và ta sẽ cùng bàn dưới đây. 11 - Cổng P3: Cổng P3 chiếm tổng cộng là 8 chân từ chân 10 đến chân 17. Nó có thể được sử dụng như đầu vào hoặc đầu ra. Cống P3 không cần các điện trở kéo cũng như P1 và P2. Mặc dù cống P3 được cấu hình như một cống đầu ra khi tái lập, nhưng đây không phải là cách nó được ứng dụng phổ biến nhất. Cống P3 có chức năng bổ xung là cung cấp một số tín hiệu quan trọng đặc biệt chẳng hạn như các ngắt. Bảng 4.2 cung cấp các chức năng khác của cống P3. Thông tin này áp dụng cho cả 8051 và 8031. Bảng 4.2: Các chức năng khác của cống P3 Bít của cống P3 Chức năng chân số P3.0 Nhận dữ liệu (RXD) 10 P3.1 Phát dữ liệu (TXD) 11 P3.2 Ngắt 0(INT0) 12 P3.3 Ngắt 1(INT1) 13 P3.4 Bộ định thời 0 (TO) 14 P3.5 1 Bộ định thời 1(T1) 15 P3.6 Ghi (WR) 16 P3.7 Đọc (RD) 17 Các bit P3.0 và P3.1 được dùng cho các tín hiệu nhận và phát dữ liệu trong truyền thông dữ liệu nối tiếp. Xem chương 10 đết biết các chúng được nối ghép như thế nào. Các bit P3.2 và P3.3 được dành cho các ngắt ngoài và chúng được trình bày chi tiết ở chương 11. Bit P3.4 và P3.5 được dùng cho các bộ định thêm 0 và 1và chi tiết được trình bày ở chương 9. Cuối cùng các bit P3.6 và P3.7 được cấp cho các tín hiệu ghi và đọc các bộ nhớ ngoài được nối tới các hệ thống dựa trên 8031. Chương
  5. 4.2.3. Khả năng đánh địa chỉ theo bít của các cống Có nhiều lúc chúng ta cần truy cập chỉ 1 hoặc2 bít của cống thay vì truy cập cả 8 bit của cổng. Một điểm mạnh của các cổng 8051 là chúng có khả năng truy cập từng bít riêng rẽ mà không làm thay đổi các bít còn lại trong cổng đó ví dụ, đoạn mà dưới đây chốt bit P1.2 liên tục: BACK: CPL P1.2 ; Lấy bù 2 chỉ riêng bit P1.2 ACALL DELAY SJMP BACK Một biến thể khác của đoạn mã trên là: AGACN: SETB P1.2 ; Chỉ thay đổi bít P1.2 lên cao ACALL DELAY CLR P1.2 ; Xoá bít P1.2 xuống thấp ACALL DELAY SJMP AGAIN Lưu ý rằng bít P1.2 là bít thứ 3 của cổng P1, vì 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 các bít của các cổng vào ra của 8051. Xem ví dụ 4.2 về thao tác bít của các bít vào - ra. Lưu ý rằng trong ví dụ 4.2 các bit không dùng đến là không bị ảnh hưởng. Đây là khả năng đánh địa chỉ theo bit của các cổng vào - ra và là một trong những điểm mạnh nhất của bộ vi điều khiển 8051. Ví dụ 4.2: hãy viết chương trình thực hiện các công việc sau: a) Duy trì hiển thị bit P1.2 cho đến khi nó 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 xuống thấp (H-to-L) tới P2.3 Lời giải: SET P1.2 ; Tạo bit P1.2 là đầu vào MOV A, #45H ; Gán A = 45H AGAIN: JNB P1.2, AGAIN ; Thoát khi P1.2 = 1 MOV P0, A ; Xuất A tới cổng P0 SETB P2.3 ; Đưa P2.3 lên cao CLR P2.3 ; Tạo P2.3 xuống thấp để có xung H- T0-L Trong chương trình này lệnh “JNB P1.2, AGCN” (JNB có nghĩa là nhảy nếu không bit) ở lại vòng lặp cho đến khi P1.2 chưa lên cao. Khi P1.2 lên cao nó thoát ra khỏi vòng lặp ghi giá trị 45H tới cổng P0 và tạo ra xung H-to-L bằng chuỗi các lệnh SETB và CLR.