登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

抄都抄错,请帮我看看这个I2C

作者:dragontan 栏目:单片机
抄都抄错,请帮我看看这个I2C
         大家好,我这里有一段I2C的底层函数... ...对不起ZLG的工程师了,我是抄你们的:(
    可惜没抄好。
    写完之后,向I2C从设备发送(地址+读/写)字节,设备无应答!!
     源程序如下,虽然不光彩,但是还是想请各位达人帮我看看。我这程序究竟是错在哪里了???
    在下叩首!
;--------------------------------------------------------------
;-----IIC_HAL.ASM    Version 1.0
;-----Amended by DragonTan @Shenzhen
;-----date 2005-04-12
;-----Fosc= 16.5MHz (12 Clock)T_machine=12/Fosc=0.7us
;-----Especially for FM1073 SHI @100KHZ I2C Compatible
;-----include function: START STOP MACK MNACK CACK WRBYTE RDBYTE
;--------------------------------------------------------------
        SDA        EQU        P1.6
        SCL        EQU        P1.7
        ACK        EQU        13H

;启动I2C总线子程序      
START:    SETB  SDA
          NOP
          SETB  SCL              ;起始条件建立时间大于4.7us
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          CLR  SDA      
          NOP                    ;起始条件锁定时大于4us
          NOP
          NOP
          NOP
          NOP
          NOP
          CLR   SCL              ;钳住总线,准备发数据
          NOP
          RET
          
;结束总线子程序
STOP:     CLR    SDA
          NOP
          SETB   SCL                ;发送结束条件的时钟信号
          NOP                       ;结束总线时间大于4us
          NOP            
          NOP
          NOP
          NOP
          NOP
          SETB  SDA                ;结束总线
          NOP                      ;保证一个终止信号和起始信号的空闲时间大于4.7us
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          RET
          
;发送应答信号子程序
MACK:     CLR      SDA              ;将SDA置0
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          SETB     SCL
          NOP                ;保持数据时间,即SCL为高时间大于4.7us
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          CLR      SCL
          NOP
          NOP
     ;SETB    SDA
          RET

;发送非应答信号
MNACK:    SETB     SDA              ;将SDA置1
          NOP
          NOP
          SETB     SCL
          NOP
             NOP               ;保持数据时间,即SCL为高时间大于4.7us
          NOP
          NOP
          NOP
          NOP
          NOP<
2楼: >>参与讨论
dragontan
PS:I2C的速度最高是100K,低于这个速度也可以。
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教一个问题,怎样用C实现
供NVRAM
我想找一个单片机拨号及DTMF收发电路请各位高人提点
有没有8031控制ISD1420的程序啊?急需
在WAVE中使用C51的问题
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号