//此程序是检测ID号是否正确,如正确 P2是流水灯,如果错的,是全闪灯。
#include <reg51.h> //波特率2400,下载后可以按下复位
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
//#define ID_ADDR_RAM 0x1F0 //读RAM的8位,最后七位是全球 ID唯一号(89C52RC)
//#define ID_ROM_RAM 0x1FF8 //读ROM的8位,最后七位是全球 ID唯一号(89C52RC)
#define ID_ADDR_RAM 0x0F1 //读RAM的8位,最后七位是全球 ID唯一号(89C52RC)
#define ID_ROM_RAM 0x1FF8 //读ROM的8位,最后七位是全球 ID唯一号(89C52RC)
u8 idata *iptr;
u8 code *stcid;
u8 IDF;
u8 SysId[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//u8 SysId[7]={0xF0,0x02,0x01,0xF4,0x16,0x71,0x3C};
u8 code McuId[7]={0xF0,0x02,0x81,0xF4,0x16,0x31,0x3C}; //F0 02 81 F4 16 31 3C 此数组改成CPU数组
//u8 code McuId[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //F0 02 81 F4 16 31 3C
void delay(u16 i)
{
while(i--);
}
void main(void)
{
u8 i,k;
{
iptr=ID_ADDR_RAM; //从ROM区读取ID号
for (k=0; k<7; k++) //读7个字节
{ SysId[k]=*(iptr+k);
}
}
P2=0xfe;
if(SysId[0]==McuId[0] && SysId[1]==McuId[1] && SysId[2]==McuId[2] && SysId[3]==McuId[3] &&
SysId[4]==McuId[4] && SysId[5]==McuId[5] && SysId[6]==McuId[6])
{
while(1)
{
for(i=0;i<7;i++) //将led左移一位
{
P2=_crol_(P2,1);
delay(50000); //大约延时450ms
}
for(i=0;i<7;i++) //将led右移一位
{
P2=_cror_(P2,1);
delay(50000); //大约延时450ms
}
}
}
else
{
while(1)
{ // P0=SysId[2];
// P0=McuId[2];
P2=0;
delay(50000); //大约延时450ms
P2=0xFF;
delay(50000); //大约延时450ms
}
}
}