450 likes | 1.01k Views
8051 IO-PORT. 정보통신 • 컴퓨터 공학부 송명규. 8051-I/O-Port 8051 시리즈 기능 비교표. Vcc. P1.0. 1. 40. P0.0(AD0). P1.1. 2. 39. P0.1(AD1). P1.2. 3. 38. P0.2(AD2). P1.3. 4. 37. 8051 & 8052. P0.3(AD3). P1.4. 5. 36. P0.4(AD4). P1.5. 6. 35. P0.5(AD5). P1.6. 7. 34. P0.6(AD6). P1.7.
E N D
8051 IO-PORT 정보통신•컴퓨터 공학부 송명규
Vcc P1.0 1 40 P0.0(AD0) P1.1 2 39 P0.1(AD1) P1.2 3 38 P0.2(AD2) P1.3 4 37 8051 & 8052 P0.3(AD3) P1.4 5 36 P0.4(AD4) P1.5 6 35 P0.5(AD5) P1.6 7 34 P0.6(AD6) P1.7 8 33 P0.7(AD7) RST 9 32 (RXD)P3.0 10 31 EA/VPP (TXD)P3.1 ALE/PROG 11 30 (INT0)P3.2 12 29 PSEN P2.7(A15) (INT1)P3.3 13 28 (T0)P3.4 P2.6(A14) 14 27 (T1)P3.5 P2.5(A13) 15 26 P2.4(A12) (WR)P3.6 16 25 P2.3(A11) (RD)P3.7 17 24 P2.2(A10) XTAL2 18 23 P2.1(A9) XTAL1 19 22 P2.0(A8) GND 20 21 8051-I/O-Port 8051 외부 Pin 신호 [1]
Pin 기 능 RxD 시리얼 입력 포트 TxD 시리얼 출력 포트 INT0 외부 인터럽트 0 INT1 외부 인터럽트 1 T0 타이머 0 외부 입력 T1 타이머 1 외부 입력 WR 외부 데이터 메모리 출력 스트로브 RD 외부 데이터 메모리 입력 스트로브 RESET 시스템 리셋 ALE/PROG Address Latch Enable PSEN Program Strobe ENable EA/Vpp External Access Enable XTAL 1,2 반전된 발진 증폭기에 대한 입력, 출력 P0~3 입출력 포트 A0~A15 Address Bus D0~D7 Data Bus 8051-I/O-Port 8051 외부 Pin 신호 [3]
7 6 5 4 3 2 1 0 RD WR T1 T0 INT1 INT0 TxD RxD read write Timer external input external interrupt Transmit data receive data 8051-I/O-Port 8051 외부 Pin 신호 [4] • I/O port 기능 • P0 • 외부 프로그램 메모리와 데이터 메모리 연결 : 하위 어드레스 A0~A7 과 데이터 버스 D0~D7로 사용 • 외부 메모리 차단 : 일반적인 입출력 포트로 사용 • P1 • 사용자가 주변장치를 제어하는데 주로 사용 • P2 • 외부 메모리 연결 : 상위 어드레스 A8~A15로 사용 • 외부 메모리 차단 : 일반적인 입출력 포트로 사용 • 외부 메모리의 하위 어드레스(A0~A7)만 연결 : 일반적인 입출력 포트로 사용 • P3 • 입출력 포트로 사용 (P1과 동일) • 비트 단위로의 다른 기능 • 사용되지 않는 비트는 입출력 포트로 사용
8051-I/O-Port 8051 Port – 0 (P0.0 – P0.7) 특징 [2] • 8비트 오픈 드레인 (Open Drain) • 일반 포트 사용–외부메모리 사용 않 할 때 • 입력으로 사용할 때는 1을 출력하고 사용 • 외부메모리 사용할 때 하위 어드레스 A0~A7로 사용 • ALE=1일 때 하위 어드레스 임을 나타내므로 74LS373으로 래치 하여 사용 • 어드레스 신호(A0 – A7) 와 데이터 신호(D0-D7) 겸용
8051-I/O-Port 8051 Port – 0 (P0.0 – P0.7) [3] • 오픈 드레인 –풀업 저항 필요 Vcc Port 0 10 K P0.0 P0.1 P0.2 8051 P0.3 P0.4 P0.5 P0.6 P0.7
8051-I/O-Port 8051 Port – 1 (P1.0 – P1.7) 구조 [2] 래치 읽기 Vcc TB2 Load(L1) P1.X핀 CPU 내부 데이터 버스 DQ ClkQ LATCH M1 래치에 쓰기 제어 신호 TB1 핀 입력
8051-I/O-Port 8051 Port – 1 (P1.0 – P1.7) [3] • P1.0 ~ P1.7 • 8비트 양방향 입출력 단자 • 내부 풀업 되어 있다 • 외부 풀업 저항이 필요 없다 • 범용 입출력으로 사용 한다. • 8052에서는 P1.0는 T2 기능 추가 • 8052에서는 P1.1는 T2EX 기능 추가 • 89S51(2)에서는 P1에 SPI 기능 추가로 ISP기능 추가 - P1.5 = MOSI, P1.6 = MISO, P1.7 = SCK
1 1 0 8051-I/O-Port 포트1 –출력 1을 했을 때 [5] 래치 읽기 Vcc 0 TB2 Z • 핀에 1을 출력 Pull up 2. 출력Vcc CPU 내부 데이터 버스 DQ ClkQ P1.X핀 LATCH Off M1 래치에 쓰기 제어 신호 Z TB1 0 핀 입력
0 0 1 8051-I/O-Port 포트1 –출력 0을 했을 때 [6] 래치 읽기 Vcc TB2 0 Z • 핀에 0을 출력 Pull up 0 CPU 내부 데이터 버스 DQ ClkQ P1.X핀 LATCH On 2.출력GND M1 래치에 쓰기 제어 신호 Z 0 TB1 0 핀 입력
1 1 0 8051-I/O-Port 포트1 –입력 1 [7] 래치 읽기 Vcc TB2 0 Z • 핀에 1출력 Pull up 2. 외부 핀=High 1 CPU 내부 데이터 버스 DQ ClkQ P1.X 핀 LATCH Off M1 래치에 쓰기 제어 신호 1 1 TB1 1 핀 입력
1 1 0 8051-I/O-Port 포트1 –입력 0 [8] 래치 읽기 Vcc TB2 0 Z • 핀에 1출력 Pull up 2. 외부 핀=0V 0 CPU 내부 데이터 버스 DQ ClkQ P1.X 핀 LATCH Off M1 래치에 쓰기 제어 신호 3. 내부버스로 전달 0 0 TB1 1 핀 입력
8051-I/O-Port 8051 Port – 2 (P2.0 – P2.7) [2] • P2.0 ~ P2.7 • 8비트 양방향 입출력 단자 • 내부 풀업 되어 있다 • 외부 저항이 필요 없다 • 범용 입출력으로 사용 한다. • 외부 메모리 사용할 때는 A8~A15로 사용
8051-I/O-Port 8051 Port – 3 (P3.0 – P3.7) [4] • P3.0 ~ P3.7 • 8비트 양방향 입출력 단자 • 내부 풀업 되어 있다 • 다른 기능과 선택적으로 사용 • 시리얼 통신 신호:RxD, TxD • 외부 인터럽트 신호:/INT0, /INT1 • 타이머의 클럭 입력:T0, T1 • 외부 메모리 액세스 신호:/WR, /RD
8051-I/O-Port 8051시험 Kit [1] • MDA-WIN8051
8051-I/O-Port 8051시험 Kit [2] • 8051 인터페이스
fc 0 1 48 8051-I/O-Port 8051시험 Kit [3] • 디코더 및 메모리 인터페이스
8051-I/O-Port 8051시험 Kit [4] • I/O 실험 및 외부 커넥터 회로
입력핀 설명 1 1 1 1 1 1 f 0xfc00 I/O1 PIN 15 0 1 c 0 0 1 8051-I/O-Port 8051시험 Kit [5] • Decoder 내부 회로
8051-I/O-Port 8051시험 Kit [6] 0 0 0 0 0 4 1 1 8 부터 b 0 0 I/O0 PIN 20 0xfc48 – 0xfc4b 0 1 0 0 0 입력핀 설명 • Decoder 1 내부 회로
8051-I/O-Port 8051시험 Kit [7] • 74LS573 (LATCH) 내부 블럭도
8051-I/O-Port 8051시험 Kit [8] • 74LS244 (BUFFER) 내부 블럭도
8051-I/O-Port 8051시험 Kit [9] • MDA-WIN8051 메모리 맵
5V 5V 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 0 1 1 0 1 5V 1 1 1 1 0 1 1 1 1 LATCH1의 Q5,6은 7-seg의 소수점에 사용 8051-I/O-Port 8051시험 Kit [10] • I/O port 실험 회로도
[P1값에 따른 LED동작] [LED 점등순서] pin P1 = led Led <<= 1 Led |= 0xf1 P10 0xfe(1111 1110) 0xfc(1111 1100) 0xfd(1111 1101) P11 0xfd(1111 1101) 0xfa(1111 1010) 0xfb(1111 1011) P12 0xfb(1111 1011) 0xf6(1111 0110) 0xf7(1111 0111) P13 P12 P11 P10 P13 0xf7(1111 0111) 0xee(1110 1110) 0xff(1111 1111) 8051-I/O-Port 8051시험 Kit [11] • 실습1 : I/O port 를 이용한 LED 점등
지역 변수 led 선언 led = 0xfe LED 초기 점등값 저장 SELECT = 0x9e 포트 선택 어드레스 설정 P1 = led P1 으로 출력 LED 의 점등을 눈으로 확인할 만큼의 시간 지연 일정시간 지연 led = led << 1 LED 점등값 1bit left shift led = led | 0xf1 상위 4비트는 “1111”로 마스크 No led == 0xff ? P13 LED 까지 점등되었는지 확인 Yes Led = 0xfe 초기값 저장 8051-I/O-Port 8051시험 Kit [12] • 실습1-1 : I/O 포트를 이용한 LED 점등 (led1-1.c) #include <win51.h> #define SELECT (*(unsigned char *)(0x2fc48)) Void delay (int del) { while(del--); } Void main(void) { unsigned char led=0xfe // led on 초기값 SELECT = 0x9e // led가 연결된 I/O선택 do{ P1 = led; // led 점등 delay(30000); led <<=1; // led on 상태를 1bit left shift led |= 0xf1; // 상위 4비트는 1111로 마스크 if(led==0xff) led=0xfe; } while(1); // 무한루프 }
A reg. ← 11111110B LED 초기 점등값 저장 P1 ← A reg. P1 으로 출력 LED 의 점등을 눈으로 확인할 만큼의 시간 지연 일정시간 지연 A reg. 1bit left shift LED 점등값 1bit left shift A reg. OR (11110001B) 상위 4비트는 “1111”로 마스크 No A == FF ? P13 LED 까지 점등되었는지 확인 Yes A reg. ← 11111110B 초기값 저장 8051-I/O-Port 8051시험 Kit [13] • 실습1-2 : I/O 포트를 이용한 LED 점등 (led1-2.ass) SELECT EQU 2fc48; I/O 선택 어드레스 IO/SEL EqU 10011110 ; I/O 선택값 ; 8051이 리셋되었을 경우 처음 시작번지 ORG 0 SJMP START ; 메인 프로그램으로 점프 ; 메인 프로그램 시작 START: MOV SP, #60H ; 스택 지정 MOV A, #IO_SEL ; 포트선택 어드레스 설정 MOV DPTR, #SELECT ; LATCH1 어드레스 MOVX @DPTR, A MOV A, #11111110B ; LED ON 초기값 LP1: MOV P1, A ; LED ON CALL DELAY ; LED ON 지연시간 RL A ; LED ON 상태를 왼쪽으로 1비트 이동 ORL A, #0F0H ; 상위 4비트는 1111로 마스크 CJNE A, #0FFH, LP1 ; P13까지 ON되었는지 검사 MOV A, #11111110B ; P13까지 ON 이면 LED ON 초기값 저장 SJMP LP1 ; 무한 루프 ; LED 점등 시간 DELAY : MOV R0, #2 ; R0 레지스터에 2를 저장 DELAY1 : MOV R1, #0 ; R1 레지스터에 0(256)을 저장 DELAY2 : MOV R2, #0 ; R2 레지스터에 0(256)을 저장 DELAY3 : NOP DJNZ R2, DELAY3 ; R2=R2-1값이 0이 아니면 DELAY3로 점프 DJNZ R1, DELAY2 ; R1=R1-1값이 0이 아니면 DELAY2로 점프 DJNZ R0, DELAY1 ; R0=R0-1값이 0이 아니면 DELAY1로 점프 RET END