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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3383|回復: 0
打印 上一主題 下一主題
收起左側

DSP281x 讀寫EEPROM 24C02例程

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. /******************************************************************/
  2. /*Copyright (C), 2008-2009, 力天電子,LiTian Tech.Co.Ltd.                  */
  3. /*  Module Name   : GPIO                                                                            */
  4. /*  File Name     : main.c                                                                                     */        
  5. /*  Author             : 侯長波                                        */     
  6. /*  Version             : 2.0                                           */         
  7. /*  Function      : 讀寫EEPROM 24C02                                                     */                       
  8. /*  Description   :                                                                               */            
  9. /******************************************************************/

  10. /*****************頭文件********************/  
  11. #include "DSP281x_Device.h"
  12. #include "System.h"

  13. /****************端口宏定義*****************/
  14. #define SCL_OUT GpioDataRegs.GPDDAT.bit.GPIOD0
  15. #define SCL_DIR GpioMuxRegs.GPDDIR.bit.GPIOD0
  16. #define SDA_DAT GpioDataRegs.GPDDAT.bit.GPIOD1
  17. #define SDA_DIR GpioMuxRegs.GPDDIR.bit.GPIOD1  

  18. /****************常量宏定義*****************/
  19. #define TRUE    1
  20. #define FALSE   0  

  21. /***************全局變量定義****************/
  22. unsigned char w_buffer[8]={23,18,18,20,32,25,28,29};
  23. unsigned char r_buffer[8]={0};

  24. /****************函數聲明*******************/
  25. void Init_24C02(void);
  26. void Set_SDA_In(void);
  27. void Set_SDA_Out(void);
  28. void Start_IIC(void);
  29. void Stop_IIC(void);
  30. void Master_ACK(void);
  31. void Master_NO_ACK(void);
  32. void Write_Byte(unsigned char content);
  33. unsigned char Read_Byte(void);
  34. unsigned char EEPROM_Check(void);
  35. void EEPROM_Write_Byte(unsigned char Adr,unsigned char Data);
  36. unsigned char EEPROM_Read_Byte(unsigned char Adr);
  37. void EEPROM_Write_Page(unsigned char Adr,unsigned char length,unsigned char *Data);
  38. void EEPROM_Read_Page(unsigned char Adr,unsigned length,unsigned char *buffer);
  39. unsigned char EEPROM_Current_Addr_Read(void);
  40. void EEPROM_Sequential_Read(unsigned length,unsigned char *buffer);

  41. /*------------------------------------------*/
  42. /*形式參數:void                            */
  43. /*返回值:void                                                */
  44. /*函數描述:主函數                                        */
  45. /*------------------------------------------*/
  46. void main(void)
  47. {
  48.         unsigned char i,temp=0,w_data=17,err=0,r_data;
  49.         unsigned char * pointer;
  50.         InitSysCtrl();  // 系統初始化子程序,在DSP28_sysctrl.c中
  51.         Init_24C02();
  52.         for(i=0;i<8;i++)
  53.                 r_buffer[i]=0;
  54.         for(i=0;i<5;i++)
  55.         {
  56.                 EEPROM_Write_Byte(temp++,w_data++);
  57.         }
  58.         temp=0;
  59.         w_data=17;
  60.         for(i=0;i<5;i++)
  61.         {
  62.                 r_data=EEPROM_Read_Byte(temp++);
  63.                 if(r_data!=w_data)
  64.                         err=err+1;
  65.                 w_data++;
  66.         }
  67.         EEPROM_Write_Page(0x28,8,w_buffer);
  68.         EEPROM_Read_Page(0x28,8,r_buffer);
  69.         while(1);   
  70. }

  71. /*------------------------------------------*/
  72. /*形式參數:void                                            */
  73. /*返回值: void                                                      */
  74. /*函數描述:初始化24C02                                            */
  75. /*------------------------------------------*/
  76. void Init_24C02(void)
  77. {
  78.         EALLOW;
  79.         SCL_DIR=1;
  80.           SDA_DIR=1;
  81.         EDIS;
  82. }   

  83. /*------------------------------------------*/
  84. /*形式參數:void                            */
  85. /*返回值:void                                                */
  86. /*函數描述:設置SDA引腳輸入                        */
  87. /*------------------------------------------*/  
  88. void Set_SDA_In(void)
  89. {
  90.           EALLOW;       
  91.           SDA_DIR=0;
  92.           EDIS;
  93. }

  94. /*------------------------------------------*/
  95. /*形式參數:void                            */
  96. /*返回值:void                                                */
  97. /*函數描述:設置SDA引腳輸出                        */
  98. /*------------------------------------------*/
  99. void Set_SDA_Out(void)
  100. {
  101.           EALLOW;       
  102.           SDA_DIR=1;
  103.           EDIS;
  104. }

  105. /*------------------------------------------*/
  106. /*形式參數:void                            */
  107. /*返回值:void                                                */
  108. /*函數描述:完成IIC的起始條件操作            */
  109. /*------------------------------------------*/
  110. void Start_IIC(void)
  111. {
  112.         unsigned char i;
  113.           SCL_OUT=1;
  114.           SDA_DAT=1;
  115.           for(i=0;i<30;i++);
  116.         SDA_DAT=0;
  117.           for(i=0;i<30;i++);
  118.           SCL_OUT=0;
  119.           for(i=0;i<30;i++);
  120. }

  121. /*------------------------------------------*/
  122. /*形式參數:void                            */
  123. /*返回值:void                                                */
  124. /*函數描述:完成IIC的終止條件操作            */
  125. /*------------------------------------------*/  
  126. void Stop_IIC(void)
  127. {
  128.         unsigned char i;
  129.           SDA_DAT=0;
  130.           for(i=0;i<30;i++);
  131.           SCL_OUT=1;
  132.           for(i=0;i<30;i++);
  133.           SDA_DAT=1;
  134.           for(i=0;i<30;i++);          
  135. }

  136. /*------------------------------------------*/
  137. /*形式參數:void                            */
  138. /*返回值:void                                                */
  139. /*函數描述:完成IIC的主機應答操作            */
  140. /*------------------------------------------*/  
  141. void Master_ACK(void)
  142. {
  143.           unsigned char i;
  144.           SDA_DAT=0;
  145.           for(i=0;i<30;i++);
  146.           SCL_OUT=1;
  147.           for(i=0;i<30;i++);       
  148.           SCL_OUT=0;
  149.           for(i=0;i<10;i++);
  150.           SDA_DAT=1;     
  151.           for(i=0;i<30;i++);       
  152. }

  153. /*------------------------------------------*/
  154. /*形式參數:void                            */
  155. /*返回值:void                                                */
  156. /*函數描述:完成IIC的主機無應答操作          */
  157. /*------------------------------------------*/  
  158. void Master_NO_ACK(void)
  159. {
  160.           unsigned char i;
  161.           SDA_DAT=1;
  162.           for(i=0;i<30;i++);
  163.           SCL_OUT=1;
  164.           for(i=0;i<30;i++);       
  165.           SCL_OUT=0;
  166.           for(i=0;i<30;i++);
  167.           SDA_DAT=0;
  168.           for(i=0;i<30;i++);               
  169. }

  170. /*------------------------------------------*/
  171. /*形式參數:void                            */
  172. /*返回值:從機是否有應答:1--有,0--無       */
  173. /*函數描述:檢查從機的應答操作                        */
  174. /*------------------------------------------*/  
  175. unsigned char EEPROM_Check(void)
  176. {
  177.           unsigned char i,Slave_ACK;
  178.           SDA_DAT=1;
  179.           for(i=0;i<30;i++);
  180.           SCL_OUT=1;
  181.           for(i=0;i<30;i++);
  182.           Set_SDA_In();
  183.           for(i=0;i<30;i++);
  184.           Slave_ACK = SDA_DAT;   //讀入SDA數值
  185.           SCL_OUT=0;
  186.           for(i=0;i<30;i++);
  187.           Set_SDA_Out();       
  188.           if(Slave_ACK==0)
  189.                   return TRUE;   
  190.           else            
  191.             return FALSE;
  192. }

  193. /*------------------------------------------*/
  194. /*形式參數:content--發送的數據             */
  195. /*返回值:void                                                        */
  196. /*函數描述:向IIC總線發送一個字節的數據      */
  197. /*------------------------------------------*/  
  198. void Write_Byte(unsigned char content)
  199. {
  200.           unsigned char i,j;
  201.           for(i = 8;i > 0;i--)
  202.           {
  203.             if((content&0x80)==0x80)       
  204.             {
  205.                       SDA_DAT=1;
  206.                       for(j=0;j<30;j++);
  207.                       SCL_OUT=1;
  208.                       for(j=0;j<30;j++);
  209.                       SCL_OUT=0;                       
  210.                       for(j=0;j<30;j++);
  211.             }
  212.             else
  213.             {
  214.                       SDA_DAT=0;
  215.                       for(j=0;j<30;j++);
  216.                       SCL_OUT=1;
  217.                       for(j=0;j<30;j++);
  218.                       SCL_OUT=0;                       
  219.                       for(j=0;j<30;j++);
  220.             }
  221.                 content <<= 1;
  222.           }                  
  223.           SDA_DAT=1;
  224.           for(i=0;i<30;i++);
  225. }

  226. /*------------------------------------------*/
  227. /*形式參數:void                                            */
  228. /*返回值:讀出的數據                                                    */
  229. /*函數描述:從IIC總線讀一個字節的數據        */
  230. /*------------------------------------------*/
  231. unsigned char Read_Byte(void)
  232. {
  233.         unsigned char i,j,temp=0;
  234.           for(i = 0;i < 8;i++)
  235.           {
  236.                 Set_SDA_Out();
  237.                 SDA_DAT=1;
  238.                 SCL_OUT=1;
  239.                 for(j=0;j<30;j++);
  240.                 Set_SDA_In();
  241.             if(SDA_DAT==1)
  242.                       temp |= (0x01 << (7-i));
  243.             SCL_OUT=0;
  244.                 for(j=0;j<30;j++);
  245.           }
  246.         Set_SDA_Out();
  247.           return(temp);
  248. }

  249. /*------------------------------------------*/
  250. /*形式參數:Adr--地址,Data--數據           */
  251. /*返回值:void                                                            */
  252. /*函數描述:向指定地址寫入一個字節的數據     */
  253. /*------------------------------------------*/
  254. void EEPROM_Write_Byte(unsigned char Adr,unsigned char Data)
  255. {
  256.         unsigned char temp=0;
  257.         unsigned int i;
  258.           Start_IIC();//啟用數據總線
  259.           Write_Byte(0xA0);//發送寫命令
  260.           temp=EEPROM_Check();//等待ACK
  261.           if(temp==FALSE)
  262.           {
  263.             return;
  264.           }
  265.           Write_Byte(Adr);//發送指針寄存器
  266.           temp=EEPROM_Check();//等待ACK
  267.           if(temp==FALSE)
  268.           {
  269.             return;
  270.           }
  271.           Write_Byte(Data);//發送數據
  272.           temp=EEPROM_Check();//等待ACK
  273.           if(temp==FALSE)
  274.           {
  275.             return;
  276.           }
  277.           Stop_IIC();
  278.         for(i=0;i<10000;i++);//等待寫入完成
  279. }

  280. /*------------------------------------------*/
  281. /*形式參數:Adr--地址                                    */
  282. /*返回值:從指定的地址讀處的數據                      */
  283. /*函數描述:從指定地址讀出一個字節的數據     */
  284. /*------------------------------------------*/
  285. unsigned char EEPROM_Read_Byte(unsigned char Adr)
  286. {
  287.         unsigned char temp=0,r_data;
  288.           Start_IIC();//啟用數據總線
  289.           Write_Byte(0xA0);//發送寫命令
  290.           temp=EEPROM_Check();//等待ACK
  291.           if(temp==FALSE)
  292.           {
  293.             return FALSE;
  294.           }
  295.           Write_Byte(Adr);//發送指針寄存器
  296.           temp=EEPROM_Check();//等待ACK
  297.           if(temp==FALSE)
  298.           {
  299.             return FALSE;
  300.           }
  301.         Start_IIC();//啟用數據總線
  302.         Write_Byte(0xA1);//發送讀命令
  303.           temp=EEPROM_Check();//等ACK
  304.           if(temp==FALSE)
  305.           {
  306.             return FALSE;
  307.           }
  308.         r_data=Read_Byte();
  309.         Master_NO_ACK();
  310.           Stop_IIC();
  311.         return r_data;
  312. }   

  313. /*------------------------------------------*/
  314. /*形式參數:Adr--地址 length--長度 *Data--指向數據的指針*/
  315. /*返回值:void                                                            */
  316. /*函數描述:向指定地址寫入一個字節的數據     */
  317. /*------------------------------------------*/   
  318. void EEPROM_Write_Page(unsigned char Adr,unsigned char length,unsigned char *Data)
  319. {
  320.         unsigned char temp=0;
  321.         unsigned int i,j;
  322.           Start_IIC();//啟用數據總線
  323.           Write_Byte(0xA0);//發送寫命令
  324.           temp=EEPROM_Check();//等待ACK
  325.           if(temp==FALSE)
  326.           {
  327.             return;
  328.           }
  329.           Write_Byte(Adr);//發送指針寄存器
  330.           temp=EEPROM_Check();//等待ACK
  331.           if(temp==FALSE)
  332.           {
  333.             return;
  334.           }
  335.         for(i=0;i<length;i++)
  336.         {
  337.                   Write_Byte(*Data);//發送數據
  338.                 Data++;
  339.                   temp=EEPROM_Check();//等待ACK       
  340.                   if(temp==FALSE)
  341.                   {
  342.                     return;
  343.                   }
  344.         }
  345.           Stop_IIC();
  346.         for(j=0;j<10000;j++);//等待寫入完成
  347. }  

  348. /*------------------------------------------*/
  349. /*形式參數:Adr--地址 length--長度 buffer--數據存儲區*/
  350. /*返回值:void                                                              */
  351. /*函數描述:從指定地址讀出length個字節的數據 */
  352. /*------------------------------------------*/
  353. void EEPROM_Read_Page(unsigned char Adr,unsigned length,unsigned char *buffer)
  354. {
  355.         unsigned char temp=0,i;
  356.           Start_IIC();//啟用數據總線
  357.           Write_Byte(0xA0);//發送寫命令
  358.           temp=EEPROM_Check();//等待ACK
  359.           if(temp==FALSE)
  360.           {
  361.             return ;
  362.           }
  363.           Write_Byte(Adr);//發送指針寄存器
  364.           temp=EEPROM_Check();//等待ACK
  365.           if(temp==FALSE)
  366.           {
  367.             return ;
  368.           }
  369.         Start_IIC();//啟用數據總線
  370.         Write_Byte(0xA1);//發送讀命令
  371.           temp=EEPROM_Check();//等待ACK
  372.           if(temp==FALSE)
  373.           {
  374.             return ;
  375.           }
  376.         for(i=0;i<length-1;i++)
  377.         {
  378.                 *buffer=Read_Byte();
  379.                 buffer++;
  380.                 Master_ACK();
  381.         }
  382.         *buffer=Read_Byte();
  383.         Master_NO_ACK();
  384.           Stop_IIC();
  385. }
  386.    
  387. /*------------------------------------------*/
  388. ……………………

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

所有資料51hei提供下載:
EE.rar (1.09 MB, 下載次數: 30)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人激情网 | 91影片| 一级大片免费 | 亚洲精品小视频在线观看 | 久久久久久久久久久久亚洲 | 日本男人天堂 | 日韩一区二区三区精品 | 18性欧美 | 91麻豆精品国产91久久久久久 | 三级av网址 | 91精品国产手机 | 日本一区二区高清不卡 | 午夜黄色影院 | 91精品一区二区 | 伊人精品久久久久77777 | 亚洲精品乱码8久久久久久日本 | 国产一区二区在线免费视频 | 一本在线 | 中文字幕一区在线观看视频 | 久久狼人天堂 | www.国产精品 | 日本精品一区二区三区在线观看视频 | 日本精品一区二区三区在线观看视频 | 国产一区三区视频 | 日韩精品一区二区三区中文字幕 | 日本免费一区二区三区视频 | 久久国产成人 | 日本福利片 | 国产一级免费视频 | 中文字幕99 | 久久com| 亚洲精品日韩综合观看成人91 | 国产免费视频在线 | 一级做a爰片久久毛片免费看 | 久久中文字幕视频 | 亚洲午夜视频 | 欧美日韩亚洲在线 | 男女羞羞网站 | 一区二区电影网 | av香港经典三级级 在线 | 精品一区在线免费观看 |