📄 ex8-5.asm
字号:
ACK BIT 10H ;应答标志位
SLA DATA 50H ;器件地址字
SUBA DATA 51H ;器件子地址
NUMBYTE DATA 52H ;读/写字节数
SDA BIT P3.1
SCL BIT P3.0 ;I2C总线定义
MTD EQU 30H ;发送数据缓存区首地址(30H-3FH)
MRD EQU 40H ;接收数据缓存区首地址(40H-4FH)
ORG 0000H
AJMP MAIN
ORG 0030H
;*********************************************************************
;名称:STRRT
;描述:启动I2C总线子程序—发送I2C总线起始条件
;*********************************************************************
START: SETB SDA ;发送起始条件数据信号
NOP ;起始条件建立时间大于4.7us
SETB SCL ;发送起始条件的时钟信号
NOP
NOP
NOP
NOP
NOP ;起始条件锁定时间大于4.7us
CLR SDA ;发送起始信号
NOP
NOP
NOP
NOP ;起始条件锁定时间大于4.7us
CLR SCL ;钳住I2C总线,准备发送或接收数据
NOP
RET
;*********************************************************************
;名称:STOP
;描述:停止I2C总线子程序—发送I2C总线停止条件
;*********************************************************************
STOP: CLR SDA ;发送停止条件的数据信号
NOP
NOP
SETB SCL ;发送停止条件的时钟信号
NOP
NOP
NOP
NOP
NOP ;起始条件建立时间大于4.7us
SETB SDA ;发送I2C总线停止信号
NOP
NOP
NOP
NOP
NOP ;延迟时间大于4.7us
RET
;*********************************************************************
;名称:MACK
;描述:发送应答信号子程序
;*********************************************************************
MACK: CLR SDA ;将SDA置0
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP ;保持数据时间,大于4.7us
CLR SCL
NOP
NOP
RET
;*********************************************************************
;名称:MNACK
;描述:发送非应答信号子程序
;*********************************************************************
MNACK: SETB SDA ;将SDA置1
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL ;保持数据时间,大于4.7us
NOP
NOP
RET
;*********************************************************************
;名称:CACK
;描述:检查应答位子程序,返回值:ACK=1时表示有应答
;*********************************************************************
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP
MOV C,SDA
JC CEND
SETB ACK ;判断应答位
CEND: NOP
CLR SCL
NOP
RET
;*********************************************************************
;名称:WRBYTE
;描述:发送字节子程序,字节数据放入ACC
;*********************************************************************
WRBYTE: MOV R0,#08H
WLP: RLC A ;取数据位
JC WRI
SJMP WRO ;判断数据位
WLP1: DJNZ R0,WLP
NOP
RET
WRI: SETB SDA ;发送1
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
WRO: CLR SDA ;发送0
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
;*********************************************************************
;名称:ADC517
;描述:启动MAX517进行D/A转换子程序,转换数据位于40H
;*********************************************************************
DAC517: LCALL START
MOV A,#58H
LCALL WRBYTE
LCALL MNACK
MOV A,#0
LCALL WRBYTE
LCALL MNACK
MOV A,40H
LCALL WRBYTE
LCALL MNACK
LCALL STOP
RET
;*********************************************************************
;名称:MAIN
;描述:主程序
;*********************************************************************
MAIN: MOV SP,#60H
MOV 40H,#00H
LOOP: LCALL DAC517
INC 40H
SJMP LOOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -