DK128 EXT2 기본 메뉴얼 참조 구문
그냥 기본으로 나와있는거 주석까지 밑에거 끌어다가 붙인거다..
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;
}