|
- //单片机STC15F104E获取全球唯一ID序列号并且模拟软件串口发送数据 晶振频率:12Mhz 串口波特率:9600 无校验位 停止位1位
- #include"reg51.h" //定义头文件reg51.h
- #include"intrins.h" //定义头文件intrins.h
- #define ID_ADDR_ROM 0x0ff9 //序列号地址
- unsigned char code *cptr; //序列号
- unsigned char code hex[16]={ //十六进制字符串数据
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
- };
- sbit txd=P3^1; //数据发送口
- sfr AUXR = 0x8E; //定义AUXR寄存器
- void delay_uart(){ //延时时间1除以波特率秒
- unsigned char a,b;
- for(b=2;b>0;b--)
- for(a=154;a>0;a--);
- }
- void txd_data(unsigned char i){ //发送数据
- unsigned char j=1;//控制移位
- unsigned char k=8;//控制循环次数
- delay_uart();//延时时间
- txd=0; //发送起始位,低电平
- while(k--){ //下面循环8次
- delay_uart();//延时时间
- txd=(i&j)/j; //发送数据
- j<<=1; //左移1位,发送下1位数据
- }
- delay_uart();//延时时间
- txd=1; //发送停止位
- }
- void send_text(unsigned char *text){ //发送字符串
- for(;*text!=0;text++){ //遇到停止符0结束发送
- txd_data(*text); //发送数据
- }
- }
- void main(){ //主函数
- unsigned char i=0;//计数
- AUXR |= 0x80;
- cptr = ID_ADDR_ROM;//获取序列号
- send_text("芯片出厂序列号:\n");
- for(i=0;i<=6;i++){ //发送序列号
- txd_data(hex[(cptr[i]&0xF0)/0x10]);
- txd_data(hex[cptr[i]&0xF]);
- }
- while(1); //进入死循环
- }
复制代码
|
|