/*STC MCU都具有唯一的MCU ID号,一般保存在RAM的0xF1-F7区域,对于15系列,同时会保存在ROM的最后7个字节中。因此,可以通过字符指针,获取MCU ID值,用于程序的加密。
*/
// 读取 STCMCU 的唯一性ID的例程
#define ID_ADDR_RAM 0xF1 //ID号的存放在RAM区的地址为0F1H
#define ID_ADDR_ROM 0x0FF9 //4K程序空间的MCU(如STC15F204EA, STC15F104EA)
unsigned char UID[8];
#define RAMID 0
#define ROMID 1
char *GetMCUID(unsigned char nType);
//获取 MCU ID.
char *GetMCUID(unsigned char nType)
{
unsigned char idata *iptr;
unsigned char code *cptr;
unsigned char i;
unsigned char bb[8];
if (nType == RAMID) {
iptr = ID_ADDR_RAM; //从RAM区读取ID号
for (i=0; i<7; i++) { //读7个字节
UID[i] =*iptr++;
sprintf(bb, "%02x",(int)UID[i]); //***在 Keil C51中,如果想得到正确的2字符十六进制数输出,必须使用(int)形式做转换。
SendStr(bb);
}
}
else {
cptr = ID_ADDR_ROM; //从程序区读取ID号
for (i=0; i<7; i++) { //读7个字节
UID[i] =*cptr++;
sprintf(bb, "%02X",(int)UID[i]);
SendStr(bb);
}
}
UID[7]=0;
return UID;
}