unsigned int ADCData;
unsigned char ADCBuff[6];
/*******************************************************************************
**函数名称:void ADC_Data_Read(unsigned int *AD_Value)
**功能描述:读取ADC完成一次模数转换结果
**入口参数:unsigned int *AD_Value
*AD_Value ->读取ADC采样数据的指针
**输出:无
*******************************************************************************/
void ADC_Data_Read(unsigned int *AD_Value)
{
ADC_CR1_bit.ADON = 1; //启动ADC
while(ADC_CSR_bit.EOC == 0); //等待转换结束
*AD_Value = ADC_DRH; //先读取高8位
*AD_Value = (unsigned int)((*AD_Value << 8) + ADC_DRL); //高8位与低8位相加,凑成16位数据
}
/* 主函数 */
int main(void)
{
asm("sim"); //关闭系统总中断
CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 内部时钟 = 16Mhz
UART1_Init(9600); //调用串口初始化函数,并设置波特率为9600 bps
ADC_Init(); //调用ADC初始化函数
Timer4Init(); //初始化定时器4
asm("rim"); //打开系统总中断
while(1)
{
if(adcflag == 1) //1秒定时时间到对使能ADC进行采样
{
asm("sim"); //关系统总中断
ADC_Data_Read(&ADCData); //读取ADC的采样数值
Uart_SendString("ADC_DATA = " , 11); //发送字符串"ADC_DATA = "
ADCBuff[3] = ADCData % 10 + '0'; //转换成ASCII码
ADCBuff[2] = ADCData % 100 / 10 + '0';
ADCBuff[1] = ADCData / 100 % 10 + '0';
ADCBuff[0] = ADCData / 1000 + '0';
ADCBuff[4] = 0x0d; //换行字符
ADCBuff[5] = 0x0a;
Uart_SendString(ADCBuff , 6); //向PC机发送ADC采样数值
adcflag = 0; //ADC采样标志清除
asm("rim"); //开系统总中断,准备下次ADC采样
}
}
}
这是例程代码。这段代码中的定义的ADCData 是8位的。可是把adc 转换后的数据8+8位放到&ADCData这个地址,这还能理解,在主函数里面直接把ADCData来转换为十进制这样不对吧。
|