본문 바로가기

AVR/AVR 연습, Tutorial

AVR으로 LED ON/OFF 전체 포트 제어하기 - AVR 연습하기



연습 하드웨어 회로는?




CodeVisionAVR 사용법 설명할 때 한번 등장했고 앞으로도 자주 등장 할 회로도입니다.^

간단하게 모듈에서 PB0 부터 PB7 을 브레드보드 점프선으로 뽑아서 330옴 저항을 거친뒤LED랑 연결되어 있습니다. 제어 하는데 2가지 레지스터 DDRB와 PORTB가 사용되고 새로 delay.h 헤더파일이 추가되고 delay는 PORTB에 값을 주고 값을 준 상태를 일정시간 동안 지연시키는데 사용되고, 코드비전에서는 delay_ms()와 delay_us(), AVR Studio에서는 앞에 언더바를 붙여 사용하고, 각각 밀리초, 마이크로초 값을 괄호안에 입력하고 세미콜론을 찍습니다.

그럼 소스코드를 볼까요!


CodeVisionAVR용 소스코드


#include <tiny2313.h>    // tiny2313 입출력 설정 헤더파일을 포함합니다.

#include <delay.h>    // delay 지연용 헤더파일을 포함합니다.


void main(void)    // main() 함수를 호출합니다.

{

PORTB=0x00;    // 포트B의 초기값은 0 입니다.

DDRB=0xFF;    // 포트B의 모든포트를 출력으로 사용합니다.

                   

while (1)    // 아래 구문을 무한 반복 합니다.

      {

        PORTB=0xFF;    // 포트B의 모든포트에 5V를 출력합니다.

        delay_ms(500);    // 0.5초 대기합니다.

        PORTB=0x00;    // 포트B의 모든포트에 0V를 출력합니다.

        delay_ms(500);    // 0.5초 대기합니다.

      }

}



AVR Studio용 소스코드


#include <avr/io.h>    // AVR 입출력 설정 헤더파일을 포함합니다.

#define F_CPU 8000000UL  // 사용중인 크리스탈 값을 상수로 설정합니다.

#include <util/delay.h>    // delay 지연용 헤더파일을 포함합니다.


int main()    // main()함수를 호출합니다.

{

PORTB=0x00;    // 포트B의 초기값은 0 입니다.

DDRB=0xFF;    // 포트B의 모든포트를 출력으로 사용합니다.

while(1)    // 아래구문을 무한반복합니다.

{

PORTB=0xFF;    // 포트B의 모든포트에 5V를 출력합니다.

_delay_ms(500);    // 0.5초 대기합니다.

PORTB=0x00;    // 포트B의 모든포트에 0V를 출력합니다.

_delay_ms(500);    // 0.5초 대기합니다.

}


return 0;    //main함수에 0을 리턴합니다.

}


프로그래밍 후 동작




동영상처럼 깜박이는 동작을 합니다.