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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PMS154C 24C02 DOME

[復制鏈接]
跳轉到指定樓層
樓主
ID:1135245 發表于 2024-11-3 13:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. //********************************************************************************//
  2. //                功能名稱:        24C02模塊(EEPROM)
  3. //                功能編號:        180201
  4. //                適應芯片:        適用于所有芯片
  5. //--------------------------------------------------------------------------------//
  6. //程序說明:
  7. //        封裝引腳圖如下
  8. //           ┌─┐
  9. //   A0┤  ├VCC
  10. //         A1┤  ├WP
  11. //         A2┤  ├SCL
  12. //        GND┤  ├SDA
  13. //           └─┘
  14. //        引腳A0~A2地址輸入引腳,案例全接GND
  15. //        WP引腳寫保護,接GND進行正常讀寫,接VCC只讀模式,案例接GND
  16. //        案例為寫入一個地址0數據49,然后再讀出該地址的數據
  17. //        地址和數據可以隨意改動,數據的范圍為0~255,
  18. //        超過的范圍請參考連寫或連讀
  19. //注意事項:
  20. //        1.案例為PMS154C,其他芯片原理都相同
  21. //        2.連讀或連寫請參考對應的程序
  22. //********************************************************************************//
  23. #include        "extern.h"

  24. #define _5us    5*2
  25. bit     SCL     :   PA.3;//用于產生器件所有數據發送或接收的時鐘
  26. bit     SDA     :   PA.4;//用于器件所有數據的發送或接收

  27. byte        Address;
  28. byte        data;
  29. byte        Read_Data;
  30. byte        Write_Data;

  31. void    init(void)//初始化函數
  32. {
  33.     SCL = 1;
  34.     .delay _5us;
  35.     SDA = 1;//控制信號拉高
  36.     .delay _5us;
  37. }

  38. void    start(void)//啟動信號子函數//向ROM發送一個開始的信號
  39. {
  40.     SDA = 1;
  41.     .delay _5us;
  42.     SCL = 1;
  43.     .delay _5us;
  44.     SDA = 0;
  45.     .delay _5us;
  46. }

  47. void    stop(void)//停止信號子函數//向ROM發送一個停止的信號
  48. {
  49.     SDA = 0;
  50.     .delay _5us;
  51.     SCl = 1;
  52.     .delay _5us;
  53.     SDA = 1;
  54.     .delay _5us;
  55. }

  56. void    respons(void)//應答信號子函數//接收一信號后應答
  57. {
  58.     $ SDA in,pull;
  59.     .delay 100;
  60.     SCL = 1;
  61.     .delay _5us;
  62.     while(SDA==1)
  63.         nop;
  64.     SCL = 0;
  65.     .delay _5us;
  66.     $ SDA out,high;
  67.     .delay 100;
  68. }

  69. void    write_byte(void)//寫入一個字節數據//向E2PROM寫數據
  70. {
  71.     byte temp = 0,i = 8;
  72.     while(i--)
  73.     {
  74.         SCL = 0;//數據可以改變
  75.         .delay _5us;
  76.         temp = data & 0x80;//保留最高位
  77.         if(temp)//寫一位
  78.             SDA = 1;
  79.         else
  80.             SDA = 0;
  81.         .delay _5us;
  82.         data <<= 1;//要存的數據左移一位
  83.         SCL = 1;//數據穩定不能寫了
  84.         .delay _5us;
  85.     }
  86.     SCL = 0;
  87.     .delay _5us;
  88.     SDA = 1;//穩定數據
  89.     .delay _5us;
  90. }

  91. void    read_byte(void)//讀回一個字節
  92. {
  93.     byte  i = 8;
  94.     SCL = 0;//數據改變
  95.     .delay _5us;
  96.     SDA = 1;//可讀信號
  97.     .delay _5us;
  98.     $ SDA in,pull;
  99.     .delay 100;
  100.     Read_Data = 0;
  101.     while(i--)
  102.     {
  103.         Read_Data = Read_Data << 1;//寫入時從高位寫,讀出時也一樣
  104.         SCL = 1;//數據穩定,可從SDA讀出一位
  105.         .delay _5us;
  106.         if(SDA)
  107.             Read_Data = Read_Data | 0x01;
  108.         else
  109.             Read_Data = Read_Data & 0xfe;
  110.         SCL = 0;//數據改變準備下一位
  111.         .delay _5us;
  112.     }
  113.     $ SDA out,high;
  114.     .delay 100;
  115. }

  116. void    write_add(void)//片內隨意地址寫任意數//根據起始地址、數據個數及數據寫入E2PROM中
  117. {                       //Write_Data   address變量
  118.     start();//起始

  119.     data = 0xa0;//E2PROM地址(ATC02為0xa0)//器件地址+寫控制位
  120.     write_byte();
  121.     respons();//應答

  122.     data = address;//寫入數據要存放的地址
  123.     write_byte();
  124.     respons();//應答

  125.     data = Write_Data;//寫入數據
  126.     write_byte();
  127.     respons();//應答

  128.     stop();//終止
  129. }

  130. void    read_add(void)//片內隨意地址讀數據//根據起始地址和讀出個數,從E2PROM中讀出一串數據
  131. {                   //address變量
  132.     start();//起始

  133.     data = 0xa0;//器件地址+寫控制位
  134.     write_byte();
  135.     respons();//應答

  136.     data = address;//數據地址
  137.     write_byte();
  138.     respons();//應答

  139.     start();//起始

  140.     data = 0xa1;//器件地址+讀控制位
  141.     write_byte();
  142.     respons();

  143.         read_byte();
  144.         .delay 1000;

  145.         stop();//停止
  146. }

  147. void        FPPA0 (void)
  148. {
  149.         .ADJUST_IC        SYSCLK=IHRC/8, IHRC=16MHz, VDD=5V;

  150.     $ SDA out,high;
  151.     $ SCL out,high;

  152.         Address = 0;
  153.     init();
  154.         .delay 100;
  155.         while (1)
  156.         {
  157.                 Address = 0;//地址
  158.                 Write_Data = 49;//數據
  159.                 write_add();//寫入一個數據
  160.                 .delay 5000*2;//延時一下
  161.                 Address = 0;
  162.                 read_add();//讀出寫入的數據
  163.                 nop;
  164.         }
  165. }

  166. void        Interrupt (void)
  167. {
  168.         pushaf;

  169.         if (Intrq.T16)
  170.         {        //        T16 Trig
  171.                 //        User can add code
  172.                 Intrq.T16        =        0;
  173.                 //...
  174.         }

  175.         popaf;
  176. }

復制代碼

原理圖: 無
仿真: 無
代碼: PMS154C 24C02.zip (11.35 KB, 下載次數: 1)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区高清 | 久久精品一区二 | 女人牲交视频一级毛片 | 97精品久久| 亚洲91视频 | 毛片入口| 在线看成人av | 久久成人免费视频 | 干干干操操操 | 国产一区日韩在线 | 午夜视频一区 | 九九热在线精品视频 | 日韩二三区 | 精品美女久久久久久免费 | 精品久久久久久久久久久久久久 | 日韩电影免费观看中文字幕 | 国产中文视频 | 日韩高清在线观看 | 欧美精品欧美精品系列 | 在线视频a| 欧美精品在线观看 | 操操操操操 | 亚洲视频一区在线观看 | 999免费观看视频 | 国产精品国产三级国产aⅴ浪潮 | www.国产91| 亚洲国产专区 | av在线播放网址 | 日本不卡高清视频 | 激情小视频| 99精品视频在线 | 中文字幕在线观看一区二区 | 精品国产一区二区三区观看不卡 | 欧美a级成人淫片免费看 | 亚洲午夜精品 | 亚洲风情在线观看 | 日本又色又爽又黄的大片 | 日韩中文字幕一区二区三区 | 中文字幕三区 | 欧美一级二级视频 | 国产精品一区二区av |