📄 x5045.c
字号:
/**********************************************************
* 文件名称: X5045.C
* 功能描述: 通过单片机的SPI接口读写X5045;
**********************************************************/
#include "sst89x5x4.h"
sbit CS = P1^4;
void Delay(unsigned int j)
{
unsigned int i;
unsigned char k;
for(i=0; i<j; i++)
for(k=0; k<10; k++);
}
// 处理主从控制器间的字节传输
unsigned char SST_MasterIO(unsigned char HW_SPI_out)
{
unsigned char temp;
SPDR = HW_SPI_out;
do
{
temp = SPSR & 0x80;
} while (temp != 0x80); // 判断 SPIF 标志位
SPSR = SPSR & 0x7F; // 清除 SPIF
return SPDR;
}
// 读取状态寄存器
unsigned char Read_Status_Register()
{
unsigned char byte = 0;
CS = 0; // 使能设备
SST_MasterIO(0x05); // 发送 RDSR 命令
byte = SST_MasterIO(0x00); // 接收字节
CS = 1; // 禁止设备
return byte;
}
// 写状态寄存器(看门狗设置)
void WRSR(unsigned char byte)
{
CS = 0; // 使能设备
SST_MasterIO(0x01); // 发送 WRSR 命令
SST_MasterIO(byte); // 写入的状态字
CS = 1; // 禁止设备
}
// 使能写操作
void WREN()
{
CS = 0; // 使能设备
SST_MasterIO(0x06); // 发送 WREN 命令
CS = 1; // 禁止设备
}
// 禁止写操作
void WRDI()
{
CS = 0; // 使能设备
SST_MasterIO(0x04); // 发送 WRDI 命令
CS = 1; // 禁止设备
}
// 读操作
unsigned char Read(unsigned char Addr)
{
unsigned char byte = 0;
CS = 0; // 使能设备
SST_MasterIO(0x03); // 发送 READ 命令
SST_MasterIO(Addr); // 发送读取数据的地址
byte = SST_MasterIO(0x00); // 接收字节
CS = 1; // 禁止设备
return byte;
}
// 读多个数据(1--16)
void Read_Cont(unsigned char Addr, unsigned char no_bytes, unsigned char DataArray[])
{
unsigned char j = 0;
CS = 0;
SST_MasterIO(0x03); // 读命令
SST_MasterIO(Addr); // 地址
for (j = 0; j < no_bytes; j++) // 读取no_bytes个数据
{
DataArray[j] = SST_MasterIO(0x00); // 接收数据并存储
}
CS = 1;
}
// 写一个字节
unsigned char Byte_Write(unsigned char Addr, unsigned char byte)
{
WREN();
Delay(1);
CS = 0; // 使能设备
SST_MasterIO(0x02); // 发送 Write 命令
SST_MasterIO(Addr); // 发送读取数据的地址地址
SST_MasterIO(byte); // 写一个字节
CS = 1; // 禁止设备
}
void main(void)
{
unsigned char R_Byte[16], i;
SPCR = 0x51; // 设置 SPI 的控制寄存器
//SPCR: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
for(i=0; i<16; i++)
{
Byte_Write(i, i); // 写0--16到地址00开始的连续16个单元中
Delay(80);
}
Read_Cont(0x00, 16, R_Byte); // 读取地址00开始的连续16个单元中的数
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -