sbit CS=P3^2;
sbit SI=P3^5;
sbit SCK=P3^4;
sbit SO=P3^3;
void outbyt( uchar c);//输出单字节
uchar inbyt(void);//读字节
void wip_poll(void);//检测
void wren_cmd(void);//使能写操作
void wrsr_cmd(void);//写状态寄存器(看门狗和块锁)
uchar rdsr_cmd (void);//读状态寄存器
void rst_wdog (void);//喂狗
void Init(void);//初始化
void delay10ms(uint count);//延迟10ms*count
uchar code date[]={0xfe,0xfd,0xfb,0xf9,0xfc,0xfa,0xfc,0xf9,0xf8,0xfb,0xfd,0xfe,0xfc,0xf9,0xfb};
void main(void)
{
uchar i;
rst_wdog ();
Init();//初始化
wren_cmd();//使能写操作
wrsr_cmd();//写状态寄存器(看门狗和块锁)
rst_wdog ();//喂狗
while(1)
{for(i=0;i <(sizeof(date)/sizeof(char));i++)
{P0=date[i];
delay10ms(10);
rst_wdog ();
}
}
void delay10ms(uint count)//10ms 6M
{uint i,j;
for(j=0;j <count;j++)
{for(i=0;i <5000;i++)
{}
}
}
void outbyt( uchar c)
{
uchar i;
for (i = 0; i < 8;i++)
{
SCK=0;
SI=c&0x80;
c < <= 1;
SCK=1;
}
SI=0;
}
uchar inbyt(void)
{
uchar i,c;
c = 0;
for (i = 0; i <8 ;i++)
{
SCK= 1;
SCK = 0;
c < <= 1;
c |= SO;
}
return c;
}
void wip_poll(void)
{uchar c;
uchar idata my_flag;
for (c=1;c <MAX_POLL;c++)
{
my_flag=rdsr_cmd();
if ((my_flag&&0x01)==0) {c=MAX_POLL;}
}
}
void wren_cmd(void)//使能写操作
{
SCK=0;
CS=0;
outbyt(WREN_INST);
SCK=0;
CS=1;
}
void wrsr_cmd(void)//写状态寄存器(看门狗和块锁)
{
SCK=0;
CS=0;
outbyt(WRSR_INST);
outbyt(STATUS_REG);
SCK=0;
CS=1;
wip_poll();
}
uchar rdsr_cmd (void)//读状态寄存器
{
uchar c;
SCK=0;
CS=0;
outbyt(RDSR_INST);
c=inbyt();
SCK=0;
CS=1;
return c;
}
void rst_wdog (void)//喂狗
{CS=1;
CS=0;
CS=1;
}
void Init(void)//启动X5045
{EA=0;
CS=1;
SO=1;
SCK=0;
SI=0;
}