adc_sample.c

来自「ADC模块实现模数转换」· C语言 代码 · 共 97 行

C
97
字号
//测试功能:用事件管理器B的定时器4定时时间到来触发A/D采样的启动。采样时采用级连模式,一次做16个转换,转换通道分别是0~15。
//          转换完成后,在A/D中断服务子程序中将转换结果读出。该程序只作一次A/D采样。



#include  "ioreg.h"

int ADRESULT[16];
volatile unsigned int *j;
int i=0x00,cesi;

void inline disable()
{
      asm(" setc INTM");
}

void inline enable()
{
      asm(" clrc INTM");
}


int initial()
{
     asm(" setc SXM");
     asm(" clrc OVM");
     asm(" clrc CNF");
     SCSR1 = 0x81fe;
     WDCR = 0x0e8;
     
     IMR = 0x0001;
     IFR = 0x0ffff;
}

void ADINIT()
{
    T4CNT=0x0000;
    T4CON=0x170c;
    T4PR=0x75;
    GPTCONB=0x400;
    EVBIFRB=0x0ffff;
    ADCTRL1=0x10;
    ADCTRL2=0x8404;
    MAXCONV=0x0f;
    CHSELSEQ1=0x3210;
    CHSELSEQ2=0x7654;
    CHSELSEQ3=0xba98;
    CHSELSEQ4=0xfedc;
}

void ADSOC()
{
   T4CON=T4CON|0x40;
}

void interrupt nothing()
{
    return;
}

void interrupt adint()
{
    asm(" clrc SXM");
    j=RESULT0;
    for(i=0;i<=15;i++,j++)
    {
    	ADRESULT[i]=*j>>6;
    	cesi=ADRESULT[i];
    }
    ADCTRL2=ADCTRL2|0x4200;
    enable();
}

main()
{
    disable();
    initial();
    ADINIT();
    enable();
    ADSOC();
    while(1)
    {
    	
        if(i==0x10) break;
    }
    T4CON=T4CON&0x0ffbf;
    while(1)
    {
    	;
    }
}





                   

⌨️ 快捷键说明

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