LGT ADC中断连续转换模式测试程序
看了很多的ADC都采用查询方式读取ADC今天也测试了下中断模式读ADC 以下是我的程序PA0单端采样 使用LGT内部16MHZ串口发送ADC值(字符形式显示)#include <avr/io.h>
#include <lgt.h> //lgt头文件
#include <avr/interrupt.h>
#define F_CPU 16000000
#include <util/delay.h>
#define uchar unsigned char
#define uintunsigned int
#define ulong unsigned long
#define BIT(X)(1<<X)
uint dat;
void usart_init(ulong buad)
{
UCSR0A=0X00;
UBRR0H=(F_CPU/(16*buad)-1)/256;
UBRR0L=(F_CPU/(16*buad)-1)%256;
UCSR0B=0X18;
UCSR0C=0X06;
}
void usart_t(uchar dat)
{
while(!(UCSR0A&0X20));
UDR0=dat;
}
void initadc()
{
DDRA&=~BIT(0);
PORTA&=~BIT(0);
ADMUX=0X80; //内部1.25V参考电压
ADCSRA=0Xee;//中断使能 64分频采样率250K 输入端PA0
ADCSRB=0x00;//连续转换模式
DIDR0=0XFF; //数字输入禁止
SREG|=0X80; //开全据中断
}
SIGNAL(ADC_vect)
{
dat=ADC;
}
int main(void)
{
CLKPR=0X80;
CLKPR=0X80; //内部16MHz
initadc(); //初使化ADC
usart_init(9600);//初使化串口波特率9600
ADCSRA|=0X40; //开ADC第一次转换
while(1)
{ //串口发送ADC值
usart_t(0x30+dat/1000);
usart_t(0x30+dat%1000/100);
usart_t(0x30+dat%100/10);
usart_t(0x30+dat%10);
usart_t(0x0D);
usart_t(0x0A);
_delay_ms(1000);
}
}
页:
[1]