打印

实在没辙了,哪位好心帮我看看这个程序错哪里了

[复制链接]
1565|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaohq|  楼主 | 2009-11-3 20:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD转换的程序,大意是按一下接在INT0口的键,启动一次ADC,转换完成中端中把转换得到的值分成3个数,在main中让这3个数在LCD上显示出来。用的CVAVR,ATMEA16片子。搞了一个下午啊。
#include <mega16.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
unsigned char adc_value[3];
interrupt [EXT_INT0] void ext_int0_isr(void)
{
    ADCSRA|=0X40;
}
#define ADC_VREF_TYPE 0x40
void adc_conv(unsigned int adc )
{
    unsigned char i;
    for(i=0;i<3;i++)
    {
        adc_value[2-i]=adc%10;
        adc=adc/10;  
    }
}
interrupt [ADC_INT] void adc_isr(void)
{
    unsigned int adc_data;
    adc_data=ADCW;
    adc_data=adc_data*500/1024;
    adc_conv(adc_data);
}
void main(void)
{
    GICR|=0x40;
    MCUCR=0x02;
    MCUCSR=0x00;
    GIFR=0x40;
    ADMUX=ADC_VREF_TYPE & 0x00;
    ADCSRA=0x8D;
    lcd_init(16);
    #asm("sei")
    while (1)
        {
              lcd_clear();
              lcd_gotoxy(1,1);
              lcd_putchar(adc_value[0]+0x30);
              lcd_gotoxy(2,1);
              lcd_putchar('.');
              lcd_gotoxy(3,1);
              lcd_putchar(adc_value[1]+0x30);
              lcd_gotoxy(4,1);
              lcd_putchar(adc_value[2]+0x30);
        };
}

相关帖子

沙发
gaohq|  楼主 | 2009-11-3 20:28 | 只看该作者
现象就是在LCD上就显示0.51,我把ADC0接到GND和VCC都是这个结果。当然ADC0改了位置后按了接在INT0口的按键的。

使用特权

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

本版积分规则

378

主题

3763

帖子

5

粉丝