MEGA16的AD的通道转换问题

2019-03-24 20:54发布

我想用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"};
uchar table2[]={"0000  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) 2012-5-3 21:10 上传 点击文件名下载附件
顺便贴下lcd1602的程序~ lcd.doc (34 KB, 下载次数: 11) 2012-5-3 21:10 上传 点击文件名下载附件 此帖出自小平头技术问答
0条回答

一周热门 更多>