当前位置: 首页 > news >正文

济南网站建设山东聚搜网好评dede网站地图制作

济南网站建设山东聚搜网好评,dede网站地图制作,锦州网站建设排行榜,办公室装修图片大全STC15读取内部ID示例程序🎉本案例基于STC15F2K60S2为验证对象。 📑STC15 ID序列介绍 STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号,用…

STC15读取内部ID示例程序


  • 🎉本案例基于STC15F2K60S2为验证对象。

📑STC15 ID序列介绍

  • STC15系列STC最新一代STC15系列单片机出厂时都具有全球唯一身份证号码(ID号)。最新STC15系列单片机的程序存储器的最后7个字节单元的值是全球唯一ID号,用户不可修改,但IAP15系列单片机的 整个程序区是开放的,可以修改,建议利用全球唯一ID号加密时,使用STC15系列单片机,并将EEPROM功能使用上,从EEPROM起始地址0000H开始使用,可以有效杜绝对全球唯一ID号的攻击。
  • 除程序存储器的最后7个字节单元的内容是全球唯一ID号外,单片机内部RAM的F1H ~ F7H单元 (对于STC15F100W系列及STC15W104SW系列单片机是内部RAM的71H - 77H单元)的内容也为全球唯一ID号。用户可以在单片机上电后读取内部RAM单元F1H - F7H (对于STC15F100W系列及STC15W104SW系列单片机是内部RAM单元71H - 77H)连续7个单元的值来获取此单片机的唯一身份证号码(ID号 ), 使用“ MOV @Ri” 指令来读取。如果用户需要用全球唯一ID号进行用户自己的软件加密,建议用户在程序的多个地方有技巧地判断自己的用户程序有无被非法修改,提高解密的难度,防止解密者修改程序,绕过对全球唯一ID号的判断。
  • 使用程序区的最后7个字节的全球唯一ID号比使用内部RAM单元 F1H - F7H (或内部RAM单元71H - 77H)的全球唯一ID号更难被攻击。建议用户使用程序区最后7个字节的全球唯一ID号,而不要使用内部RAM单元 F1H - F7H (或内部RAM单元71H - 77H)的全球唯一ID号。

🌼有关ID号在大批量生产中的应用方法

  1. 先烧一个程序进去(选择下次下载用户程序时,不擦除用户EEPROM区);
    在这里插入图片描述
  2. 读程序区的ID号(STC15系列是程序区的最后7个字节),经用户自己的复杂的加密算法对程序区的ID号加密运算后生成一个新的数——用户自加密ID号,写入STC15系列用户EEPROM区的EEPROM。
  3. 再烧一个最终出厂的程序进去(选择下次下载用户程序时将用户EEPROM区一并擦除),如下图所示:
    在这里插入图片描述
  4. 在用户程序区的多处读程序区的ID号和用户自加密ID号比较(经用户自己的复杂的解密算法解密后),如不对应,则6个月后随机异常,或200次开机后随机异常最终出厂的程序不含加密算法。
  5. 另外,在程序区的多个地方判断用户自己的程序是否被修改,如被修改,则6个月后随机异常,或200次开机后随机异常,将不用的用户程序区用所谓的有效程序全部填满。

📝示例程序

  • ✨以STC15F2K60S2为例,主时钟频率:22.1184MHz,波特率:115200
    在这里插入图片描述
//#include "reg51.h"
#include <STC15F2K60S2.H>
//#include "STC15Fxxxx.H"
//typedef unsigned char u8;
//typedef unsigned    int u16;#define FOSC 22118400L          //系统频率
#define BAUD 115200             //串口波特率#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7
bit busy;
//sfr T2H = 0xd6; //定时器2高8位
//sfr T2L = 0xd7; //定时器2低8位
//sfr AUXR = 0x8e; //辅助寄存器
#define ID_ADDR_RAM 0xf1 //ID号的存放在RAM区的地址为0F1H
//ID号的存放在程序区的地址为程序空间的最后7字节
//#define ID_ADDR_ROM 0x03f9 //1K程序空间的MCU(如STC15F201EA, STC15F101EA)
//#define ID_ADDR_ROM 0x07f9 //2K程序空间的MCU(如STC15F402AD,
//STC15F202EA, STC15F102EA)
//#define ID_ADDR_ROM 0x0bf9 //3K程序空间的MCU(如STC15F203EA, STC15F103EA)
//#define ID_ADDR_ROM 0x0ff9 //4K程序空间的MCU(如STC15F404AD, STC15F204EA,
//STC15F104EA)
//#define ID_ADDR_ROM 0x13f9 //5K程序空间的MCU(如 STC15F206EA, STC15F106EA)
//#define ID_ADDR_ROM 0x1ff9 //8K程序空间的MCU(如STC15F2K08S2, STC15F1K08AD,
//STC15F408AD)
//#define ID_ADDR_ROM 0x27f9 //10K程序空间的MCU(如STC15F410AD)
//#define ID_ADDR_ROM 0x2ff9 //12K程序空间的MCU(如STC15F408AD)
//#define ID_ADDR_ROM 0x3ff9 //16K程序空间的MCU(如STC15F2K16S2,
//STC15F1K16AD)
//#define ID_ADDR_ROM 0x4ff9 //20K程序空间的MCU(如STC15F2K20S2)
//#define ID_ADDR_ROM 0x5ff9 //24K程序空间的MCU
//#define ID_ADDR_ROM 0x6ff9 //28K程序空间的MCU
//#define ID_ADDR_ROM 0x7ff9 //32K程序空间的MCU(如STC15F2K32S2)
//#define ID_ADDR_ROM 0x9ff9 //40K程序空间的MCU(如STC15F2K40S2)
//#define ID_ADDR_ROM 0xbff9 //48K程序空间的MCU(如STC15F2K48S2)
//#define ID_ADDR_ROM 0xcff9 //52K程序空间的MCU(如STC15F2K52S2)
//#define ID_ADDR_ROM 0xdff9 //56K程序空间的MCU(如STC15F2K56S2)
#define ID_ADDR_ROM 0xeff9 //60K程序空间的MCU(如STC15W4K60S4,STC15F2K60S2)//-----------------------------------------
void InitUart();
void SendUart(u8 dat);
//-----------------------------------------
void main()
{u8   idata *iptr;u8 code *cptr;u8   i;P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;ACC = P_SW1;ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
//	S1_USE_P30P31();        //UART1 使用P30 P31口   默认InitUart(); //串口初始化iptr = ID_ADDR_RAM; //从RAM区读取ID号for (i = 0; i < 7; i++) //读7个字节{SendUart(*iptr++); //发送ID到串口}cptr = ID_ADDR_ROM; //从程序区读取ID号for (i = 0; i < 7; i++) //读7个字节{SendUart(*cptr++); //发送ID到串口}while (1); //程序终止
}
/*----------------------------
串口初始化
----------------------------*/
void InitUart()//115200bps@22.1184MHz
{SCON = 0x50;		//8位数据,可变波特率AUXR = 0x40;                //定时器1为1T模式TMOD = 0x00;                //定时器1为模式0(16位自动重载)TL1 = (65536 - (FOSC/4/BAUD));   //设置波特率重装值TH1 = (65536 - (FOSC/4/BAUD))>>8;TR1 = 1;                    //定时器1开始启动ES = 1;                     //使能串口中断EA = 1;}
/*----------------------------
发送串口数据
----------------------------*/
void SendUart(u8 dat)
{while (busy);               //等待前面的数据发送完成ACC = dat;                  //获取校验位P (PSW.0)busy = 1;SBUF = ACC;                 //写数据到UART数据寄存器
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
//    if (RI)
//    {
//        RI = 0;                 //清除RI位
//    }if (TI){TI = 0;                 //清除TI位busy = 0;               //清忙标志}
}

📚程序源码

复制这段内容后打开百度网盘手机App,操作更方便哦
链接: https://pan.baidu.com/s/1z5i6KBB_6B397_o8QUTEMw
提取码: eaqb
http://www.yayakq.cn/news/380515/

相关文章:

  • 温州网站的优化怎么让网站快速收录
  • 甘肃省城乡住房建设厅网站首页后台模板链接前台网站
  • dedecms网站地图制作wordpress poiplayer
  • 中企动力制作的网站网站建设整体解决方案
  • 哪些网站做推广比较好安徽网
  • 学习做网站的wordpress 分享后下载
  • 建设部网站办事大厅单页网站制作建站仿站
  • 重庆企业做网站网络运维app系统
  • 哪些网站可以做推广wordpress增加底部导航栏
  • 苍南公司网站建设ui设计自学教程500集
  • 武威网站制作公司服务电话大连网站外包
  • 做平台网站要什么条件wordpress分页上一页
  • 家教网站模板下载wordpress页面内容设计
  • 上海装饰公司网站建设网站开发项目企划书
  • 做网站怎样赚卖流量上海外贸50强企业
  • 陕西建站公司百度极速版下载安装最新版
  • 如何建设废品网站手机系统流畅神器
  • 画册设计流程网络优化公司排名
  • 网站制作公石家庄新闻发布会最新消息
  • 长春网站优化常识在线oa免费crm
  • 中小企业网站建设服务公司wordpress单页下载插件
  • php网站源代码修改南京做网站xjrkj
  • 网站制作乛薇建设网站需要多少钱济南兴田德润地址
  • 设计网站大全软件搭建网站费用
  • 大连网站设计收费标准如何用电子邮箱做网站
  • 公司网站开发报价拿自己爱人做网站
  • 酒店宾馆型网站开发福建住房和城建设网站
  • 网站建设 部署与发布试题莱芜金点子最新招工招聘启事
  • 地方门户cms车辆优化管理专业网站
  • 有做翻译英文网站做当地门户网站多少钱