📄 i2c.lis
字号:
0094 .dbline 122
0094 ; I2C_Set_SCL(0);
0094 0027 clr R16
0096 C4DF xcall _I2C_Set_SCL
0098 .dbline 123
0098 ; DIR_REG_I2C |= (1 << SDA_BIT_I2C);
0098 B99A sbi 0x17,1
009A .dbline 124
009A ; Delayms(100);
009A 04E6 ldi R16,100
009C 10E0 ldi R17,0
009E B0DF xcall _Delayms
00A0 .dbline -2
00A0 .dbline 125
00A0 ; }
00A0 L13:
00A0 0E940000 xcall pop_gset2
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbsym r cnt 20 c
00A6 .dbsym r data 22 c
00A6 .dbend
00A6 .dbfunc e I2C_Receive_Byte _I2C_Receive_Byte fc
00A6 ; cnt -> R20
00A6 ; data -> R22
.even
00A6 _I2C_Receive_Byte::
00A6 0E940000 xcall push_gset2
00AA .dbline -1
00AA .dbline 134
00AA ;
00AA ; //***************************************************************
00AA ; // Function : I2C_Receive_Byte
00AA ; // Input : none
00AA ; // Output : Receive a byte from I2C Bus
00AA ; // Description : Receive a byte on I2C Bus with the MSB first.
00AA ; //***************************************************************
00AA ; INT8U I2C_Receive_Byte(void)
00AA ; {
00AA .dbline 135
00AA ; INT8U data = 0;
00AA 6627 clr R22
00AC .dbline 136
00AC ; INT8U cnt = 0;
00AC 4427 clr R20
00AE .dbline 137
00AE ; DIR_REG_I2C &= ~(1 << SDA_BIT_I2C);
00AE B998 cbi 0x17,1
00B0 .dbline 138
00B0 ; PORT_REG_I2C |= (1 << SDA_BIT_I2C);
00B0 C19A sbi 0x18,1
00B2 .dbline 139
00B2 ; for(cnt = 0; cnt < 8;cnt++)
00B2 09C0 xjmp L26
00B4 L23:
00B4 .dbline 140
00B4 ; {
00B4 .dbline 141
00B4 ; I2C_Set_SCL(0);
00B4 0027 clr R16
00B6 B4DF xcall _I2C_Set_SCL
00B8 .dbline 142
00B8 ; I2C_Set_SCL(1);
00B8 01E0 ldi R16,1
00BA B2DF xcall _I2C_Set_SCL
00BC .dbline 143
00BC ; data = data << 1;
00BC 660F lsl R22
00BE .dbline 144
00BE ; if(PIN_REG_I2C & (1 << SDA_BIT_I2C))
00BE B19B sbis 0x16,1
00C0 01C0 rjmp L27
00C2 .dbline 145
00C2 ; {
00C2 .dbline 146
00C2 ; data |= 0x01;
00C2 6160 ori R22,1
00C4 .dbline 147
00C4 ; }
00C4 L27:
00C4 .dbline 148
00C4 L24:
00C4 .dbline 139
00C4 4395 inc R20
00C6 L26:
00C6 .dbline 139
00C6 4830 cpi R20,8
00C8 A8F3 brlo L23
00CA .dbline 149
00CA ; }
00CA ; I2C_Set_SCL(0);
00CA 0027 clr R16
00CC A9DF xcall _I2C_Set_SCL
00CE .dbline 150
00CE ; DIR_REG_I2C |= (1 << SDA_BIT_I2C);
00CE B99A sbi 0x17,1
00D0 .dbline 151
00D0 ; return(data);
00D0 062F mov R16,R22
00D2 .dbline -2
00D2 L22:
00D2 0E940000 xcall pop_gset2
00D6 .dbline 0 ; func end
00D6 0895 ret
00D8 .dbsym r cnt 20 c
00D8 .dbsym r data 22 c
00D8 .dbend
00D8 .dbfunc e I2C_Ack _I2C_Ack fV
00D8 ; ack -> R20
.even
00D8 _I2C_Ack::
00D8 0E940000 xcall push_gset1
00DC 402F mov R20,R16
00DE .dbline -1
00DE .dbline 161
00DE ; }
00DE ;
00DE ; //***************************************************************
00DE ; // Function : I2C_Ack
00DE ; // Input : ack - Whether to ACK the transmitter
00DE ; // Output : none
00DE ; // Description : Acknowledge the transmitter with 0 or 1
00DE ; //***************************************************************
00DE ; void I2C_Ack(INT8U ack)
00DE ; {
00DE .dbline 162
00DE ; if(ack == 0)
00DE 4423 tst R20
00E0 19F4 brne L30
00E2 .dbline 163
00E2 ; {
00E2 .dbline 164
00E2 ; I2C_Set_SDA(0);
00E2 0027 clr R16
00E4 97DF xcall _I2C_Set_SDA
00E6 .dbline 165
00E6 ; }
00E6 02C0 xjmp L31
00E8 L30:
00E8 .dbline 167
00E8 ; else
00E8 ; {
00E8 .dbline 168
00E8 ; I2C_Set_SDA(1);
00E8 01E0 ldi R16,1
00EA 94DF xcall _I2C_Set_SDA
00EC .dbline 169
00EC ; }
00EC L31:
00EC .dbline 170
00EC ; I2C_Set_SCL(1);
00EC 01E0 ldi R16,1
00EE 98DF xcall _I2C_Set_SCL
00F0 .dbline 171
00F0 ; I2C_Set_SCL(0);
00F0 0027 clr R16
00F2 96DF xcall _I2C_Set_SCL
00F4 .dbline -2
00F4 .dbline 172
00F4 ; }
00F4 L29:
00F4 0E940000 xcall pop_gset1
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbsym r ack 20 c
00FA .dbend
00FA .dbfunc e I2C_Send_Data_without_SubAddress _I2C_Send_Data_without_SubAddress fc
00FA ; bData -> R20
00FA ; bDevice -> R22
.even
00FA _I2C_Send_Data_without_SubAddress::
00FA 0E940000 xcall push_gset2
00FE 422F mov R20,R18
0100 602F mov R22,R16
0102 .dbline -1
0102 .dbline 182
0102 ;
0102 ; //***************************************************************
0102 ; // Function : I2C_Send_Data_without_SubAddress
0102 ; // Input : bDevice - Slave Device with a I2C Address,
0102 ; // bData - Data to be transmitted
0102 ; // Output : I2C Operation Status - Success(1)/Fail(0)
0102 ; // Description : Transmit a data to Slave without SubAddress
0102 ; //***************************************************************
0102 ; INT8U I2C_Send_Data_without_SubAddress(INT8U bDevice,INT8U bData)
0102 ; {
0102 .dbline 183
0102 ; I2C_Start_Condition();
0102 94DF xcall _I2C_Start_Condition
0104 .dbline 184
0104 ; I2C_Send_Byte(bDevice);
0104 062F mov R16,R22
0106 A0DF xcall _I2C_Send_Byte
0108 .dbline 185
0108 ; if(bI2C_Ack == 0)
0108 20900000 lds R2,_bI2C_Ack
010C 2220 tst R2
010E 11F4 brne L33
0110 .dbline 186
0110 ; {
0110 .dbline 187
0110 ; return(0);
0110 0027 clr R16
0112 0AC0 xjmp L32
0114 L33:
0114 .dbline 189
0114 ; }
0114 ; I2C_Send_Byte(bData);
0114 042F mov R16,R20
0116 98DF xcall _I2C_Send_Byte
0118 .dbline 190
0118 ; if(bI2C_Ack == 0)
0118 20900000 lds R2,_bI2C_Ack
011C 2220 tst R2
011E 11F4 brne L35
0120 .dbline 191
0120 ; {
0120 .dbline 192
0120 ; return(0);
0120 0027 clr R16
0122 02C0 xjmp L32
0124 L35:
0124 .dbline 194
0124 ; }
0124 ; I2C_Stop_Condition();
0124 8BDF xcall _I2C_Stop_Condition
0126 .dbline 195
0126 ; return(1);
0126 01E0 ldi R16,1
0128 .dbline -2
0128 L32:
0128 0E940000 xcall pop_gset2
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r bData 20 c
012E .dbsym r bDevice 22 c
012E .dbend
012E .dbfunc e I2C_Send_Data_with_SubAddress _I2C_Send_Data_with_SubAddress fc
012E ; bData -> y+4
012E ; bAddress -> R20
012E ; bDevice -> R22
.even
012E _I2C_Send_Data_with_SubAddress::
012E 0E940000 xcall push_gset2
0132 422F mov R20,R18
0134 602F mov R22,R16
0136 .dbline -1
0136 .dbline 207
0136 ; }
0136 ;
0136 ; //***************************************************************
0136 ; // Function : I2C_Send_Data_with_SubAddress
0136 ; // Input : bDevice - Slave Device with a I2C Address,
0136 ; // bAddress - SubAddress of the Slave,
0136 ; // bData - Data to be transmitted
0136 ; // Output : I2C Operation Status - Success(1)/Fail(0)
0136 ; // Description : Transmit a data to Slave with SubAddress
0136 ; //***************************************************************
0136 ; INT8U I2C_Send_Data_with_SubAddress(INT8U bDevice,INT8U bAddress,INT8U bData)
0136 ; {
0136 .dbline 208
0136 ; I2C_Start_Condition();
0136 7ADF xcall _I2C_Start_Condition
0138 .dbline 209
0138 ; I2C_Send_Byte(bDevice);
0138 062F mov R16,R22
013A 86DF xcall _I2C_Send_Byte
013C .dbline 210
013C ; if(bI2C_Ack == 0)
013C 20900000 lds R2,_bI2C_Ack
0140 2220 tst R2
0142 11F4 brne L38
0144 .dbline 211
0144 ; {
0144 .dbline 212
0144 ; return(0);
0144 0027 clr R16
0146 12C0 xjmp L37
0148 L38:
0148 .dbline 214
0148 ; }
0148 ; I2C_Send_Byte(bAddress);
0148 042F mov R16,R20
014A 7EDF xcall _I2C_Send_Byte
014C .dbline 215
014C ; if(bI2C_Ack == 0)
014C 20900000 lds R2,_bI2C_Ack
0150 2220 tst R2
0152 11F4 brne L40
0154 .dbline 216
0154 ; {
0154 .dbline 217
0154 ; return(0);
0154 0027 clr R16
0156 0AC0 xjmp L37
0158 L40:
0158 .dbline 219
0158 ; }
0158 ; I2C_Send_Byte(bData);
0158 0C81 ldd R16,y+4
015A 76DF xcall _I2C_Send_Byte
015C .dbline 220
015C ; if(bI2C_Ack == 0)
015C 20900000 lds R2,_bI2C_Ack
0160 2220 tst R2
0162 11F4 brne L42
0164 .dbline 221
0164 ; {
0164 .dbline 222
0164 ; return(0);
0164 0027 clr R16
0166 02C0 xjmp L37
0168 L42:
0168 .dbline 224
0168 ; }
0168 ; I2C_Stop_Condition();
0168 69DF xcall _I2C_Stop_Condition
016A .dbline 225
016A ; return(1);
016A 01E0 ldi R16,1
016C .dbline -2
016C L37:
016C 0E940000 xcall pop_gset2
0170 .dbline 0 ; func end
0170 0895 ret
0172 .dbsym l bData 4 c
0172 .dbsym r bAddress 20 c
0172 .dbsym r bDevice 22 c
0172 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -