打印

AVR编程求教

[复制链接]
1240|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱上杭州|  楼主 | 2014-6-12 12:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序是否实现了每0.5MS采样一次的作用呢?大神求指教啊
#include <avr/io.h>
#include <stdio.h>
       
unsigned int data;
float temp;
/*void delay1(int t)
{
        volatile int x,y;
        for(x=0;x<t;x++)
        {
                for(y=0;y<500;y++);
        }
}*/

void TIM_INIT(void)
{
        TCCR0 = 0X00;
        TCNT0 = 0;//T/C0开始值
        TCCR0 |=(1<<CS01);//8分频
        TIMSK |=(1<<TOIE0);//|(1<<OCIE0);
}
void TIM_Deal(void)
{
        if(TCNT0 <0xFF) TCNT0++;

        TIFR |= (1<<TOV0);
}

void ADC_INIT (void)
{
       
        PORTA = 0X00;
        DDRA = 0X00;//PA0设置为输入口,高阻态

//        ADCSRA = 0X00;//禁止ADC工作

        ADMUX = (1<<REFS1)|(1<<REFS0);//参考电压2.56v,左对齐,选择ADC0
        ACSR   = (1<<ACD);//关闭模拟比较器

        ADCSRA |= (1<<ADEN);

}
void AD_START (void)
{
        ADCSRA |= (1<<ADSC);

        while(ADCSRA & (1<<ADSC));

        data = (unsigned int)ADCL;
        data = data + ((unsigned int )ADCH<<8);
        temp = data *2.5 ;

}

int main(void)
{

        ADC_INIT();
        TIM_INIT();
       
//        AD_START();
       
        while(1)
        {
                TIM_Deal();
                if(1<<TOV0)
                {
                        AD_START();
                        TIFR &=~ 0x01;
                }
        }

}
这个程序是否实现了每0.5MS采样一次的作用呢?

相关帖子

沙发
爱上杭州|  楼主 | 2014-6-12 13:13 | 只看该作者
#include <avr/io.h>
#include <stdio.h>
       
unsigned int data;
float temp;
/*void delay1(int t)
{
        volatile int x,y;
        for(x=0;x<t;x++)
        {
                for(y=0;y<500;y++);
        }
}*/

void TIM_INIT(void)
{
        TCCR0 = 0X00;
        TCNT0 = 0;//T/C0开始值
        TCCR0 |=(1<<CS01);//8分频
        TIMSK |=(1<<TOIE0);//|(1<<OCIE0);
        TCNT0 = 0XFF;
}

void ADC_INIT (void)
{
       
        PORTA = 0X00;
        DDRA = 0X00;//PA0设置为输入口,高阻态

//        ADCSRA = 0X00;//禁止ADC工作

        ADMUX = (1<<REFS1)|(1<<REFS0);//参考电压2.56v,左对齐,选择ADC0
        ACSR   = (1<<ACD);//关闭模拟比较器

        ADCSRA |= (1<<ADEN);

}
void AD_START (void)
{
        ADCSRA |= (1<<ADSC);

        while(ADCSRA & (1<<ADSC));

        data = (unsigned int)ADCL;
        data = data + ((unsigned int )ADCH<<8);
//        temp = data *2.5 ;

}

int main(void)
{
        unsigned int g_bcount;
        ADC_INIT();
        TIM_INIT();
       
//        AD_START();
       
        while(1)
        {
                if(++g_bcount>4)
                {
                        AD_START();
                        g_bcount = 0;
                }
        }

}

使用特权

评论回复
板凳
dirtwillfly| | 2014-6-12 21:16 | 只看该作者
读程序也用教吗?

使用特权

评论回复
地板
1021352522| | 2014-6-13 14:57 | 只看该作者
楼主大大,我最近也开始接触Atmaga系列单片机,

使用特权

评论回复
5
Richce| | 2014-6-14 10:20 | 只看该作者
楼主最好是看着Datasheet去写程序,这样以后要用到芯片的什么内设,就随心应手了

使用特权

评论回复
6
rszhao| | 2014-6-15 15:35 | 只看该作者
看看手册和技术文件 最好参考厂商技术文件

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝