⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3c44b0xadconverterapplication.txt

📁 采集AIN0和AIN1的信号
💻 TXT
字号:
#include “s3c44b0.h”     //头文件
 #define MAX_VALUE  0x3FF //数字量最大值
 #define MIN_VALUE   0x0//数字量最小值

 init _interrupt_handler((unsigned int)IsrIRQ);//中断初始化声明
 install_isr_handler(HandlerTIMER0,  (void *)timer0_isr);
 void timer0-isr(void)//中断处理程序声明
 test_adc();
 char display_buffer[6];//数码管现实缓冲区
 int refresh_index=0;
 unsigned char    seg7table[16]={0xc0,0cf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}  //定义0-f
void main (void)
{ rTCFG0=0x0;
rTCNTB0=0x2000;
rTCON=0x00000009;//T0自动重载&开始
rINTCON=0x7;// 屏蔽 IRQ,FIQ
 init _interrupt_handler((unsigned int)IsrIRQ);
 install_isr_handler(HandlerTIMER0,  (void *)timer0_isr);//时钟初始化

 iINTMOD=0x0;//设置中断为IRQ模式
 rINTMSK=0x07FFFFFF&(BIT_GLOBAL|BIT_TIMER0);
 rINTCON=0x5;
 test_adc();//采集数据
}
void test _ adc (void)
  {       int    loop_delay;   //延迟变量
          int    data;              //存放采集数据的变量
          int    get_index;    //采集次数变量
          int    buffer[4];     //存放最终的转换数据 

          rCLKCON=0x7FF8;//时钟初始化
          while(1){
           rADCPSR=0x14;  //设置ADCPSR的值
           data=0;     

for(get_index=0;get_index<16;get_index++)
      {   rADCCON=0x1|(0x0<<2);  //设置AIN0
          while(rADCCON&0x1); //为避免第一个标志位有错
          while(!(rADCCON&0x40); //检测ADC是否转换结束
          data+=rADCDAT; //读入转换值 
          for(loop_delay=1000;loop_delay;loop_delay--); //延迟
       }
       
       data/= (get_index-1); //取平均值
        value=trans_input(data);//数字量转模拟量
        buffer[0]=value/10;
        buffer[1]=value%10;
data=0;
          for(get_index=0;get_index<16;get_index++)
         {    rADCCON=0x1|(0x1<<2);   // 设置AIN1
              while(rADCCON&0x1); //为避免第一个标志位有错
              while(!(rADCCON&0x40); //检测ADC是否转换结束
              data+=rADCDAT;     //读入转换值           
           for(loop_delay=1000;loop_delay;loop_delay--);//延迟
          }
          data/= (get_index-1); //取平均值
          value=trans_input(data);
          buffer[2]=value/10;
          buffer[3]=value%10;
          for(loop_delay=1000;loop_delay;loop_delay--); //延迟
         }         

char trans_input (int value)
{if (value==MAX_value) return 50; //模拟信号范围0~50
 return (char)(value*50/MAX_VALUE-MINVALUE);}

void timer0-isr(void){//中断处理程序
 rI_ISPC=BIT_TIMER0;
if (refresh_index==2) refresh_index++;
if(refresh_index==5) refresh_index=0;
//设置数码管段选
*((unsigned char *) 0x0200006)=0x3f&(0x01<<refresh_index);
*((unsigned char *)0x0200004)=seg7table[display_buffer[refresh_index]]
Refresh_index++; }

void  init_interrupt_handle(unsigned int irq_handle)
{  
    int i;
   rINTPND=0x0;     //清除所有的未决的中断
   rI_ISPC=0x3FFFFFF;//每位置1,清除中断挂起条件
   for(i=0;i<256;i+4)  //清除中断表
   {*(unsigned int*)(_ISR_STARTADDRESS+i)=0;}
     *(unsigned int*)(HandleIRQ)=irq_handle;}

 void install_isr_handle(int irq_no,void* irq_routine)
{ *(unsigned int *)(irq_no)=(unsigned int)irq_routine;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -