컴퓨터/c관련 숙제

DK128 EXT2 기본 메뉴얼 참조 구문

리베리온 2013. 12. 29. 23:31

 

그냥 기본으로 나와있는거 주석까지 밑에거 끌어다가 붙인거다..

 

 

ex4_1.h


#include <avr/io.h>

#include <avr/interrupt.h>

#include <stdlib.h>


#define CPU_CLOCK 16000000


#define BAUD_RATE 19200

#define BAUD_RATE_L (CPU_CLOCK / (161 * BAUD_RATE)) -1

#define BAUD_RATE_H ((CPU_CLOCK / (161 * BAUD_RATE)) -1) >> 8


ex4_1.c


#include"EXT2_ex4_1.h"

// 1byte 전송 함수

void uart_send_byte(unsigned char byte)

{

// 전송 버퍼가 빌 때까지 기다린다.

while(!(UCSR1A & (1 <<UDRE1)));

//UCSR1A 레지스터의 UDRE1 비트가 1인지 검사한다

UDR1 = byte;//전송버퍼가 비었을때 UDR1 레지스터에

//1바이트의 데이터를 써준다

}


//return 문자 전송 함수


void uart_send_return(void) //터미널상 개행문자를 표시함수

{

uart_send_byte('\n');

uart_send_byte('\r');

}


//문자열 전송 함수


void uart_send_string(unsigned char *str, unsigned char len)

//문자열을 전송하기 위한 함수


{

int i;

for(i=0; i<len; i++)

{

if(!(*(str + i)))

{

break;//널문자를 만나게되면 전송중단

}

uart_send_byte(*(str+i));//1바이트씩 전송

}

}


//딜레이 루틴

void m_delay(unsigned int m)

//ms 단위의 시간지연을 만들기 위해 만들어진함수

{

unsigned int i,j;

cli();

for(i=0;i<m;i++)

for(j=0;j<2650;j++); //16MHz : 1msec

sei();

}


//가변저항의 출력값을 내기 위한 구분(UART 상에 출력)

void vr_out(void)

{

chat buf[4];

int result;


ADCSR |= 0x40; // ACD Start Conversion ADCSR을 1로 전환

while((ADCSR & 0x10) == 0); //ADC의 변환이 종료될때까지 대기

result = ADCL; // 결과값을 ADCL을 먼저 읽어들이고

result = ADCH; // ADCL을 읽은후 ADCH를 읽어들인다


itoa(result, buf, 10); // 아스키코드로 출력하기위해itoa함수사용

// 문자출력

uart_send_string(buf, sizeof(buf));//반환된 문자열을 UART으로출력

}







//ADC초기화


void adc_init(void)

{

DDRF &= 0x00; // F포트 입력 설정

// ADMUX = (01 1 00000), AVCC를 레퍼런스로 사용, 좌정렬 1, 채널 0

// 레퍼런스(REFS1, REFS0) 좌정렬(ADLAR)1로설정, 채널(ADC0,61번핀)

ADMUX = (0<<REFS1) | (1<<REFS0) | (1<<ADLAR);

// ADCSR = (1000 0 111), ADC enable(ADEN=1), 128분주비 설정

ASCSR = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

}


//시리얼 통신(UART) 초기화

void uart_init(void)

{

//baud rate 설정

UBRR1L = (unsigned char)BAUD_RATE_L;

UBRR1H = (unsigned char)BAUD_RATE_H;


//no parity, 1 stop bit, 8bit 설정

UCSR1C = (0<<UPM1) | (0<<UPM0) | (0<<USBS)

|(1<<USCZ1) | (1<<UCSZ0);


//Tx, Rx Enable, 8bit 설정

UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<USCZ2);

}


int main(void)

{

adc_init(); //ADC 초기화

uart_init(); //LED 포트 초기화


while(1){

m_delay(1000);//딜레이지정

vt_out();

uart_send_return();

m_delay(1000);

}

return 1;

}