📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2006-01-11
** Last Version: v1.0
** Description: MagicARM2410实验箱的基础实验---ADC实验。
** 使用AIN0和AIN1测量两路直流电压,并将测量结果通过UART0向PC机发送。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2006-01-11
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "config.h"
// 定义用于保存ADC结果的变量
uint32 adc0, adc1;
// 定义显示缓冲区
char disp_buf[50];
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
** 延时时间与系统时钟有关。
** Input: dly 延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
// 定义ADC转换时钟 (2MHz)
#define ADC_FREQ (2*1000000)
/*********************************************************************************************************
** Function name: ReadAdc
** Descriptions: ADC转换函数
** Input: ch 转换通道(0--7)
** Output: 返回转换结果
** Created by: 黄绍斌
** Created Date: 2006-01-11
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint32 ReadAdc(uint32 ch)
{
int i;
ch = ch & 0x07; // 参数过滤
// PRSCEN=1,使能分频器
// PRSCVL=(PCLK/ADC_FREQ - 1),即ADC转换时钟为ADC_FREQ
// SEL_MUX=ch,设置ADC通道
// STDBM=0,标准转换模式
// READ_START=0,禁止读(操作后)启动ADC
// ENABLE_START=0,不启动ADC
rADCCON = (1<<14)|((PCLK/ADC_FREQ - 1)<<6)|(ch<<3)|(0<<2)|(0<<1)|(0<<0);
rADCTSC = rADCTSC & (~0x03); // 普通ADC模式(非触摸屏)
for(i=0; i<100; i++);
rADCCON = rADCCON | (1<<0); // 启动ADC
while(rADCCON & 0x01); // 等待ADC启动
while(!(rADCCON & 0x8000)); // 等待ADC完成
return (rADCDAT0 & 0x3ff); // 返回转换结果
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 使用AIN0和AIN1测量两路直流电压,并将测量结果通过UART0向PC机发送。
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
int vin0, vin1;
UART_Select(0); // 选择UART0
UART_Init(); // 初始化UART0
while(1)
{
// 进行A/D转换
adc0 = ReadAdc(0);
adc1 = ReadAdc(1);
// 通过串口输出显示
vin0 = (adc0*3300) / 1024; // 读算实际电压值 (mV)
vin1 = (adc1*3300) / 1024;
sprintf(disp_buf, "AIN0 is %d mV, AIN1 is %d mV \n", vin0, vin1);
UART_SendStr(disp_buf);
// 延时
DelayNS(20);
}
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -