• 검색 결과가 없습니다.

입출력 포트

N/A
N/A
Protected

Academic year: 2021

Share "입출력 포트"

Copied!
25
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(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 정의 파일을 추가하였다. 따라서 모든 실습에서는 <reg51.h> 파일을 참조하면 된다.

 포트 기능을 출력 핀으로 사용하다가 입력 핀으로 바꿀 경우에 반드시 포트 출력을 “1”로 준 다음에 후에 입력 핀으로 사용

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. 입출력 포트의 기능과 구조

 <reg51.h>를 include하였다는 가정하에 포트 1(90H)에 데이터 7FH를 출력하 려면

 비트 단위로 제어하기 위해서는 sbit라는 지정자를 사용하여 각 포트의 비트 를 비트 단위로 정의하여야 한다.

 포트로 데이터 출력하기

#include <reg51.h>

void main(void) {

………

P1=0x0f; // P1 포트의 상위 4비트는 0000, 하위 4비트는 1111 출력 }

P1=0x7f;

P1_0; // P1포트의 0 번째 비트 (MIDE51 컴파일러)

P1^1; // P1포트의 1 번째 비트 (RIDE7 컴파일러)

(5)

5/44

01. 입출력 포트의 기능과 구조

 포트의 값을 입력하기

 포트에 비트 단위로 출력하기 (RIDE7 경우) (MIDE51 경우)

#include <reg51.h>

void main(void) {

unsigned char input; // input을 지역변수로 선언 input=P1; // P1 포트 값을 입력

}

#include <reg51.h>

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 출력 }

#include <reg51.h>

void main(void) {

P1_0=1; // P1.0에 1 출력 P1_1=0; // P1.1에 0 출력 P1_2=1; // P1.2에 1 출력 P1_3=0; // P1.3에 0 출력 }

(6)

6/44

01. 입출력 포트의 기능과 구조

1.2 포트 0(P0.0~P0.7)

 CPU는 어드레스 A7~A0과 데이터 D7~D0를 이 라인을 통하여 멀티플렉스하여 하위 어드레스 버스와 데이터 버스로서의 사용.

 포트 0을 범용 8비트 양방향 I/O 포트로 사용할 경우에는 반드시 외부에 풀 업저항을 연결해야 한다. 8개의 LS TTL 구동 가능.

1.3 포트 1(P1.0~P1.7)

 포트 1은 기본적으로 범용 8비트 양방향 I/O포트로 사용된다. 내부에 풀업저항이 있기 때문에 풀업저항을 연결하지 않아도 된다. 4개의 LS TTL 구동 가능.

1.4 포트 2(P2.0~P2.7)

 범용 8비트 양방향 I/O포트로 사용가능하며 내부에 풀업저항이 있다. 4개의 LS TTL 구동 가능.

 외부 프로그램, 데이터 메모리와 데이터 전송시 상위 어드레스(A15~A8)로 사용.

(7)

7/44

01. 입출력 포트의 기능과 구조

1.5 포트 3(P3.0~P3.7)

 내부 풀업을 갖는 있는 8비트 양방향 포트이며, 4개의 LS TTL을 구동 가능

 보통 범용 I/O 포트로 사용되며, 인터럽트, 타이머, 직렬포트 외부 메모리 등을 사 용하는 경우에는 특수기능을 수행

INT 0 INT 1

WR RD

포트 핀 명칭 기 능

P3.0 RxD 직렬통신에서 수신 핀으로 사용 P3.1 TxD 직렬통신에서 송신 핀으로 사용 P3.2 외부 인터럽트 0 요청 핀으로 사용 P3.3 외부 인터럽트 1 요청 핀으로 사용

P3.4 T0 타이머/카운터 0의 외부 클록 입력핀으로 사용 P3.5 T1 타이머/카운터 1의 외부 클록 입력핀으로 사용 P3.6 외부 데이터 메모리의 write strobe 신호 P3.7 외부 데이터 메모리의 read strobe 신호

포트 3의 특수기능

(8)

8/44

02. 입출력 포트 실습 1 : LED 구동

2.1 기본 이론

 LED(Light Emitting Diode) : 상태 표시를 할 수 있는 소자

회로기호

 발광효율이 높고, 저 전류에서 고출력을 얻을 수 있다.

 응답속도가 빠르고 펄스동작과 같은 고주파 변조가 가능하다.

 전류제어로 광 출력을 쉽게 변경할 수 있다.

 소형 경량이며, 수명이 길고 소비전력이 적다.

LED 특징

(9)

9/44

02. 입출력 포트 실습 1 : LED 구동

포트의 상태가 0이면, LED는 ON

 전류 구동 소자로 통상 2V 정도의 전압을 가하면 약 3~20mA의 전류가 흘러서 점등되므로 +5V의 직류전원에서 사용할 때에는 200~350의 저항을 직렬로 연결하여 사용

 LED 구동 (기본)회로

] [ 10 330

9

2 5

3  

  R

] W [ 027 . 0 10

9

3  3

VI

P

sink 전류 구동 source 전류 구동

이 방법을 많이 사용

5V R 9mA

전류 방향 5V 포트 330

전류 방향

포트 330

포트의 상태가 1이면, LED는 ON

(10)

10/44

02. 입출력 포트 실습 1 : LED 구동

 TTL을 이용한 LED 구동 회로

 트랜지스터를 이용한 LED 구동 회로

Sink 전류 구동 Source 전류 구동

Sink 전류 구동 Source 전류 구동

5V

7404 330

포트

7404 330

포트

5V

1K

330

포트

5V

1K

330

포트

포트의 상태가 1이면, LED는 ON 포트의 상태가 0이면, LED는 ON

포트의 상태가 0이면, LED는 ON 포트의 상태가 1이면, LED는 ON

(11)

11/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

4.1 기본 이론

 7-Segment 란 ?

LED를 7개 실장 한 것으로 숫자를 표시할 수 있음

 접속방식

Common Anode(CA) 방식 (주로 사용 됨)

Common Cathode(CC) 방식 VCC

a b c d e f g dp

a b c d e f g dp

(12)

12/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

 7-Segment 핀 배치도

4.2 실습 목적

7-Segment를 이용하여 10진 숫자 0~9까지를 1초 간격으로 순차적으로 표 시하는 프로그램을 작성한다. 여기서 Font는 다음과 같다.

COM a b

c d

e f g

COM

a b

d c e

f g

COM a b c

d e f g COM

a b

d c e

f g

(13)

13/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

+5V 40

31

5 6 7 8 P1.4 P1.5 P1.6 P1.7

a b c d e f g

330 +5V

1 2 3 4 P1.0 P1.1 P1.2 P1.3 Vcc

EA

dp

8051

COM

18

19 20pF

20pF

20 12MHz

RESET

Vss XTAL2

XTAL1 9

10uF +5V

4.7K +

7-세그먼트 구동 회로도

Common Anode(CA) 방식

(14)

14/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

4.3 소요 부품

번호 품명 규격 수량 비고

1 CPU AT89S51 1 AT89C51, Atmel

2 7-세그먼트 FND507 1 공통 애노드(CA)

3 수정 진동자 12MHz 1 크리스털

4 세라믹 커패시터 20pF 2 발진용

5 전해 커패시터 10F 1 16V

6 저항 330 1 1/4W

7 저항 4.7K 1 1/4W

8 스위치 TACT 1 Reset용, 소형

9 IC 소켓 40pin 1 DIP형

10 만능기판 SYP-1108 1 114×79mm, phenol

11 DC 파워 잭 1.3 1 어댑터의 B, C형 잭과 호환

9~11번 : 기판에 제작 시 필요

(15)

15/44

 부품 모양

AT89S51 수정진동자(12MHz) 20pF

20

10uF

10uF

330

금색(오차) 주황(3) 주황(3) 갈색(1)

금색(오차) 보라(7) 노랑(4) 빨강(2)

4.7K스위치

만능기판

IC소켓(40핀) DC 파워잭

7-세그먼트

04. 입출력 포트 실습 3 : 7-세그먼트 구동

(16)

16/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

4.4 프로그램

P05_03.c

#include <reg51.h>

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);

}

(17)

17/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

4.5 과제

① 7-세그먼트를 이용하여 아래의 영문자를 약 1초 간격으로 교대로 디스플레이하는

프로그램을 작성하여 그 동작을 확인하여라.

(18)

18/44

04. 입출력 포트 실습 3 : 7-세그먼트 구동

완성 사진

(19)

19/44

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

5.1 실습 목적

4개 스위치의 on-off에 대응해서 4개의 LED를 점등하는 프로그램을 작성하고 회 로를 동작시킨다. 예를 들어 SW1이 on되면 이에 대응하는 LED1이 on이 된다.

+5V 40

31

5 6 7 8 P1.4 P1.5 P1.6 P1.7

1 2 3 4 P1.0 P1.1 P1.2 P1.3

+5V Vcc

EA

+5V

4.7Kx4

330x4

SW1 SW2 SW3 SW4

LED1 LED2 LED3 LED4

8051

18

19 20pF

20pF

20 12MHz

RESET

Vss XTAL2

XTAL1 9

10uF +5V

4.7K +

스위치 on-off에 따른 LED 점등 회로도

(20)

20/44

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

5.2 소요 부품

번호 품명 규격 수량 비고

1 CPU AT89S51 1 AT89C51, Atmel

2 LED 빨간색 4 5

3 스위치 TACT 5 Reset용, 소형

4 수정 진동자 12MHz 1 크리스털

5 세라믹 커패시터 20pF 2 발진용

6 전해 커패시터 10F 1 16V

7 어레이 저항 4.7K 1 SIP 5P, 풀업용

8 저항 330 4 1/4W

9 저항 4.7K 1 1/4W

10 IC 소켓 40핀 1 DIP형

11 만능기판 SYP-1108 1 114×79mm, phenol

12 DC 파워 잭 1.3 1 어댑터의 B, C형 잭과 호환

10~12번 : 기판에 제작 시 필요

(21)

21/44

 부품 모양

AT89S51 수정진동자(12MHz) 20pF

20

10uF

10uF

LED(5)

330

금색(오차) 주황(3) 주황(3)

갈색(1) 금색(오차)

보라(7) 노랑(4) 빨강(2)

4.7K스위치

만능기판

IC소켓(40핀) DC 파워잭

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

472

어레이 저항(4.7K)

(22)

22/44

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

5.3 프로그램

P05_04.c

#include <reg51.h>

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); // 반복

}

(23)

23/44

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

5.4 과제

① 실습 프로그램은 바이트 단위로 입력해서 바이트 단위로 출력했다. 이번에는 비트

단위로 스위치 상태를 입력해서 해당 LED를 on/off하는 프로그램을 작성하고 동

작을 확인하여라.

(24)

24/44

05. 입출력 포트 실습 4 : 스위치 대응 LED 점등

완성 사진

(25)

IT CookBook, C 언어로 배우는 8051 마이크로프로세서

참조

관련 문서

프로그램을 통하여 배운 내용을 통하여 합리적인 사고를 통하여 지역의 특성을 활용할 수 있으며 이를 결과물에 반영하여 보고서를 작성하고 최적의 지역을 선정하는

입출력 인터페이스, 입출력 채널(channel), 입출력 프로세서, 입출력 제어기 (controller), 장치 제어기(device controller) 등의 여러 가지

• 프로세서 내부에 있는 입출력 데이터와 주소 레지스터를 입출력 모 듈과 연결한 형태로 주소 레지스터와 버스 사이에서 데이터를 직접 전송할 수 있는 가장

u 회전물체 톱니가 영구자석 앞에 오면 톱니가 없는 부분보다 관통 자속이 증가 u 톱니부분에 더 많은 와전류가 생성되며, 이 와전류에 의한

• 주기억장치의 일정 영역을 버퍼로 지정하고 입출력 데이터를 버퍼 에 둔 상태에서 입출력 기능만 별도로 수행하는 입출력 채널이 입출

그리고 선형동 작을 위한 베이스

• 모든 자바 입출력 클래스는 궁극적으로 바이트단위 입출력 을

○ SAPARD 프로그램을 추진하려는 국가는 가장 먼저 해당 국가를 대표하여 주관기관 (Competent Authority) 역할을 하는 국가승인책임자(National