ZRH 发表于 2024-5-13 16:30:55

请教15W404AS P1.7读外部电压,移植到15W408AS读不准

本帖最后由 ZRH 于 2024-5-13 16:32 编辑

WORD code Vbg_ROM _at_ 0x0ff7;
//WORD idata Vbg_RAM_at_0xef;
#define ADC_POWER 0x80;
#define ADC_FLAG 0x10;
#define ADC_START 0x08;
#define ADC_SPEEDLL 0x00;
#define ADC_SPEEDL 0x20;
#define ADC_SPEEDH 0x40;
#define ADC_SPEEDHH 0x60;
uInt8 tim_t;

/*内部BandGap 参考电压约为1.25V*/
void ADC_Vx(){
    uInt16 ADCbg;
        uInt16 ADCx;
        uInt16 Vx;
        uInt8 tmp_ADC;
        ADCbg=0;
        ADCx=0;
                /*t通过ADC的第0通道测试外部输入电压的ADC测量值*/
                ADC_RES=0;//清除结果寄存器
                P1ASF=0x00; /*不设P1ASF,从的第9通道读取内部Bandgap电压的ADC测量值*/
      ADC_CONTR=0x80;        //        ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
                Delay1ms();    //ADC上电后延时
          ADC_CONTR=0x88;//ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;
                ;//_NOP_();//等待4个NOP
                ;//_NOP_();
                ;//_NOP_();
                ;//_NOP_();               
                        while(!(ADC_CONTR & 0x10));//while(~(ADC_CONTR&ADC_FLAG)){;}//等待ADCZ转换完成
                ADC_CONTR&=~ADC_FLAG;                   //清除ADC标志
                ADCbg=ADC_RES;//ADCx=ADC_RES;
                //ADCbg = (((uInt16)ADC_RES << 2)|((uInt16)ADC_RESL&3)); //ADCbg=ADC_RES;

        /*t通过ADC的第0通道测试外部输入电压的ADC测量值*/
        ADC_RES=0;//清除结果寄存器
        P1ASF=0x80; /*设P1ASF,从的第7通道读取外部输入电压的ADC测量值*/
        ADC_CONTR=0x87;
        //Delay1ms();    //ADC上电后延时
    ADC_CONTR=0x8f;//        ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;
        ;//_NOP_();//等待4个NOP
        ;//_NOP_();
        ;//_NOP_();
        ;//_NOP_();
        while(!(ADC_CONTR & 0x10));//        while(~(ADC_CONTR & ADC_FLAG));//等待ADCZ转换完成
        ADC_CONTR&=~ADC_FLAG;          //清除ADC标志
        ADCx=ADC_RES;//ADCx= (((uInt16)ADC_RES << 2)|((uInt16)ADC_RESL&3));//ADCx=ADC_RES;
        /*t通过公式计算外部输入的实际电压值*/
        //Vx=Vbg_RAM*ADCx/ADCbg;   // 使用RAM中的Bandgap的电压参数进行计算
      // Vx=Vbg_ROM*ADCx/ADCbg;   // 使用ROM中的Bandgap的电压参数进行计算
      tmp_ADC=Vbg_ROM/ADCbg;
   Vx=tmp_ADC*ADCx;
   
        /*处理计算结果
        */
       
        /*-5°~+17°附常温增益值 */
        if((Vx>450)&&(Vx<670)){
                da_c1=0;
                da_c2=1;
                }
        /*低于-10°附低温增益值 */       
        if((Vx<400)&&(Vx>100)){
                da_c1=1;
                da_c2=1;
                }
        /*高于22°附高温增益值 */               
        if(Vx>720){   
                da_c1=0;
                da_c2=0;
                }
                               
}


ZRH 发表于 2024-5-13 16:32:08

本帖最后由 ZRH 于 2024-5-13 16:33 编辑

1

AI-32位8051 发表于 2024-5-13 16:50:12

本帖最后由 STCAI-32位8051 于 2024-5-13 16:51 编辑



可以先用范例程序测试;另外STC15W404AS核STC15W408AS 存储地址是不同的,需要注意

ZRH 发表于 2024-5-13 17:20:05

谢谢,地址改了,解决了

AI-32位8051 发表于 2024-5-14 09:45:47

ZRH 发表于 2024-5-13 17:20
谢谢,地址改了,解决了

{:handshake:}{:handshake:}
页: [1]
查看完整版本: 请教15W404AS P1.7读外部电压,移植到15W408AS读不准