筆者才疏學(xué)淺,只會(huì)用as6, 所以為幫助后來(lái)者學(xué)習(xí)使用as6 ,在本機(jī)調(diào)試成功avr328p的AD代碼發(fā)出來(lái)供大家參考,如有不足,歡迎指正
# define F_CPU 16000000UL//定義CPU頻率,本人用5v arduino pro mini的最小系統(tǒng)版,所以頻率16M
#include //使用統(tǒng)一的頭文件 這是與ICC AVR編譯器 不同的地方
#include //這個(gè)頭文件可以使用系統(tǒng)自己帶的 _delay_us();_delay_ms();兩個(gè)延時(shí)函數(shù)
#include //含有中斷的宏定義 有些中斷聲明發(fā)生變化
#define uchar unsigned char
#define uint unsigned int
void AD_Init(void)
{
//參考電壓AVCC 要加電容穩(wěn)壓,左對(duì)齊,ADC5單端輸入
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
//AD使能, 連續(xù)轉(zhuǎn)換,中斷使能,32分頻, 6M / 32 = 187.5khz
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
//AD開(kāi)始轉(zhuǎn)換
ADCSRA |= (1 << ADSC);
}
int main(void)
{
DDRC=(0<<PC0);
PORTC=(0<<PC0);//注意adc輸入口的設(shè)置 輸入0
//AD初始化
AD_Init();
//開(kāi)總中斷
sei();
while(1);
return 0;
}
int result = 0;
ISR(ADC_vect)//中斷函數(shù)命名方式的變化
{
result = ADCH;
//result = result * 500 / 255;
if(result>=128)
{
DDRB=(1<<PB5);
PORTB=(1<<PB5);//檢測(cè)led的變化 因?yàn)閜b5 接有l(wèi)ed
}
else
{DDRB=(0<<PB5);
PORTB=(0<<PB5);//微亮
}
}
#include
void AD_Init(void)
{
//參考電壓AREF,左對(duì)齊,ADC5單端輸入
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
//AD使能, 連續(xù)轉(zhuǎn)換,中斷使能,32分頻, 6M / 32 = 187.5khz
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
//AD開(kāi)始轉(zhuǎn)換
ADCSRA |= (1 << ADSC);
}
int main(void)
{
DDRC=(0<<PC0);
PORTC=(0<<PC0);
//LCD初始化
//AD初始化
AD_Init();
//開(kāi)總中斷
sei();
while(1);
return 0;
}
int result = 0;
ISR(ADC_vect)
{
result = ADCH;
//result = result * 500 / 255;
if(result>=128)
{
DDRB=(1<<PB5);
PORTB=(1<<PB5);
}
else
{DDRB=(0<<PB5);
PORTB=(0<<PB5);//微亮
}
}