|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
#include <iom16v.h>
#include <macros.h>
#include <eeprom.h>
#include <pgmspace.h>
#include <stdio.h>
#include <float.h>
#include <string.h>
#pragma interrupt_handler dc_1:iv_ADC
unsigned char recive_buff[4];
unsigned int temp;
void dc_1(void);
unsigned int read_adc(unsigned char adc_input)//查询方式读取ADC单端通道
{
ADMUX=(0x40|adc_input); //adc_input:单端通道 0x00~0x07,0x1E,0x1F
//0xc0:选择内部2.56V参考电压
ADCSRA|=(1<<ADSC); //启动AD转换
//loop_until_bit_is_set(ADCSRA,ADIF); //方法1 等待AD转换结束
while ((ADCSRA&(1<<ADIF))==0); //写法2 这种写法优化不好
// loop_until_bit_is_clear(ADCSRA,ADSC); //方法2 检测ADSC=0也行
ADCSRA|=(1<<ADIF); //写1清除标志位
return ADC; //ADC=ADCH:ADCL
}
void main(void)
{
// MCUCR = 0x08; //下降沿触发
// GICR = 0X80; //INT1 使能
// UBRRH = 0; //波特率为 9600
// UBRRL = 51;
// UCSRA = 0x20;
// UCSRB = 0x08; //容许接受和发送
// UCSRC = 86; //祯格式为8,1
PORTA=0;
ADCSRA=(1<<ADEN)|0x06; //使能ADC,时钟64分频 125KHz@8MHz system clock
SEI(); //使能全局中断
while(1)
{
temp=read_adc(0);
temp=temp;
}
}
void dc_1(void)
{
temp=ADCL;
}
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<2000;j++)
;
}
} |
|