Avr Lecture2

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Avr Lecture2 as PDF for free.

More details

  • Words: 1,398
  • Pages: 18
임베디드 마이크로프로세서 프로그래밍 실전 제작 : 네 로 테 크 강의 : 김 종 형

Embedded AVR Programming

ATMEGA128 I/O 제어

1. 2.

20062006-0303-29

-2-

Input/Output 처리 방법 I/O 제어 프로그램 실습

Embedded AVR Programming

1-1 I/O 포트의 기본 구조 1 ⊙ 6개의 8비트 양방향 병렬 I/O포트 (A ~ F) 와 1개의 5비트 병렬 I/O포트(G)로 구성 ⊙ Read-Modify-Write 동작 가능(A ~ E) ⊙ H상태의 source drive 와 L상태의 sink drive 능력이 대칭적 ⊙ 최대 구동전류 (sinks up to 40 mA) ⊙ 풀업저항의 사용 여부를 설정(Pinwise Controlled Pull-Up Resistors) ⊙ 데이터 입출력방향을 설정(Pinwise Controlled Data Direction) ⊙ Three Control/Status Bits per Bit/Pin

20062006-0303-29

-3-

Embedded AVR Programming

1-1 I/O 포트의 기본 구조 2 ☞ 각 포트는 3개의 I/O 레지스터 영역으로 구성 ⊙ DDRx (Data Direction Register) : 입출력의 방향을 설정 ⊙ PORTx (Data Register) : 데이터 출력에 해당하는 PORTx 레지스터 ⊙ PINx (Port Input Pins Address) : 포트 입력 핀에 해당하는 PINx 레지스터 ⊙ DDR, PORT 는 읽고 쓰는 것이 가능, PIN은 읽는 것만 가능한 레지스터 ⊙ I/O포트의 풀업저항은 SFIOR 레지스터의 PUD(Pull-up Disable) 비트를 1로 셋하여 금지 내부 풀업 저항을 사용하려면 PUD비트를 0로 설정(DDRx = 0, PORTx = 1)

20062006-0303-29

-4-

Embedded AVR Programming

1-2 I/O 포트의 기본 동작 ☞ I/O 포트 핀의 동작 설정

DDRxn

PORTxn

PUD

I/O

Pull-up

비고

0

0

X

Input

No

3-State(하이 임피던스)

0

1

0

Input

Yes

내부 풀업

0

1

1

Input

No

3-State(하이 임피던스)

1

0

X

Output

No

L출력(sink)

1

1

X

Output

No

H출력(source)

20062006-0303-29

-5-

Embedded AVR Programming

1-2 I/O 포트의 기본 동작 1

Default Configuration

DDx

0

Pull-Up

PORTx

0 PINx

Physical Pin

?

?

Direction: Pull-Up: 20062006-0303-29

INPUT OFF -6-

Embedded AVR Programming

1-2 I/O 포트의 기본 동작 2

Switch On Pull-Up

DDx

0

Pull-Up

PORTx

1 PINx

Physical Pin

?

?

Direction: Pull-Up: 20062006-0303-29

INPUT ON -7-

Embedded AVR Programming

1-2 I/O 포트의 기본 동작 3

Port is Output

DDx

1

Pull-Up

PORTx

1 PINx

Physical Pin

1

1

Direction: Pull-Up: 20062006-0303-29

OUTPUT OFF -8-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ① 포트 A ▶ 외부메모리를 인터페이스 위한 데이터버스 및 어드레스 버스의 하위 바이트로 동작 ▶ 어드레스 버스를 분리하는데 ALE(Address Latch Enable)신호를 사용 I/O PIN

20062006-0303-29

부수적인 기능

PA7

AD7 (External memory interface address and data bit 7)

PA6

AD6 (External memory interface address and data bit 6)

PA5

AD5 (External memory interface address and data bit 5)

PA4

AD4 (External memory interface address and data bit 4)

PA3

AD3 (External memory interface address and data bit 3)

PA2

AD2 (External memory interface address and data bit 2)

PA1

AD1 (External memory interface address and data bit 1)

PA0

AD0 (External memory interface address and data bit 0)

-9-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ② 포트 B ▶ 타이머/카운터나 SPI 기능을 위한 신호들로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PB7

OC2/OC1C (Timer/Counter2 or Timer/Counter1)

PB6

OC1B (Output compare and PWM Output B for Timer/Counter1)

PB5

OC1A (Output compare and PWM Output A for Timer/Counter2)

PB4

OC0 (Output compare and PWM Output for Timer/Counter0)

PB3

MISO (SPI Bus Master Input/Slave Output)

PB2

MOSI (SPI Bus Master Output/Slave Input)

PB1

SCK (SPI Bus Serial Clock)

PB0

/SS (SPI Slave Select Input)

-1010-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ③ 포트 C ▶ 외부 메모리를 인터페이스하기 위한 어드레스 버스의 상위 바이트로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PC 7

A15(External memory interface address and data bit 15)

PC6

A14 (External memory interface address and data bit 14)

PC5

A13 (External memory interface address and data bit 13)

PC4

A12 (External memory interface address and data bit 12)

PC3

A11 (External memory interface address and data bit 11)

PC2

A10 (External memory interface address and data bit 10)

PC1

A9 (External memory interface address and data bit 9)

PC0

A8 (External memory interface address and data bit 8)

-1111-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ④ 포트 D ▶ 타이머/카운터나 외부 인터럽트 또는 USART1, TWI 직렬통신 포트 기능을 위한 신호들로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PD 7

T2(Timer/Counter2 clock Input)

PD6

T1(Timer/Counter1 Clock Input)

PD5

XCK1(USART1 External Clock Input/Output)

PD4

ICP1(Timer/Counter1 Input Capture Pin)

PD3

INT3/TXD1(External Interrupt3 Input or USART1 Transmit Data)

PD2

INT2/RXD1(External Interrupt2 Input or USART1 Receive Data)

PD1

INT1/SDA(External Interrupt1 Input or TWI Serial Data)

PD0

INT0/SCL(External Interrupt0 Input or TWI Serial Clock)

-1212-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ⑤ 포트 E ▶ 타이머/카운터나 외부인터럽트 또는 USART0 직렬통신포트, 아날로그 비교기, ISP 기능을 위한 신호로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PE 7

INT7/ICP3(External Interrupt7 Input or Timer/Couter3 Input Capture Pin)

PE6

INT6/T3(External Interrupt6 Input or Timer/Counter3 Clock Input)

PE5

INT5/OC3C(External Interrupt5 Input or Output compare and PWM Output C for Timer/Counter3)

PE4

INT4/OC3B(External Interrupt4 Input or Output compare and PWM Output B for Timer/Counter3)

PE3

AIN1/OC3A(Analog Comparator Negative Input or Output Compare and PWM Output A for Timer/Couter3)

PE2

AIN0/ACK0 (Analog Comparator Positive Input or USART0 External Clock Input/Output)

PE1

PDO/TXD0(ISP Programming Data Output or USART0 Transmit Data)

PE0

PDI/RXD0(ISP Programming Data Input or USART0 Receive Data)

-1313-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ⑥ 포트 F ▶ A/D 컨버터, JTAG 인터페이스를 위한 신호로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PF 7

ADC7/TD I(ADC Input Channel 7 or JTAG Test Data Input)

PF6

ADC6/TDO (ADC Input Channel 6 or JTAG Test Data Output)

PF5

ADC5/TMS (ADC Input Channel 5 or JTAG Test Mode Select)

PF4

ADC4/TCK (ADC Input Channel 4 or JTAG Test Clock)

PF3

ADC3 (ADC Input Channel 3)

PF2

ADC2 (ADC Input Channel 2)

PF1

ADC1 (ADC Input Channel 1)

PF0

ADC0 (ADC Input Channel 0)

-1414-

Embedded AVR Programming

1-3 I/O 포트의 부수적 동작 ⑦ 포트 G ▶ PG4 ~ PG0의 5비트만 사용되며 부수적인 기능은 외부메모리 인터페이스나 타이머/카운터로 동작 I/O PIN

20062006-0303-29

부수적인 기능

PG4

TOSC1 (RTC Oscillator Input for Timer/Counter0)

PG3

TOSC2 (RTC Oscillator Output for Timer/Counter0)

PG2

ALE (Address Latch Enable to External Memory)

PG1

/RD (Read Strobe to External Memory)

PG0

/WR (Write Strobe to External Memory)

-1515-

Embedded AVR Programming

1-4 I/O 포트의 제어 실습 1 ☞ 포트B에 LED를 연결하고 왼쪽으로 이동하며 순차적으로 ON/OFF하는 프로그램 #include <mega128.h> #include <delay.h> void main(void) { unsigned char led = 0xfe ; // 변수의 정의 DDRB = 0xff ; // 포트B를 모두 출력으로 정의 PORTB = 0x00 ; // 처음 동작은 PORTB에 연결된 LED 모두 켜기 delay_ms(5000); // delay()함수를 이용하여 약 5초가 LED ON 상태 유지 while (1) { PORTB = led ; // PORTB에 LED 출력 지정 delay_ms(3000); // 3초 딜레이 led << = 1 ; // 좌쉬프트 1BIT led |= 0x01 ; // 1비트 좌 SHIFTE 후 0X01 값을 논리합으로 함으로써 // 0의 값을 1로 셋트함 if (led == 0xff) led = 0xfe ; // 모든 값이 1일 되면 LED ON 이 되지 않으므로 // LED 변수 초기화 } }

20062006-0303-29

-1616-

Embedded AVR Programming

1-4 I/O 포트의 제어 실습 2 ☞ 포트B에 LED를 연결하고 좌우 쉬프트 ON/OFF 하는 프로그램 #include <mega128.h> #include <delay.h> void main(void) { unsigned char led = 0xfe ; // 변수의 정의 DDRB = 0xff ; // 포트B를 모두 출력으로 정의 PORTB = 0x00 ; // 처음 동작은 PORTB에 연결된 LED 모두 켜기 delay_ms(3000); // delay()함수를 이용하여 약 3초간 LED ON 상태 유지 while (1) { do // do ~ while문 실행 { PORTB = led ; // PORTB에 LED 출력 지정 delay_ms(1000); led << = 1 ; // 좌쉬프트 1BIT led |= 0x01 ; // 1비트 좌 SHIFTE 후 0X01 값을 논리합으로 함으로써 0의 값을 1로 셋트함 } while (led != 0x7f) ; // led가 좌측 쉬프트 마지막에 오면 다음 루틴을 실행 do { PORTB = led ; // PORTB에 LED 출력 지정 delay_ms(1000) ; led >>= 1 ; // 우쉬프트 1BIT led |= 0x80 ; // 1비트 우 SHIFTE 후 0X80 값을 논리합으로 함으로써 0의 값을 1로 셋트함 } while (led != 0xfe) ; // led가 우측 쉬프트 마지막에 오면 다음 루틴을 실행 } } -171720062006-0303-29

Embedded AVR Programming

1-4 I/O 포트의 제어 실습 3 ☞ 포트 C로 외부 신호를 입력 받아 포트 B로 데이터 값을 반전시켜 출력하는 프로그램 #include <mega128.h> void main(void) { unsigned char key ; // key입력 변수 선언 MCUCR = 0x00; // 외부 메모리 디스에이블 DDRB = 0xff;

// 포트 B를 출력으로 설정

DDRC = 0x00; // 포트 C를 입력으로 설정 PORTC = 0xff;

// 내부 풀업저항 사용

while (1) { key = PINC; // 스위치가 눌릴 때 포트 C의 값을 읽어와서 key에 저장 PORTB = ~key; // key값을 포트 B에 LED출력 }; }

20062006-0303-29

-1818-

Related Documents

Avr Lecture2
November 2019 13
Lecture2
June 2020 14
Lecture2
November 2019 20
Lecture2
July 2020 10
Lecture2
November 2019 14
Lecture2
June 2020 11