Hệ thống nhúng - Lập trình I / O

Trong 8051, các hoạt động I / O được thực hiện bằng bốn cổng và 40 chân. Sơ đồ chân sau cho thấy chi tiết của 40 chân. Cổng hoạt động I / O dự trữ 32 chân trong đó mỗi cổng có 8 chân. 8 chân khác được chỉ định là V cc , GND, XTAL1, XTAL2, RST, EA (bar), ALE / PROG (bar) và PSEN (bar).

Nó là một PDIP 40 Pin (Gói nội tuyến kép bằng nhựa)

Note- Trong gói DIP, bạn có thể nhận ra chân đầu tiên và chân cuối cùng bằng vết cắt ở giữa IC. Ghim đầu tiên ở bên trái của dấu cắt này và ghim cuối cùng (tức là ghim thứ 40 trong trường hợp này) ở bên phải của dấu cắt.

Cổng I / O và chức năng của chúng

Bốn cổng P0, P1, P2 và P3, mỗi cổng sử dụng 8 chân, biến chúng thành cổng 8 bit. Sau khi ĐẶT LẠI, tất cả các cổng được cấu hình làm đầu vào, sẵn sàng được sử dụng làm cổng đầu vào. Khi số 0 đầu tiên được ghi vào một cổng, nó sẽ trở thành đầu ra. Để cấu hình lại nó làm đầu vào, 1 phải được gửi đến một cổng.

Cổng 0 (Chân số 32 - Chân số 39)

Nó có 8 chân (32 đến 39). Nó có thể được sử dụng cho đầu vào hoặc đầu ra. Không giống như các cổng P1, P2 và P3, chúng tôi thường kết nối P0 với điện trở kéo lên 10K-ohm để sử dụng nó như một cổng đầu vào hoặc đầu ra là một cống mở.

Nó cũng được chỉ định là AD0-AD7, cho phép nó được sử dụng làm địa chỉ và dữ liệu. Trong trường hợp của 8031 ​​(tức là Chip không có ROM), khi chúng ta cần truy cập ROM bên ngoài, thì P0 sẽ được sử dụng cho cả Address và Data Bus. ALE (Chân số 31) cho biết P0 có địa chỉ hoặc dữ liệu hay không. Khi ALE = 0, nó cung cấp dữ liệu D0-D7, nhưng khi ALE = 1, nó có địa chỉ A0-A7. Trong trường hợp không có kết nối bộ nhớ ngoài, P0 phải được kết nối bên ngoài với điện trở kéo lên 10K-ohm.

MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)  

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

Cổng 1 (Chân 1 đến 8)

Nó là một cổng 8 bit (chân 1 đến 8) và có thể được sử dụng làm đầu vào hoặc đầu ra. Nó không yêu cầu điện trở kéo lên vì chúng đã được kết nối bên trong. Sau khi đặt lại, Cổng 1 được cấu hình làm cổng đầu vào. Mã sau có thể được sử dụng để gửi các giá trị xen kẽ của 55H và AAH đến Cổng 1.

;Toggle all bits of continuously 
MOV     A,#55 
BACK:    

MOV     P2,A 
ACALL   DELAY 
CPL     A      ;complement(invert) reg. A 
SJMP    BACK

Nếu Cổng 1 được cấu hình để sử dụng làm cổng đầu ra, thì để sử dụng lại làm cổng đầu vào, hãy lập trình nó bằng cách ghi 1 vào tất cả các bit của nó như trong đoạn mã sau.

;Toggle all bits of continuously 

MOV     A ,#0FFH    ;A = FF hex 
MOV     P1,A        ;Make P1 an input port                     
MOV     A,P1        ;get data from P1 
MOV     R7,A        ;save it in Reg R7 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R6,A        ;save it in R6 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R5,A        ;save it in R5

Cổng 2 (Chân 21 đến 28)

Cổng 2 chiếm tổng cộng 8 chân (chân 21 đến 28) và có thể được sử dụng cho cả hoạt động đầu vào và đầu ra. Cũng giống như P1 (Cổng 1), P2 cũng không yêu cầu điện trở Pull-up bên ngoài vì chúng đã được kết nối bên trong. Nó phải được sử dụng cùng với P0 để cung cấp địa chỉ 16 bit cho bộ nhớ ngoài. Vì vậy, nó cũng được ký hiệu là (A0 – A7), như được hiển thị trong sơ đồ chân. Khi 8051 được kết nối với bộ nhớ ngoài, nó sẽ cung cấp đường dẫn cho địa chỉ 16 bit 8 bit phía trên, và nó không thể được sử dụng làm I / O. Sau khi đặt lại, Cổng 2 được định cấu hình làm cổng đầu vào. Mã sau có thể được sử dụng để gửi các giá trị xen kẽ của 55H và AAH đến cổng 2.

;Toggle all bits of continuously 
MOV     A,#55 
BACK: 
MOV     P2,A 
ACALL   DELAY 
CPL     A         ; complement(invert) reg. A 
SJMP    BACK

Nếu Cổng 2 được cấu hình để sử dụng làm cổng đầu ra, thì để sử dụng lại nó làm cổng đầu vào, hãy lập trình nó bằng cách ghi 1 vào tất cả các bit của nó như trong đoạn mã sau.

;Get a byte from P2 and send it to P1 
MOV    A,#0FFH    ;A = FF hex 
MOV    P2,A       ;make P2 an input port 
BACK: 
MOV    A,P2       ;get data from P2 
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

Cổng 3 (Chân 10 đến 17)

Nó cũng có 8 bit và có thể được sử dụng làm Đầu vào / Đầu ra. Cổng này cung cấp một số tín hiệu cực kỳ quan trọng. P3.0 và P3.1 lần lượt là RxD (Máy thu) và TxD (Máy phát) và được sử dụng chung cho Giao tiếp nối tiếp. Các chân P3.2 và P3.3 được sử dụng cho các ngắt bên ngoài. P3.4 và P3.5 lần lượt được sử dụng cho bộ định thời T0 và T1. P3.6 và P3.7 là các chân Ghi (WR) và Đọc (RD). Đây là các chân thấp đang hoạt động, có nghĩa là chúng sẽ hoạt động khi 0 được cấp cho chúng và chúng được sử dụng để cung cấp các hoạt động Đọc và Ghi cho ROM bên ngoài trong các hệ thống dựa trên 8031.

P3 Bit Chức năng Ghim
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Bổ sung INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Bổ sung RD 17

Vai trò kép của Cổng 0 và Cổng 2

  • Dual role of Port 0- Cổng 0 cũng được chỉ định là AD0 – AD7, vì nó có thể được sử dụng cho cả dữ liệu và xử lý địa chỉ. Trong khi kết nối 8051 với bộ nhớ ngoài, Cổng 0 có thể cung cấp cả địa chỉ và dữ liệu. Sau đó, bộ vi điều khiển 8051 sẽ ghép đầu vào dưới dạng địa chỉ hoặc dữ liệu để lưu các chân.

  • Dual role of Port 2- Bên cạnh hoạt động như I / O, Cổng P2 còn được sử dụng để cung cấp bus địa chỉ 16 bit cho bộ nhớ ngoài cùng với Cổng 0. Cổng P2 cũng được chỉ định là (A8– A15), trong khi Cổng 0 cung cấp 8 bit thấp hơn qua A0 – A7. Nói cách khác, chúng ta có thể nói rằng khi một 8051 được kết nối với một bộ nhớ ngoài (ROM) có thể tối đa lên đến 64KB và điều này có thể xảy ra bởi bus địa chỉ 16 bit vì chúng ta biết 216 = 64KB. Port2 được sử dụng cho 8 bit phía trên của địa chỉ 16 bit và nó không thể được sử dụng cho I / O và đây là cách mà bất kỳ mã Chương trình nào của ROM bên ngoài được giải quyết.

Kết nối phần cứng của các chân

  • Vcc - Chân 40 cung cấp nguồn cung cấp cho Chip và nó là +5 V.

  • Gnd - Chân 20 cung cấp mặt đất cho Tham chiếu.

  • XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 có bộ dao động trên chip nhưng yêu cầu xung nhịp bên ngoài để chạy nó. Một tinh thể thạch anh được kết nối giữa chân XTAL1 & XTAL2 của chip. Tinh thể này cũng cần hai tụ điện 30pF để tạo ra tín hiệu có tần số mong muốn. Một mặt của mỗi tụ điện được nối với đất. IC 8051 có nhiều tốc độ khác nhau và tất cả phụ thuộc vào tinh thể Thạch anh này, ví dụ, vi điều khiển 20 MHz yêu cầu một tinh thể có tần số không quá 20 MHz.

  • RST (Pin No. 9)- Là chân Input và chân High hoạt động. Khi áp dụng một xung cao trên chân này, tức là 1, bộ vi điều khiển sẽ đặt lại và chấm dứt mọi hoạt động. Quá trình này được gọi làPower-On Reset. Kích hoạt thiết lập lại khi bật nguồn sẽ làm mất tất cả các giá trị trong thanh ghi. Nó sẽ đặt bộ đếm chương trình thành tất cả các số 0. Để đảm bảo đầu vào hợp lệ của Đặt lại, xung cao phải cao trong tối thiểu hai chu kỳ máy trước khi được phép xuống thấp, điều này phụ thuộc vào giá trị tụ điện và tốc độ nó sạc. (Machine Cycle là lượng tần số tối thiểu mà một lệnh đơn yêu cầu khi thực thi).

  • EA or External Access (Pin No. 31)- Nó là một chân đầu vào. Chân này là chân thấp hoạt động; khi áp dụng một xung thấp, nó sẽ được kích hoạt. Trong trường hợp vi điều khiển (8051/52) có ROM trên chip, chân EA (thanh) được kết nối với V cc . Nhưng trong vi điều khiển 8031 ​​không có ROM trên chip, mã được lưu trữ trong ROM bên ngoài và sau đó được tìm nạp bởi vi điều khiển. Trong trường hợp này, chúng ta phải kết nối EA (chân số 31) với Gnd để chỉ ra rằng mã chương trình được lưu trữ bên ngoài.

  • PSEN or Program store Enable (Pin No 29)- Đây cũng là chân thấp hoạt động, tức là nó được kích hoạt sau khi áp dụng một xung thấp. Nó là một chân đầu ra và được sử dụng cùng với chân EA trong Hệ thống dựa trên 8031 ​​(tức là ROMLESS) để cho phép lưu trữ mã chương trình trong ROM bên ngoài.

  • ALE or (Address Latch Enable)- Đây là một Chân đầu ra và đang hoạt động ở mức cao. Nó đặc biệt được sử dụng cho 8031 ​​IC để kết nối nó với bộ nhớ ngoài. Nó có thể được sử dụng trong khi quyết định xem các chân P0 sẽ được sử dụng làm Bus địa chỉ hay Bus dữ liệu. Khi ALE = 1, các chân P0 hoạt động như Bus dữ liệu và khi ALE = 0, thì các chân P0 hoạt động như Bus địa chỉ.

Cổng I / O và khả năng định địa chỉ bit

Nó là một tính năng được sử dụng rộng rãi nhất của 8051 trong khi viết mã cho 8051. Đôi khi chúng ta chỉ cần truy cập 1 hoặc 2 bit của cổng thay vì toàn bộ 8 bit. 8051 cung cấp khả năng truy cập các bit riêng lẻ của các cổng.

Trong khi truy cập một cổng theo cách một bit, chúng tôi sử dụng cú pháp "SETB X. Y" trong đó X là số cổng (0 đến 3) và Y là một số bit (0 đến 7) cho các bit dữ liệu D0-D7 trong đó D0 là LSB và D7 là MSB. Ví dụ: "SETB P1.5" đặt bit cao 5 của cổng 1.

Đoạn mã sau đây cho thấy cách chúng ta có thể chuyển đổi bit P1.2 liên tục.

AGAIN: 
SETB    P1.2
ACALL   DELAY    
CLR     P1.2      
ACALL   DELAY 
SJMP    AGAIN

Hướng dẫn một bit

Hướng dẫn Chức năng
Bit SETB Đặt bit (bit = 1)
Bit CLR xóa bit (bit = 0)
Bit CPL bổ sung cho bit (bit = NOT bit)
JB bit, mục tiêu nhảy đến mục tiêu nếu bit = 1 (nhảy nếu bit)
JNB bit, mục tiêu nhảy đến đích nếu bit = 0 (nhảy nếu không có bit)
JBC bit, mục tiêu nhảy đến mục tiêu nếu bit = 1, xóa bit (nhảy nếu bit, sau đó xóa)