📄 i2c.lst
字号:
294 1 I2C_Start();
295 1 //发送从机地址
296 1 I2C_Write(SlaveAddr);
297 1 if ( I2C_GetAck() )
298 1 {
299 2 I2C_Stop();
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 11
300 2 return 1;
301 2 }
302 1 //发送子地址
303 1 I2C_Write(SubAddr);
304 1 if ( I2C_GetAck() )
305 1 {
306 2 I2C_Stop();
307 2 return 1;
308 2 }
309 1 //发送重复起始条件
310 1 I2C_Start();
311 1 //发送从机地址
312 1 SlaveAddr |= 0x01;
313 1 I2C_Write(SlaveAddr);
314 1 if ( I2C_GetAck() )
315 1 {
316 2 I2C_Stop();
317 2 return 1;
318 2 }
319 1 //接收数据
320 1 for (;;)
321 1 {
322 2 *dat++ = I2C_Read();
323 2 if ( --Size == 0 )
324 2 {
325 3 I2C_PutAck(1);
326 3 break;
327 3 }
328 2 I2C_PutAck(0);
329 2 }
330 1 //接收完毕,停止I2C总线,并返回结果
331 1 I2C_Stop();
332 1 return 0;
333 1 }
334
335
336 /*
337 函数:I2C_Get()
338 功能:主机通过I2C总线从从机接收1个字节的数据
339 参数:
340 SlaveAddr:从机地址(高7位是从机地址,最低位是读标志1)
341 SubAddr:从机的子地址
342 *dat:保存接收到的数据
343 返回:
344 0:接收成功
345 1:在接收过程中出现异常
346 */
347 bit I2C_Get(unsigned char SlaveAddr, unsigned char SubAddr, char *dat)
348 {
349 1 return I2C_Gets(SlaveAddr,SubAddr,1,dat);
350 1 }
351
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION I2C_Init (BEGIN)
; SOURCE LINE # 30
; SOURCE LINE # 31
; SOURCE LINE # 32
0000 D2B4 SETB I2C_SCL
; SOURCE LINE # 33
0002 750005 R MOV I2C_Delay_t,#05H
0005 ?C0001:
0005 D500FD R DJNZ I2C_Delay_t,?C0001
0008 ?C0002:
; SOURCE LINE # 34
0008 D2B5 SETB I2C_SDA
; SOURCE LINE # 35
000A 750005 R MOV I2C_Delay_t,#05H
000D ?C0003:
000D D500FD R DJNZ I2C_Delay_t,?C0003
; SOURCE LINE # 36
0010 ?C0005:
0010 22 RET
; FUNCTION I2C_Init (END)
; FUNCTION I2C_Start (BEGIN)
; SOURCE LINE # 48
; SOURCE LINE # 49
; SOURCE LINE # 50
0000 D2B5 SETB I2C_SDA
; SOURCE LINE # 51
0002 750005 R MOV I2C_Delay_t,#05H
0005 ?C0006:
0005 D500FD R DJNZ I2C_Delay_t,?C0006
0008 ?C0007:
; SOURCE LINE # 52
0008 D2B4 SETB I2C_SCL
; SOURCE LINE # 53
000A 750005 R MOV I2C_Delay_t,#05H
000D ?C0008:
000D D500FD R DJNZ I2C_Delay_t,?C0008
0010 ?C0009:
; SOURCE LINE # 54
0010 C2B5 CLR I2C_SDA
; SOURCE LINE # 55
0012 750005 R MOV I2C_Delay_t,#05H
0015 ?C0010:
0015 D500FD R DJNZ I2C_Delay_t,?C0010
0018 ?C0011:
; SOURCE LINE # 56
0018 C2B4 CLR I2C_SCL
; SOURCE LINE # 57
001A 750005 R MOV I2C_Delay_t,#05H
001D ?C0012:
001D D500FD R DJNZ I2C_Delay_t,?C0012
; SOURCE LINE # 58
0020 ?C0014:
0020 22 RET
; FUNCTION I2C_Start (END)
; FUNCTION _I2C_Write (BEGIN)
; SOURCE LINE # 67
;---- Variable 'dat' assigned to Register 'R7' ----
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 13
; SOURCE LINE # 68
; SOURCE LINE # 69
;---- Variable 't' assigned to Register 'R6' ----
0000 7E08 MOV R6,#08H
0002 ?C0017:
; SOURCE LINE # 71
; SOURCE LINE # 72
0002 EF MOV A,R7
0003 33 RLC A
0004 92B5 MOV I2C_SDA,C
; SOURCE LINE # 73
0006 EF MOV A,R7
0007 25E0 ADD A,ACC
0009 FF MOV R7,A
; SOURCE LINE # 74
000A D2B4 SETB I2C_SCL
; SOURCE LINE # 75
000C 750005 R MOV I2C_Delay_t,#05H
000F ?C0018:
000F D500FD R DJNZ I2C_Delay_t,?C0018
0012 ?C0019:
; SOURCE LINE # 76
0012 C2B4 CLR I2C_SCL
; SOURCE LINE # 77
0014 750005 R MOV I2C_Delay_t,#05H
0017 ?C0020:
0017 D500FD R DJNZ I2C_Delay_t,?C0020
; SOURCE LINE # 78
001A ?C0015:
001A DEE6 DJNZ R6,?C0017
; SOURCE LINE # 79
001C 22 RET
; FUNCTION _I2C_Write (END)
; FUNCTION I2C_Read (BEGIN)
; SOURCE LINE # 87
;---- Variable 'dat' assigned to Register 'R7' ----
; SOURCE LINE # 88
; SOURCE LINE # 90
;---- Variable 't' assigned to Register 'R6' ----
0000 7E08 MOV R6,#08H
; SOURCE LINE # 91
0002 D2B5 SETB I2C_SDA
0004 ?C0025:
; SOURCE LINE # 93
; SOURCE LINE # 94
0004 D2B4 SETB I2C_SCL
; SOURCE LINE # 95
0006 750005 R MOV I2C_Delay_t,#05H
0009 ?C0026:
0009 D500FD R DJNZ I2C_Delay_t,?C0026
000C ?C0027:
; SOURCE LINE # 96
000C EF MOV A,R7
000D 25E0 ADD A,ACC
000F FF MOV R7,A
; SOURCE LINE # 97
0010 30B503 JNB I2C_SDA,?C0028
0013 430701 ORL AR7,#01H
0016 ?C0028:
; SOURCE LINE # 98
0016 C2B4 CLR I2C_SCL
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 14
; SOURCE LINE # 99
0018 750005 R MOV I2C_Delay_t,#05H
001B ?C0029:
001B D500FD R DJNZ I2C_Delay_t,?C0029
; SOURCE LINE # 100
001E ?C0023:
001E DEE4 DJNZ R6,?C0025
; SOURCE LINE # 101
; SOURCE LINE # 102
0020 ?C0031:
0020 22 RET
; FUNCTION I2C_Read (END)
; FUNCTION L?0084 (BEGIN)
0000 5306FE ANL AR6,#0FEH
0003 120000 R LCALL I2C_Start
0006 AF06 MOV R7,AR6
0008 120000 R LCALL _I2C_Write
; FUNCTION I2C_GetAck (BEGIN)
; SOURCE LINE # 115
; SOURCE LINE # 116
; SOURCE LINE # 118
000B D2B5 SETB I2C_SDA
; SOURCE LINE # 119
000D 750005 R MOV I2C_Delay_t,#05H
0010 ?C0032:
0010 D500FD R DJNZ I2C_Delay_t,?C0032
0013 ?C0033:
; SOURCE LINE # 120
0013 D2B4 SETB I2C_SCL
; SOURCE LINE # 121
0015 750005 R MOV I2C_Delay_t,#05H
0018 ?C0034:
0018 D500FD R DJNZ I2C_Delay_t,?C0034
001B ?C0035:
; SOURCE LINE # 122
001B A2B5 MOV C,I2C_SDA
001D 9200 R MOV ack,C
; SOURCE LINE # 123
001F C2B4 CLR I2C_SCL
; SOURCE LINE # 124
0021 750005 R MOV I2C_Delay_t,#05H
0024 ?C0036:
0024 D500FD R DJNZ I2C_Delay_t,?C0036
0027 ?C0037:
; SOURCE LINE # 125
0027 A200 R MOV C,ack
; SOURCE LINE # 126
0029 ?C0038:
0029 22 RET
; FUNCTION I2C_GetAck (END)
; FUNCTION I2C_PutAck (BEGIN)
; SOURCE LINE # 139
; SOURCE LINE # 140
; SOURCE LINE # 141
0000 A200 R MOV C,ack
0002 92B5 MOV I2C_SDA,C
; SOURCE LINE # 142
0004 750005 R MOV I2C_Delay_t,#05H
0007 ?C0039:
0007 D500FD R DJNZ I2C_Delay_t,?C0039
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 15
000A ?C0040:
; SOURCE LINE # 143
000A D2B4 SETB I2C_SCL
; SOURCE LINE # 144
000C 750005 R MOV I2C_Delay_t,#05H
000F ?C0041:
000F D500FD R DJNZ I2C_Delay_t,?C0041
0012 ?C0042:
; SOURCE LINE # 145
0012 C2B4 CLR I2C_SCL
; SOURCE LINE # 146
0014 750005 R MOV I2C_Delay_t,#05H
0017 ?C0043:
0017 D500FD R DJNZ I2C_Delay_t,?C0043
; SOURCE LINE # 147
001A ?C0045:
001A 22 RET
; FUNCTION I2C_PutAck (END)
; FUNCTION I2C_Stop (BEGIN)
; SOURCE LINE # 158
; SOURCE LINE # 159
; SOURCE LINE # 160
;---- Variable 't' assigned to Register 'R6/R7' ----
0000 7F01 MOV R7,#01H
0002 7E00 MOV R6,#00H
; SOURCE LINE # 161
0004 C2B5 CLR I2C_SDA
; SOURCE LINE # 162
0006 750005 R MOV I2C_Delay_t,#05H
0009 ?C0046:
0009 D500FD R DJNZ I2C_Delay_t,?C0046
000C ?C0047:
; SOURCE LINE # 163
000C D2B4 SETB I2C_SCL
; SOURCE LINE # 164
000E 750005 R MOV I2C_Delay_t,#05H
0011 ?C0048:
0011 D500FD R DJNZ I2C_Delay_t,?C0048
0014 ?C0049:
; SOURCE LINE # 165
0014 D2B5 SETB I2C_SDA
; SOURCE LINE # 166
0016 750005 R MOV I2C_Delay_t,#05H
0019 ?C0050:
0019 D500FD R DJNZ I2C_Delay_t,?C0050
001C ?C0052:
; SOURCE LINE # 167
001C EF MOV A,R7
001D 1F DEC R7
001E 7001 JNZ ?C0076
0020 1E DEC R6
0021 ?C0076:
0021 14 DEC A
0022 4E ORL A,R6
0023 70F7 JNZ ?C0052
; SOURCE LINE # 168
0025 ?C0054:
0025 22 RET
; FUNCTION I2C_Stop (END)
; FUNCTION _I2C_Puts (BEGIN)
C51 COMPILER V8.16 I2C 10/04/2008 14:53:01 PAGE 16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -