📄 x5045.c
字号:
#define __X5045_SOURCE__
#include <reg52.h>
#include "X5045.h"
/**********************************************************************
模块名: X5045接口程序
创建人: XX
日 期: 2002-11-14
说 明:
日期: 2002-11-14
修改:
说明: 版本定为1.02
日期:
修改:
说明:
日期:
修改:
说明:
**********************************************************************/
// 函数名称: _X5045_Byte_In()
// 函数说明: 读X5045一个字节的处理程序
// 返回值 : BYTE: X5045输出的一个字节
BYTE _X5045_Byte_In(void)
{
BYTE bt_Bit_Count,bt_Result=0;
// 读入8位
for(bt_Bit_Count = 8; bt_Bit_Count > 0; bt_Bit_Count --)
{
X5045_SCLK = 1;
X5045_SO = 1;
X5045_SCLK = 0;
// 高位在前,低位在后
bt_Result <<= 1;
// 在下降沿读数据
if( X5045_SO )
bt_Result ++ ;
}
return bt_Result;
}
// 函数名称: _X5045_Byte_Out
// 函数说明: 写入X5045一个字节的处理程序
// 返回值 : void: 无
// 参数说明: BYTE: 写入X5045的一个字节
void _X5045_Byte_Out(BYTE Data)
{
BYTE bt_Bit_Count;
// 写入8位
for(bt_Bit_Count = 8 ;bt_Bit_Count > 0 ;bt_Bit_Count --)
{
// 高位在前,低位在后
Data <<= 1;
X5045_SI = CY;
// 上升沿锁存数据
X5045_SCLK = 0;
X5045_SCLK = 1;
}
}
// 函数名称: _Byte_In
// 函数说明: 写入X5045的状态寄存器的处理程序
// 返回值 : BYTE: X5045状态寄存器的值
BYTE X5045_Read_Reg()
{
BYTE Result;
X5045_SCLK = 0;
X5045_CS = 0;
// 读状态寄存器命令
_X5045_Byte_Out(0x05);
Result = _X5045_Byte_In();
X5045_SCLK = 0;
X5045_CS = 1;
return Result;
}
// 函数名称: _X5045_Wait
// 函数说明: 等待X5045写周期的结束的处理程序
// 返回值 : void: 无
void _X5045_Wait()
{
BYTE i;
// 防止死循环
for(i=0;i<0xff;i++)
{
// X5045在写状态中,禁止对X5045进行操作,防止数据丢失,除查询状态寄存器
// 状态寄存器的D1位为1时,表示还在写,0表示已完成写操作
if(!(X5045_Read_Reg() & 1))
break;
}
}
// 函数名称: X5045_Write_Reg
// 函数说明: 向X5045写状态寄存器的处理程序
// 返回值 : void: 无
// 参数说明: Data: 写状态寄存器的值
void X5045_Write_Reg(BYTE Data)
{
_X5045_Wait();
X5045_CS = 0;
//允许写操作命令
_X5045_Byte_Out(0x06);
X5045_CS = 1;
X5045_CS = 0;
//写寄存器命令
_X5045_Byte_Out(0x01);
_X5045_Byte_Out(Data);
X5045_CS = 1;
X5045_CS = 0;
//禁止写操作命令
_X5045_Byte_Out(0x04);
X5045_CS = 1;
}
// 函数名称: X5045_Read_Word
// 函数说明: 向X5045写状态寄存器的处理程序
// 返回值 : void: 无
// 参数说明: Data: 写状态寄存器的值
WORD X5045_Read_Word(WORD addr)
{
union BYTES Result;
_X5045_Wait();
X5045_CS = 0;
if(addr > 0xff)
{
//读高256个字节
addr -= 256;
_X5045_Byte_Out(0x0b);
}
else
{
//读低256个字节
_X5045_Byte_Out(0x03);
}
_X5045_Byte_Out(addr);
Result.bytes.hi = _X5045_Byte_In();
Result.bytes.lo = _X5045_Byte_In();
X5045_CS = 1;
return(Result.word);
}
// 函数名称: X5045_Write_Word
// 函数说明: 向X5045指定的一个地址写一个字的处理程序
// 返回值 : void: 无
// 参数说明: addr: X5045指定的地址
// 参数说明: Data: 写X5045的一个字值
void X5045_Write_Word(WORD addr,WORD DATA)
{
union BYTES Result;
Result.word=DATA;
_X5045_Wait();
X5045_CS = 0;
//允许写操作命令
_X5045_Byte_Out(0x06);
X5045_CS = 1;
X5045_CS = 0;
//写操作命令
if(addr > 0xff)
{
//写高256个字节A8 = 1
addr -= 256;
_X5045_Byte_Out(0x0a);
}
else
{
//写低256个字节A8 = 0
_X5045_Byte_Out(0x02);
}
_X5045_Byte_Out(addr);
_X5045_Byte_Out(Result.bytes.hi);
_X5045_Byte_Out(Result.bytes.lo);
X5045_CS = 1;
X5045_CS = 0;
//禁止写操作命令
_X5045_Byte_Out(0x04);
X5045_CS = 1;
}
// 函数名称: X5045_WatchDog
// 函数说明: 喂狗处理程序
// 返回值 : void: 无
void X5045_WatchDog()
{
X5045_CS = 0;
X5045_CS = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -