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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5043|回復: 1
打印 上一主題 下一主題
收起左側(cè)

AVR內(nèi)部AD模塊的求助!各位大蝦們幫個忙吧……

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:30377 發(fā)表于 2011-8-15 19:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

 各位大俠們,我想用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)基準電源
  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模擬運行了一下,發(fā)現(xiàn)就是死在了 while (!(ADCSR&BIT(ADIF)));  這邊,這說明AD一直都在轉(zhuǎn)換,就是沒轉(zhuǎn)換好!這是為什么呢?勞煩各位大俠留步幫小弟解決下!有勞了各位了……

[此貼子已經(jīng)被作者于2011-8-15 19:14:36編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:37273 發(fā)表于 2012-3-28 15:57 | 只看該作者
while (!(ADCSR&BIT(ADIF))); 這句話本身有問題吧。。。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产丝袜一区二区三区免费视频 | 久久久久国产精品 | 欧美精品久久久 | 国产精品视频一 | 国产午夜精品一区二区三区在线观看 | 日本一道本视频 | 国产精品久久二区 | 亚洲免费在线观看 | 成人1区2区| 欧美极品在线观看 | 午夜男人天堂 | 久久国产高清 | 亚洲日本乱码在线观看 | 国产精品久久久久婷婷二区次 | 午夜电影网 | 国产日韩久久久久69影院 | 国产精品国产馆在线真实露脸 | 国产精品久久久久av | 一级黄色毛片免费 | 精品亚洲一区二区三区四区五区高 | 在线播放国产一区二区三区 | 亚洲成人一区二区 | 久久精品 | 欧美日韩国产精品一区 | 日韩专区中文字幕 | 一区二区三区观看视频 | 国产精品久久国产精品 | 三级免费网 | 一区二区三区四区视频 | 精品视频在线观看 | 精品国产一区二区三区性色av | 日本在线网站 | 精品久久网 | 在线一区| 综合久久av | 欧美日韩在线视频一区 | 亚洲国产一区二区在线 | 欧美日本免费 | 国产视频一区在线 | 91久久| 亚洲欧美精品久久 |