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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7738|回復: 1
收起左側

IIC_EEPROM_24LC64芯片與TMS320F2812完成讀寫操作

[復制鏈接]
ID:162777 發表于 2018-7-12 12:09 | 顯示全部樓層 |閱讀模式
給大家分享一個IIC_EEPROM_24LC64存儲芯片與TMS320F2812 dsp讀寫操作的源碼
0.png

dsp源程序如下:
  1. /*********************************************************************
  2. **        實驗目的:學習IIC接口的EEPROM數據讀寫                            **
  3. **        實驗說明:EEPROM采用24LC64芯片,串行數據線和串行時鐘線分別由DSP的 **
  4. **           PA13和PA15控制                                         **
  5. **        實驗結果:按照我們下面所設置的斷點運行可讀出我們寫入EEPROM里的值 **                                   **
  6. **********************************************************************/


  7. #include "DSP28_Device.h"
  8. #include "DSP28_Globalprototypes.h"


  9. #define          SDA1            GpioDataRegs.GPADAT.bit.GPIOA13 = 1////串行數據輸出高
  10. #define          SDA0      GpioDataRegs.GPADAT.bit.GPIOA13 = 0////串行數據輸出低
  11. #define          SCL1            GpioDataRegs.GPADAT.bit.GPIOA15 = 1////串行時鐘輸出高
  12. #define          SCL0      GpioDataRegs.GPADAT.bit.GPIOA15 = 0////串行時鐘輸出低

  13.      
  14. #define          SDAIN          EALLOW;GpioMuxRegs.GPADIR.bit.GPIOA13  = 0; EDIS
  15. #define          SDAOUT    EALLOW;GpioMuxRegs.GPADIR.bit.GPIOA13  = 1;EDIS

  16. #define          SDADATA          GpioDataRegs.GPADAT.bit.GPIOA13

  17. //24C64  =8K Bytes =13bit Add
  18. //頁編程平均400us寫一字節,隨機讀平均1.8ms讀一字節,連續讀平均600us一字節
  19. #define  uchar unsigned char         /*宏定義*/
  20. #define  uint  unsigned int


  21. void delay(unsigned int t);
  22. unsigned char ByteRead(unsigned int add,unsigned char *temp);
  23. unsigned char ByteWrite(unsigned int add,unsigned char dat);

  24. void main(void)
  25. {   
  26.     unsigned char t,s,a;

  27.         /*初始化系統*/
  28.         InitSysCtrl();

  29.         /*關中斷*/
  30.         DINT;
  31.         IER = 0x0000;
  32.         IFR = 0x0000;
  33.         /*初始化PIE*/
  34.         InitPieCtrl();

  35.         /*初始化PIE中斷矢量表*/
  36.         InitPieVectTable();        
  37.         

  38.    
  39.         InitGpio();
  40.     SDA1;
  41.         SCL1;

  42.     t=0;

  43.     s=ByteWrite(0,0x12);
  44.     delay(10000);
  45.     s=ByteRead(0,&t);
  46.     a=0;//設斷點,看變量t的值

  47.     s=ByteWrite(1,0x34);
  48.     delay(10000);
  49.     s=ByteRead(1,&t);
  50.         a=1; //設斷點

  51.         s=ByteWrite(2,0x56);
  52.         delay(10000);
  53.     s=ByteRead(2,&t);
  54.         a=2; //設斷點

  55.         s=ByteWrite(3,0x78);
  56.         delay(10000);
  57.     s=ByteRead(3,&t);
  58.         a=3; //設斷點


  59.         for(;;);

  60. }         

  61. void delay(unsigned int t)
  62. {
  63.   while(t>0) t--;
  64.   
  65. }



  66. //總線無效期間二線全為主高,總線有效期間時鐘線為低,一個高低跳變為一個時鐘
  67. //周期,時鐘線為低時才能改變數據線狀態,若時鐘線為高時改變數據線狀態,則只
  68. //能是開始或結束總線操作

  69. unsigned char ack;                         /*應答標志位*/
  70.    

  71. /*******************************************************************
  72.                      起動總線函數   
  73. 時鐘線在高電平時,數據線從高向低的跳變開始總線,最終二線全變低            
  74. 函數原型: void  Start_I2c();  
  75. 功能:     啟動I2C總線,即發送I2C起始條件.  
  76. ********************************************************************/
  77. void Start_I2c()
  78. {
  79.   SDA1;                   /*先跳高,為稍后的從高向低跳作準備*/
  80.   delay(60);
  81.   SCL1;
  82.   delay(500);   /*起始條件建立時間大于4.7us,延時*/
  83.   SDA0;                   /*發送起始信號*/
  84.   delay(60);    /* 起始條件鎖定時間大于4μs*/
  85.   SCL0;                   /*鉗住I2C總線,準備發送或接收數據 */
  86.   delay(60);
  87. }


  88. /*******************************************************************
  89.                       結束總線函數   
  90. 時鐘線在低電平時,數據線從低向高的跳變結束總線,最終二線都變高            
  91. 函數原型: void  Stop_I2c();  
  92. 功能:     結束I2C總線,即發送I2C結束條件.  
  93. ********************************************************************/
  94. void Stop_I2c()
  95. {
  96.   SDA0;                  /*先跳低,為稍后的從低向高跳變作準備*/
  97.   delay(60);
  98.   SCL1;                  /*發送結束條件的時鐘信號,結束條件建立時間大于4μs*/
  99.   delay(60);
  100.   SDA1;                  /*發送I2C總線結束信號*/
  101.   delay(60);
  102. }



  103. /*******************************************************************
  104.                  字節數據發送函數               
  105. 函數原型: void  SendByte(uchar c);
  106. 功能:     將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
  107.           此狀態位進行操作.(不應答或非應答都使ack=0)     
  108.                發送數據正常,ack=1; ack=0表示被控器無應答或損壞。
  109. ********************************************************************/
  110. unsigned char   SendByte(uchar c)
  111. {
  112. uchar BitCnt,t[8];
  113. for(BitCnt=0;BitCnt<8;BitCnt++)          /*要傳送的數據長度為8位*/
  114.     {
  115.      if((c<<BitCnt)&0x80)
  116.         t[BitCnt]=1;                                   /*判斷發送位*/
  117.      else  
  118.        t[BitCnt]=0;  
  119.         }
  120.          
  121.          SCL0;
  122.          delay(4);

  123. for(BitCnt=0;BitCnt<8;BitCnt++)          /*要傳送的數據長度為8位*/
  124.     { SCL0;
  125.      if(t[BitCnt])SDA1;                           /*判斷發送位*/
  126.        else  SDA0;               
  127.      delay(60);
  128.      SCL1;                               /*置時鐘線為高,通知被控器開始接收數據位*/
  129.      delay(60);                     /*保證時鐘高電平周期大于4μs*/
  130.       
  131.      // if((BitCnt==7) && t[BitCnt])
  132.         //        SDAIN;  //設為輸入                       
  133.     }         
  134.          
  135.     SCL0;
  136.         SDAIN;  //設為輸入
  137.     delay(60);           
  138.      SCL1;

  139.     if(SDADATA)ack=1;                    //沒有收到應答信號
  140.        else ack=0;                        //收到應答信號


  141.         delay(60);
  142.     SCL0;
  143.     delay(60);         
  144.         SDAOUT;                                         //重新設為輸出
  145.          
  146.         
  147.         return ack;
  148. }




  149. /*******************************************************************
  150.                  字節數據接收函數               
  151. 函數原型: uchar  RcvByte();
  152. 功能:            用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
  153.           發完后請用應答函數應答從機。  
  154. ********************************************************************/        
  155. uchar  RcvByte()
  156. {
  157.   uchar retc;
  158.   uchar BitCnt;
  159.   
  160.   retc=0;
  161.   SCL0;                               //先將時鐘線拉低

  162.   SDAIN;                                     /*置數據線為輸入方式*/
  163.   for(BitCnt=0;BitCnt<8;BitCnt++)
  164.       {      
  165.         SCL0;                          /*置時鐘線為低,準備接收數據位*/
  166.         delay(60);                     /*時鐘低電平周期大于4.7μs*/      
  167.         SCL1;                          /*置時鐘線為高使數據線上數據有效*/
  168.         retc=retc<<1;
  169.         if(SDADATA)
  170.                    retc=retc+1;                  /*讀數據位,接收的數據位放入retc中 */
  171.         delay(60);
  172.       }
  173.   SCL0; //從器件數據輸了階段在這一位后沒有響應,數據線補外部上拉電阻臨時拉為高
  174.   
  175.   delay(60);
  176.   SDAOUT;
  177.   return(retc);
  178.   
  179. }



  180. /*******************************************************************
  181.                  接口函數                                   
  182. *******************************************************************/


  183. unsigned char ByteRead(unsigned int add,unsigned char *temp)
  184. {
  185.         unsigned char rt;
  186.           rt=0;
  187.           Start_I2c();                       /*啟動總線*/
  188.           if(SendByte(0xa0))                 /*發送寫命令*/
  189.             rt=1;
  190.           if(SendByte(add>>8))              //發送地址
  191.             rt= 2;
  192.           if(SendByte(add))                     //發送地址
  193.             rt= 3;
  194.           Start_I2c();                       /*啟動總線*/
  195.           if(SendByte(0xa1))                   //發送讀命令
  196.                    rt= 4;
  197.    
  198.           *temp=RcvByte();
  199.         
  200.           Stop_I2c();                        /*結束總線*/
  201.   
  202.           return rt;
  203. }

  204. unsigned char ByteWrite(unsigned int add,unsigned char dat)
  205. {

  206.         unsigned char rt;
  207. ……………………

  208. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:

IIC_EEPROM_24LC64芯片與TMS320F2812完成讀寫操作.rar (250.44 KB, 下載次數: 63)


回復

使用道具 舉報

ID:480811 發表于 2021-4-21 23:19 | 顯示全部樓層
正好有個項目要用這塊,謝謝了
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清一区 | 日韩图区| www.一级毛片 | 91精品国产欧美一区二区 | 国产aⅴ爽av久久久久久久 | 欧美精品影院 | 激情欧美一区二区三区中文字幕 | 在线视频成人 | 羞羞网站在线观看 | 在线精品观看 | 久久男人| 国内精品免费久久久久软件老师 | 欧美三级电影在线播放 | 国产一区二区三区 | 亚洲国产情侣 | 成人免费一区二区 | 一级毛片在线播放 | 完全免费在线视频 | 久久视频免费看 | 羞羞的视频网站 | 日韩一区二区在线播放 | 久草欧美视频 | 国产欧美精品一区二区色综合 | 91视频一区二区三区 | av激情影院 | 国产精品久久久久久久久久久久久 | 91传媒在线观看 | 欧美一区二区三区精品 | 人人艹人人 | 久久99视频这里只有精品 | 久久精品国产免费一区二区三区 | 国产精品成人免费 | 二区三区视频 | 中文字幕在线观看第一页 | 久久国产精99精产国高潮 | 日韩在线免费 | 欧美午夜精品理论片a级按摩 | 日本精品一区二区三区在线观看视频 | 国产乱码精品一区二区三区中文 | 精品99在线 | 欧美国产一区二区三区 |