见过很多初学者对PIC16系列单片机的ID码的读和写犯迷糊。说实话,这方面的资料也不怎么全。有些教材可能会涉及ID区域的介绍,可是往往是一代而过。这对初学者来说是比较容易犯错的地方。今天有空,对相关的问题作了一些整理,分享给大家。可能有些地方说的不够妥当,欢迎大家多多探讨。
1.什么是ID区域?
ID区域是独立于EEPROM,FLASH,RAM的区域。程序设计人员可以利用该区域存放软件的版本号,编写日期,烧录日期,产品标识等信息。不过该区域很小PIC16系列只能存放4个字节。
2.ID码怎么烧录到ID区域里面去?
可以利用PICC自带的宏命令IDLOC(X)来实现。具体操作如下:
.....................................//头文件 其它宏定义
__IDLOC(76F4); //注意:前面是两个下划线。括号里面最多可以有2个字节
void main()
{
...................................//程序主体
}
编译以后再用烧录工具烧到单片机中即可。这里要提醒一下,IDLOC(X)里面最多有2个字节的16进制数,超过部分会无效。比如你写个987FE3,E3会丢掉。另外得说一下这两个16进制数在ID区域是怎么放的。我们已经知道IDLOC(X)里面能又个字节,而ID区域能放4个字节。以X=76F4为例,它们是这样放的07060F04。也就是说,在每个16进制数前加1个0。如果你写的不是2个字节的16进制数,比如是1个字节的78。编译器会在前面补0,那就成了0078。写到ID区域的就是00000708
3.ID码怎么读出来?
可以通过烧录工具跟编译器配合读出来。我用的是PICC跟ICD2。连好线,单片机上电以后,在编程模式下,通过执行Read Target Device操作,然后在Configure菜单下的Id memory
选项可以看到刚才编程的时候设置的ID码。
4.单片机里面有了EEPROM跟FLASH,为什么还要这个ID区域呢?
估计是因为在编译烧录环境里面方便一点。其他的原因还望大虾们指点。
我也有个疑问,在PICC的函数里能不能直接利用IDLOC(X)这个宏命令?如果可以的话,对程序开发人员来说很方便。渴求大家的指点,谢谢!
用户1271802 2012-7-4 15:54