网上看到的x5043读写程序
来源:互联网 发布:淘宝闲鱼上拍卖的翡翠 编辑:程序博客网 时间:2024/05/22 10:27
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define CS P10 /*x5043的片选*/
#define SI P11 /*x5043的串行输入*/
#define SCK P12 /*x5043的时钟*/
#define SO P13 /*x5043的输出*/
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
/******************************************************************************
向 x5043 发送命令 (8 bit) (初始:CS = 0), SCK上升沿锁存数据
******************************************************************************/
void sent_x5043(uchar n)
{
uchar i;
for ( i=0x80; i>=0x01; i=i>>1 )
{
SCK = 0;
_nop_(); /* SCK=0 */
if ( ( n & i ) == 0 ) SI = 0; else SI = 1; /* 置SI */
SCK = 1; /* SCK=1 */
_nop_();
}
}
/******************************************************************************
从 x5043 读出数据 (8 bit) (初始:CS = 0), SCK下降沿输出数据
******************************************************************************/
uchar get_x5043(void)
{
uchar i,n;
n=0x00;
for ( i=0x80; i>=0x01; i=i>>1 )
{
SCK = 1;
_nop_();
SCK = 0;
_nop_();
if ( SO == 1 ) n = ( n | i );
}
return( n );
}
/******************************************************************************
读 x5043 状态寄存器 (8 bit)
******************************************************************************/
uchar rdsr_x5043(void)
{
uchar n;
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
CS=1;
_nop_();
CS=0;
sent_x5043( 0x05 ); /* RDSR => x5043 */
n = get_x5043( );
return( n );
}
/******************************************************************************
写 x5043 等待完成
******************************************************************************/
void wrok_x5043(void)
{
uchar i;
for ( i=0; i<=99; i++ )
{
if ( ( rdsr_x5043() & 0x01 ) == 0x00 ) break;
}
}
/******************************************************************************
初始化 x5043
******************************************************************************/
void ini_x5043(uchar n)/*n为状态寄存器的值,初始化时要给予设定*/ -----------------------------------------------这里不明白,n到底设定什么啊
{
if ( rdsr_x5043() != n )
{
CS=1;
_nop_();
CS=0;
sent_x5043( 0x06 ); //写使能
CS=1;
_nop_();
CS=0;
sent_x5043( 0x01 ); /* WRSE => x5043 */
sent_x5043( n ); /* n => x5043 看门狗定时, 块保护范围, */
wrok_x5043();
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
}
}
/******************************************************************************
从 x5043 读1个字节
uchar Cread_EEPROM( uint addr )
输入: addr 地址范围 0x000-0x1FF [512B]
输出: 数据 (uchar,char)
******************************************************************************/
uchar Cread_EEPROM(uint addr)
{
uchar n;
n = 0x03; /* 0000 (A8)011 READ */
if ( ( addr & 0x0100 ) != 0 )
n = ( n | 0x08 );
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止*/
CS=1;
_nop_();
CS=0;
sent_x5043( n ); /* READ => x5043 */
sent_x5043( (uchar)(addr) ); /* addr => x5043 */
n = get_x5043( ); /* x5043 => n */
return( n );
}
/******************************************************************************
向 x5043 写1个字节
void Cwrite_EEPROM( uint addr, uchar n )
输入: addr 地址范围 0x000-0x1FF [512B]
n 数据(uchar,char)
******************************************************************************/
void Cwrite_EEPROM( uint addr, uchar n )
{
uchar i;
if(Cread_EEPROM(addr)==n)
return;
i = 0x02; /* 0000 (A8)010 WRITE */
if((addr & 0x0100 )!= 0)
i=(i|0x08);
CS=1;
_nop_();
CS=0;
sent_x5043( 0x06 );
CS=1;
_nop_();
CS=0;
sent_x5043( i ); /* WRITE => x5043 */
sent_x5043( (uchar)(addr) ); /* addr => x5043 */
sent_x5043( n ); /* n => x5043 */
wrok_x5043();
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
}
void delay10ms1(uint count)
{
uint j,k;
while(count--!=0)
{
for(k=0;k<10;k++)
for(j=0;j<75;j++) ;
}
}
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define CS P10 /*x5043的片选*/
#define SI P11 /*x5043的串行输入*/
#define SCK P12 /*x5043的时钟*/
#define SO P13 /*x5043的输出*/
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
/******************************************************************************
向 x5043 发送命令 (8 bit) (初始:CS = 0), SCK上升沿锁存数据
******************************************************************************/
void sent_x5043(uchar n)
{
uchar i;
for ( i=0x80; i>=0x01; i=i>>1 )
{
SCK = 0;
_nop_(); /* SCK=0 */
if ( ( n & i ) == 0 ) SI = 0; else SI = 1; /* 置SI */
SCK = 1; /* SCK=1 */
_nop_();
}
}
/******************************************************************************
从 x5043 读出数据 (8 bit) (初始:CS = 0), SCK下降沿输出数据
******************************************************************************/
uchar get_x5043(void)
{
uchar i,n;
n=0x00;
for ( i=0x80; i>=0x01; i=i>>1 )
{
SCK = 1;
_nop_();
SCK = 0;
_nop_();
if ( SO == 1 ) n = ( n | i );
}
return( n );
}
/******************************************************************************
读 x5043 状态寄存器 (8 bit)
******************************************************************************/
uchar rdsr_x5043(void)
{
uchar n;
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
CS=1;
_nop_();
CS=0;
sent_x5043( 0x05 ); /* RDSR => x5043 */
n = get_x5043( );
return( n );
}
/******************************************************************************
写 x5043 等待完成
******************************************************************************/
void wrok_x5043(void)
{
uchar i;
for ( i=0; i<=99; i++ )
{
if ( ( rdsr_x5043() & 0x01 ) == 0x00 ) break;
}
}
/******************************************************************************
初始化 x5043
******************************************************************************/
void ini_x5043(uchar n)/*n为状态寄存器的值,初始化时要给予设定*/ -----------------------------------------------这里不明白,n到底设定什么啊
{
if ( rdsr_x5043() != n )
{
CS=1;
_nop_();
CS=0;
sent_x5043( 0x06 ); //写使能
CS=1;
_nop_();
CS=0;
sent_x5043( 0x01 ); /* WRSE => x5043 */
sent_x5043( n ); /* n => x5043 看门狗定时, 块保护范围, */
wrok_x5043();
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
}
}
/******************************************************************************
从 x5043 读1个字节
uchar Cread_EEPROM( uint addr )
输入: addr 地址范围 0x000-0x1FF [512B]
输出: 数据 (uchar,char)
******************************************************************************/
uchar Cread_EEPROM(uint addr)
{
uchar n;
n = 0x03; /* 0000 (A8)011 READ */
if ( ( addr & 0x0100 ) != 0 )
n = ( n | 0x08 );
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止*/
CS=1;
_nop_();
CS=0;
sent_x5043( n ); /* READ => x5043 */
sent_x5043( (uchar)(addr) ); /* addr => x5043 */
n = get_x5043( ); /* x5043 => n */
return( n );
}
/******************************************************************************
向 x5043 写1个字节
void Cwrite_EEPROM( uint addr, uchar n )
输入: addr 地址范围 0x000-0x1FF [512B]
n 数据(uchar,char)
******************************************************************************/
void Cwrite_EEPROM( uint addr, uchar n )
{
uchar i;
if(Cread_EEPROM(addr)==n)
return;
i = 0x02; /* 0000 (A8)010 WRITE */
if((addr & 0x0100 )!= 0)
i=(i|0x08);
CS=1;
_nop_();
CS=0;
sent_x5043( 0x06 );
CS=1;
_nop_();
CS=0;
sent_x5043( i ); /* WRITE => x5043 */
sent_x5043( (uchar)(addr) ); /* addr => x5043 */
sent_x5043( n ); /* n => x5043 */
wrok_x5043();
CS=1;
_nop_();
CS=0;
sent_x5043( 0x04 ); /* WREN => x5043 写禁止 */
}
void delay10ms1(uint count)
{
uint j,k;
while(count--!=0)
{
for(k=0;k<10;k++)
for(j=0;j<75;j++) ;
}
}
- 网上看到的x5043读写程序
- java配置文件读写类--从网上看到的
- 网上看到的一句话
- 网上看到的
- 网上看到的关于程序猿人生的一些话
- 网上看到的 asp.net 一般处理程序(.ashx)
- 网上看到的一段话
- 网上看到的几道小问题
- 网上看到的伟大梦想!!!
- 网上看到的分页语句
- 网上看到的,挺经典
- 网上看到的IQ题
- 网上看到的相关知识
- 网上看到的进度条代码
- 网上看到的,值得看一看
- 网上看到的一篇文章
- 网上看到的收藏了
- 网上看到的,转过来和大家一起分享侃侃单片机裸奔的程序
- Zend Framework中Controller之间action跳转方式
- Noi 2010 day1 第二题 超级钢琴
- BEA Weblogic上使用JMS初步
- websphere 安装维护包时提示错误,安装失败。
- getLastModified()方法和浏览器缓存
- 网上看到的x5043读写程序
- 如何在自己网站加上视频直播功能(搭建视频直播网站)
- 如何把选择屏幕放到标准屏幕上
- [C++]D3D中立体的移动+旋转
- linux(ubuntu)下手动安装 firefox 6 并且添加快捷方式图标
- JMX简介
- 你有没有那么一瞬间
- 15款非常有用的JavaScript开发工具
- sap-abap 取销售订单行的已发货数量