嵌入式ADC

一、使用ADS1.2平台设计程序,并具有以下功能:(40分)

要求:在Micro 2440 平台下实现,A/D转换后信号输入字符控制蜂鸣器发声及LED灯发光。

当扭动可调电阻阻值由小变大,得到变化的模拟输入量,控制LED1-LED4灯依次点亮并且蜂鸣器发生依次变得急促。

(汇编语言,C、汇编混合编程都可以)

 

     AREA XIE,CODE,READONLY 
  ENTRY 
      ldr r13, =0x1000 
     IMPORT Main 
      b Main 
     END










#define GPBDAT (*(volatile unsigned*)0x56000014)
#define GPBCON (*(volatile unsigned*)0x56000010)
#define GPBUP (*(volatile unsigned*)0x56000018)


#define rADCCON (*(volatile unsigned*)0x58000000)  
#define rADCDAT0 (*(volatile unsigned*)0x5800000C)// 数据转换寄存器


int read()
{
   rADCCON=(1<<14)|(19<<6)|(0<<3);
   rADCCON|=0X01;
   while(rADCCON&0X01);   
     // 0001  启动A/D转换,转换开始时自动变为0  
      //如果结果为0,结束循环  结果为不为0,在验证下一个条件 


   while(!(rADCCON&0X8000));  
      //结果为0,表示正在转换中 取反为真,
      //结果非0  表示转换结束   取反为假 最高位为转换位 0 转换中, 1转换结束
   return((int)rADCDAT0&0X3FF);//保证范围在0X3FF之间
  
}




void delay(int n)
{
    int i,j;
    for(i=0;i     for(j=0;j<1000;j++)
    j=j+0;
}


int Main()
{
   int a=0;
  
   GPBUP=0X00;
   GPBCON=0X15400;
   GPBCON|=0X01;


   while(1)
  {  a=read();
  GPBDAT=0XFFF;
     if(a<100)
       {  
          GPBDAT=0XFCF;;
          delay(10000);
          GPBDAT-=1;
          delay(10000);
        }
     if(a<500&&a>=100)
       {  
          GPBDAT=0XF8F;
       
          delay(7000);
          GPBDAT-=1;
          delay(7000);
        }
     if(a<1000&&a>=500)
       {  
          GPBDAT=0XF0F;
          
          delay(4000);
          GPBDAT-=1;
          delay(4000);
          
        }
    if(a>=1000)
       {  
          GPBDAT=0X00F;
          
          delay(1000);
          GPBDAT-=1;
          delay(1000);
        }
      
   }
}


//(temp&0x01)&&!(temp&(1<<16))
//这个是条件语句temp&0x01  变量temp和0x01按位与,
//          得到一个结果,
//                        .
//!(temp&(1<<16)) 逻辑非语句,先验证temp&(1<<16)先把1向左位移16位,
//           得到的就结果,在后temp按位与,得到的结果条件temp&(1<<16) 取反
 //          结果为0,取反为真;结果非0,取反为假

你可能感兴趣的:(嵌入式,c/c++)