📄 i2c.lis
字号:
00A0 86BF out 0x36,R24
00A2 .dbline 101
00A2 ; }
00A2 .dbline 102
00A2 ; break;
00A2 50C1 rjmp L5
00A4 L8:
00A4 .dbline 104
00A4 ; case SR_DATA_ACK:
00A4 ; {
00A4 .dbline 105
00A4 ; switch (charState)
00A4 40910000 lds R20,_charState
00A8 5527 clr R21
00AA 4035 cpi R20,80
00AC E0E0 ldi R30,0
00AE 5E07 cpc R21,R30
00B0 B9F0 breq L13
00B2 4035 cpi R20,80
00B4 E0E0 ldi R30,0
00B6 5E07 cpc R21,R30
00B8 0CF4 brge X7
00BA 44C1 rjmp L5
00BC X7:
00BC L14:
00BC 403F cpi R20,240
00BE E0E0 ldi R30,0
00C0 5E07 cpc R21,R30
00C2 09F0 breq L12
00C4 3FC1 rjmp L5
00C6 X1:
00C6 .dbline 106
00C6 ; {
00C6 L12:
00C6 .dbline 108
00C6 ; case EE_READ://进入开始读取数据状态,此处即将读取的数据为ROM的Index
00C6 ; {
00C6 .dbline 109
00C6 ; PORTC^=(0b00001000);//闪亮LED
00C6 88E0 ldi R24,8
00C8 25B2 in R2,0x15
00CA 2826 eor R2,R24
00CC 25BA out 0x15,R2
00CE .dbline 110
00CE ; charAddr=TWDR;
00CE 23B0 in R2,0x3
00D0 20920100 sts _charAddr,R2
00D4 .dbline 111
00D4 ; MT_ACK;
00D4 85EC ldi R24,197
00D6 86BF out 0x36,R24
00D8 .dbline 112
00D8 ; charState=EE_READ_OK;
00D8 80E5 ldi R24,80
00DA 80930000 sts _charState,R24
00DE .dbline 113
00DE ; }
00DE .dbline 114
00DE ; break;
00DE 32C1 rjmp L5
00E0 L13:
00E0 .dbline 116
00E0 ; case EE_READ_OK://进入读取数据完成状态此处即将读取的数据为ROM->Index的数据
00E0 ; {
00E0 .dbline 117
00E0 ; charData=TWDR;
00E0 23B0 in R2,0x3
00E2 20920200 sts _charData,R2
00E6 .dbline 118
00E6 ; MT_ACK;
00E6 85EC ldi R24,197
00E8 86BF out 0x36,R24
00EA .dbline 120
00EA ; //rom_write((unsigned char)charAddr,charData);
00EA ; charState=EE_READ;
00EA 80EF ldi R24,240
00EC 80930000 sts _charState,R24
00F0 .dbline 121
00F0 ; charIndex+=3;
00F0 80910000 lds R24,L3
00F4 8D5F subi R24,253 ; addi 3
00F6 80930000 sts L3,R24
00FA .dbline 122
00FA ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
00FA 8F71 andi R24,31
00FC 80930000 sts L3,R24
0100 .dbline 123
0100 ; cDataBuff[charIndex--]=0x0a;//间隔空格符
0100 282E mov R2,R24
0102 3324 clr R3
0104 8150 subi R24,1
0106 80930000 sts L3,R24
010A 80E0 ldi R24,<_cDataBuff
010C 90E0 ldi R25,>_cDataBuff
010E E22D mov R30,R2
0110 FF27 clr R31
0112 E80F add R30,R24
0114 F91F adc R31,R25
0116 8AE0 ldi R24,10
0118 8083 std z+0,R24
011A .dbline 124
011A ; charTemp=charAddr%10;
011A 1AE0 ldi R17,10
011C 00910100 lds R16,_charAddr
0120 00D0 rcall mod8u
0122 402F mov R20,R16
0124 .dbline 125
0124 ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0124 80910000 lds R24,L3
0128 8F71 andi R24,31
012A 80930000 sts L3,R24
012E .dbline 126
012E ; cDataBuff[charIndex--]=charTemp;
012E 282E mov R2,R24
0130 3324 clr R3
0132 8150 subi R24,1
0134 80930000 sts L3,R24
0138 80E0 ldi R24,<_cDataBuff
013A 90E0 ldi R25,>_cDataBuff
013C E22D mov R30,R2
013E FF27 clr R31
0140 E80F add R30,R24
0142 F91F adc R31,R25
0144 4083 std z+0,R20
0146 .dbline 127
0146 ; charAddr/=10;
0146 1AE0 ldi R17,10
0148 00910100 lds R16,_charAddr
014C 00D0 rcall div8u
014E 00930100 sts _charAddr,R16
0152 .dbline 128
0152 ; charTemp=charAddr%10;
0152 1AE0 ldi R17,10
0154 00D0 rcall mod8u
0156 402F mov R20,R16
0158 .dbline 129
0158 ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0158 80910000 lds R24,L3
015C 8F71 andi R24,31
015E 80930000 sts L3,R24
0162 .dbline 130
0162 ; cDataBuff[charIndex--]=charTemp;
0162 282E mov R2,R24
0164 3324 clr R3
0166 8150 subi R24,1
0168 80930000 sts L3,R24
016C 80E0 ldi R24,<_cDataBuff
016E 90E0 ldi R25,>_cDataBuff
0170 E22D mov R30,R2
0172 FF27 clr R31
0174 E80F add R30,R24
0176 F91F adc R31,R25
0178 4083 std z+0,R20
017A .dbline 131
017A ; charAddr/=10;
017A 1AE0 ldi R17,10
017C 00910100 lds R16,_charAddr
0180 00D0 rcall div8u
0182 00930100 sts _charAddr,R16
0186 .dbline 132
0186 ; cDataBuff[charIndex]=charAddr;
0186 80E0 ldi R24,<_cDataBuff
0188 90E0 ldi R25,>_cDataBuff
018A E0910000 lds R30,L3
018E FF27 clr R31
0190 E80F add R30,R24
0192 F91F adc R31,R25
0194 202E mov R2,R16
0196 2082 std z+0,R2
0198 .dbline 133
0198 ; charIndex+=4;//指向末尾空位
0198 80910000 lds R24,L3
019C 8C5F subi R24,252 ; addi 4
019E 80930000 sts L3,R24
01A2 .dbline 134
01A2 ; charIndex+=3;
01A2 8D5F subi R24,253 ; addi 3
01A4 80930000 sts L3,R24
01A8 .dbline 135
01A8 ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
01A8 8F71 andi R24,31
01AA 80930000 sts L3,R24
01AE .dbline 136
01AE ; cDataBuff[charIndex--]=0x0a;//间隔空格符
01AE 282E mov R2,R24
01B0 3324 clr R3
01B2 8150 subi R24,1
01B4 80930000 sts L3,R24
01B8 80E0 ldi R24,<_cDataBuff
01BA 90E0 ldi R25,>_cDataBuff
01BC E22D mov R30,R2
01BE FF27 clr R31
01C0 E80F add R30,R24
01C2 F91F adc R31,R25
01C4 8AE0 ldi R24,10
01C6 8083 std z+0,R24
01C8 .dbline 137
01C8 ; charTemp=charData%10;
01C8 1AE0 ldi R17,10
01CA 00910200 lds R16,_charData
01CE 00D0 rcall mod8u
01D0 402F mov R20,R16
01D2 .dbline 138
01D2 ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
01D2 80910000 lds R24,L3
01D6 8F71 andi R24,31
01D8 80930000 sts L3,R24
01DC .dbline 139
01DC ; cDataBuff[charIndex--]=charTemp;
01DC 282E mov R2,R24
01DE 3324 clr R3
01E0 8150 subi R24,1
01E2 80930000 sts L3,R24
01E6 80E0 ldi R24,<_cDataBuff
01E8 90E0 ldi R25,>_cDataBuff
01EA E22D mov R30,R2
01EC FF27 clr R31
01EE E80F add R30,R24
01F0 F91F adc R31,R25
01F2 4083 std z+0,R20
01F4 .dbline 140
01F4 ; charData/=10;
01F4 1AE0 ldi R17,10
01F6 00910200 lds R16,_charData
01FA 00D0 rcall div8u
01FC 00930200 sts _charData,R16
0200 .dbline 141
0200 ; charTemp=charData%10;
0200 1AE0 ldi R17,10
0202 00D0 rcall mod8u
0204 402F mov R20,R16
0206 .dbline 142
0206 ; charIndex&=0b00011111;//检查charIndex,防止数据超出0~31范围
0206 80910000 lds R24,L3
020A 8F71 andi R24,31
020C 80930000 sts L3,R24
0210 .dbline 143
0210 ; cDataBuff[charIndex--]=charTemp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -