?? modbus16.lis
字號(hào):
011A 4080 ldd R4,z+0
011C 5524 clr R5
011E 402A or R4,R16
0120 512A or R5,R17
0122 4082 std z+0,R4
0124 .dbline 137
0124 ; tempAddr++;
0124 0A80 ldd R0,y+2
0126 0394 inc R0
0128 0A82 std y+2,R0
012A .dbline 138
012A ; if(tempAddr >= addr+bitCount)
012A 2B80 ldd R2,y+3
012C 2A0C add R2,R10
012E 0214 cp R0,R2
0130 20F0 brlo L21
0132 .dbline 139
0132 ; { //讀完
0132 .dbline 140
0132 ; exit = 1;
0132 0024 clr R0
0134 0394 inc R0
0136 0C82 std y+4,R0
0138 .dbline 141
0138 ; break;
0138 04C0 xjmp L19
013A L21:
013A .dbline 143
013A L18:
013A .dbline 132
013A E394 inc R14
013C L20:
013C .dbline 132
013C 8E2D mov R24,R14
013E 8830 cpi R24,8
0140 D8F2 brlo L17
0142 L19:
0142 .dbline 144
0142 ; }
0142 ; }
0142 ; if(exit == 1)
0142 8C81 ldd R24,y+4
0144 8130 cpi R24,1
0146 09F4 brne L23
0148 .dbline 145
0148 ; break;
0148 04C0 xjmp L15
014A L23:
014A .dbline 146
014A L14:
014A .dbline 128
014A 6395 inc R22
014C L16:
014C .dbline 128
014C 6417 cp R22,R20
014E 08F4 brsh X3
0150 C6CF xjmp L13
0152 X3:
0152 L15:
0152 .dbline 148
0152 ; }
0152 ;
0152 ; sendBuf[0] = localAddr;
0152 20900000 lds R2,_localAddr
0156 20922300 sts _sendBuf,R2
015A .dbline 149
015A ; sendBuf[1] = 0x01;
015A 81E0 ldi R24,1
015C 80932400 sts _sendBuf+1,R24
0160 .dbline 150
0160 ; sendBuf[2] = byteCount;
0160 40932500 sts _sendBuf+2,R20
0164 .dbline 151
0164 ; byteCount += 3;
0164 4D5F subi R20,253 ; addi 3
0166 .dbline 152
0166 ; crcData = crc16(sendBuf,byteCount);
0166 242F mov R18,R20
0168 3327 clr R19
016A 00E0 ldi R16,<_sendBuf
016C 10E0 ldi R17,>_sendBuf
016E 48DF xcall _crc16
0170 B801 movw R22,R16
0172 .dbline 153
0172 ; sendBuf[byteCount] = crcData >> 8;
0172 80E0 ldi R24,<_sendBuf
0174 90E0 ldi R25,>_sendBuf
0176 E42F mov R30,R20
0178 FF27 clr R31
017A E80F add R30,R24
017C F91F adc R31,R25
017E 1B01 movw R2,R22
0180 232C mov R2,R3
0182 3324 clr R3
0184 2082 std z+0,R2
0186 .dbline 154
0186 ; byteCount++;
0186 4395 inc R20
0188 .dbline 155
0188 ; sendBuf[byteCount] = crcData & 0xff;
0188 E42F mov R30,R20
018A FF27 clr R31
018C E80F add R30,R24
018E F91F adc R31,R25
0190 CB01 movw R24,R22
0192 9070 andi R25,0
0194 8083 std z+0,R24
0196 .dbline 156
0196 ; sendCount = byteCount + 1;
0196 842F mov R24,R20
0198 8F5F subi R24,255 ; addi 1
019A 80934500 sts _sendCount,R24
019E .dbline 158
019E ;
019E ; beginSend();
019E 74DF xcall _beginSend
01A0 .dbline -2
01A0 .dbline 159
01A0 ; }//void readCoil(void)
01A0 L8:
01A0 2596 adiw R28,5
01A2 0E940000 xcall pop_gset5
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbsym l result 1 c
01A8 .dbsym r crcData 22 i
01A8 .dbsym r byteCount 20 c
01A8 .dbsym r k 22 c
01A8 .dbsym l exit 4 c
01A8 .dbsym l addr 3 c
01A8 .dbsym r bitCount 10 c
01A8 .dbsym r position 12 c
01A8 .dbsym l tempData 0 i
01A8 .dbsym l tempAddr 2 c
01A8 .dbsym r i 14 c
01A8 .dbend
01A8 .dbfunc e readRegisters _readRegisters fV
01A8 ; finsh -> <dead>
01A8 ; result -> <dead>
01A8 ; readCount -> R20
01A8 ; addr -> R20
01A8 ; crcData -> R20,R21
01A8 ; byteCount -> R10
01A8 ; tempAddr -> R12
01A8 ; tempData -> y+0
01A8 ; i -> R22,R23
.even
01A8 _readRegisters::
01A8 0E940000 xcall push_gset4
01AC 2297 sbiw R28,2
01AE .dbline -1
01AE .dbline 163
01AE ;
01AE ; //讀寄存器
01AE ; void readRegisters(void)
01AE ; {
01AE .dbline 172
01AE ; uint8 addr;
01AE ; uint8 tempAddr;
01AE ; uint16 result;
01AE ; uint16 crcData;
01AE ; uint8 readCount;
01AE ; uint8 byteCount;
01AE ; uint8 finsh; //1完成 0出錯(cuò)
01AE ; uint16 i;
01AE ; uint16 tempData = 0;
01AE 2224 clr R2
01B0 3324 clr R3
01B2 2882 std y+0,R2
01B4 3982 std y+1,R3
01B6 .dbline 176
01B6 ;
01B6 ; //addr = (receBuf[2]<<8) + receBuf[3];
01B6 ; //tempAddr = addr & 0xfff;
01B6 ; addr = receBuf[3];
01B6 40910600 lds R20,_receBuf+3
01BA .dbline 177
01BA ; tempAddr = addr;
01BA C42E mov R12,R20
01BC .dbline 180
01BC ;
01BC ; //readCount = (receBuf[4]<<8) + receBuf[5]; //要讀的個(gè)數(shù)
01BC ; readCount = receBuf[5];
01BC 40910800 lds R20,_receBuf+5
01C0 .dbline 182
01C0 ;
01C0 ; byteCount = readCount * 2;
01C0 82E0 ldi R24,2
01C2 849F mul R24,R20
01C4 A02C mov R10,R0
01C6 .dbline 184
01C6 ;
01C6 ; for(i=0;i<byteCount;i+=2,tempAddr++)
01C6 6627 clr R22
01C8 7727 clr R23
01CA 1AC0 xjmp L33
01CC L30:
01CC .dbline 185
01CC .dbline 186
01CC 9E01 movw R18,R28
01CE 0C2D mov R16,R12
01D0 1127 clr R17
01D2 FFD1 xcall _getRegisterVal
01D4 .dbline 187
01D4 80E0 ldi R24,<_sendBuf
01D6 90E0 ldi R25,>_sendBuf
01D8 FB01 movw R30,R22
01DA 3396 adiw R30,3
01DC E80F add R30,R24
01DE F91F adc R31,R25
01E0 2880 ldd R2,y+0
01E2 3980 ldd R3,y+1
01E4 232C mov R2,R3
01E6 3324 clr R3
01E8 2082 std z+0,R2
01EA .dbline 188
01EA FB01 movw R30,R22
01EC 3496 adiw R30,4
01EE E80F add R30,R24
01F0 F91F adc R31,R25
01F2 8881 ldd R24,y+0
01F4 9981 ldd R25,y+1
01F6 9070 andi R25,0
01F8 8083 std z+0,R24
01FA .dbline 189
01FA L31:
01FA .dbline 184
01FA 6E5F subi R22,254 ; offset = 2
01FC 7F4F sbci R23,255
01FE C394 inc R12
0200 L33:
0200 .dbline 184
0200 2A2C mov R2,R10
0202 3324 clr R3
0204 6215 cp R22,R2
0206 7305 cpc R23,R3
0208 08F3 brlo L30
020A .dbline 191
020A ; {
020A ; getRegisterVal(tempAddr,&tempData);
020A ; sendBuf[i+3] = tempData >> 8;
020A ; sendBuf[i+4] = tempData & 0xff;
020A ; }
020A ;
020A ; sendBuf[0] = localAddr;
020A 20900000 lds R2,_localAddr
020E 20922300 sts _sendBuf,R2
0212 .dbline 192
0212 ; sendBuf[1] = 3;
0212 83E0 ldi R24,3
0214 80932400 sts _sendBuf+1,R24
0218 .dbline 193
0218 ; sendBuf[2] = byteCount;
0218 A0922500 sts _sendBuf+2,R10
021C .dbline 194
021C ; byteCount += 3;
021C 8A2D mov R24,R10
021E 8D5F subi R24,253 ; addi 3
0220 A82E mov R10,R24
0222 .dbline 195
0222 ; crcData = crc16(sendBuf,byteCount);
0222 282F mov R18,R24
0224 3327 clr R19
0226 00E0 ldi R16,<_sendBuf
0228 10E0 ldi R17,>_sendBuf
022A EADE xcall _crc16
022C A801 movw R20,R16
022E .dbline 196
022E ; sendBuf[byteCount] = crcData >> 8;
022E 80E0 ldi R24,<_sendBuf
0230 90E0 ldi R25,>_sendBuf
0232 EA2D mov R30,R10
0234 FF27 clr R31
0236 E80F add R30,R24
0238 F91F adc R31,R25
023A 1A01 movw R2,R20
023C 232C mov R2,R3
023E 3324 clr R3
0240 2082 std z+0,R2
0242 .dbline 197
0242 ; byteCount++;
0242 A394 inc R10
0244 .dbline 198
0244 ; sendBuf[byteCount] = crcData & 0xff;
0244 EA2D mov R30,R10
0246 FF27 clr R31
0248 E80F add R30,R24
024A F91F adc R31,R25
024C CA01 movw R24,R20
024E 9070 andi R25,0
0250 8083 std z+0,R24
0252 .dbline 200
0252 ;
0252 ; sendCount = byteCount + 1;
0252 8A2D mov R24,R10
0254 8F5F subi R24,255 ; addi 1
0256 80934500 sts _sendCount,R24
025A .dbline 201
025A ; beginSend();
025A 16DF xcall _beginSend
025C .dbline -2
025C .dbline 202
025C ; }//void readRegisters(void)
025C L27:
025C 2296 adiw R28,2
025E 0E940000 xcall pop_gset4
0262 .dbline 0 ; func end
0262 0895 ret
0264 .dbsym l finsh 1 c
0264 .dbsym l result 1 i
0264 .dbsym r readCount 20 c
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -