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

📄 main.c

📁 MiniARM2200程序基础包2:脉宽调制、ADC
💻 C
字号:
/****************************************************************************
* 文 件 名:main.c
* 功    能:用ADC通道0、1电压ADC转换,并把结果发送到串口。
* 说    明:将跳线器JP3短接,将小于3.3V的电压加至P0.27、P0.28测量电压。
****************************************************************************/
#include "config.h"
#include "uart0.h"
#include "stdio.h"

char UART0_Buff[256];

void  DelayNS(uint32  dly);

/****************************************************************************
* 函数名称: main
* 功能描述: 主函数
****************************************************************************/
int main (void)
{   uint32 ADC_Data;
    
	PINSEL0 = 0x00000005;				            // 设置I/O连接到UART0
    PINSEL1 = 0x01400000;						    // 设置P0.27、P0.28连接到ADC0、ADC1
	UART0_Init(115200);                             // 串口初始化

    ADCR = (1 << 0)                                 // SEL = 1 ,选择通道0
         | ((Fpclk / 1000000 - 1) << 8)             // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
         | (0 << 16)                                // BURST = 0 ,软件控制转换操作
         | (0 << 17)                                // CLKS = 0 ,使用11clock转换
         | (1 << 21)                                // PDN = 1 , 正常工作模式(非掉电转换模式)
         | (0 << 22)                                // TEST1:0 = 00 ,正常工作模式(非测试模式)
         | (1 << 24)                                // START = 1 ,直接启动ADC转换
         | (0 << 27);                               // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
    DelayNS(10); 				
    ADC_Data = ADDR;							    // 读取ADC结果,并清除DONE标志位
   
    while(1)
    {  
        ADCR = (ADCR&0x00ffff00)|0x01|(1 << 24);	// 设置通道0,并进行第一次转换
        while( (ADDR&0x80000000)==0 );	            // 等待转换结束
        ADCR = ADCR | (1 << 24);					// 再次启运转换
        while( (ADDR&0x80000000)==0 );              // 等待转换结束
        ADC_Data = ADDR;							// 读取ADC结果
        ADC_Data = (ADC_Data>>6) & 0x3ff;           // 提取AD转换值
        sprintf(UART0_Buff, "ADC0=%d\n\r", ADC_Data);
        UART0_SendStr(UART0_Buff); 
        DelayNS(500); 	   
         
        ADCR = (ADCR&0x00ffff00)|0x02|(1 << 24);	// 设置通道1,并进行第一次转换
        while( (ADDR&0x80000000)==0 );			    // 等待转换结束
        ADCR = ADCR | (1 << 24);					// 再次启运转换
        while( (ADDR&0x80000000)==0 );              // 等待转换结束
        ADC_Data = ADDR;							// 读取ADC结果
        ADC_Data = (ADC_Data>>6) & 0x3ff;           // 提取AD转换值
        sprintf(UART0_Buff, "ADC1=%d\n\r", ADC_Data);
        UART0_SendStr(UART0_Buff); 
        DelayNS(500); 	  
    }

    return(0);
}

/****************************************************************************
* 函数名称: DelayNS()
* 功能描述: 长软件延时
* 入口参数: dly		延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void  DelayNS(uint32  dly)
{   uint32  i;

    for(; dly>0; dly--) 
    {
        for(i=0; i<5000; i++);
    }
}

⌨️ 快捷键说明

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