单片机学习小组
直播中

123

10年用户 829经验值
擅长:可编程逻辑
私信 关注

N76E003读取间隙电压的精确计算值时,为什么还要条件选取,读两个rom的值?

N76E003读取间隙电压的精确计算值时,为什么还要条件选取,读两个rom的值?

例程如下:

void READ_BANDGAP()
{
                UINT8 BandgapHigh,BandgapLow,BandgapMark;
                double Bandgap_Value,Bandgap_Voltage_Temp;
        
    set_IAPEN;
    IAPCN = READ_UID;
    IAPAL = 0x0d;
    IAPAH = 0x00;
    set_IAPGO;
                BandgapLow = IAPFD;
                BandgapMark = BandgapLow&0xF0;
                        
                if (BandgapMark==0x80)
                {
                                BandgapLow = BandgapLow&0x0F;
                                IAPAL = 0x0C;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage_Temp = Bandgap_Value*3/4;
                                Bandgap_Voltage = Bandgap_Voltage_Temp - 33;                        //the actually banggap voltage value is similar this value.
                }
                if (BandgapMark==0x00)
                {
                                BandgapLow = BandgapLow&0x0F;
                                IAPAL = 0x0C;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage= Bandgap_Value*3/4;
                }
                if (BandgapMark==0x90)
                {
                                IAPAL = 0x0E;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapHigh = IAPFD;
                                IAPAL = 0x0F;
                                IAPAH = 0x00;
                                set_IAPGO;
                                BandgapLow = IAPFD;
                                BandgapLow = BandgapLow&0x0F;
                                Bandgap_Value = (BandgapHigh<<4)+BandgapLow;
                                Bandgap_Voltage= Bandgap_Value*3/4;
                }
                clr_IAPEN;
//                        printf ("\n BG High = %bX",BandgapHigh);
//                        printf ("\n BG Low = %bX",BandgapLow);
//                        printf ("\n BG ROMMAP = %e",Bandgap_Voltage);
}






回帖(1)

挽你何用

2024-1-11 16:02:31
= 0x00;                BandgapLow = IAPFD;                IAPAL = 0x0e;    IAPAH = 0x00;                BandgapHigh = IAPFD;                clr_IAPEN;                BandgapMark = (BandgapHigh<<8) + BandgapLow;                  set_IAPEN;    IAPCN = READ_UID;    IAPAL = 0x0f;    IAPAH = 0x00;              BandgapLow = IAPFD;                IAPAL = 0x10;    IAPAH = 0x00;                BandgapHigh = IAPFD;                clr_IAPEN;              Bandgap_Value = ((BandgapHigh<<8) + BandgapLow)*3.3/4096;//精确计算值              Bandgap_Voltage_Temp = Bandgap_Value * 1000;//单位转换,转为mV              if((Bandgap_Voltage_Temp<1100)||(Bandgap_Voltage_Temp>1300)){                Bandgap_Value = 1200.0; //如果测出来的值不在指定范围内,就用典型值1200mV代替             }             g_u16Bandgap_Value = (uint16_t)(Bandgap_Value*10);}

有两个ROM存储在N76E003芯片中,一个是校准值存储ROM,另一个是代码存储ROM。这里读取两个ROM是为了保证读取的是校准值存储ROM中的间隙电压值。另外,条件选取则是为了确保读取的值在指定范围内。如果读取值不在指定范围内,则使用典型值1200mV代替,保证计算的精确性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分