久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: AVR內(nèi)部AD模塊的求助!各位大蝦們幫個忙吧…… [打印本頁]

作者: 海浩    時間: 2011-8-15 19:08
標(biāo)題: AVR內(nèi)部AD模塊的求助!各位大蝦們幫個忙吧……

 各位大俠們,我想用ATmega128的內(nèi)部AD的,我選用的編譯器是IAR AVR,程序如下:

#include <ioavr.h>
#include <intrinsics.h>
#define  unchar unsigned char
#define  unint  unsigned int

unchar vol;

#define    REFS1    7
#define    REFS0    6
#define    ADLAR    5
#define    MUX4     4
#define    MUX3     3
#define    MUX2     2
#define    MUX1     1
#define    MUX0     0

#define    ADEN     7
#define    ADSC     6
#define    ADFR     5
#define    ADIF     4
#define    ADIE     3
#define    ADPS2    2
#define    ADPS1    1
#define    ADPS0    0

#define rs_L()  (PORTD &= ~(1<<7))
#define rs_H()  (PORTD |= (1<<7))

#define rw_L()  (PORTD &= ~(1<<6))
#define rw_H()  (PORTD |= (1<<6))

#define en_L()  (PORTD &= ~(1<<5))
#define en_H()  (PORTD |= (1<<5))

void delay_ms(unint x)  //12M 1ms延時程序
{
  unint y;
  for(;x>0;x--)
    for(y=0;y<120;y++);
}

void w_com(unchar com)
{
  unint i;
 PORTC=com;

 rs_L();
  
 rw_L();
  
 en_L();
 i=10;
 while(i--);
 en_H();
 i=10;
 while(i--);
}

void w_data(unchar dataa)
{
  unint i;
 PORTC=dataa;
 
 rs_H();
 
 rw_L();
 
 en_L();
 i=10;
 while(i--);
 en_H();
 i=10;
 while(i--);
}

void L1602_init()
{
 w_com(0x01);
 w_com(0x38);
 w_com(0x0c);
 w_com(0x06);
 w_com(0xd0);
}

void L1602_char(unchar hang,unchar lie,char sign)
{
 unchar a;
 if(hang==1) a=0x80;
 if(hang==2) a=0xc0;
 a=a+lie-1;
 w_com(a);
 w_data(sign);
}

void L1602_string(unchar hang,unchar lie,unchar *p)
{
 unchar a;
 if(hang==1) a=0x80;
 if(hang==2) a=0xc0;
 a=a+lie-1;
 w_com(a);
 while(1)
 {
  if(*p=='\0') break;
  w_data(*p);
  p++;
 }
}

unchar BIT(unchar x)
{
  unchar temp;
  temp = (0x01<<x);
  return temp;
}

/*
*函數(shù)功能:ADC模塊的初始化程序
*輸入?yún)?shù):無
*輸出參數(shù):無
*返 回 值:無
*/
void init_adc()
{
  ADCSR=0X00;     //設(shè)置ADC前,禁止ADC
  ADMUX=BIT(REFS1)|BIT(REFS0);   //設(shè)置ADC內(nèi)置參考電壓為2.56V的片內(nèi)基準(zhǔn)電源
  ADMUX|=BIT(ADLAR);     //ADC轉(zhuǎn)換結(jié)果左對齊,直接取ADCH的8位數(shù)據(jù)
  ADCSR=BIT(ADEN)|BIT(ADPS1)|BIT(ADPS0)|BIT(ADPS2);  //ADC使能,128分頻
}

unsigned char get_adcdata(void)
{
  unsigned char volt;
//  ADMUX=BIT(MUX0)|BIT(MUX1)|BIT(MUX2)|BIT(MUX3);           //選擇通道3,電池電壓通道
  ADMUX|=0;
  ADCSR|=BIT(ADSC);  //啟動單次ADC轉(zhuǎn)換
  while (!(ADCSR&BIT(ADIF)));  //等待轉(zhuǎn)換結(jié)束
  ADCSR&=~(BIT(ADIF));    //清楚ADIF位
  volt=ADCH;
  return volt;
}

void L1602_display1()
{
  L1602_char(1,9,vol/100%10+48);
  L1602_char(1,11,vol/10%10+48);
  L1602_char(1,12,vol%10+48);
}

 


void main()
{

 
  DDRC=0xff;
  PORTC=0xff;
  DDRD=0xff;
  PORTD=0xff;
  DDRF=0x00;
  PORTF=0x00;
  L1602_init();
  L1602_string(1,1,"   IN0: 0.00V   ");
  L1602_string(2,1,"   IN1: 0.00V   ");
  init_adc();
  while(1)
  {
    vol = get_adcdata();
    vol=(vol/256)*500;
    L1602_display1();
    delay_ms(1000);
  }
}

 

我用IAR模擬運(yùn)行了一下,發(fā)現(xiàn)就是死在了 while (!(ADCSR&BIT(ADIF)));  這邊,這說明AD一直都在轉(zhuǎn)換,就是沒轉(zhuǎn)換好!這是為什么呢?勞煩各位大俠留步幫小弟解決下!有勞了各位了……

[此貼子已經(jīng)被作者于2011-8-15 19:14:36編輯過]

作者: shja995    時間: 2012-3-28 15:57
while (!(ADCSR&BIT(ADIF))); 這句話本身有問題吧。。。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩影院在线观看 | 咪咪色影院| 欧美另类激情 | 国产成人精品av在线观 | 日韩在线视频观看 | 日韩精品福利 | 国产欧美日韩一区 | 欧美精品网站 | 在线观看黄色av | 国产在线观看一区 | 亚洲第一黄网 | 国产一级片网站 | 亚洲视频区 | 日韩一级淫片 | 在线观看视频一区二区三区 | 嫩草国产 | 国产成人综合网 | 日日夜夜精品 | 欧美做受喷浆在线观看 | 精品视频在线免费观看 | 四虎三级| 亚洲www| 国产美女免费视频 | 久热中文字幕 | 中文字幕免费看 | 国产无精乱码一区二区三区 | 亚洲欧美在线观看 | 亚洲国产精品久久久久 | 免费在线观看av网站 | 成人福利视频在线观看 | 免费观看a级片 | 成年人小视频 | 国产精品毛片va一区二区三区 | 国产精选av| 六月色婷婷 | 日韩精品久久久久久免费 | 免费看黄色小视频 | 国产在线一 | 国产激情网| 九九九精品视频 | 日韩在线免费观看视频 |