📄 i2cslave.lis
字号:
0094 8068 ori R24,128
0096 86BF out 0x36,R24
0098 .dbline 151
0098 L16:
0098 .dbline -2
0098 L14:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r ackFlag 16 c
009A .dbend
009A .dbfunc e i2cGetReceivedByte _i2cGetReceivedByte fc
.even
009A _i2cGetReceivedByte::
009A .dbline -1
009A .dbline 155
009A ; else
009A ; {
009A ; // ackFlag = FALSE: 数据接收后无回应
009A ; TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);
009A ; }
009A ; }
009A ;
009A ; unsigned char i2cGetReceivedByte(void)
009A ; {
009A .dbline 157
009A ; // 返回接收到的数据
009A ; return( TWDR );
009A 03B1 in R16,0x3
009C .dbline -2
009C L17:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbend
009E .dbfunc e i2cGetStatus _i2cGetStatus fc
.even
009E _i2cGetStatus::
009E .dbline -1
009E .dbline 161
009E ; }
009E ;
009E ; unsigned char i2cGetStatus(void)
009E ; {
009E .dbline 163
009E ; // 返回总线状态
009E ; return(TWSR);
009E 01B1 in R16,0x1
00A0 .dbline -2
00A0 L18:
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbend
00A2 .dbfunc e i2cSlaveReceiveService _i2cSlaveReceiveService fV
00A2 ; i -> R20
00A2 ; receiveData -> R18,R19
00A2 ; receiveDataLength -> R16
.even
00A2 _i2cSlaveReceiveService::
00A2 0E940000 xcall push_gset1
00A6 .dbline -1
00A6 .dbline 167
00A6 ; }
00A6 ; // 从操作
00A6 ; void i2cSlaveReceiveService(unsigned char receiveDataLength, unsigned char* receiveData)
00A6 ; {
00A6 .dbline 171
00A6 ; unsigned char i;
00A6 ; //此函数在本机被选中为从写入时运行
00A6 ; // 接收到的数据存入本地缓冲区
00A6 ; for(i=0; i<receiveDataLength; i++)
00A6 4427 clr R20
00A8 0BC0 xjmp L23
00AA L20:
00AA .dbline 172
00AA .dbline 173
00AA 80E0 ldi R24,<_localBuffer
00AC 90E0 ldi R25,>_localBuffer
00AE E42F mov R30,R20
00B0 FF27 clr R31
00B2 E80F add R30,R24
00B4 F91F adc R31,R25
00B6 D901 movw R26,R18
00B8 2D90 ld R2,X+
00BA 9D01 movw R18,R26
00BC 2082 std z+0,R2
00BE .dbline 174
00BE L21:
00BE .dbline 171
00BE 4395 inc R20
00C0 L23:
00C0 .dbline 171
00C0 4017 cp R20,R16
00C2 98F3 brlo L20
00C4 .dbline 175
00C4 ; {
00C4 ; localBuffer[i] = *receiveData++;
00C4 ; }
00C4 ; localBufferLength = receiveDataLength; //接收的数据个数
00C4 00930300 sts _localBufferLength,R16
00C8 .dbline -2
00C8 L19:
00C8 0E940000 xcall pop_gset1
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r i 20 c
00CE .dbsym r receiveData 18 pc
00CE .dbsym r receiveDataLength 16 c
00CE .dbend
00CE .dbfunc e i2cSlaveTransmitService _i2cSlaveTransmitService fc
00CE ; i -> R20
00CE ; transmitData -> R18,R19
00CE ; transmitDataLengthMax -> R16
.even
00CE _i2cSlaveTransmitService::
00CE 0E940000 xcall push_gset1
00D2 .dbline -1
00D2 .dbline 180
00D2 ;
00D2 ; }
00D2 ;
00D2 ; unsigned char i2cSlaveTransmitService(unsigned char transmitDataLengthMax, unsigned char* transmitData)
00D2 ; {
00D2 .dbline 185
00D2 ; unsigned char i;
00D2 ;
00D2 ; //此函数在本机被选中为从读出时运行
00D2 ; //要发送的数据存入发送缓冲区
00D2 ; for(i=0; i<localBufferLength; i++)
00D2 4427 clr R20
00D4 0BC0 xjmp L28
00D6 L25:
00D6 .dbline 186
00D6 .dbline 187
00D6 80E0 ldi R24,<_localBuffer
00D8 90E0 ldi R25,>_localBuffer
00DA E42F mov R30,R20
00DC FF27 clr R31
00DE E80F add R30,R24
00E0 F91F adc R31,R25
00E2 2080 ldd R2,z+0
00E4 F901 movw R30,R18
00E6 2192 st Z+,R2
00E8 9F01 movw R18,R30
00EA .dbline 188
00EA L26:
00EA .dbline 185
00EA 4395 inc R20
00EC L28:
00EC .dbline 185
00EC 20900300 lds R2,_localBufferLength
00F0 4215 cp R20,R2
00F2 88F3 brlo L25
00F4 .dbline 190
00F4 ; {
00F4 ; *transmitData++ = localBuffer[i];
00F4 ; }
00F4 ;
00F4 ; localBuffer[0]++;
00F4 80910000 lds R24,_localBuffer
00F8 8F5F subi R24,255 ; addi 1
00FA 80930000 sts _localBuffer,R24
00FE .dbline 192
00FE ;
00FE ; return localBufferLength;
00FE 022D mov R16,R2
0100 .dbline -2
0100 L24:
0100 0E940000 xcall pop_gset1
0104 .dbline 0 ; func end
0104 0895 ret
0106 .dbsym r i 20 c
0106 .dbsym r transmitData 18 pc
0106 .dbsym r transmitDataLengthMax 16 c
0106 .dbend
0106 .dbfunc e i2cGetState _i2cGetState fc
.even
0106 _i2cGetState::
0106 .dbline -1
0106 .dbline 197
0106 ; }
0106 ;
0106 ; /**********************************************/
0106 ; eI2cStateType i2cGetState(void)
0106 ; {
0106 .dbline 198
0106 ; return I2cState;
0106 00912C00 lds R16,_I2cState
010A .dbline -2
010A L29:
010A .dbline 0 ; func end
010A 0895 ret
010C .dbend
.area vector(rom, abs)
.org 68
0044 0C948600 jmp _twi_isr
.area text(rom, con, rel)
010C .dbfile G:\McuControl\i2cslave.c
010C .dbfunc e twi_isr _twi_isr fV
010C ; status -> R20
.even
010C _twi_isr::
010C 0E940000 xcall push_lset
0110 0E940000 xcall push_gset1
0114 .dbline -1
0114 .dbline 205
0114 ; }
0114 ;
0114 ; // I2C (TWI) 中断服务程序
0114 ; //interrupt [TWI] void twi_isr(void)
0114 ; #pragma interrupt_handler twi_isr:18
0114 ; void twi_isr(void)
0114 ; {
0114 .dbline 208
0114 ; //读状态位
0114 ; unsigned char status;
0114 ; status = TWSR & TWSR_STATUS_MASK;
0114 41B1 in R20,0x1
0116 487F andi R20,248
0118 .dbline 209
0118 ; switch(status)
0118 5527 clr R21
011A 4838 cpi R20,136
011C E0E0 ldi R30,0
011E 5E07 cpc R21,R30
0120 09F4 brne X3
0122 8FC0 xjmp L38
0124 X3:
0124 88E8 ldi R24,136
0126 90E0 ldi R25,0
0128 8417 cp R24,R20
012A 9507 cpc R25,R21
012C 0CF4 brge X4
012E 2FC0 xjmp L50
0130 X4:
0130 L49:
0130 4836 cpi R20,104
0132 E0E0 ldi R30,0
0134 5E07 cpc R21,R30
0136 09F4 brne X5
0138 60C0 xjmp L34
013A X5:
013A 88E6 ldi R24,104
013C 90E0 ldi R25,0
013E 8417 cp R24,R20
0140 9507 cpc R25,R21
0142 7CF0 brlt L52
0144 L51:
0144 4030 cpi R20,0
0146 4507 cpc R20,R21
0148 09F4 brne X6
014A C7C0 xjmp L48
014C X6:
014C X0:
014C 4030 cpi R20,0
014E E0E0 ldi R30,0
0150 5E07 cpc R21,R30
0152 0CF4 brge X7
0154 C9C0 xjmp L31
0156 X7:
0156 L53:
0156 4036 cpi R20,96
0158 E0E0 ldi R30,0
015A 5E07 cpc R21,R30
015C 09F4 brne X8
015E 4DC0 xjmp L34
0160 X8:
0160 C3C0 xjmp L31
0162 L52:
0162 4837 cpi R20,120
0164 E0E0 ldi R30,0
0166 5E07 cpc R21,R30
0168 09F4 brne X9
016A 47C0 xjmp L34
016C X9:
016C 88E7 ldi R24,120
016E 90E0 ldi R25,0
0170 8417 cp R24,R20
0172 9507 cpc R25,R21
0174 34F0 brlt L55
0176 L54:
0176 4037 cpi R20,112
0178 E0E0 ldi R30,0
017A 5E07 cpc R21,R30
017C 09F4 brne X10
017E 3DC0 xjmp L34
0180 X10:
0180 B3C0 xjmp L31
0182 L55:
0182 4038 cpi R20,128
0184 E0E0 ldi R30,0
0186 5E07 cpc R21,R30
0188 09F4 brne X11
018A 42C0 xjmp L35
018C X11:
018C ADC0 xjmp L31
018E L50:
018E 483B cpi R20,184
0190 E0E0 ldi R30,0
0192 5E07 cpc R21,R30
0194 09F4 brne X12
0196 74C0 xjmp L43
0198 X12:
0198 88EB ldi R24,184
019A 90E0 ldi R25,0
019C 8417 cp R24,R20
019E 9507 cpc R25,R21
01A0 B4F0 brlt L57
01A2 L56:
01A2 483A cpi R20,168
01A4 E0E0 ldi R30,0
01A6 5E07 cpc R21,R30
01A8 09F4 brne X13
01AA 59C0 xjmp L40
01AC X13:
01AC 88EA ldi R24,168
01AE 90E0 ldi R25,0
01B0 8417 cp R24,R20
01B2 9507 cpc R25,R21
01B4 34F0 brlt L59
01B6 L58:
01B6 403A cpi R20,160
01B8 E0E0 ldi R30,0
01BA 5E07 cpc R21,R30
01BC 09F4 brne X14
01BE 44C0 xjmp L39
01C0 X14:
01C0 93C0 xjmp L31
01C2 L59:
01C2 403B cpi R20,176
01C4 E0E0 ldi R30,0
01C6 5E07 cpc R21,R30
01C8 09F4 brne X15
01CA 49C0 xjmp L40
01CC X15:
01CC 8DC0 xjmp L31
01CE L57:
01CE 483C cpi R20,200
01D0 E0E0 ldi R30,0
01D2 5E07 cpc R21,R30
01D4 09F4 brne X16
01D6 77C0 xjmp L46
01D8 X16:
01D8 88EC ldi R24,200
01DA 90E0 ldi R25,0
01DC 8417 cp R24,R20
01DE 9507 cpc R25,R21
01E0 34F0 brlt L61
01E2 L60:
01E2 403C cpi R20,192
01E4 E0E0 ldi R30,0
01E6 5E07 cpc R21,R30
01E8 09F4 brne X17
01EA 6DC0 xjmp L46
01EC X17:
01EC 7DC0 xjmp L31
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -