⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x5045.c

📁 51单片机用c语言实例 包括ad
💻 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 + -