久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4974|回復: 4
收起左側

51單片機利用SPI讀寫25xx320 EEPROM實例程序

[復制鏈接]
ID:369278 發表于 2018-7-11 10:26 | 顯示全部樓層 |閱讀模式
51單片機利用SPI讀寫25xx320實例
0.png

單片機源碼:
  1. /********51單片機以SPI總線讀寫MicroChip的25xx320EEPROM程序,2013年11月25日****************/
  2. # include <reg51.h>    //包含單片機寄存器的頭文件
  3. # include <intrins.h>   //包含_nop_()函數定義的頭文件
  4. sbit CS=P1^3;
  5. sbit SO=P1^2;
  6. sbit SI=P1^1;
  7. sbit SCK=P1^0;
  8. //SCK=0;
  9. //CS=1;
  10. /**************延時n微秒***************/
  11. void delaynus(unsigned char n,unsigned char i)
  12. {
  13.         for(i=0;i<n;i++);
  14. }
  15. /**************寫允許函數**************/
  16. void wren(unsigned char enable,unsigned char i)
  17. {
  18.         CS=0;
  19.         enable=0x06;
  20.         SCK=0;
  21.         delaynus(1,2);
  22.         for(i=0;i<8;i++)
  23.         {
  24.         SI=enable&0x80;
  25.         delaynus(1,2);
  26.         SCK=1;
  27.         enable<<=1;
  28.         delaynus(1,2);
  29.         SCK=0;
  30.         }
  31.         CS=1;
  32.         delaynus(1,5);
  33. }
  34. /****************寫禁止函數***************/
  35. /**void wrds(unsigned char dis,unsigned char i)
  36. {
  37.         CS=0;
  38.         dis=0x04;
  39.         SCK=0;
  40.         delaynus(1,2);
  41.         for(i=0;i<8;i++)
  42.         {
  43.         SI=dis&0x80;
  44.         delaynus(1,2);
  45.         SCK=1;
  46.         dis<<=1;
  47.         delaynus(1,2);
  48.         SCK=0;
  49.         }
  50.         CS=1;
  51. }
  52. /****************寫指令函數***************/
  53. void wrin(unsigned char write,unsigned char i)
  54. {
  55.         CS=0;
  56.         write=0x02;
  57.         SCK=0;
  58.         delaynus(1,2);
  59.         for(i=0;i<8;i++)
  60.         {
  61.         SI=write&0x80;
  62.         delaynus(1,2);
  63.         SCK=1;
  64.         write<<=1;
  65.         delaynus(1,2);
  66.         SCK=0;
  67.         }
  68. }
  69. /****************寫地址函數***************/
  70. void wrad(unsigned char adh,unsigned char adl,unsigned char i)
  71. {
  72.         CS=0;
  73.         SCK=0;
  74.         delaynus(1,2);
  75.         for(i=0;i<8;i++)
  76.         {
  77.         SI=adh&0x80;
  78.         delaynus(1,2);
  79.         SCK=1;
  80.         adh<<=1;
  81.         delaynus(1,2);
  82.         SCK=0;
  83.         }
  84.         for(i=0;i<8;i++)
  85.         {
  86.         SI=adl&0x80;
  87.         delaynus(1,2);
  88.         SCK=1;
  89.         adl<<=1;
  90.         delaynus(1,2);
  91.         SCK=0;
  92.         }       
  93. }
  94. /****************寫數據函數***************/
  95. void wrda(unsigned char i,unsigned char dataa)
  96. {
  97.         CS=0;
  98.         SCK=0;
  99.         delaynus(1,2);
  100.         for(i=0;i<8;i++)
  101.         {
  102.         SI=(dataa&0x80);
  103.         delaynus(1,2);
  104.         SCK=1;
  105.         dataa=(dataa<<1);
  106.         delaynus(1,2);
  107.         SCK=0;
  108.         }
  109. }
  110. /****************讀命令函數***************/
  111. void rdin(unsigned char read,unsigned char i)
  112. {
  113.         CS=0;
  114.         SCK=0;
  115.         delaynus(1,2);
  116.         read=0x03;
  117.         for(i=0;i<8;i++)
  118.         {
  119.         SI=read&0x80;
  120.         delaynus(1,2);
  121.         SCK=1;
  122.         read=(read<<=1);
  123.         delaynus(1,2);
  124.         SCK=0;
  125.         }
  126. }
  127. /****************讀數據函數***************/
  128. unsigned char rdda()
  129. {
  130.         unsigned char i;
  131.         unsigned char dat=0;
  132.         delaynus(1,2);
  133.         SCK=0;
  134.         CS=0;
  135.         for(i=0;i<8;i++)
  136.         {
  137.         SCK=1;
  138.         dat<<=1;
  139.         if (SO==1)
  140.         dat|=0x01;
  141.         delaynus(1,2);
  142.         SCK=0;
  143.         delaynus(1,2);
  144.         }
  145.         CS=1;
  146.         return dat;
  147. }
  148. main()
  149. {
  150.         CS=0;
  151.         wren(0x06,0x00);
  152.         wrin(0x02,0);
  153.         wrad(0x00,0x00,0);
  154.         wrda(0,0x80);
  155.         CS=1;
  156.         delaynus(1,20);
  157.         CS=0;
  158.         rdin(0x03,0);
  159.         wrad(0x00,0x00,0);
  160.         delaynus(1,2);
  161.         ACC=rdda();
  162.         P3=ACC;
  163.         CS=1;
  164. }
復制代碼

完整的Word格式文檔51黑下載地址:
51單片機利用SPI讀寫25xx320實例.rar (8.36 KB, 下載次數: 73)
回復

使用道具 舉報

ID:510044 發表于 2019-7-28 01:01 | 顯示全部樓層
最近剛好用到SPI,參考下,謝謝。
回復

使用道具 舉報

ID:475247 發表于 2020-3-21 16:49 | 顯示全部樓層
大家不要下,這個不行的,25xx320在Proteus中就沒有,下到也不能仿真
回復

使用道具 舉報

ID:849913 發表于 2021-11-4 12:57 | 顯示全部樓層
寫地址函數只有兩個字節最多能到512K 要是遇到大于512K 的 怎么辦呢?是在寫地址函數里面再加一個字節碼?
回復

使用道具 舉報

ID:289218 發表于 2022-4-14 21:27 | 顯示全部樓層
還有誰? 發表于 2020-3-21 16:49
大家不要下,這個不行的,25xx320在Proteus中就沒有,下到也不能仿真

25LC320
32K
SPI
有這個芯片
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费观看羞羞视频网站 | 日韩一级欧美一级 | 手机在线不卡av | 国产一区二区免费 | 成人精品久久 | 国产精品国产精品国产专区不卡 | 岛国精品| 一区二区高清在线观看 | 一区久久 | 日韩在线播放一区 | 国产视频在线观看一区二区三区 | 国产精品久久久久久 | 精品一区二区在线观看 | 天堂网中文字幕在线观看 | 亚洲理论在线观看电影 | 亚洲国产日本 | 午夜爽爽爽男女免费观看 | 欧美激情精品久久久久久免费 | 欧美三级在线 | 亚洲男人的天堂网站 | 亚洲欧美日韩电影 | 午夜丰满少妇一级毛片 | 免费一级毛片 | 亚洲福利在线观看 | 一区二区三区四区在线视频 | heyzo在线 | 亚洲欧美精品国产一级在线 | h视频在线免费观看 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产91精品网站 | 亚洲精品久久久久国产 | 日韩一区二区三区视频在线观看 | 国内精品视频免费观看 | 人妖videosex高潮另类 | 国产成人综合亚洲欧美94在线 | 日本精品视频 | 久久久久无码国产精品一区 | 天天拍天天操 | 日韩视频免费 | 在线观看中文字幕 | 日韩一二区 |