📄 ex8-5.sdi
字号:
,,,ACK BIT 10H ;应答标志位
,,,SLA DATA 50H ;器件地址字
,,,SUBA DATA 51H ;器件子地址
,,,NUMBYTE DATA 52H ;读/写字节数
000B,,,SDA BIT P3.1
000B,,,SCL BIT P3.0 ;I2C总线定义
,,,MTD EQU 30H ;发送数据缓存区首地址(30H-3FH)
,,,MRD EQU 40H ;接收数据缓存区首地址(40H-4FH)
,,, ORG 0000H
0000,01 D2,, AJMP MAIN
,,, ORG 0030H
,,,
,,,;*********************************************************************
,,,;名称:STRRT
,,,;描述:启动I2C总线子程序—发送I2C总线起始条件
,,,;*********************************************************************
0030,D2 B1,START,START: SETB SDA ;发送起始条件数据信号
0032,00,, NOP ;起始条件建立时间大于4.7us
0033,D2 B0,, SETB SCL ;发送起始条件的时钟信号
0035,00,, NOP
0036,00,, NOP
0037,00,, NOP
0038,00,, NOP
0039,00,, NOP ;起始条件锁定时间大于4.7us
003A,C2 B1,, CLR SDA ;发送起始信号
003C,00,, NOP
003D,00,, NOP
003E,00,, NOP
003F,00,, NOP ;起始条件锁定时间大于4.7us
0040,C2 B0,, CLR SCL ;钳住I2C总线,准备发送或接收数据
0042,00,, NOP
0043,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:STOP
,,,;描述:停止I2C总线子程序—发送I2C总线停止条件
,,,;*********************************************************************
0044,C2 B1,STOP,STOP: CLR SDA ;发送停止条件的数据信号
0046,00,, NOP
0047,00,, NOP
0048,D2 B0,, SETB SCL ;发送停止条件的时钟信号
004A,00,, NOP
004B,00,, NOP
004C,00,, NOP
004D,00,, NOP
004E,00,, NOP ;起始条件建立时间大于4.7us
004F,D2 B1,, SETB SDA ;发送I2C总线停止信号
0051,00,, NOP
0052,00,, NOP
0053,00,, NOP
0054,00,, NOP
0055,00,, NOP ;延迟时间大于4.7us
0056,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:MACK
,,,;描述:发送应答信号子程序
,,,;*********************************************************************
0057,C2 B1,MACK,MACK: CLR SDA ;将SDA置0
0059,00,, NOP
005A,00,, NOP
005B,D2 B0,, SETB SCL
005D,00,, NOP
005E,00,, NOP
005F,00,, NOP
0060,00,, NOP
0061,00,, NOP ;保持数据时间,大于4.7us
0062,C2 B0,, CLR SCL
0064,00,, NOP
0065,00,, NOP
0066,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:MNACK
,,,;描述:发送非应答信号子程序
,,,;*********************************************************************
0067,D2 B1,MNACK,MNACK: SETB SDA ;将SDA置1
0069,00,, NOP
006A,00,, NOP
006B,D2 B0,, SETB SCL
006D,00,, NOP
006E,00,, NOP
006F,00,, NOP
0070,00,, NOP
0071,00,, NOP
0072,C2 B0,, CLR SCL ;保持数据时间,大于4.7us
0074,00,, NOP
0075,00,, NOP
0076,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:CACK
,,,;描述:检查应答位子程序,返回值:ACK=1时表示有应答
,,,;*********************************************************************
0077,D2 B1,CACK,CACK: SETB SDA
0079,00,, NOP
007A,00,, NOP
007B,D2 B0,, SETB SCL
007D,C2 10,, CLR ACK
007F,00,, NOP
0080,00,, NOP
0081,A2 B1,, MOV C,SDA
0083,40 02,, JC CEND
0085,D2 10,, SETB ACK ;判断应答位
0087,00,CEND,CEND: NOP
0088,C2 B0,, CLR SCL
008A,00,, NOP
008B,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:WRBYTE
,,,;描述:发送字节子程序,字节数据放入ACC
,,,;*********************************************************************
008C,78 08,WRBYTE,WRBYTE: MOV R0,#08H
008E,33,WLP,WLP: RLC A ;取数据位
008F,40 06,, JC WRI
0091,80 12,, SJMP WRO ;判断数据位
0093,D8 F9,WLP1,WLP1: DJNZ R0,WLP
0095,00,, NOP
0096,22,, RET
0097,D2 B1,WRI,WRI: SETB SDA ;发送1
0099,00,, NOP
009A,D2 B0,, SETB SCL
009C,00,, NOP
009D,00,, NOP
009E,00,, NOP
009F,00,, NOP
00A0,00,, NOP
00A1,C2 B0,, CLR SCL
00A3,80 EE,, SJMP WLP1
00A5,C2 B1,WRO,WRO: CLR SDA ;发送0
00A7,00,, NOP
00A8,D2 B0,, SETB SCL
00AA,00,, NOP
00AB,00,, NOP
00AC,00,, NOP
00AD,00,, NOP
00AE,00,, NOP
00AF,C2 B0,, CLR SCL
00B1,80 E0,, SJMP WLP1
,,,
,,,
,,,;*********************************************************************
,,,;名称:ADC517
,,,;描述:启动MAX517进行D/A转换子程序,转换数据位于40H
,,,;*********************************************************************
00B3,12 00 30,DAC517,DAC517: LCALL START
00B6,74 58,, MOV A,#58H
00B8,12 00 8C,, LCALL WRBYTE
00BB,12 00 67,, LCALL MNACK
00BE,74 00,, MOV A,#0
00C0,12 00 8C,, LCALL WRBYTE
00C3,12 00 67,, LCALL MNACK
00C6,E5 40,, MOV A,40H
00C8,12 00 8C,, LCALL WRBYTE
00CB,12 00 67,, LCALL MNACK
00CE,12 00 44,, LCALL STOP
00D1,22,, RET
,,,
,,,;*********************************************************************
,,,;名称:MAIN
,,,;描述:主程序
,,,;*********************************************************************
00D2,75 81 60,MAIN,MAIN: MOV SP,#60H
00D5,75 40 00,, MOV 40H,#00H
00D8,12 00 B3,LOOP,LOOP: LCALL DAC517
00DB,05 40,, INC 40H
00DD,80 F9,, SJMP LOOP
,,,
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -