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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5147|回復: 1
打印 上一主題 下一主題
收起左側

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

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

 各位大俠們,我想用ATmega128的內部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;
}

/*
*函數功能:ADC模塊的初始化程序
*輸入參數:無
*輸出參數:無
*返 回 值:無
*/
void init_adc()
{
  ADCSR=0X00;     //設置ADC前,禁止ADC
  ADMUX=BIT(REFS1)|BIT(REFS0);   //設置ADC內置參考電壓為2.56V的片內基準電源
  ADMUX|=BIT(ADLAR);     //ADC轉換結果左對齊,直接取ADCH的8位數據
  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轉換
  while (!(ADCSR&BIT(ADIF)));  //等待轉換結束
  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模擬運行了一下,發現就是死在了 while (!(ADCSR&BIT(ADIF)));  這邊,這說明AD一直都在轉換,就是沒轉換好!這是為什么呢?勞煩各位大俠留步幫小弟解決下!有勞了各位了……

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级片在线视频 | 久草视频观看 | 在线成人免费 | 国产午夜免费视频 | 毛片网站视频 | 99精品久久久久久中文字幕 | 精品福利在线观看 | 国产精品免费av | 色爱综合网 | 亚洲一区视频 | 天天干天天拍 | 亚洲一区二区三区四区在线 | 久久午夜精品 | 亚洲天堂一区 | 精品国产乱码久久久久久影片 | 在线观看黄色小视频 | 在线一区视频 | 黄色片在线 | 天天草天天干 | 伊人干综合 | 欧美无砖砖区免费 | 日韩精品三区 | 国产精品毛片av | 视频爱爱免费视频爱爱太爽 | 欧美成人三级 | 精品久久一区二区 | 青草视频在线观看免费 | 天天干夜夜爱 | 久久香蕉国产 | 国产成人精品毛片 | 日日夜夜精品视频免费 | 黄色91网站| 精品久久免费视频 | 欧美日韩一区二区三区视频 | www.国产.com| 一级欧美一级日韩 | 国产精品va | 超碰人人人人 | jlzzzjlzzz国产免费观看 | 成人福利网站 | 精品黑人一区二区三区国语馆 |