임베디드 시스템-I / O 프로그래밍

8051에서는 4 개의 포트와 40 개의 핀을 사용하여 I / O 작업이 수행됩니다. 다음 핀 다이어그램은 40 핀의 세부 정보를 보여줍니다. I / O 작동 포트는 각 포트에 8 개의 핀이있는 32 개의 핀을 예약합니다. 다른 8 개의 핀은 V cc , GND, XTAL1, XTAL2, RST, EA (bar), ALE / PROG (bar) 및 PSEN (bar)으로 지정됩니다.

40 핀 PDIP (플라스틱 듀얼 인라인 패키지)입니다.

Note− DIP 패키지에서는 IC 중간을 잘라서 첫 번째 핀과 마지막 핀을 인식 할 수 있습니다. 첫 번째 핀은이 절단 표시의 왼쪽에 있고 마지막 핀 ( 이 경우 40 번째 핀)은 절단 표시의 오른쪽에 있습니다.

I / O 포트 및 기능

4 개의 포트 P0, P1, P2 및 P3은 각각 8 개의 핀을 사용하여 8 비트 포트가됩니다. RESET시 모든 포트가 입력으로 구성되어 입력 포트로 사용할 준비가됩니다. 처음 0이 포트에 기록되면 출력이됩니다. 입력으로 재구성하려면 1을 포트로 보내야합니다.

포트 0 (핀 번호 32 – 핀 번호 39)

핀은 8 개 (32 ~ 39)입니다. 입력 또는 출력에 사용할 수 있습니다. P1, P2 및 P3 포트와 달리, 우리는 일반적으로 P0을 10K-ohm 풀업 저항에 연결하여 개방 드레인 인 입력 또는 출력 포트로 사용합니다.

또한 AD0-AD7로 지정되어 주소와 데이터로 모두 사용할 수 있습니다. 8031 (즉 ROMless 칩)의 경우 외부 ROM에 액세스해야 할 때 주소 및 데이터 버스 모두에 P0이 사용됩니다. ALE (핀 번호 31)는 P0에 주소 또는 데이터가 있는지 여부를 나타냅니다. ALE = 0이면 데이터 D0-D7을 제공하지만 ALE = 1이면 주소 A0-A7을 갖습니다. 외부 메모리 연결을 사용할 수없는 경우 P0은 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)

포트 1 (핀 1 ~ 8)

8 비트 포트 (핀 1 ~ 8)이며 입력 또는 출력으로 사용할 수 있습니다. 풀업 저항은 이미 내부적으로 연결되어 있기 때문에 필요하지 않습니다. 재설정시 포트 1이 입력 포트로 구성됩니다. 다음 코드는 55H 및 AAH 값을 번갈아 포트 1로 전송하는 데 사용할 수 있습니다.

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

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

포트 1이 출력 포트로 사용되도록 구성된 경우 다시 입력 포트로 사용하려면 다음 코드와 같이 모든 비트에 1을 써서 프로그래밍합니다.

;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

포트 2 (핀 21 ~ 28)

포트 2는 총 8 개의 핀 (핀 21 ~ 28)을 차지하며 입력 및 출력 작업 모두에 사용할 수 있습니다. P1 (포트 1)과 마찬가지로 P2도 이미 내부적으로 연결되어 있으므로 외부 풀업 저항이 필요하지 않습니다. 외부 메모리에 16 비트 주소를 제공하려면 P0과 함께 사용해야합니다. 따라서 핀 다이어그램과 같이 (A0–A7)로도 지정됩니다. 8051이 외부 메모리에 연결되면 16 비트 주소의 상위 8 비트에 대한 경로를 제공하며 I / O로 사용할 수 없습니다. 재설정시 포트 2는 입력 포트로 구성됩니다. 다음 코드를 사용하여 55H 및 AAH 값을 번갈아 포트 2로 보낼 수 있습니다.

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

포트 2를 출력 포트로 사용하도록 구성한 경우 다시 입력 포트로 사용하려면 다음 코드와 같이 모든 비트에 1을 써서 프로그래밍합니다.

;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

포트 3 (핀 10 ~ 17)

또한 8 비트이며 입력 / 출력으로 사용할 수 있습니다. 이 포트는 매우 중요한 신호를 제공합니다. P3.0 및 P3.1은 각각 RxD (수신기) 및 TxD (송신기)이며 직렬 통신에 집합 적으로 사용됩니다. P3.2 및 P3.3 핀은 외부 인터럽트에 사용됩니다. P3.4 및 P3.5는 각각 타이머 T0 및 T1에 사용됩니다. P3.6 및 P3.7은 쓰기 (WR) 및 읽기 (RD) 핀입니다. 이들은 액티브 로우 핀이며, 0이 주어지면 활성화되며 8031 ​​기반 시스템에서 외부 ROM에 읽기 및 쓰기 작업을 제공하는 데 사용됩니다.

P3 비트 함수
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < INT0의 보완 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < RD 보완 17

포트 0 및 포트 2의 이중 역할

  • Dual role of Port 0− 포트 0은 데이터 및 주소 처리 모두에 사용할 수 있으므로 AD0–AD7로도 지정됩니다. 8051을 외부 메모리에 연결하는 동안 포트 0은 주소와 데이터를 모두 제공 할 수 있습니다. 그런 다음 8051 마이크로 컨트롤러는 핀을 저장하기 위해 입력을 주소 또는 데이터로 다중화합니다.

  • Dual role of Port 2− I / O로 작동하는 것 외에도 포트 P2는 포트 0과 함께 외부 메모리 용 16 비트 주소 버스를 제공하는 데 사용됩니다. 포트 P2는 (A8– A15)로도 지정되고 포트 0은 다음을 통해 하위 8 비트를 제공합니다. A0–A7. 즉, 8051이 최대 64KB까지 가능한 외부 메모리 (ROM)에 연결될 때 216 = 64KB를 알기 때문에 16 비트 주소 버스로 가능하다고 말할 수 있습니다. Port2는 16 비트 주소의 상위 8 비트에 사용되며 I / O에 사용할 수 없으며 외부 ROM의 프로그램 코드가 주소 지정되는 방식입니다.

핀의 하드웨어 연결

  • Vcc − 핀 40은 칩에 전원을 공급하며 + 5V입니다.

  • Gnd − 20 번 핀은 레퍼런스에 접지를 제공합니다.

  • XTAL1, XTAL2 (Pin no 18 & Pin no 19)− 8051에는 온칩 발진기가 있지만이를 실행하려면 외부 클럭이 필요합니다. 수정 결정은 칩의 XTAL1 및 XTAL2 핀 사이에 연결됩니다. 이 크리스탈은 또한 원하는 주파수의 신호를 생성하기 위해 30pF의 두 개의 커패시터가 필요합니다. 각 커패시터의 한쪽은 접지에 연결됩니다. 8051 IC는 다양한 속도로 제공되며 모든 것이이 Quartz 크리스탈에 의존합니다. 예를 들어, 20MHz 마이크로 컨트롤러에는 20MHz 이하의 주파수를 가진 크리스탈이 필요합니다.

  • RST (Pin No. 9)− 입력 핀과 활성 High 핀입니다. 이 핀에 높은 펄스, 즉 1을 적용하면 마이크로 컨트롤러가 모든 활동을 재설정하고 종료합니다. 이 프로세스는Power-On Reset. 파워 온 리셋을 활성화하면 레지스터의 모든 값이 손실됩니다. 프로그램 카운터를 모두 0으로 설정합니다. 리셋의 유효한 입력을 보장하기 위해 하이 펄스는 커패시터 값과 충전 속도에 따라 낮아 지도록 허용되기 전에 최소 두 기계 사이클 동안 높아야합니다. (Machine Cycle 단일 명령어 실행에 필요한 최소 빈도입니다.)

  • EA or External Access (Pin No. 31)− 입력 핀입니다. 이 핀은 액티브 로우 핀입니다. 낮은 펄스를 적용하면 활성화됩니다. 온칩 ROM이있는 마이크로 컨트롤러 (8051/52)의 경우 EA (bar) 핀이 V cc에 연결됩니다 . 그러나 온칩 ROM이없는 8031 ​​마이크로 컨트롤러에서는 코드가 외부 ROM에 저장된 다음 마이크로 컨트롤러가 가져옵니다. 이 경우 (핀 번호 31) EA를 Gnd에 연결하여 프로그램 코드가 외부에 저장되었음을 나타내야합니다.

  • PSEN or Program store Enable (Pin No 29)− 이것은 또한 활성 로우 핀입니다. 즉, 로우 펄스를 적용한 후 활성화됩니다. 이것은 출력 핀이며 8031 ​​기반 (즉, ROMLESS) 시스템에서 EA 핀과 함께 사용되어 외부 ROM에 프로그램 코드를 저장할 수 있습니다.

  • ALE or (Address Latch Enable)− 이것은 출력 핀이며 액티브 하이입니다. 특히 8031 ​​IC에서 외부 메모리에 연결하는 데 사용됩니다. P0 핀을 주소 버스 또는 데이터 버스로 사용할지 여부를 결정하는 동안 사용할 수 있습니다. ALE = 1이면 P0 핀이 데이터 버스로 작동하고 ALE = 0이면 P0 핀이 주소 버스로 작동합니다.

I / O 포트 및 비트 주소 지정 기능

8051 용 코드를 작성하는 동안 8051의 가장 널리 사용되는 기능입니다. 때로는 전체 8 비트 대신 포트의 1 비트 또는 2 비트에만 액세스해야합니다. 8051은 포트의 개별 비트에 액세스하는 기능을 제공합니다.

단일 비트 방식으로 포트에 액세스하는 동안 "SETB X. Y"구문을 사용합니다. 여기서 X는 포트 번호 (0 ~ 3)이고 Y는 데이터 비트 D0 ~ D7에 대한 비트 번호 (0 ~ 7)입니다. 여기서 D0은 LSB이고 D7은 MSB입니다. 예를 들어 "SETB P1.5"는 포트 1의 상위 비트 5를 설정합니다.

다음 코드는 비트 P1.2를 지속적으로 토글 할 수있는 방법을 보여줍니다.

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

단일 비트 지침

명령 함수
SETB 비트 비트 설정 (비트 = 1)
CLR 비트 비트 지우기 (비트 = 0)
CPL 비트 비트 보완 (비트 = NOT 비트)
JB 비트, 대상 비트 = 1 인 경우 대상으로 이동 (비트 인 경우 점프)
JNB 비트, 타겟 비트가 0이면 대상으로 이동 (비트가 없으면 점프)
JBC 비트, 대상 비트 = 1이면 대상으로 점프, 비트 지우기 (비트이면 점프 한 다음 지움)