3382|0

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MEGA16的AD的通道转换问题 [复制链接]

我想用mega16自带的AD,且要两个通道不停转换,但不知道程序什么地方出问题了,用protues仿真AD通道只能一个变换,有时候甚至不能变换,求助

用的是icc+protues:

程序如下:

#include <iom16v.h>
#include "string.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
uint flag1=0,flag2=0,ms=0;
ulong addata=0,add1=0,add2=0;
uint kflag=0,kstate=1;
int a=0;

uchar table1[]={"0000  0\0"};
uchar table2[]={"0000  0\0"};

//延时程序:系统时钟:8M
static void delay1us(void)  //1us延时函数
{ asm("nop"); }             

static void delaynus(unsigned int n) //n us延时函数
{
 unsigned int i=0;
 for(i=0;i<n;i++)delay1us();
}

static void delay1ms(void) //1ms延时函数
{
 unsigned int i;
 for (i=0;i<1140;i++);
}

static void delaynms(unsigned int n)  // n ms延时函数
{
 unsigned int i=0;
 for (i=0;i<n;i++) delay1ms();
}
/*-------------定时器0定时中断初始化-----------*/
void timer0init(void){    //定时器0定时中断初始化 10m进入中断
TCNT0=178;
TCCR0=0x05;
TIMSK|=0x01;
TIFR|=(1<<TOV0);
}

void display1(ulong add){

table1[0]=add1/1000+'0';
table1[1]=add1%1000/100+'0';
table1[2]=add1%100/10+'0';
table1[3]=add1%10+'0';
DisplayListChar(0,0,table1);
}
void display2(ulong add){
table2[0]=add2/1000+'0';
table2[1]=add2%1000/100+'0';
table2[2]=add2%100/10+'0';
table2[3]=add2%10+'0';
DisplayListChar(0,1,table2);
}

void main()
{
   int a=0,b=0;
 /* //pwm初始化
   DDRD|=0x31;   //pwm端口初始化+确定键指示灯端口设置为输出
    TCCR1A=0x53;  //10位快速pwm,比较匹配时清零,N=256   COMA1:0为0时,端口为低电平
    TCCR1B=0x19;   
    OCR1A=13;    //pwmA匹配值
   // OCR1B=13;   //pwmB匹配值*/
 
 
 
   DDRA&=0xFC;   //ad端口初始化
   PORTA&=0xFC;
   ACSR |= 0x80;     //禁用模拟比较器

   //adc初始化
   ADMUX=0xC0;
   //SFIOR&=0x1F;
  // SFIOR|=0x80;  //选择T0溢出中断作为adc触发源
   ADCSRA=0x07;  //adc允许、自动触发转换、adc转换中断允许、adclk=62.5khz

   LCD_Init();//1602初始化
   DisplayListChar(0,0,table1);
   DisplayListChar(0,1,table2);
  SREG|=0x80; //开总中断
  delaynms(1000);
   while(1){
   ADMUX|=0xC2;
   ADCSRA=0xC7;
   while( (ADCSRA&0x40)==0);
   //delaynms(5);
   add1=ADCL;
   add1=add1+ADCH*256;
   ADCSRA=0x07; 
   display1(add1);
   delaynms(5000);
   ADMUX|=0xC1;
   ADCSRA=0xC7;
   while( (ADCSRA&0x40)==0);
  // delaynms(5);
   add2=ADCL;
   add2=add2+ADCH*256;
   ADCSRA=0x07;
   display2(add2);
   delaynms(5000);

   }
 
}  

这是protues仿真的电路:

ceshi3.rar (15.88 KB, 下载次数: 12)


顺便贴下lcd1602的程序~

lcd.doc (34 KB, 下载次数: 11)

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表