|
#include <intrins.h>
#define ADC_POWER 0x80 //ADC 电源控制位
#define ADC_FLAG 0x10 //ADC 中断标记
#define ADC_START 0x08 //ADC 运行允许位
#define ADC_SPEEDLL 0x00 //540 分频
#define ADC_SPEEDL 0x20 //360 分频
#define ADC_SPEEDH 0x40 //180 分频
#define ADC_SPEEDHH 0x60 //90 分频
unsigned int xdata ADC_Data[]={0,0,0,0,0,0,0,0}; //ADC转换结果
struct ADCs
{//串口1结构数据类型
unsigned char ASFS; //允许接收端口指示
unsigned char Speed:4; //允许接收端口指示
unsigned char Data_P:4; //当前转换端口指针
}ADCs;
//设置ADC转换
void InitADC()
{
ADCs.Speed=ADC_SPEEDHH; //ADC转换速度设置
P1ASF = 0xff; //P1口模拟输入设置
ADCs.Data_P=0; //设置初次转换的端口
ADC_RES = 0; //清除ADC转换结果位
ADC_RESL = 0; //清除ADC转换结果位
//ADC控制器,电源开,设置速度,设置当前转换口,开始转换
ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
_nop_();
_nop_();
_nop_();
_nop_(); //4个空操作延迟,必须包含库函数 #include "intrins.h"
EADC =1; //开ADC中断
EA =1; //开总中断
}
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &= !ADC_FLAG; //清ADC中断
ADC_Data[ADCs.Data_P]=ADC_RES;
ADC_Data[ADCs.Data_P]<<=2;
ADC_Data[ADCs.Data_P]|=ADC_RESL;
do
{
if(++ADCs.Data_P>7) ADCs.Data_P=0;
}while(ADCs.ASFS|1<<(ADCs.Data_P+1));
ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
}
|
|