//-----------포트 설정
#define PORTF (*(volatile unsigned char *)0x62)
#define DDRF (*(volatile unsigned char *)0x61)
#define PORTA (*(volatile unsigned char *)0x3B)
#define DDRA (*(volatile unsigned char *)0x3A)
#define PORTE (*(volatile unsigned char *)0x23)
#define DDRE (*(volatile unsigned char *)0x22)
//-----------ADC 설정
#define ACSR (*(volatile unsigned char *)0x28)
#define ADMUX (*(volatile unsigned char *)0x27)
#define ADCSRA (*(volatile unsigned char *)0x26)
#define ADCH (*(volatile unsigned char *)0x25)
#define ADCL (*(volatile unsigned char *)0x24)
//---------USART 레지스트리 설정
#define UDR0 (*(volatile unsigned char *)0x2C)
#define UCSR0A (*(volatile unsigned char *)0x2B)
#define UCSR0B (*(volatile unsigned char *)0x2A)
#define UCSR0C (*(volatile unsigned char *)0x95)
#define UBRR0L (*(volatile unsigned char *)0x29)
#define UBRR0H (*(volatile unsigned char *)0x90)
//--------- 통신 값 설정
#define CPU_CLOCK 7372800
#define BAUD_RATE 57600
#define BAUD_RATE_L (CPU_CLOCK/(16l*BAUD_RATE))-1
#define BAUD_RATE_H ((CPU_CLOCK/(16l*BAUD_RATE))-1)>>8
//--------- 레지스트리 비트값(UCSR1C)
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
//--------- 레지스트리 비트값(UCSR1B)
#define TXEN 3
#define RXEN 4
#define UCSZ2 2
#define NOP() asm volatile ("nop");
//--------- 레지스트리 비트값(UCSR1A)
void ADC_Init()
{
ADMUX = 0x00; //기준전압 설정.(오르쪽 정렬 , 외부전압 사용)
ADCSRA = 1<<0 | 1<<1 | 1<<2 | 1<<7; //0b10000111;
}
unsigned int ADConversion(char i)
{
ADMUX = ADMUX | i; //ADC0을 선택하기 위해 ADMUX를 사용.
ADCSRA = ADCSRA | 1<<6;
while((ADCSRA&0x10)==0);//while((ADCSRA & 0x10)!=0x10)
return( ADCL | ADCH<<8 );
}
void delay_us(unsigned int us)
{
unsigned int i;
for(i = 0; i < us; i++) //4
{
NOP(); NOP(); NOP(); NOP(); //4
NOP(); NOP(); NOP(); NOP(); //4
NOP(); NOP(); NOP(); NOP(); //4 = 16
}
}
void delay_ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
delay_us(200);
}
}
int main(void)
{
unsigned int val;
DDRA = 1<<0 | 1<<1 | 1<<2;
PORTA = 0xFF;
DDRE = 1<<4; //INT01 이라는 값 입력됨.
PORTE = 1<<4;
//PORTA=0b00000110;
ADC_Init();
while(1)
{
val = ADConversion(0);
if(0<=val&& val <=350 )
{
PORTA=0b11111110;
}
else if(350 <= val && val <= 700 )
{
PORTA=0b11111101;
}
else
{
PORTA=0b11111011;
}
}
return 0;
}
1. AVR Studio에서 엄한 파일을 계속 컴파일했음. 어떤 hex 파일인지 확인하기
2. 이거는 쫌 이해가 안가는 부분
while((ADCSRA&0x10)==0)//while((ADCSRA & 0x10)!=0x10)
{
}
>>>요렇게 해놓으면 안된다.
그런데
while((ADCSRA&0x10)==0);//while((ADCSRA & 0x10)!=0x10)
요렇게 해놓으면 된다.
|