|
#include "reg51.h" #include "intrins.h" #define NOP() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
sbit SPI45D081_CS =P1^5;//片選接口 sbit SPI45D081_SK =P1^6;//時鐘接口 sbit SPI45D081_DI =P1^7;//數(shù)據(jù)輸入接口 sbit SPI45D081_DO =P1^4;//數(shù)據(jù)輸出接口 delay(unsigned int t) { while(t--); } // SPI_SK上升沿數(shù)據(jù)有效 _/- SPI45D081_WriteBits(unsigned char byte,unsigned char num_of_bits) { unsigned char count; byte=byte<<(8-num_of_bits); for(count=0;count<num_of_bits;count++) { SPI45D081_SK=0; byte<<=1; NOP(); SPI45D081_DI=CY; NOP(); SPI45D081_SK=1; NOP(); } } // SPI_SK下降沿數(shù)據(jù)有效 -\_ unsigned char SPI45D081_ReadByte() { unsigned char count,byte; for(count=0;count<8;count++) { SPI45D081_SK=1; NOP(); byte<<=1; SPI45D081_SK=0; NOP(); if(SPI45D081_DO) byte++; NOP(); } return(byte); } //Main Memory Page to Buffer 1 Transfer void PageToBuffer1(unsigned int page) { SPI45D081_SK=1; //?? start NOP(); SPI45D081_CS=0; //start NOP(); //send 8 bit opcode, Main Memory Page to Buffer 1 Transfer: 0x53 SPI45D081_WriteBits(0x53,8);// fill 3 sk,don't care. SPI45D081_WriteBits(0x00,3);//send 12 bit address to 45D081 SPI45D081_WriteBits( (unsigned char)(page>>8) , 4 ); SPI45D081_WriteBits( (unsigned char)(page) , 8 ); // fill 9 sk,don't care. SPI45D081_WriteBits( 0x00 , 4 ); SPI45D081_WriteBits( 0x00 , 5 );//total 32 bit SPI45D081_CS=1; // end delay(200);}// unsigned char ReadDataFromBuffer1(unsigned int address) { unsigned char dat; SPI45D081_SK=1; //?? start NOP(); SPI45D081_CS=0; //start NOP(); //send 8 bit opcode:0x54 SPI45D081_WriteBits(0x54,8);// fill 15 sk,don't care. SPI45D081_WriteBits(0x00,8); SPI45D081_WriteBits(0x00,7);//send 9 bit address to 45D081 buffer1 SPI45D081_WriteBits( (unsigned char)(address>>8) , 1 ); SPI45D081_WriteBits( (unsigned char)(address) , 8 );//fill 8 bits blank SPI45D081_WriteBits( 0x00 , 8 );// receive data dat=SPI45D081_ReadByte() ; SPI45D081_CS=1; // end return(dat); } //注:該程序適用程度可靠,注意使用的方法和硬件連接方式 |