三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 412|回复: 0
打印 上一主题 下一主题

Ex047-AT24C02实验

[复制链接]

1657

主题

1684

帖子

5684

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5684
跳转到指定楼层
楼主
发表于 2017-5-26 12:47:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验目的:
1.学习24C02驱动编写方法
2.学习24C02使用方法
示例代码:
  1. import pyb
  2. from pyb import Pin,delay,udelay
  3. from at24c02 import _24C02

  4. def test_main():
  5.     i=0
  6.     ee=_24C02(scl_pin=Pin.board.B6, sda_pin=Pin.board.B7)
  7.     ee.AT24C02_WriteOneByteOnAddr(10,i)
  8.     delay(1000)
  9.     while ee.AT24C02_ReadOneByteFromAddr(10)==i:
  10.         print(ee.AT24C02_ReadOneByteFromAddr(10))
  11.         i=i+1
  12.         ee.AT24C02_WriteOneByteOnAddr(10,i)
  13.         delay(1000)
复制代码
驱动代码:
  1. from pyb import Pin
  2. from pyb import delay,udelay


  3. class _24C02(object):
  4.     def __init__(self, scl_pin, sda_pin):
  5.         self.scl_pin = scl_pin
  6.         self.sda_pin = sda_pin

  7.         self.scl_pin.init(Pin.OUT_PP)
  8.         self.scl_pin.low()
  9.         self.sda_pin.init(Pin.OUT_PP)
  10.         self.sda_pin.low()
  11.         

  12.     def AT24C02_Start(self):
  13.         self.sda_pin.init(Pin.OUT_PP)
  14.         self.sda_pin.high()
  15.         udelay(5)
  16.         self.scl_pin.high()
  17.         self.sda_pin.low()
  18.         udelay(5)
  19.         self.scl_pin.low()       


  20.     def AT24C02_Stop(self):
  21.         self.sda_pin.init(Pin.OUT_PP)
  22.         self.sda_pin.low()
  23.         udelay(5)
  24.         self.scl_pin.high()
  25.         self.sda_pin.high()


  26.     def AT24C02_NoAck(self):
  27.         self.sda_pin.init(Pin.OUT_PP)
  28.         self.sda_pin.high()       
  29.         self.scl_pin.high()
  30.         udelay(5)
  31.         self.scl_pin.low()


  32.     def AT24C02_SlaveAck(self):
  33.         i=0
  34.         self.sda_pin.init(Pin.IN, Pin.PULL_UP)
  35.         self.sda_pin.high()
  36.         udelay(5)
  37.         self.scl_pin.high()
  38.         udelay(10)
  39.         while ((self.sda_pin.value() == 1) and (i < 250)):
  40.             i=i+1            
  41.         self.scl_pin.low()



  42.     def AT24C02_SendOneByte(self,ucData):
  43.         self.sda_pin.init(Pin.OUT_PP)
  44.         for i in range(0,8):
  45.             if ucData & 0x80:
  46.                 self.sda_pin.high()
  47.             else:
  48.                 self.sda_pin.low()
  49.             self.scl_pin.high()
  50.             udelay(5)
  51.             self.scl_pin.low()
  52.             ucData= ucData << 1          


  53.     def AT24C02_ReadOneByte(self):
  54.         ucBackValue = 0
  55.         self.sda_pin.init(Pin.IN, Pin.PULL_UP)
  56.         for i in range(0,8):
  57.             self.scl_pin.high()
  58.             udelay(5)
  59.             if(self.sda_pin.value() == 1):
  60.                 ucBackValue = ucBackValue | (0x80>>i)
  61.             self.scl_pin.low()
  62.         return ucBackValue


  63.     def AT24C02_WriteOneByteOnAddr(self,uiAddr,ucData):
  64.         ucSlaveAddr=0xa0        
  65.         self.AT24C02_Start()
  66.         self.AT24C02_SendOneByte(ucSlaveAddr)
  67.         self.AT24C02_SlaveAck()
  68.         self.AT24C02_SendOneByte(uiAddr)                                         
  69.         self.AT24C02_SlaveAck()
  70.         self.AT24C02_SendOneByte(ucData)
  71.         self.AT24C02_SlaveAck()
  72.         self.AT24C02_Stop()
  73.         delay(1)                                                  


  74.     def AT24C02_ReadOneByteFromAddr(self,uiAddr):                                         
  75.         ucBackValue=0                                         
  76.         ucSlaveAddr = 0xa0         
  77.         self.AT24C02_Start()                                                          
  78.         self.AT24C02_SendOneByte(ucSlaveAddr)                                 
  79.         self.AT24C02_SlaveAck()
  80.         self.AT24C02_SendOneByte(uiAddr)                                         
  81.         self.AT24C02_SlaveAck()
  82.         self.AT24C02_Start()                                                         
  83.         self.AT24C02_SendOneByte(ucSlaveAddr+1)                        
  84.         self.AT24C02_SlaveAck()
  85.         ucBackValue = self.AT24C02_ReadOneByte()                                         
  86.         self.AT24C02_NoAck()                                                 
  87.         self.AT24C02_Stop()                                                         
  88.         return ucBackValue


复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2026-5-3 19:51 , Processed in 0.025842 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表