51單片機利用SPI讀寫25xx320實例
單片機源碼:
- /********51單片機以SPI總線讀寫MicroChip的25xx320EEPROM程序,2013年11月25日****************/
- # include <reg51.h> //包含單片機寄存器的頭文件
- # include <intrins.h> //包含_nop_()函數定義的頭文件
- sbit CS=P1^3;
- sbit SO=P1^2;
- sbit SI=P1^1;
- sbit SCK=P1^0;
- //SCK=0;
- //CS=1;
- /**************延時n微秒***************/
- void delaynus(unsigned char n,unsigned char i)
- {
- for(i=0;i<n;i++);
- }
- /**************寫允許函數**************/
- void wren(unsigned char enable,unsigned char i)
- {
- CS=0;
- enable=0x06;
- SCK=0;
- delaynus(1,2);
- for(i=0;i<8;i++)
- {
- SI=enable&0x80;
- delaynus(1,2);
- SCK=1;
- enable<<=1;
- delaynus(1,2);
- SCK=0;
- }
- CS=1;
- delaynus(1,5);
- }
- /****************寫禁止函數***************/
- /**void wrds(unsigned char dis,unsigned char i)
- {
- CS=0;
- dis=0x04;
- SCK=0;
- delaynus(1,2);
- for(i=0;i<8;i++)
- {
- SI=dis&0x80;
- delaynus(1,2);
- SCK=1;
- dis<<=1;
- delaynus(1,2);
- SCK=0;
- }
- CS=1;
- }
- /****************寫指令函數***************/
- void wrin(unsigned char write,unsigned char i)
- {
- CS=0;
- write=0x02;
- SCK=0;
- delaynus(1,2);
- for(i=0;i<8;i++)
- {
- SI=write&0x80;
- delaynus(1,2);
- SCK=1;
- write<<=1;
- delaynus(1,2);
- SCK=0;
- }
- }
- /****************寫地址函數***************/
- void wrad(unsigned char adh,unsigned char adl,unsigned char i)
- {
- CS=0;
- SCK=0;
- delaynus(1,2);
- for(i=0;i<8;i++)
- {
- SI=adh&0x80;
- delaynus(1,2);
- SCK=1;
- adh<<=1;
- delaynus(1,2);
- SCK=0;
- }
- for(i=0;i<8;i++)
- {
- SI=adl&0x80;
- delaynus(1,2);
- SCK=1;
- adl<<=1;
- delaynus(1,2);
- SCK=0;
- }
- }
- /****************寫數據函數***************/
- void wrda(unsigned char i,unsigned char dataa)
- {
- CS=0;
- SCK=0;
- delaynus(1,2);
- for(i=0;i<8;i++)
- {
- SI=(dataa&0x80);
- delaynus(1,2);
- SCK=1;
- dataa=(dataa<<1);
- delaynus(1,2);
- SCK=0;
- }
- }
- /****************讀命令函數***************/
- void rdin(unsigned char read,unsigned char i)
- {
- CS=0;
- SCK=0;
- delaynus(1,2);
- read=0x03;
- for(i=0;i<8;i++)
- {
- SI=read&0x80;
- delaynus(1,2);
- SCK=1;
- read=(read<<=1);
- delaynus(1,2);
- SCK=0;
- }
- }
- /****************讀數據函數***************/
- unsigned char rdda()
- {
- unsigned char i;
- unsigned char dat=0;
- delaynus(1,2);
- SCK=0;
- CS=0;
- for(i=0;i<8;i++)
- {
- SCK=1;
- dat<<=1;
- if (SO==1)
- dat|=0x01;
- delaynus(1,2);
- SCK=0;
- delaynus(1,2);
- }
- CS=1;
- return dat;
- }
- main()
- {
- CS=0;
- wren(0x06,0x00);
- wrin(0x02,0);
- wrad(0x00,0x00,0);
- wrda(0,0x80);
- CS=1;
- delaynus(1,20);
- CS=0;
- rdin(0x03,0);
- wrad(0x00,0x00,0);
- delaynus(1,2);
- ACC=rdda();
- P3=ACC;
- CS=1;
- }
復制代碼
完整的Word格式文檔51黑下載地址:
51單片機利用SPI讀寫25xx320實例.rar
(8.36 KB, 下載次數: 73)
2018-7-11 10:26 上傳
點擊文件名下載附件
|