4

我使用 pic16f1823 生产 100 个遥控器,我需要每个遥控器的唯一 ID,但它应该随着时间的推移保持不变,所以我认为最好在 mplab 编译器中编程之前生成一个随机数,然后编译这 100 个遥控器我不想手动更改 remote_id

#include "mcc_generated_files/mcc.h" 
#define remote_id   33800
char col;
uint24_t data_out;
void Reset_state(void);
int Key(void);
int Key_prime(void);
void main(void)
{...

请帮我解决这个问题

4

3 回答 3

2

应该可以将 SQTP 模式与 IPE 一起使用,如此处所述。

http://microchipdeveloper.com/ipe:serial-quick-turn-programming-sqtp-settings

于 2017-08-27T19:30:00.320 回答
1

您能否在生产中使用一个脚本来更改 ihex 文件,以便您的序列号在 EEPROM (EE) 中显示不同,因为大多数图片都有 1k 的内部 EE 用于数据存储?然后遥控器将从 EE 位置读取其唯一的序列号。对于“gawk”来说,这将是一项简单的工作......

于 2018-09-20T12:00:51.510 回答
1

使用 MPLAB IPE 中的 SQTP 功能。您需要先进入“高级模式”并登录 IPE。

在 SQTP 选项卡中,将其设置为将值保存在 EEPROM 中,作为“原始数据”,位于内存地址 0x00。按“生成”,它将为您编写一个 sqtp 文件。

在选择 .hex 文件的字段下的“操作”选项卡中选择 SQTP 文件。

每次刷新新的 mcu 时,IPE 都会增加到 SQTP 文件中的下一个值,甚至会在会话之间进行跟踪。

您可以在代码中使用它来检索数据:

unsigned char EEPROM_ReadByte(unsigned char eepromAddress)
{
    while(RD || WR);           // check the WR&RD bit to see if a RD/WR is in progress
    EEADR=eepromAddress;       // Write the address to EEADR.
    RD = 1;                    // Set the RD bit to trigger the eeprom read operation.
    return(EEDATA);            // Return the data read form eeprom.
}

调用 EEPROM_ReadByte,传入 0x00,它将从您的数据中返回一个字符。增加 eepromAddress ,它会返回第二个字符,等等。

请注意,您的数据将按相反的顺序排列,我不知道为什么,这可能是由于 SQTP 文件的编码方式。

于 2019-01-24T08:49:14.023 回答