打印

请教一下写用户ID的指令

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

使用特权

评论回复
沙发
wangpe| | 2021-1-5 23:40 | 只看该作者
看看手册上有没有说

使用特权

评论回复
板凳
gongche| | 2021-1-5 23:44 | 只看该作者
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   
}

使用特权

评论回复
地板
wenfen| | 2021-1-5 23:48 | 只看该作者
用烧写器写
理论上也可以用写FLASH的函数来写

使用特权

评论回复
5
tian111| | 2021-1-5 23:51 | 只看该作者
但是,在程序运行过程中写这个地方,有什么意义呢?

使用特权

评论回复
6
xxrs| | 2021-1-5 23:55 | 只看该作者
你看datasheet上有相关userid的写入/读写说明的, 可以在代码中来操作..

使用特权

评论回复
7
liuzaiy|  楼主 | 2021-1-5 23:58 | 只看该作者
是想烧录的时候烧进去,找到部分答案了,可以用IDOCS来定义

使用特权

评论回复
8
liuzaiy|  楼主 | 2021-1-6 20:21 | 只看该作者
但是这只能写最后一位即000XH,前面三个数字不知道怎么写

使用特权

评论回复
9
renyaq| | 2021-1-6 20:25 | 只看该作者
你看IPE的user guide, 里面有关于这部分的说明的, 烧录的时候, 可以实现自动+1之类的操作...

使用特权

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

使用特权

评论回复
11
chenjunt| | 2021-1-6 20:33 | 只看该作者
有没有方法可以擦写DEVICE ID的?

使用特权

评论回复
12
liuzaiy|  楼主 | 2021-1-6 20:36 | 只看该作者
或者破坏也行

使用特权

评论回复
13
yufe| | 2021-1-6 20:42 | 只看该作者
数据手册上应该有啊

使用特权

评论回复
14
zhanglli| | 2021-1-6 20:45 | 只看该作者
我还没有接触过这么深

使用特权

评论回复
15
liuzaiy|  楼主 | 2021-1-6 20:48 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
16
木木guainv| | 2021-2-4 12:37 | 只看该作者
是用的at指令吗

使用特权

评论回复
17
wakayi| | 2021-2-4 12:39 | 只看该作者
破坏的话还能恢复么

使用特权

评论回复
18
xiaoqizi| | 2021-2-4 12:40 | 只看该作者
设置完之后还能更改吗

使用特权

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

本版积分规则

735

主题

7546

帖子

2

粉丝