01. LED 8개 단순 ON/OFF 제어(포트 입출력)

안양진·2022년 8월 16일
0

ATmega128

목록 보기
3/7
post-custom-banner

ATmega128에는 디지털 데이터를 출력하기 위해 사용되는 레지스터로는PORTA~PORTG의 범용 레지스터가 있다 이중 포트 G는 5개의핀만 존재하며, 이중에서도 상위 3비트는 사용할 수 없다.

PORTA~PORTF
비트76543210
비트 이름PORTx7PORTx6PORTx5PORTx4PORTx3PORTx2PORTx1PORTx0
읽기/쓰기R/WR/WR/WR/WR/WR/WR/WR/W
초기값00000000

PORTG

비트76543210
비트 이름---PORTG4PORTG3PORTG2PORTG1PORTG0
읽기/쓰기RRRR/WR/WR/WR/WR/W
초기값00000000

ATmega128에서 데이터 출력 혹은 입력을 위해선 PORTx 레지스터를 사용한다. 하지만 역할에서와 같이 읽기/쓰기 둘가 가능하기 때문에 해당 포트를 자신이 원하는 목적에 맞게끔 설정 해줘야한다.
따라서 이때는 DDRx (x= A~G)라는 래지스터를 사용하여 역할을 정한다.
각 DDRx를 1로 설정할 경우 출력, 0으로 출력할 경우 입력으로 설정된다.

PORTA~PORTF
비트76543210
비트 이름DDx7DDx6DDx5DDx4DDx3DDx2DDx1DDx0
읽기/쓰기R/WR/WR/WR/WR/WR/WR/WR/W
초기값00000000

PORTG

비트76543210
비트 이름---PORTG4PORTG3PORTG2PORTG1PORTG0
읽기/쓰기RRRR/WR/WR/WR/WR/W
초기값00000000

즉 포트를 사용하고자 할떄 먼저 DDRx를 사용하여 원하는 포트 (A,B,..,G)를 입출력 제어(0x00~0xff : G포트는 0x1f까지) 설정후
PORTx를 통하여 실제 입출력 신호를 정해주어야 한다.



-전체 LED 8개 ON/OFF-

//ATMEGA 128 LED ON OFF
#include <avr/io.h>
#include <util/delay.h>

int main(void){
	
    DDRB=0xff; //포트 B 출력용 으로 선언

	while(1){
    	PORTB=0xff; //전체 LED ON
		_delay_ms(100);	//100ms
		
        PORTB=0x00; //전체 LED OFF
		_delay_ms(100);//100ms
	}
}
-LED SHIFT 제어 (순서대로 점등 반복)-

#include <avr/io.h>
#include <util/delay.h>

int main(void){
	DDRB=0xff;

	unsigned char i=0x01;	

	while(1){		
		PORTB=i;
		i=(i<<1)|(1>>7);
		_delay_ms(100);
	}
}
post-custom-banner

0개의 댓글