8g1k08 替换 15w408as ADC功能不正常
用8g1k08 替换 15w408as后,adc部分总是出现异常,有时候能读取正确,有时错误,部分代码如下,请指教8g1k08 adc 部分代码
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x20 //ADC完成标志
#define ADC_START 0x40 //ADC起始控制位
#define VOLChlA 0x06
#define VOLChlB 0x07
void AdcDeviceInit(void)
{
P_SW2 |= 0x80;
ADCTIM = 0x2f; /*内部时序0 01 01111 */
P_SW2 &= 0x7f;
ADCCFG = 0x0f; /*左对齐,SPEED设为8*/
ADC_RES = 0;
ADC_RESL = 0;
EADC = 1;
PADC = 1;
}
替换的15w408as 部分代码
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
void AdcDeviceInit(void)
{
P1ASF = 0xc0;//11000000
CLK_DIV |= 0x00;
ADC_RES = 0;
ADC_RESL = 0;
EADC = 1;
PADC = 1;
} 你直接使用 STC8G的参考程序,和STC15W408AS不一样的
下载个最新的STC8G数据手册研究下
STC8G、STC8H的ADC有改进,初始化稍有不同。
#define ADC_START (1<<6) /* 自动清0 */
#define ADC_FLAG (1<<5) /* 软件清0 */
#define ADC_SPEED 3 /* 0~15, ADC时钟 = SYSclk/2/(n+1) */
#define RES_FMT (1<<5) /* ADC结果格式 0: 左对齐, ADC_RES: D9 D8 D7 D6 D5 D4 D3 D2, ADC_RESL: D1 D0 000000 */
/* 1: 右对齐, ADC_RES: 000000D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */
#define CSSETUP (0<<7) /* 0~1,ADC通道选择时间 0: 1个ADC时钟, 1: 2个ADC时钟,默认0(默认1个ADC时钟) */
#define CSHOLD (1<<5) /* 0~3,ADC通道选择保持时间(n+1)个ADC时钟, 默认1(默认2个ADC时钟) */
#define SMPDUTY 10 /* 10~31, ADC模拟信号采样时间(n+1)个ADC时钟, 默认10(默认11个ADC时钟) */
/* ADC转换时间: 10位ADC固定为10个ADC时钟, 12位ADC固定为12个ADC时钟.
P_SW2 |=0x80; //访问XSFR
P1n_pure_input(0x03); //设置要做ADC的IO做高阻输入
P3n_pure_input(0x7f); //设置要做ADC的IO做高阻输入
ADC_CONTR = 0x80 + 0; //ADC on + channel
ADCCFG = RES_FMT + ADC_SPEED;
ADCTIM = CSSETUP + CSHOLD + SMPDUTY;
页:
[1]