【原创】驱动_FM25160_P89V51RD2_SPI

今天又有“成就感”!太爽了~

我刚刚完成了我在公司的第二项任务,赶快在这里写个文档保存下来。

顺便也和各位同仁共享资源,和众友人分享快乐!

==========================================================

这是个FM25160在P89V51RD2下的驱动程序。

P89V51RD2:带有SPI接口的51系列单片机。
FM25160:  16K bit SPI FRAM.

原理图就不罗嗦了,随便找个文档里面就有。这里直接上驱动程序:

 

 

//=========================================================
//日期: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);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值