历史上的今天
今天是:2025年04月01日(星期二)
2021年04月01日 | c51写的X25045的读写程序
2021-04-01 来源:eefocus
/***************************************************************
*X25043/45applicationProcedures
*absoluteoneaddressaccess
***************************************************************
WARNING:Thefunctionwith'_'ahead,usermaynotuseit.asit
usedinternal
*/
//使用函数:write_status(status)写状态,一般写0
//clr_wchdog(void)清看门狗
//unsignedcharread_byte(address)//读一个字节
//voidwrite_byte(address,Data)//写一个字节
#defineALONE_COMPILE
#ifdefALONE_COMPILE
#include"INTRINS.H"
#endif
#ifndefnop2()
#definenop2()_nop_();_nop_();_nop_()
#endif
#defineWREN0x06
#defineWRDI0x04
#defineRDSR0x05
#defineWRSR0x01
#defineREAD0x03
#defineWRITE0x02
//#definePORTP1
sfrPORT=0x90;//25045的4根io脚接在同一端口,本例为p1
//请根据实际电路更改引脚定义
#define_SI0x80//si接在p1.3,0x80=00001000b
#define_SCK0x40//sck接在p1.2,0x80=00000100b
#define_SO0x20//so接在p1.1
#define_CS0x10//cs接在p1.0
//----------------------------------------------------------------
#ifndefdword
#definedwordunsignedlong
#definewordunsignedint
#definebyteunsignedchar
typedefunion{
wordw;
bytebh;
bytebl;
}WordType;
typedefunion{
dworddw;
wordw[2];
byteb[4];
}DwordType;
#endif
//----------------------------------------------------------------
void_w_byte(Data)
charData;
{
chari;
PORT&=(_SCK^0xff);
for(i=0;i<8;i++)
{
nop2();nop2();/////////////
if(Data&0x80)PORT|=_SI;
elsePORT&=(_SI^0xff);
nop2();nop2();/////////////
PORT|=_SCK;
nop2();nop2();/////////////
Data=Data<<1;
nop2();nop2();/////////////
PORT&=(_SCK^0xff);
nop2();nop2();/////////////
}
}
//----------------------------------------------------------------
char_r_byte(void)
{
chari;
charresult;
result=0;
for(i=0;i<8;i++)
{
nop2();nop2();/////////////
PORT|=_SCK;
result=result<<1;
nop2();nop2();/////////////
if((PORT&_SO)!=0)
result|=0x01;
nop2();nop2();/////////////
PORT&=(_SCK^0xff);
nop2();nop2();/////////////
}
return(result);
}
//----------------------------------------------------------------
voidwrite_status(status)
charstatus;
{
PORT&=(_CS^0xff);
nop2();nop2();/////////////
_w_byte(status);
PORT|=_CS;
nop2();nop2();/////////////
return;
}
//----------------------------------------------------------------
voidclr_wchdog(void)
{
PORT&=(_CS^0xff);
PORT|=_CS;
}
//----------------------------------------------------------------
voidwait_free(void)
{
unsignedintt;
t=3000;
while(--t);
}
//----------------------------------------------------------------
voidwrite_reg(_code)
char_code;
{
write_status(WREN);
PORT&=(_CS^0xff);
nop2();nop2();/////////////
_w_byte(WRSR);
_w_byte(_code);
nop2();nop2();/////////////
PORT|=_CS;
wait_free();
}
//----------------------------------------------------------------
unsignedcharread_byte(address)
unsignedintaddress;
{
charresult;
PORT&=(_CS^0xff);//Chipselect
nop2();nop2();/////////////
_w_byte((char)(address>255?(0x08|READ):READ));
_w_byte((char)(address&0x00ff));
result=_r_byte();
nop2();nop2();/////////////
PORT|=_CS;
//Chipunselect
return(result);
}
//----------------------------------------------------------------
voidwrite_byte(address,Data)
unsignedintaddress;
charData;
{
write_status(WREN);
nop2();nop2();/////////////
PORT&=(_CS^0xff);
nop2();nop2();/////////////
_w_byte((unsignedchar)(address>255?(0x08|WRITE):WRITE));
_w_byte((unsignedchar)(address&0x00ff));
_w_byte(Data);
nop2();nop2();/////////////
PORT|=_CS;
wait_free();
return;
}
/*
//----------------------------------------------------------------
unsignedlongread_data(format,address)
unsignedcharformat;
unsignedintaddress;
{
DwordTyperesult;
switch(format&0xdf)
{
case'L':
result.b[0]=read_byte(address);
result.b[1]=read_byte(address+1);
result.b[2]=read_byte(address+2);
result.b[3]=read_byte(address+3);
break;
case'D':
result.b[2]=read_byte(address);
result.b[3]=read_byte(address+1);
break;
case'C':
result.b[3]=read_byte(address);
break;
}
return(result.dw);
}
//----------------------------------------------------------------
voidwrite_data(format,address,Data)
unsignedcharformat;
unsignedintaddress;
DwordTypedata*Data;
{
switch(format&0xdf)
{
case'L':
write_byte(address,Data->b[0]);
write_byte(address+1,Data->b[1]);
write_byte(address+2,Data->b[2]);
write_byte(address+3,Data->b[3]);
break;
case'D':
write_byte(address,Data->b[2]);
write_byte(address+1,Data->b[3]);
break;
case'C':
write_byte(address,Data->b[3]);
break;
}
}
//----------------------------------------------------------------
*/
下一篇:单片机中断问题
史海拾趣
|
本人设计的工业仪表,遇到这样的问题:输入信号0-20MV。当用手触摸输入端子的时候,显示值会波动,这是什么干扰(好象是串模干扰),如何解决?注明:信号是经过了2个模拟开关(CD4051),由OP07放大 再采样。… 查看全部问答> |
|
我现在在做一个东东,上面有一个sd卡,sd卡又有引脚连接到wince系统,这样sd卡在wince系统中可见。 现在就相当于sd卡被wince和我的设备共享,使用时通过切换data线来实现。 问题来了,由于wince系统在sd卡插入时读取了里面的fat表并buffer起来, ...… 查看全部问答> |
|
pxa3XX 从CF卡上启动nk.bin 的bootloader 请问各位大侠有谁做过pxa310或者pxa270的bootloader 要求从CF卡启动nk.bin 我应该用什么软件来编译,用wce6.0 还是ARM提供的AXD 是不是wce6.0下生成bootimage.nb0 就是bootloader 我用仿 ...… 查看全部问答> |
|
我尝试着自己在fat1,fat2 中分配空闲空间,接着在dir根目录项中添加项,目标是在c盘下新建一个xxxxxxx.txt 的文件,我尝试着给dir各项赋了值。我用工具检验了,也写进去了。 可是为什么c盘未增加相应文件?我试着重新启动了计算机(本以为window ...… 查看全部问答> |
|
正在开发烧写UBOOT到NANDFLASH的烧写器代码,硬件环境I DAVINCI开发平台.软件环境:montavista linux.bootloader:UBOOT-1.1.3.集成开发环境:CCSv3.2.TI提供了烧写器源码,建立工程,添加源码文件.编译出现如下错误,请教其中原因.谢谢!----------------- ...… 查看全部问答> |




