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

📄 51_25160.c

📁 基于51单片机的25160驱动程序 (SPI总线)
💻 C
字号:
//=========================================================
//日期:2009.4.18
//版本:V1.01.20090418

//作者:周智鹏
//QQ:  39188043

//=========================================================

 

#include "stdio.h"
#include "reg52.h"  //用到了"P1^4"

 
sbit test2 = P1^2;  //测试位.全写全读,完成后,P1^2为低电平
sbit test0 = P1^0;  //程序运行完成,则P1^0为低电平
sbit SS  = P1^4;

sfr p1   = 0x90;
sfr SPDR = 0x86;
sfr SPSR = 0xaa;
sfr SPCR = 0xd5;

//===================================
//函数功能:串口初始化
//入口:无
//出口:无
//作者:周智鹏
//QQ: 39188043
//===================================
void UART_init()
{
 SCON = 0x52;
 TMOD = 0x20;
 TH1  = 0XFD;
 TR1  = 1;
}

 

//===================================
//函数功能:SPI初始化
//入口:无
//出口:无
//作者:周智鹏
//QQ: 39188043
//===================================
void SPI_init()
{
 p1 = 0xff;
 SPCR = 0x51;
}


//===================================
//函数功能:命令传输接口函数
//入口:SPI传送数据(8bit)
//出口:SPDR寄存器中的数据(8bit)

//作者:周智鹏
//QQ: 39188043
//===================================
unsigned char P89V51_MasterIO(unsigned char HW_SPI_out)
{
 unsigned char temp;
 SPDR = HW_SPI_out;
 do
 {
  temp = SPSR & 0x80;
 }while(temp!=0x80);
 SPSR = SPSR & 0x7f;
 return SPDR;
}

 

//===================================
//函数功能:使25160可写
//入口:无
//出口:无
//作者:周智鹏
//QQ: 39188043
//===================================
void WREN_25160()
{
 SS = 0;
 P89V51_MasterIO(0x06);  //发出地址低八位
 SS = 1;
}

 

//===================================
//函数功能:写入1字节到25160
//入口:数据(unsigned char),
//  地址(unsigned int 0x0000~0x3FFF)
//出口:无
//作者:周智鹏
//QQ: 39188043
//===================================
void write_25160(unsigned char sebuf,unsigned int addr)
{
 addr = addr & 0x07ff;
 SS = 0;
 P89V51_MasterIO( ((addr&0x700) >> 5) | 0x02 );  //发出读命令 以及 地址高三位
 P89V51_MasterIO(addr & 0xff);  //发出地址低八位
 P89V51_MasterIO(sebuf);  //发出地址低八位
 SS = 1;
}

 

//===================================
//函数功能:从25160读出1字节
//入口: 地址(unsigned int 0x0000~0x3FFF)
//出口:数据(unsigned char)
//作者:周智鹏
//QQ: 39188043
//===================================
unsigned char read_25160(unsigned int addr)
{
 unsigned char byte = 0;
 addr = addr & 0x07ff;
 SS = 0;
 P89V51_MasterIO( ((addr&0x700) >> 5) | 0x03 );  //发出读命令 以及 地址高三位
 P89V51_MasterIO(addr & 0xff);  //发出地址低八位
 byte = P89V51_MasterIO(0x00);
 SS = 1;
 return byte;
}

 

//===================================
//函数功能:25160读写测试程序
//入口:无
//出口:无
//作者:周智鹏
//QQ: 39188043
//===================================
void test_25160()
{
 unsigned char ceshi=0;
 unsigned int i;
 for(i=0;i<0x0400;i++)
 {
  WREN_25160();
  write_25160(i%256,0x0000+i);
 }
 for(i=0;i<0x0400;i++)
 {
  TI = 0;
  SBUF = ceshi;
  while(!TI);
  TI = 0;
  SBUF = read_25160(0x0000+i);
  while(!TI);
  if(read_25160(0x0000+i)!=ceshi)
  break;
  ceshi++;
 }
 if( i == 0x0400 )
 test2 = 0;  //全写全读测试成功,则P1^2=0
 test0 = 0;  //程序完成,则P1^0=0
}

 

 

void main()
{
 SPI_init();
 UART_init();
 test_25160();
 while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -