请问STC8A8K64D4的内部1.19V的地址是多少?
本帖最后由 jwd 于 2023-3-27 20:42 编辑如题,我看手册上面有2个不同的地址,最新的手册
file:///C:\Users\jwd\AppData\Roaming\Tencent\Users\315915734\TIM\WinTemp\RichOle\L%Y72UY(BP(DCN4BIH5OIGE.pngfile:///C:\Users\jwd\AppData\Roaming\Tencent\Users\315915734\TIM\WinTemp\RichOle\C{ROO]LQ{%`A~L22GU{9__L.png
神农鼎 发表于 2023-3-27 21:50
我实际测试是0xfdf7才对,测试代码
//----------------------------------------------
//需要使能“在程序区的结束处添加重要测试参数”选项
//----------------------------------------------
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
sfr AUXR = 0x8e;
sfr P_SW2 = 0xba;
bit busy;
int *BGV;
void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
busy = 0;
}
if (RI)
{
RI = 0;
}
}
void UartInit()
{
SCON = 0x50;
TMOD = 0x00;
TL1 = BRT;
TH1 = BRT >> 8;
TR1 = 1;
AUXR = 0x40;
busy = 0;
}
void UartSend(char dat)
{
while (busy);
busy = 1;
SBUF = dat;
}
void main()
{
BGV = (int code *)0xfdf7; // STC8A8K64S4A10
// BGV = (int code *)0xeff7; // STC8A8K60S4A10
// BGV = (int code *)0x7ff7; // STC8A8K32S4A10
// BGV = (int code *)0x3ff7; // STC8A8K16S4A10
UartInit();
ES = 1;
EA = 1;
P_SW2=0x80;
while (1)
{
Delay100ms();
UartSend(*BGV >> 8); //读取Bandgap电压的高字节
UartSend(*BGV); //读取Bandgap电压的低字节
}
}
本帖最后由 STC32位8051芯片 于 2023-3-28 10:27 编辑
可以用STC-ISP软件里面的范例程序试试呢
STC32位8051芯片 发表于 2023-3-28 10:23
可以用STC-ISP软件里面的范例程序试试呢
我就是用那个测试的 用我的建议 CHIPID读,后续有 CHIPID的会过渡到只能从CHIPID读
===大家尽量以我回答的为第一优先测试 本帖最后由 jwd 于 2023-3-29 11:03 编辑
神农鼎 发表于 2023-3-28 11:21
用我的建议 CHIPID读,后续有 CHIPID的会过渡到只能从CHIPID读
===大家尽量以我回答的为第一优先测试 ...我使用CHIPID地址读出来的不对,我用打狗棒的CHIPID地址读出来的对
#include "STC8A8K64D4.h"
#include "intrins.h"
#include "stdio.h"
#define FOSC 24000000UL
#define BRT (65536 - FOSC / 57600 / 4)
#define VREFH_ADDRCHIPID7
#define VREFL_ADDRCHIPID8
int BGV;
void ADCInit()
{
P_SW2 |=0x80;
ADCTIM=0x3f;
P_SW2 &=0x7f;
ADCCFG=0x2f;
ADC_CONTR=0x8f;
}
int ADCRead()
{
int res;
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
res=(ADC_RES<<8) | ADC_RESL;
return res;
}
void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
// busy = 0;
}
if (RI)
{
RI = 0;
}
}
void UartInit()
{
SCON = 0x50;
TMOD = 0x00;
TL1 = BRT;
TH1 = BRT >> 8;
TR1 = 1;
AUXR = 0x40;
// busy = 0;
}
char putchar(char c)
{
SBUF = c;
while (TI == 0);
TI = 0;
return c;
}
int res,i,vcc;
void main()
{
BGV = (VREFH_ADDR<<8)+VREFL_ADDR;
// BGV = (int idata *)0xef;
// BGV = (int code *)0xfdf7; // STC8A8K64S4A10
// BGV = (int code *)0xeff7; // STC8A8K60S4A10
// BGV = (int code *)0x7ff7; // STC8A8K32S4A10
// BGV = (int code *)0x3ff7; // STC8A8K16S4A10
UartInit();
ADCInit();
ES = 1;
EA = 1;
// P_SW2=0x80;
while (1)
{
Delay100ms();
ADCRead();
ADCRead();
res=0;
for(i=0;i<8;i++)
{
res+=ADCRead();
}
res>>=3;
vcc=(int)(4096L*BGV/res);
printf("基准电压是:%d ",BGV);
printf("电源电压是:%d\n",vcc); //读取vcc电压的高字节
}
}
另外,请问,是不是所有stc的BGV都对应CHIPID7,8 jwd 发表于 2023-3-29 11:06
另外,请问,是不是所有stc的BGV都对应CHIPID7,8
目前有CHIPID的型号的BGV都对应CHIPID7,8 本帖最后由 jwd 于 2023-3-29 14:23 编辑
STC32位8051芯片 发表于 2023-3-29 11:39
目前有CHIPID的型号的BGV都对应CHIPID7,8
请问,我上面用chipid读的程序有什么问题吗?
页:
[1]
2