获取新塘单片机Nuvoton N76E003唯一识别码UID
1、【1】打开集成开发环境 Keil uVision4并建立好相应的工程,选择好正确的厂商数据包和单片机型号。建立工程过于简单这里就不说了,不会的小伙伴们可以自行百度搜索,百度上有很多例子,总有一个适合你的。
【2】设置输出.HEX文件。Option for target --> Output --> Creat HEX File勾选,就可以在编译时生成.HEX烧录文件。



2、【1】打开新塘Nuvoton N76E003数据手册查看与UID相关的资料和IAP命令。读取UID是通过IAP指令来操作的。
【2】第21章在应用编程(IAP)可以看到IAP命令。可以看到读取UID的地址是0X0000到0X000B,通过IAP就是读到UID。
【3】第26章辅助功能可以看到96位序列号UID详细说明。


3、【1】编写串口初始化和配置函数。波特率115200pbs、8位数据位、 1位停止位、 无校验位。
void InitialUART1_Timer3(u32 u32Baudrate)//Initial UART1 Timer3
{
P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK;
#ifdef FOSC_160000
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); //16 MHz
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1);
#endif
#ifdef FOSC_166000
RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); //16.6 MHz
RL3 = LOBYTE(65536 - (1037500/u32Baudrate));
#endif
set_TR3; //Trigger Timer3
TI_1 = 1; //For printf function must setting TI = 1
}
char putchar (char c)//UART1 printf
{
while (!TI_1);//wait until transmitter ready
TI_1 = 0;
SBUF_1 = c;//output character
return (c);
}
【2】编写获取UID函数,并将UID通过串口打印出来。
void vGet_MCU_UID(u8 *id)//vGet MCU UID
{
u8 i = 0;
GLOBAL_INTERRUPT_DISABLE;
IAP_ENABLE;
IAPAH = HIBYTE(MCU_UID_HEAD_ADDERSS);
IAPAL = LOBYTE(MCU_UID_HEAD_ADDERSS);
IAPCN = READ_UID;
for(i=0; i<12; i++)
{
IAP_START_PROGRAMEE;
id[i] = IAPFD;
IAPAL++;
}
IAP_DISABLE;
GLOBAL_INTERRUPT_ENABLE;
}
【3】编写简单的延时函数,顺便编写Keil相关的宏定义当兵通过串口打印出来。
void delay(u8 i)//delay
{
u8 x=0, y=0;
for(x=0; x<250; x++)
for(y=0; y<i; y++);
}
void vKeil_Macro_Information(void)//vKeil Macro Information
{
printf("Keil Macro Information:\r\n");
printf("uVersion : 4.72.9.0\r\n");
printf("Date1 : %s\r\n", __DATE__);
printf("Date2 : %s\r\n", __DATE2__);
printf("Time : %s\r\n", __TIME__);
printf("File : %s\r\n", __FILE__);
printf("Line : %d\r\n", __LINE__);
printf("Mode : %d\r\n", __MODEL__);
printf("Stdc : %d\r\n", __STDC__);
printf("uVersion C51 : %d\r\n", __C51__);
printf("Build Time : %s %s\r\n", __DATE__, __TIME__);
}
【4】编写主函数。编译下载看结果。
void main(void)
{
u8 i=0, datasID[12]={0};
Set_All_GPIO_Quasi_Mode;
InitialUART1_Timer3(115200);//InitialUART1_Timer3
vKeil_Macro_Information();//vKeil Macro Information
while(1)
{
vGet_MCU_UID(datasID);//vGet MCU UID
for(i=0; i<12; i++)
printf("%b02X ", datasID[i]);
printf("\r\n");
delay(250);
}
}






4、将程序通过NuMicro ICP Programming Tool软件下载到单片机做,然后通过串口调试助手XCOM V2.0查看效果。
Keil Macro Information:
uVersion : 4.72.9.0
Date1 : Jan 15 2019
Date2 : 01/15/19
Time : 15:40:55
File : ..\User\main.c
Line : 11799
Mode : 535
Stdc : 279
uVersion C51 : 952
Build Time : Jan 15 2019 15:40:55
02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00
02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00
其中02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00 为UID 正是我们所需要的


