• 大小: 12KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: MCU  读写SPI  FLASH  W25X40  

资源简介

51单片机读写华邦串行FLASH W25X40 程序范例,C语言编程。适用于华邦W25X系列,比较完整。

资源截图

代码片段和文件信息

//W25X40  51单片机读写程序  
//华邦串行FLASH W25X40 读写程序范例
//适用于华邦W25X系列,单通道模式;


#include 
#include 
#define uint8 unsigned char
#define uint16 unsigned int
#define uchar unsigned char
#define uint unsigned int
#define uint32 unsigned long

sbit _cs= P1^2;
sbit _do= P1^3;
sbit _wp= P1^4;
//sbit _hold= P1^5;
sbit _clk= P1^6;
sbit _di= P1^7;

#define W25P_WriteEnable 0x06
#define W25P_WriteDisable 0x04
#define W25P_ReadStatusReg 0x05
#define W25P_WriteStatusReg 0x01
#define W25P_ReadData  0x03
#define W25P_FastReadData 0x0B
#define W25P_PageProgram 0x02
#define W25P_SectorErase 0xD8 // 64KB
#define W25P_ChipErase  0xC7
#define W25P_PowerDown  0xB9
#define W25P_ReleasePowerDown 0xAB
#define W25P_DeviceID  0xAB
#define W25P_ManufactDeviceID 0x90
 
void init_cpu(void);
void IO_Send_Byte(uchar out);
uchar IO_Get_Byte();
void delay(uchar tt);
void IO_Wait_Busy();
void IO_init();
uchar IO_Read_StatusReg();
void IO_Write_StatusReg(byte);
void IO_Write_Enable();
void IO_PowerDown();
void IO_ReleasePowerDown();
uchar IO_Read_ID1();
uint IO_Read_ID2(uchar ID_Addr);
uchar IO_Read_Byte(uint32 Dst_Addr);
void IO_Read_nBytes(uint32 Dst_Addr uchar nBytes_128);
uchar IO_FastRead_Byte(uint32 Dst_Addr);
void IO_FastRead_nBytes(uint32 Dst_Addr uchar nBytes_128);
void IO_Write_Byte(uint32 Dst_Addr uchar byte);
void IO_Write_nBytes(uint32 Dst_Addr uchar nBytes_128);
void IO_Erase_Chip();
void IO_Erase_Sector(uint32 Dst_Addr);
void Verify(uchar byte uchar cor_byte);
void IO_Write_Disable();
void trace(uchar *struchar len);
uint IO_Read_ID3();

uint8 Rxtemp;
bit MYTI;
uint8 tx_buff[16];
uint8 upper_128[16];
bit rx_ok;
#define nop() _nop_()

void main(void)

 uint i;
 
 init_cpu(); 
 IO_init();
 for(;;)
 {   
  if(rx_ok == 1)
  {
   rx_ok = 0;
   switch(Rxtemp)
   {
    case 0x01:
     Rxtemp = 0;
     tx_buff[0] = IO_Read_ID1();
     trace(tx_buff1);
     break;
    case 0x02:
    i = IO_Read_ID2(0x00);
    tx_buff[1] = (uchar)i;
    tx_buff[0] = (uchar)(i>>8);
    trace(tx_buff2);
    
    break;
    case 0x03:
    i = IO_Read_ID3();
    tx_buff[1] = (uchar)i;
    tx_buff[0] = (uchar)(i>>8);
    trace(tx_buff3);
    break;
    case 0x04:
    tx_buff[0] = IO_Read_Byte(0x00000000);
    trace(tx_buff1);
    break;
    case 0x05:
    tx_buff[0] = 0x55;
    IO_Write_Byte(0x000000000xa5);
    trace(tx_buff1);
    break;
    case 0x06:
    tx_buff[0] = IO_Read_StatusReg();
    trace(tx_buff1);
    break;
    case 0x07:
    IO_Write_Enable(); 
    break;
    case 0x08:
    upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
    IO_Write_nBytes(0x000000004);
    
    break;
    case 0x09:
    IO_Erase_Chip();
    break;
    case 0x0a:
    IO_Erase_Sector(0x00000000);
    break;
    default:
    break;
   }
   
  }
  
   
 }
}

void init_cpu(void)
{  
 TMOD = 0x21;   
 PCON = PCON | 0x80;  //波特率加

评论

共有 条评论