/*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; }