?? modbus.s
字號:
ldi R22,160
.dbline 188
; for(i=0; i<iLength; i++)
clr R20
clr R21
rjmp L47
L44:
.dbline 189
; {
.dbline 190
; CRC16Lo = CRC16Lo ^ data[i];
movw R30,R20
add R30,R4
adc R31,R5
ldd R2,z+0
eor R6,R2
.dbline 191
; for( Flag=0; Flag<=7; Flag++)
clr R0
clr R1
std y+1,R1
std y+0,R0
L48:
.dbline 192
; {
.dbline 193
; SaveHi = CRC16Hi;
std y+2,R12
.dbline 194
; SaveLo = CRC16Lo;
mov R14,R6
.dbline 195
; CRC16Hi = CRC16Hi>>1;
lsr R12
.dbline 196
; CRC16Lo = CRC16Lo>>1;
lsr R6
.dbline 198
;
; if((SaveHi&0x01) == 0x01)
ldd R24,y+2
andi R24,1
cpi R24,1
brne L52
.dbline 199
; CRC16Lo = CRC16Lo|0x80;
mov R24,R6
ori R24,128
mov R6,R24
L52:
.dbline 201
;
; if((SaveLo&0x01) == 0x01)
mov R24,R14
andi R24,1
cpi R24,1
brne L54
.dbline 202
; {
.dbline 203
; CRC16Hi = CRC16Hi ^ CH; //
eor R12,R22
.dbline 204
; CRC16Lo = CRC16Lo ^ CL; //
eor R6,R10
.dbline 205
; }
L54:
.dbline 206
L49:
.dbline 191
ldd R24,y+0
ldd R25,y+1
adiw R24,1
std y+1,R25
std y+0,R24
.dbline 191
ldi R24,7
ldi R25,0
ldd R0,y+0
ldd R1,y+1
cp R24,R0
cpc R25,R1
brge L48
.dbline 207
L45:
.dbline 188
subi R20,255 ; offset = 1
sbci R21,255
L47:
.dbline 188
cp R20,R8
cpc R21,R9
brlt L44
.dbline 208
; }
; }
; return(CRC16Hi<<8 | CRC16Lo);
mov R17,R12
mov R16,R6
.dbline -2
L43:
adiw R28,3
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r CH 22 c
.dbsym r CL 10 c
.dbsym r SaveLo 14 c
.dbsym l SaveHi 2 c
.dbsym l Flag 0 I
.dbsym r CRC16Hi 12 c
.dbsym r CRC16Lo 6 c
.dbsym r iLength 8 I
.dbsym r data 4 pc
.dbend
.dbfunc e readRegisters _readRegisters fV
; finsh -> <dead>
; result -> <dead>
; readCount -> R20
; addr -> R20,R21
; crcData -> R20,R21
; byteCount -> R10
; tempAddr -> R12,R13
; tempData -> y+0
; i -> R22,R23
.even
_readRegisters::
rcall push_gset4
sbiw R28,2
.dbline -1
.dbline 214
; }//MyWord CRC16(MyByte *data,int iLength).
;
;
; //讀寄存器
; void readRegisters(void)
; {
.dbline 223
; uint addr;
; uint tempAddr;
; uint result;
; uint crcData;
; uchar readCount;
; uchar byteCount;
; uchar finsh; //1完成 0出錯
; uint i;
; uint tempData = 0;
clr R2
clr R3
std y+1,R3
std y+0,R2
.dbline 226
;
; //起始地址 40001 (0x9c41)
; addr = (receBuf[2]<<8) + receBuf[3];
lds R2,_receBuf+3
lds R3,_receBuf+2
mov R21,R3
mov R20,R2
.dbline 230
;
; //tempAddr = addr & 0xfff;
; //addr = receBuf[3];
; tempAddr = addr;
movw R12,R20
.dbline 232
;
; readCount = (receBuf[4]<<8) + receBuf[5]; //要讀的個數
lds R2,_receBuf+5
lds R3,_receBuf+4
mov R21,R3
mov R20,R2
.dbline 235
; //readCount = receBuf[5];
;
; byteCount = readCount * 2;
ldi R24,2
mul R24,R20
mov R10,R0
.dbline 237
;
; for(i=0;i<byteCount;i+=2,tempAddr++)
clr R22
clr R23
rjmp L64
L61:
.dbline 238
.dbline 239
movw R18,R28
movw R16,R12
rcall _getRegisterVal
.dbline 240
ldi R24,<_sendBuf
ldi R25,>_sendBuf
movw R30,R22
adiw R30,3
add R30,R24
adc R31,R25
ldd R2,y+0
ldd R3,y+1
mov R2,R3
clr R3
std z+0,R2
.dbline 241
movw R30,R22
adiw R30,4
add R30,R24
adc R31,R25
ldd R24,y+0
ldd R25,y+1
andi R25,0
std z+0,R24
.dbline 242
L62:
.dbline 237
subi R22,254 ; offset = 2
sbci R23,255
movw R24,R12
adiw R24,1
movw R12,R24
L64:
.dbline 237
mov R2,R10
clr R3
cp R22,R2
cpc R23,R3
brlo L61
.dbline 244
; {
; getRegisterVal(tempAddr,&tempData);
; sendBuf[i+3] = tempData >> 8;
; sendBuf[i+4] = tempData & 0xff;
; }
;
; sendBuf[0] = 0xff;
ldi R24,255
sts _sendBuf,R24
.dbline 245
; sendBuf[1] = 3;
ldi R24,3
sts _sendBuf+1,R24
.dbline 246
; sendBuf[2] = byteCount;
sts _sendBuf+2,R10
.dbline 247
; byteCount += 3;
mov R24,R2
subi R24,253 ; addi 3
mov R10,R24
.dbline 248
; crcData = CRC16(sendBuf,byteCount);
mov R18,R24
clr R19
ldi R16,<_sendBuf
ldi R17,>_sendBuf
rcall _CRC16
movw R20,R16
.dbline 249
; sendBuf[byteCount] = crcData >> 8;
ldi R24,<_sendBuf
ldi R25,>_sendBuf
mov R30,R10
clr R31
add R30,R24
adc R31,R25
movw R2,R20
mov R2,R3
clr R3
std z+0,R2
.dbline 250
; byteCount++;
inc R10
.dbline 251
; sendBuf[byteCount] = crcData & 0xff;
mov R30,R10
clr R31
add R30,R24
adc R31,R25
movw R24,R20
andi R25,0
std z+0,R24
.dbline 253
; //----------
; sendCount = byteCount + 1;
mov R24,R10
subi R24,255 ; addi 1
sts _sendCount,R24
.dbline 256
; // sendCount = 7;
; //----------
; beginSend();
rcall _beginSend
.dbline -2
L56:
adiw R28,2
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym l finsh 1 c
.dbsym l result 1 i
.dbsym r readCount 20 c
.dbsym r addr 20 i
.dbsym r crcData 20 i
.dbsym r byteCount 10 c
.dbsym r tempAddr 12 i
.dbsym l tempData 0 i
.dbsym r i 22 i
.dbend
.dbfunc e getRegisterVal _getRegisterVal fi
.area func_lit(rom, con, rel)
L87:
.word `L69
.word `L71
.word `L72
.word `L73
.word `L74
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.word `L69
.area text(rom, con, rel)
.dbfile D:\ICCTES~1\1128\modbus.c
; tempAddr -> <dead>
; result -> R20,R21
; p_tempData -> R22,R23
; addr -> R10,R11
.even
_getRegisterVal::
rcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 262
; }//void readRegisters(void)
;
;
; //取寄存器值 返回0表示成功
; uint getRegisterVal(uint addr,uint *p_tempData)
; {
.dbline 263
; uint result = 0;
clr R20
clr R21
.dbline 267
; uint tempAddr;
;
; // tempAddr = addr & 0xfff;
; addr = addr - 40000;
movw R24,R10
subi R24,64
sbci R25,156
movw R10,R24
.dbline 268
; switch(addr) //(tempAddr) // & 0xff)
ldi R24,16
ldi R25,0
cp R24,R10
cpc R25,R11
brge X12
rjmp L69
X12:
ldi R16,2
ldi R17,0
movw R18,R10
rcall empy16s
movw R30,R16
ldi R24,<L87
ldi R25,>L87
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X11:
.dbline 269
; {
.dbline 271
; case 0:
; break;
L71:
.dbline 273
; case 1:
; *p_tempData = testVarAnalog; // 模擬量當前值.
lds R2,_testVarAnalog
lds R3,_testVarAnalog+1
movw R30,R22
std z+1,R3
std z+0,R2
.dbline 274
; break;
rjmp L69
L72:
.dbline 276
; case 2:
; *p_tempData = testVarPoint; // 小數點位置.
lds R2,_testVarPoint
lds R3,_testVarPoint+1
movw R30,R22
std z+1,R3
std z+0,R2
.dbline 277
; break;
rjmp L69
L73:
.dbline 279
; case 3:
; *p_tempData = testVarInputUp; // 上限.
lds R2,_testVarInputUp
lds R3,_testVarInputUp+1
movw R30,R22
std z+1,R3
std z+0,R2
.dbline 280
; break;
rjmp L69
L74:
.dbline 282
; case 4:
; *p_tempData = testVarInputDown;// 下限.
lds R2,_testVarInputDown
lds R3,_testVarInputDown+1
movw R30,R22
std z+1,R3
std z+0,R2
.dbline 283
; break;
.dbline 285
; case 5:
; break;
.dbline 287
; case 6:
; break;
.dbline 289
; case 7:
; break;
.dbline 291
; case 8:
; break;
.dbline 293
; case 9:
; break;
.dbline 295
; case 10:
; break;
.dbline 297
; case 11:
; break;
.dbline 299
; case 12:
; break;
.dbline 301
; case 13:
; break;
.dbline 303
; case 14:
; break;
.dbline 305
; case 15:
; break;
.dbline 308
; case 16:
; //*tempData = testRegister;
; break;
.dbline 310
; default:
; break;
L69:
.dbline 312
; }
; return result;
movw R16,R20
.dbline -2
L67:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l tempAddr 1 i
.dbsym r result 20 i
.dbsym r p_tempData 22 pi
.dbsym r addr 10 i
.dbend
.area bss(ram, con, rel)
.dbfile D:\ICCTES~1\1128\modbus.c
_GetKeyValue::
.blkb 1
.dbsym e GetKeyValue _GetKeyValue c
_crc_result::
.blkb 2
.dbsym e crc_result _crc_result i
_testVarInputDown::
.blkb 2
.dbsym e testVarInputDown _testVarInputDown i
_testVarInputUp::
.blkb 2
.dbsym e testVarInputUp _testVarInputUp i
_testVarPoint::
.blkb 2
.dbsym e testVarPoint _testVarPoint i
_testVarAnalog::
.blkb 2
.dbsym e testVarAnalog _testVarAnalog i
_receBuf::
.blkb 16
.dbsym e receBuf _receBuf A[16:16]c
_sendBuf::
.blkb 16
.dbsym e sendBuf _sendBuf A[16:16]c
_receTimeOut::
.blkb 1
.dbsym e receTimeOut _receTimeOut c
_checkoutError::
.blkb 1
.dbsym e checkoutError _checkoutError c
_GetCntTemp::
.blkb 1
.dbsym e GetCntTemp _GetCntTemp c
_receCount::
.blkb 1
.dbsym e receCount _receCount c
_sendCount::
.blkb 1
.dbsym e sendCount _sendCount c
_sendPosi::
.blkb 1
.dbsym e sendPosi _sendPosi c
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -