电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>C语言|源代码>I2C汇编程序

I2C汇编程序

2009-03-02 | rar | 6 | 次下载 | 免费

资料介绍

I2C汇编程序:/*****
;FileName: IicSMasU.a51
;Describe: 51 系列模拟I2C 总线主控器驱动程序
;Date: 2003/11/12
;*****/
$include (IicSMasU.inc)
public _IicTxdRxd
public SlvAddr
public SubAddr
/**************
*
;Name: bit _IicTxdRxd(TxdByte,RxdByte,&IicDataBuf)
;Describe: 发送数据给被控器/接收来自被控器的数据
;Input: TxdByte=要发送数据的字节数
; RxdByte=要接收数据的字节数
; IicDataBuf=发送/接收缓冲区的首字节
; (SlvAddr(被控器地址),SubAddr(单元地址))
;Output: C(Retry=1):操作失败标志
; IicDataBuf=接收到的数据的首字节(主接收时有效)
;调用说明:
; A.现行地址写: SlvAddr(写) !!!(带SubAddr 的器件不能使用该子程序)
; TxdByte=(发送数据字节数(SubAddr 为第一个要发送的数据))
; RxdByte=0
; B.指定地址写: SlvAddr(写),SubAddr
; TxdByte=(1+发送数据字节数)
; RxdByte=0
; C.现行地址读: SlvAddr(读)

; TxdByte=0
; RxdByte=要接收数据的字节数
; D.指定地址读: SlvAddr(读),SubAddr
; TxdByte=1
; RxdByte=要接收数据的字节数
;Nesting level: 1
;Change: A,C,R1, R4~R7
;*********************
****/
BitSegIicSM SEGMENT BIT overlayable
RSEG BitSegIicSM
Retry: dbit 1 指明I2C 最后的数据传送失败应该重复操作
BITEA: DBIT 1 存中断状态
DataSegIicSM SEGMENT DATA overlayable
RSEG DataSegIicSM
SlvAddr: ds 1 被控器地址
SubAddr: ds 1 单元地址
TxdByte equ r7 要发送数据的字节数(第一传递参数)
RxdByte equ r5 要接收数据的字节数(第二传递参数)
WaitXTm macro X 延时X 个机器周期
if X=0
exitm
endif
if X=1
nop
endif
if X=2
nop
nop
endif
if X=3
nop
nop
nop
endif
if X>255
error "the number of X is too much"
else
mov r6,#X/2
DJNZ r6,$
endif

endm
CodeSegIicSM SEGMENT CODE
RSEG CodeSegIicSM
_IicTxdRxd:
SETB Retry 设置错误标志位
/*****
;发送起动条件
;*****/
SendStart:
SETB SDA
SETB SCL
WaitXTm IicDelay
CLR SDA 产生起始信号
WaitXTm IicDelay
CLR SCL 结束起动条件
/*****
;送被控器地址地址,数据
;*****/
SendSlaAdr:
MOV A,SlvAddr
CJNE TxdByte,#0,SendSlaAdr1
SETB ACC.0 TxdByte=0 时进行读操作
SendSlaAdr1:
SETB C 检测应答位时释放SDA 线
CALL XmByte
JC IicErr 无应答出错
JB ACC.0,ReceiveData SlaAdr.0=1 时进行读操作
;写操作
MOV A,SubAddr
SendData:
SETB C 检测应答位时释放SDA 线
CALL XmByte
JC IicErr 无应答出错
MOV A,@R1
INC R1
DJNZ TxdByte,SendData
DEC R1
MOV A,RxdByte
JNZ SendStart RxdByte>0 时进行读操作
JMP SendStop

/*****
;Name: RcvByte
;Describe: 接收1 字节数据(接收8 位,发送+1 位(非)应答位)
;Input: C=1:发送非应答位(通知slave 停止通信)
; C=0:发送应答位(通知slave 继续发送后续字节)
;Output: A=接收到的数据, C=(非)应答位
;Use: A,R4,C,R6(WaitXTm)
;*****/
RcvByte:
MOV A,#0FFH 释放SDA 线允许输入
/*****
;Name: XmByte
;Describe: 发送1 字节数据(发送8 位,接收1 位(非)应答位)
;Input: A=待发送的数据, C=1(检测应答位时释放SDA 线)
;Output: C=1:slave 非应答(slave 不响应)
; C=0:slave 应答(slave 接收成功)
;Use: A,R4,C,R6(WaitXTm)

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1490次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  92次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  10次下载  |  免费
  11. 6基于AT89C2051/4051单片机编程器的实验
  12. 0.11 MB  |  4次下载  |  免费
  13. 7蓝牙设备在嵌入式领域的广泛应用
  14. 0.63 MB  |  3次下载  |  免费
  15. 89天练会电子电路识图
  16. 5.91 MB  |  3次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30320次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537791次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233045次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费