'컴퓨터 이야기/AVR'에 해당되는 글 2건

  1. 2015.12.09 AVR 하이퍼 터미널 기초 소스
  2. 2015.12.09 AVR PORTG 스위치 다루기

AVR 하이퍼 터미널 기초 소스

컴퓨터 이야기/AVR 2015. 12. 9. 05:56
#include <avr/io.h>
#include<avr/interrupt.h> 
#define F_CPU 16000000UL // 사용하고 있는 크리스탈 주파수 값을 상수로 설정합니다.
#include <util/delay.h> // 지연 함수 관련 헤더파일을 포함합니다.
char rx_char(void) // 문자형 rx_char 수신 사용자 함수를 생성합니다.
{
// 문자 수신이 완료될 때까지 대기 UCSRA의 RXC가 비트1 이 되면 다음라인으로
while((UCSR0A&0x80) == 0);
return UDR0; // UDR 수신데이터 반환
}

void tx_char(char tx_data) // 문자형 tx_char 송신 사용자 함수를 생성합니다.
{
while((UCSR0A&0x20) == 0); // UDR레지스터가 빌 때까지 대기 UCSRA의 UDRE가 비트1 이 되면 다음라인으로
UDR0 = tx_data; // UDR레지스터에 입력한 tx_data 입력합니다.
}

int main(void) // 메인함수를 호출합니다.
{
char i, data; // 부호없는 문자형 변수 i, data를 생성합니다.

DDRB=0xFF; // B포트 8비트 전체를 출력으로 설정합니다.
PORTB=0x00; // B포트 8비트 전체의 초기값을 논리0 (0V)로 설정합니다.

UCSR0A=0x00; // UART설정 레지스터A 별도 설정 없음
UCSR0B=0x18; // UART설정 레지스터B RXEN과 TXEN을 비트1로 설정해서 송수신기능을 활성화 합니다.
UCSR0C=0x06; // UART설정 레지스터C UCSZ1과 UCSZ0을 비트1로 설정해서 8비트 데이터 전송으로 설정합니다.
//UBRR = 416;
int baud = 2400;
int ubrr= F_CPU/16/baud-1;

// 통신 속도 설정
UBRR0H = (unsigned char)(ubrr>>8); 
UBRR0L=(unsigned char)ubrr;

while(1) // 아래 구문을 무한 반복합니다.
{
tx_char('B');
_delay_ms(100);
/* data = rx_char(); // data 변수에 rx_char 사용자 함수사용으로 수신된 데이터를 저장합니다. */

/* if(data=='y') // data변수와 문자y가 같으면 */
/* { */
/* PORTB=0xFF; // B포트 전체 논리1 (5V)를 출력합니다. */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
/* if(data=='n') // data변수와 문자n과 같으면 */
/* { */
/* PORTB=0x00; // B포트 전체 논리0 (0V)를 출력합니다. */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
/* if(data=='b') // data변수와 문자b가 같으면 */
/* { */
/* for(i=0;i<3;i++) // 아래구문을 3번 반복합니다. */
/* { */
/* PORTB=0xFF; // B포트 전체 논리1 (5V)를 출력합니다. */
/* _delay_ms(200); // 위 상태를 0.2초 동안 유지합니다. */
/* PORTB=0x00; // B포트 전체 논리0 (0V)를 출력합니다. */
/* _delay_ms(200); // 위 상태를 0.2초 동안 유지합니다. */
/* } */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
}

return 0; // 정상종료 값 0을 리턴합니다.
}


'컴퓨터 이야기 > AVR' 카테고리의 다른 글

AVR PORTG 스위치 다루기  (0) 2015.12.09
:

AVR PORTG 스위치 다루기

컴퓨터 이야기/AVR 2015. 12. 9. 05:55
#include <avr/interrupt.h>
#include <avr/io.h>
void port_init(void)
{
    PORTA = 0x00;
    DDRA  = 0x00;
    PORTB = 0x00;
    DDRB  = 0x00;
    PORTC = 0x00; //m103 output only
    DDRC  = 0x00;
    PORTD = 0x00;
    DDRD  = 0x00;
    PORTE = 0x00;
    DDRE  = 0x00;
    PORTF = 0x00;
    DDRF  = 0x00;
    PORTG = 0x00;
    DDRG  = 0b00001111;
}


//call this routine to initialize all peripherals
void init_devices(void)
{
    //stop errant interrupts until set up
    cli(); //disable all interrupts
    XDIV  = 0x00; //xtal divider
    XMCRA = 0x00; //external memory
    port_init();


    MCUCR = 0x00;
    EICRA = 0x00; //extended ext ints
    EICRB = 0x00; //extended ext ints
    EIMSK = 0x00;
    TIMSK = 0x00; //timer interrupt sources
    ETIMSK = 0x00; //extended timer interrupt sources
    sei(); //re-enable interrupts
    //all peripherals are now initialized
}


void delay(int n)
{
    volatile int i,j;
    for(i=1;i<n;i++)
    {
        for(j=1;j<600;j++);
    }
}

int main(void)
{
    unsigned int temp, i;
    init_devices();    

    
    delay(600);
    
    while(1){
        if(PING & 0b00000100){
            PORTG = 0x01;
        }
        if(PING & 0b00001000){
    
            PORTG = 0x02;
        }
        delay(10);
    }
    return 0;
}


'컴퓨터 이야기 > AVR' 카테고리의 다른 글

AVR 하이퍼 터미널 기초 소스  (0) 2015.12.09
: