Download presentation
Presentation is loading. Please wait.
Published by병호 조 Modified 8년 전
1
C 언어로 배우는 8051 마이크로프로세서 입출력 포트
2
2/44 학습목표 및 목차 입출력 포트의 기능을 이해한다. 입출력 포트의 구조를 이해한다. Read-Modify-Write 명령어를 이해한다. LED, 7- 세그먼트, 스위치를 이용하여 입출력 포트를 제어하는 방법을 익힌다. 01. 입출력 포트의 기능과 구조 02. 입출력 포트 실습 1 : LED 구동 03. 입출력 포트 실습 2 : 신호등 제어 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등
3
3/44 01. 입출력 포트의 기능과 구조 1.1 입출력 포트의 기능 8051 은 4 개의 양방향 포트인 P0, P1, P2, P3 을 내장 병렬 I/O(Input/Output) 포트들은 CPU 와 외부장치를 연결해 주는 병렬 입출력 인터페이스 (parallel Input/output interface) 를 제공 바이트 단위로 병렬 입출력 포트를 제어하기 위해서는 먼저 P0, P1, P2, P3 에 대한 특수기능 레지스터의 주소를 정의 대부분의 C 컴파일러에서는 inc 폴더 내에 8051 계열에 따라 사용할 수 있도록 sfr 정의 파일을 추가하였다. 따라서 모든 실습에서는 파일을 참조 하면 된다. sfr P0=0x80;// SFR for P0 sfr P1=0x90;// SFR for P1 sfr P2=0xa0;// SFR for P2 sfr P3=0xb0;// SFR for P3 예
4
4/44 01. 입출력 포트의 기능과 구조 를 include 하였다는 가정하에 포트 1(90H) 에 데이터 7FH 를 출력하 려면 비트 단위로 제어하기 위해서는 sbit 라는 지정자를 사용하여 각 포트의 비트를 비트 단위로 정의하여야 한다. 포트로 데이터 출력하기 #include void main(void) { ……… P1=0x0f;// P1 포트의 상위 4 비트는 0000, 하위 4 비트는 1111 출력 } P1=0x7f; 예 sbit switch=P1^0; sbit buzzer=P1^1; 예
5
5/44 01. 입출력 포트의 기능과 구조 포트의 값을 입력하기 포트에 비트 단위로 출력하기 #include void main(void) { unsigned char input;// input 을 지역변수로 선언 input=P1;// P1 포트 값을 입력 } #include sbit led0=P1^0;// P1 포트의 비트 0 을 비트변수 led0 으로 선언 sbit led1=P1^1; // P1 포트의 비트 1 을 비트변수 led1 로 선언 sbit led2=P1^2; // P1 포트의 비트 2 를 비트변수 led2 로 선언 sbit led3=P1^3; // P1 포트의 비트 3 을 비트변수 led3 으로 선언 void main(void) { led0=1;// P1.0 에 1 출력 led1=0;// P1.1 에 0 출력 led2=1;// P1.2 에 1 출력 led3=0;// P1.3 에 0 출력 }
6
6/44 01. 입출력 포트의 기능과 구조 1.2 포트 0(P0.0~P0.7) 어드레스 및 데이터 버스로 사용할 경우 CPU 는 제어선 (control line) 을 high 로 하면, 위쪽 n 형 MOS 는 on 이 되고 MUX 의 스 위치는 위쪽으로 닫히므로 “ 어드레스 / 데이터 ” 신호가 아래쪽 n 형 MOS 를 통하여 출력 CPU 는 어드레스 A7~A0 과 데이터 D7~D0 를 이 라인을 통하여 멀티플렉스하므로 결국 포트 0 는 하위 어드레스 버스와 데이터 버스로서의 역할을 하는 것이다. 포트 0 의 구조
7
7/44 01. 입출력 포트의 기능과 구조 범용 I/O 포트로 사용할 경우 CPU 는 제어선 (control line) 에 low 신호를 보내므로 위쪽 n 형 MOS 는 off 되 어 Open Drain 의 상태가 된다. 따라서 포트 0 을 범용 I/O 포트로 사용할 경 우에는 반드시 외부에 풀업저항을 연결해야 한다. 데이터 버스 사용되는 경우 특수한 경우로서 8751 에 프로그램을 기록 (write) 하는 경우에 P0 가 데이터 버스로 사용된다. 이 경우에도 제어선 (control) 에는 high 신호가 출력되므로 풀업저항을 외부에 달아 주어야 한다.
8
8/44 01. 입출력 포트의 기능과 구조 1.3 포트 1(P1.0~P1.7) 포트 1 은 기본적으로 범용 I/O 포트로 사용된다. 내부에 풀업저항이 있기 때문에 범용 I/O 포트로 사용할 경우 외부에서 풀업저항을 연결하지 않아도 된다. 8751 내부의 EPROM 에 프로그램을 쓰는 (write) 경우 어드레스 버스 A7~A0 으로 사용한다. ROM 및 EPROM 의 내용을 확인 (verify) 하는 동안에도 같다. 8032AH, 8052AH, 8752BH 에서는 포트 1 의 P1.0 과 P1.1 이 각각 T2 와 T2EX 로 서의 기능도 한다. 포트 1 의 구조
9
9/44 01. 입출력 포트의 기능과 구조 1.4 포트 2(P2.0~P2.7) 범용 I/O 포트로 사용가능 외부 프로그램, 데이터 메모리와 데이터 전송시 상위 어드레스 (A15~A8) 로 사용 8751 내부의 EPROM 에 프로그램을 (write) 할 때는 상위 어드레스 버스 (A15~A8) 로 사용 외부에 8 비트 어드레스만을 사용하는 기억소자를 인터페이스 하였을 경우에는 포 트 2 를 어드레스 버스로 사용 가능 포트 2 의 구조
10
10/44 01. 입출력 포트의 기능과 구조 1.5 포트 3(P3.0~P3.7) 내부 풀업을 갖는 있는 8 비트 준 양방향 포트이며, 이것을 출력포트로 사용할 경우 에는 1 개의 표준 TTL(4 개의 LS TTL) 을 구동 가능 보통 범용 I/O 포트로 사용되며, 인터럽트, 타이머, 직렬포트 외부 메모리 등을 사 용하는 경우에는 특수기능을 수행 포트 3 의 구조
11
11/44 01. 입출력 포트의 기능과 구조 포트 핀명칭기 능기 능 P3.0RxD 직렬통신에서 수신 핀으로 사용 P3.1TxD 직렬통신에서 송신 핀으로 사용 P3.2 외부 인터럽트 0 요청 핀으로 사용 P3.3 외부 인터럽트 1 요청 핀으로 사용 P3.4T0 타이머 / 카운터 0 의 외부 클록 입력핀으로 사용 P3.5T1 타이머 / 카운터 1 의 외부 클록 입력핀으로 사용 P3.6 외부 데이터 메모리의 write strobe 신호 P3.7 외부 데이터 메모리의 read strobe 신호 포트 3 의 특수기능
12
12/44 01. 입출력 포트의 기능과 구조 1.6 Read-Modify-Write 명령 목적지 오퍼랜드가 포트가 되는 명령 즉, 연산의 결과가 포트에 저장되는 명령들 을 말한다. 포트의 데이터를 읽어서 (read) CPU 내에서 연산 (modify) 을 하고 다시 포트로 쓰 는 (write) 명령어이다. 데이터를 읽을 때에는 버퍼를 통해서 읽으므로 핀의 상태가 아닌 플립플롭의 출 력값을 읽게 된다. 이것은 모든 포트에 해당된다. 명령어의 예 ANLP1, A ORLP2, A XRLP2, A JBCP1.1, LABEL CPLP3.0 INCP1 DECP2 DJNZP3, LABEL CJNEP0, #FFH, LABEL
13
13/44 02. 입출력 포트 실습 1 : LED 구동 2.1 기본 이론 LED(Light Emitting Diode) : 상태 표시를 할 수 있는 소자 회로기호 발광효율이 높고, 저 전류에서 고출력을 얻을 수 있다. 응답속도가 빠르고 펄스동작과 같은 고주파 변조가 가능하다. 전류제어로 광 출력을 쉽게 변경할 수 있다. 소형 경량이며, 수명이 길고 소비전력이 적다. LED 특징
14
14/44 02. 입출력 포트 실습 1 : LED 구동 포트의 상태가 0 이면, LED 는 ON 전류 구동 소자로 통상 2V 정도의 전압을 가하면 약 3~20mA 의 전류가 흘러서 점등되므로 +5V 의 직류전원에서 사용할 때에는 200~350 의 저항을 직렬로 연 결하여 사용 LED 구동 ( 기본 ) 회로 sink 전류 구동 source 전류 구동 이 방법을 많이 사용 포트의 상태가 1 이면, LED 는 ON
15
15/44 02. 입출력 포트 실습 1 : LED 구동 TTL 을 이용한 LED 구동 회로 트랜지스터를 이용한 LED 구동 회로 Sink 전류 구동 Source 전류 구동 Sink 전류 구동 Source 전류 구동 포트의 상태가 1 이면, LED 는 ON 포트의 상태가 0 이면, LED 는 ON 포트의 상태가 1 이면, LED 는 ON
16
16/44 02. 입출력 포트 실습 1 : LED 구동 2.2 실습 목적 LED 를 약 0.5 초 간격으로 순차적으로 점등하는 프로그램을 작성하여 동작 LED 점등 회로도 LED 점등 순서도
17
17/44 02. 입출력 포트 실습 1 : LED 구동 2.3 소요 부품 번호품명규격수량비고 1CPUAT89S511AT89C51, Atmel 2 수정 진동자 12MHz1 크리스털 3 세라믹 커패시터 20pF2 발진용 4 전해 커패시터 10 F 116V 5LED 빨간색 8 55 6 저항 330 81/4W 7 저항 4.7K 11/4W 8 스위치 TACT1 Reset 용, 소형 9 IC 소켓 40pin1 DIP 형 10 만능기판 SYP-11081114×79mm, phenol 11 DC 파워 잭 1.3 1 어댑터의 B, C 형 잭과 호 환 9~11 번 : 기판에 제작 시 필요
18
18/44 02. 입출력 포트 실습 1 : LED 구동 부품 모양 AT89S51 수정진동자 (12MHz) 20pF10uF LED(5 ) 330 4.7K 스위치 만능기판 (SYP-1108)IC 소켓 (40 핀 ) DC 파워잭
19
19/44 02. 입출력 포트 실습 1 : LED 구동 2.4 프로그램 P05_01.c #include void delay(unsigned int i)// 시간지연 { while(i--); } void main(void) { unsigned char led; led=0xfe;// 초기 데이터 do { P1=led;// P1 포트로 데이터 출력 led=(led<<1) | 0x01;// 왼쪽으로 시프트하고 빈자리에는 1 을 채움 (next 데 이터 ) if (led==0xff) led=0xfe;// 마지막 데이터인지 검사 delay(0xb100);// 약 0.5 초 지연 } while(1); }
20
20/44 02. 입출력 포트 실습 1 : LED 구동 2.5 과제 LED 점등 패턴을 다양하게 변화시킨다. LED 점등 패턴 2 LED 점등 패턴 1 0.5 초 간격으로 점등
21
21/44 02. 입출력 포트 실습 1 : LED 구동 LED 점등 패턴 4 LED 점등 패턴 3 0.5 초 간격으로 점등 중앙으로 모일 때는 0.5 초 간격으로, 퍼질 때는 0.2 초 간격으로 동작
22
22/44 02. 입출력 포트 실습 1 : LED 구동 완성 사진
23
23/44 03. 입출력 포트 실습 2 : 신호등 제어 3.1 실습 목적 교차로에서의 신호등을 제어한다. 교차로 신호등 모 델 신호 상태 Route ARoute B G Y R 12341234 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 루트별 신호등 점등 패턴
24
24/44 03. 입출력 포트 실습 2 : 신호등 제어 신호등 제어 회로도
25
25/44 03. 입출력 포트 실습 2 : 신호등 제어 3.2 소요 부품 번호품명규격수량비고 1CPUAT89S511AT89C51, Atmel 2TTL74041 NOT 게이트 3LED 빨간색 4 55 4LED 녹색 4 55 5LED 노란색 4 55 6 수정 진동자 12MHz1 크리스털 7 세라믹 커패시터 20pF2 발진용 8 전해 커패시터 10 F 116V 9 저항 330 11/4W 10 저항 4.7K 11/4W 11 스위치 TACT1 Reset 용, 소형 12 IC 소켓 40pin1 DIP 형 13 IC 소켓 14pin1 DIP 형 14 만능기판 UNI-96GH1115x160mm, epoxy 15 DC 파워 잭 1.3 1 어댑터의 B, C 형 잭과 호환 12~15 번 : 기판에 제작 시 필요
26
26/44 부품 모양 AT89S51 수정진동자 (12MHz) 20pF10uF LED(5 ) 330 4.7K 스위치 IC 소켓 (40 핀 ) DC 파워잭 7404 IC 소켓 (14 핀 ) 03. 입출력 포트 실습 2 : 신호등 제어 LED(5 ) 만능기판 (UNI-96GH)
27
27/44 03. 입출력 포트 실습 2 : 신호등 제어 3.3 프로그램 P05_02.c #include void delay(unsigned int ms)// 시간지연 (ms) { unsigned int i, j; for (i=1; i <= ms; i++) for (j=1; j <= 125; j++);// 1 ms 지연 } void main(void) { do { P1=0x21;// 루트 A 녹색 신호, 루트 B 빨간색 신호 delay(2000);// 2 초 지연 P1=0x11;// 루트 A 노란색 신호, 루트 B 빨간색 신호 delay(500);// 0.5 초간 지연 P1=0x0c;// 루트 A 빨간색 신호, 루트 B 녹색 신호 delay(2000);// 2 초 지연 P1=0x0a;// 루트 A 빨간색 신호, 루트 B 노란색 신호 delay(500);// 0.5 초 지연 } while(1); }
28
28/44 03. 입출력 포트 실습 2 : 신호등 제어 3.4 과제 교차로에서 대부분의 신호등은 신호 4 개 ( 빨간색, 녹색 ( 직진 ), 녹색 화살표 ( 좌 회전 ), 노란색 ) 로 이루어져 있다. 실습의 회로와 프로그램을 수정하여 각 동작 을 확인하여라. 직진과 좌회전은 동시 신호라 가정한다. 동시 신호를 고려한 신호등 제어 회로도
29
29/44 03. 입출력 포트 실습 2 : 신호등 제어 완성 사진
30
30/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 4.1 기본 이론 7-Segment 란 ? LED 를 7개 실장 한 것으로 숫자를 표시할 수 있음 접속방식 Common Anode(CA) 방식 Common Cathode(CC) 방식
31
31/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 7-Segment 핀 배치도 4.2 실습 목적 7-Segment 를 이용하여 10 진 숫자 0~9 까지를 1 초 간격으로 순차적으로 표시 하는 프로그램을 작성한다. 여기서 Font 는 다음과 같다.
32
32/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 7- 세그먼트 구동 회로도
33
33/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 4.3 소요 부품 번호품명규격수량비고 1CPUAT89S511AT89C51, Atmel 2 7- 세그먼트 FND5071 공통 애노드 (CA) 3 수정 진동자 12MHz1 크리스털 4 세라믹 커패시터 20pF2 발진용 5 전해 커패시터 10 F 116V 6 저항 330 11/4W 7 저항 4.7K 11/4W 8 스위치 TACT1 Reset 용, 소형 9 IC 소켓 40pin1 DIP 형 10 만능기판 SYP-11081114×79mm, phenol 11 DC 파워 잭 1.3 1 어댑터의 B, C 형 잭과 호환 9~11 번 : 기판에 제작 시 필요
34
34/44 부품 모양 AT89S51 수정진동자 (12MHz) 20pF 10uF 330 4.7K 스위치 만능기판 IC 소켓 (40 핀 ) DC 파워잭 7- 세그먼트 04. 입출력 포트 실습 3 : 7- 세그먼트 구동
35
35/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 4.4 프로그램 P05_03.c #include code unsigned char table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10}; void delay(unsigned int ms)// 시간지연 (ms) { unsigned int i, j; for (i=1; i <= ms; i++) for (j=1; j <= 125; j++);// 1 ms 지연 } void main(void) { unsigned char i; do { for (i=0; i<10; i++) { P1=table[i];// P1 포트로 데이터 출력 delay(1000);// 1 초 지연 } } while(1); }
36
36/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 4.5 과제 9 부터 0 까지 숫자를 약 1 초 간격으로 순차적으로 디스플레이하는 프로그 램을 작성하여 그 동작을 확인하여라. 7- 세그먼트를 이용하여 아래의 영문자를 약 1 초 간격으로 교대로 디스플레 이하는 프로그램을 작성하여 그 동작을 확인하여라.
37
37/44 04. 입출력 포트 실습 3 : 7- 세그먼트 구동 완성 사진
38
38/44 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 5.1 실습 목적 4 개 스위치의 on-off 에 대응해서 4 개의 LED 를 점등하는 프로그램을 작성하고 회로 를 동작시킨다. 예를 들어 SW1 이 on 되면 이에 대응하는 LED1 이 on 이 된다. 스위치 on-off 에 따른 LED 점등 회로도
39
39/44 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 5.2 소요 부품 번호품명규격수량비고 1CPUAT89S511AT89C51, Atmel 2LED 빨간색 4 55 3 스위치 TACT5 Reset 용, 소형 4 수정 진동자 12MHz1 크리스털 5 세라믹 커패시터 20pF2 발진용 6 전해 커패시터 10 F 116V 7 어레이 저항 4.7K 1 SIP 5P, 풀업용 8 저항 330 41/4W 9 저항 4.7K 11/4W 10 IC 소켓 40 핀 1 DIP 형 11 만능기판 SYP-11081114×79mm, phenol 12 DC 파워 잭 1.3 1 어댑터의 B, C 형 잭과 호 환 10~12 번 : 기판에 제작 시 필요
40
40/44 부품 모양 AT89S51 수정진동자 (12MHz) 20pF 10uF LED(5 ) 330 4.7K 스위치 만능기판 IC 소켓 (40 핀 ) DC 파워잭 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 어레이 저항 (4.7K )
41
41/44 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 5.3 프로그램 P05_04.c #include void delay(unsigned char i) { while(i--); } void main(void) { unsigned char in_data; P1=0x0f;// P1.3~P1.0 를 입력포트로 설정 do { in_data=P1;// P1 포트 값을 읽음 in_data=(in_data<<4) | 0x0f;// 스위치 상태를 상위 4 비트로 이동. 하위 4 비트 1111 P1=in_data;// LED on & off delay(100);// 디바운싱을 위한 지연 } while(1);// 반복 }
42
42/44 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 5.4 과제 실습 프로그램은 바이트 단위로 입력해서 바이트 단위로 출력했다. 이번에 는 비트 단위로 스위치 상태를 입력해서 해당 LED 를 on/off 하는 프로그램 을 작성하고 동작을 확인하여라. 실습 프로그램은 스위치가 눌린 동안에만 해당 스위치가 on 되었다. 이를 다음 스위치가 눌릴 때까지 계속 on 되도록 수정하고 동작을 확인하여라. 예를 들어, 먼저 SW1 을 눌렸다 떼면 LED1 이 계속 on 되다가 SW2 를 눌렀 다 떼면 LED1 은 off 되고 LED2 가 on 된다.
43
43/44 05. 입출력 포트 실습 4 : 스위치 대응 LED 점등 완성 사진
44
IT CookBook, C 언어로 배우는 8051 마이크로프로세서
Similar presentations