📄 x5045.c
字号:
#include "x5045.h"
void outbyte(uchar aa)
{
uchar i;
SCK=0;
for(i=0;i<8;i++)
{
SCK=0;
if((aa&0x80)==0)SI=0;
else SI=1;
Delay(20); //取最高位
SCK=1;
aa=aa<<1;
}
SI=0;
SCK=0; //使SI处于确定的状态
}
/*
uchar inputbyte(void)
{
uchar aa,my_flag;
char i;
SCK=1;
aa=0;
for (i=7;i>=0;i--)
{
SCK=1;
my_flag=(uchar)(SO);
Delay(20);
SCK=0;
Delay(20);
aa=(aa|(my_flag<<i));
my_flag=0x00;
}
SCK=0;
return aa;
}
*/
void wren_cmd(void) //写使能子程序
{
CS=1;
Delay(20);
CS=0;
CS=0;
outbyte(WREN_INST);
CS=1;
CS=1;
}
/*
void wrdi_cmd(void) //写使能复位子程序
{
CS=1;
Delay(20);
CS=0;
outbyte(WRDI_INST);
CS=1;
}
*/
void wrsr_cmd(uchar cmd) //写状态寄存器子程序
{ //0X00:Watchdog Time Out 1.4 seconds
wren_cmd( ); //0X30:Watchdog Time Out disabled
Delay(20);
CS=0;
outbyte(WRSR_INST);
outbyte(cmd);
CS=1;
}
/*
uchar rdsr_cmd (void) //读状态寄存器,读出的数据放入到aa中
{
uchar aa;
CS=1;
Delay(20);
CS=0;
outbyte(RDSR_INST);
aa=inputbyte();
CS=1;
return(aa);
}
*/
/*
uchar readbyte(uint badd)
{
uchar bb;
uchar ss;
CS=1;
Delay(20);
CS=0;
if((badd&0x100)!=0)
{
bb=READ_INST|0x08;
}
else
{
bb=READ_INST;
}
outbyte(bb);
outbyte((uchar)badd);
ss=inputbyte();
CS=1;
return(ss);
}
uint readword(uint badd)
{
uchar bb;
uint ss=0,ss1=0;
CS=1;
Delay(20);
CS=0;
if((badd&0x100)!=0) //写先导字
{
bb=READ_INST|0x08;
}
else
{
bb=READ_INST;
}
outbyte(bb);
outbyte((uchar)badd); //写地址
ss=inputbyte();
ss1=inputbyte();
ss=ss|(ss1<<8);
CS=1;
return(ss);
}
void writebyte(uint badd,uchar aa)
{
uchar bb;
wren_cmd( ); //写使能
Delay(20);
CS=1;
Delay(20);
CS=0;
if((badd&0x100)!=0)
{
bb=WRITE_INST|0x08;
}
else
{
bb=WRITE_INST;
}
outbyte(bb);
outbyte((uchar)badd); //地址
outbyte(aa);
CS=1;
wip_poll( );
}
void writeword(uint badd,uint aa)
{
uchar bb;
wren_cmd(); //写使能
Delay(20);
CS=0;
if((badd&0x100)!=0)
{
bb=WRITE_INST|0x08;
}
else
{
bb=WRITE_INST;
}
outbyte(bb);
outbyte((uchar)badd); //地址
outbyte((uchar)aa);
aa=(aa&0xff00)>>8;
outbyte((uchar)aa);
CS=1;
wip_poll( );
}
*/ //复位DOG
void rst_wdog(void)
{
CS=1;
Delay(20);
CS=0;
CS=1;
}
//检测写入的过程是否结束
/*
void wip_poll(void)
{
uchar aa;
uchar idata my_flag;
for (aa=1;aa<MAX_POLL;aa++)
{
my_flag=rdsr_cmd();
if ((my_flag&0x01)==0) //判断是否WIP=0,即判断是否写入过程已经结束,
{ //若结束就跳出,否则继续等待直到达到最大记数值
aa=MAX_POLL;
}
}
wrdi_cmd();
}
*/
void Delay(uint Del)
{
uint i;
for(i=0;i<Del;i++)
{
if(i==30000)
{
CS=1;
CS=0;
CS=0;
CS=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -