liujian6f 发表于 2012-8-30 21:38:11

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]
查看完整版本: LGT ADC中断连续转换模式测试程序