编程之前的xc8随机数

时间:2017-07-18 06:06:42

标签: random pic mplab xc8

我使用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)
{...

请帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用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文件的编码方式所致。