打印
[PIC®/AVR®/dsPIC®产品]

请教一下写用户ID的指令

[复制链接]
1009|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
meeagle|  楼主 | 2019-8-10 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用户ID地址是8000h~8003h,PIC8位单片机,请问写用户ID的指令是什么?

使用特权

评论回复
沙发
捉虫天师| | 2019-8-13 08:47 | 只看该作者
看看手册上有没有说

使用特权

评论回复
板凳
捉虫天师| | 2019-8-13 08:49 | 只看该作者
static void eraseUserID(uint32_t addr)
{
    uint8_t GIEBitValue = INTCONbits.GIE;     // Save interrupt enable

    TBLPTRU = (uint8_t) ((addr >> 16) & 0xff);
    TBLPTRH = (uint8_t) ((addr >> 8) & 0xff);
    TBLPTRL = (uint8_t) (addr & 0xff);   
   
    EECON1bits.FREE = 1;
   
    EECON1bits.EEPGD = 1;
    EECON1bits.CFGS = 0;
    EECON1bits.WREN = 1;
   
    INTCONbits.GIE = 0; // Disable interrupts
    EECON2 = 0x55;
    EECON2 = 0xAA;
    EECON1bits.WR = 1;  // Erase like the wind!
    INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
    EECON1bits.WREN = 0;    // Disable writes to memory   
}

static void writeUserID(uint8_t *flashWrBufPtr)
{
    int i;
    uint8_t GIEBitValue = INTCONbits.GIE;     // Save interrupt enable


    TBLPTRU = (uint8_t) 0x20;
    TBLPTRH = (uint8_t) 0;
    TBLPTRL = (uint8_t) 0;  
        
    // Write 3 bytes which uses 6 LOC cells (1 nibble each).

    TABLAT = (flashWrBufPtr[0] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[0] & 0x0f);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[1] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[1] & 0x0f);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[2] >> 4);
    asm("TBLWT*+");
    TABLAT = (flashWrBufPtr[2] & 0x0f);
    asm("TBLWT*");
   
    TBLPTRU = (uint8_t) 0x20;
    TBLPTRH = (uint8_t) 0;
    TBLPTRL = (uint8_t) 0;  
   
    EECON1bits.EEPGD = 1;
    EECON1bits.CFGS = 0;
    EECON1bits.WREN = 1;
   
    INTCONbits.GIE = 0; // Disable interrupts
    EECON2 = 0x55;
    EECON2 = 0xAA;
    EECON1bits.WR = 1;  // Write like the wind!
    INTCONbits.GIE = GIEBitValue;   // Restore interrupt enable
    EECON1bits.WREN = 0;    // Disable writes to memory   
}

使用特权

评论回复
评论
meeagle 2019-8-15 00:55 回复TA
软件里是这样写,我想找烧录的语法,MPLAB里的 
地板
捉虫天师| | 2019-8-13 08:49 | 只看该作者
网上找的相关的代码,不知道是不是。

使用特权

评论回复
5
cdyyabc| | 2019-8-13 09:34 | 只看该作者
用烧写器写
理论上也可以用写FLASH的函数来写,但是,在程序运行过程中写这个地方,有什么意义呢?

使用特权

评论回复
6
CoolSilicon| | 2019-8-13 13:49 | 只看该作者
你看datasheet上有相关userid的写入/读写说明的, 可以在代码中来操作..

使用特权

评论回复
7
meeagle|  楼主 | 2019-8-15 00:53 | 只看该作者
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义,但是这只能写最后一位即000XH,前面三个数字不知道怎么写

使用特权

评论回复
8
CoolSilicon| | 2019-8-15 09:54 | 只看该作者
meeagle 发表于 2019-8-15 00:53
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义,但是这只能写最后一位即000XH,前面三个数字不 ...

你看IPE的user guide, 里面有关于这部分的说明的, 烧录的时候, 可以实现自动+1之类的操作...

使用特权

评论回复
9
meeagle|  楼主 | 2019-8-17 10:50 | 只看该作者
IPE是可以设置,看到了,谢谢。另外有一个问题,DEVICEID为什么不让改,改HEX烧了也一样没变,这样别人开盖不是很容易就**了吗?

使用特权

评论回复
10
meeagle|  楼主 | 2019-8-17 17:26 | 只看该作者
有没有方法可以擦写DEVICE ID的?或者破坏也行

使用特权

评论回复
11
coshi| | 2019-9-13 10:44 | 只看该作者
数据手册上应该有啊

使用特权

评论回复
12
zljiu| | 2019-9-13 11:03 | 只看该作者
我还没有接触过这么深

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

149

帖子

1

粉丝