⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mousealgorithm.lis

📁 二轴陀螺仪IDG300源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02EC 5F0101            mov [_gyroZMax+1],[_gyroZRaw+1]
 02EF 5F0000            mov [_gyroZMax],[_gyroZRaw]
 02F2                   .dbline 204
 02F2           ;       }
 02F2           L42:
 02F2                   .dbline 206
 02F2           ;       
 02F2           ;       gyroY = (((signed long)gyroYRaw)<<8)-gyroYBias;
 02F2 5F0001            mov [__r3],[_gyroYRaw+1]
 02F5 5F0000            mov [__r2],[_gyroYRaw]
 02F8 550000            mov [__r1],0
 02FB 550000            mov [__r0],0
 02FE 5008              mov A,8
 0300           X18:
 0300 6500              asl [__r3]
 0302 6B00              rlc [__r2]
 0304 6B00              rlc [__r1]
 0306 6B00              rlc [__r0]
 0308 78                dec A
 0309 BFF6              jnz X18
 030B 5100              mov A,[__r3]
 030D 1203              sub A,[_gyroYBias+3]
 030F 5303              mov [_gyroY+3],A
 0311 5100              mov A,[__r2]
 0313 1A02              sbb A,[_gyroYBias+2]
 0315 5302              mov [_gyroY+2],A
 0317 5100              mov A,[__r1]
 0319 1A01              sbb A,[_gyroYBias+1]
 031B 5301              mov [_gyroY+1],A
 031D 5100              mov A,[__r0]
 031F 1A00              sbb A,[_gyroYBias]
 0321 5300              mov [_gyroY],A
 0323                   .dbline 207
 0323           ;       gyroZ = (((signed long)gyroZRaw)<<8)-gyroZBias;
 0323 5F0001            mov [__r3],[_gyroZRaw+1]
 0326 5F0000            mov [__r2],[_gyroZRaw]
 0329 550000            mov [__r1],0
 032C 550000            mov [__r0],0
 032F 5008              mov A,8
 0331           X19:
 0331 6500              asl [__r3]
 0333 6B00              rlc [__r2]
 0335 6B00              rlc [__r1]
 0337 6B00              rlc [__r0]
 0339 78                dec A
 033A BFF6              jnz X19
 033C 5100              mov A,[__r3]
 033E 1203              sub A,[_gyroZBias+3]
 0340 5303              mov [_gyroZ+3],A
 0342 5100              mov A,[__r2]
 0344 1A02              sbb A,[_gyroZBias+2]
 0346 5302              mov [_gyroZ+2],A
 0348 5100              mov A,[__r1]
 034A 1A01              sbb A,[_gyroZBias+1]
 034C 5301              mov [_gyroZ+1],A
 034E 5100              mov A,[__r0]
 0350 1A00              sbb A,[_gyroZBias]
 0352 5300              mov [_gyroZ],A
 0354                   .dbline 208
 0354           ;       if (calibrated==0) {
 0354 3C0000            cmp [_calibrated],0
 0357 B019              jnz L44
 0359                   .dbline 208
 0359                   .dbline 209
 0359           ;               gyroY = 0;
 0359 550000            mov [_gyroY],0
 035C 550100            mov [_gyroY+1],0
 035F 550200            mov [_gyroY+2],0
 0362 550300            mov [_gyroY+3],0
 0365                   .dbline 210
 0365           ;               gyroZ = 0;
 0365 550000            mov [_gyroZ],0
 0368 550100            mov [_gyroZ+1],0
 036B 550200            mov [_gyroZ+2],0
 036E 550300            mov [_gyroZ+3],0
 0371                   .dbline 211
 0371           ;       }
 0371           L44:
 0371                   .dbline 212
 0371           ;       temp = (((signed long)tempRaw)<<8)-tempBias;
 0371 5F0001            mov [__r3],[_tempRaw+1]
 0374 5F0000            mov [__r2],[_tempRaw]
 0377 550000            mov [__r1],0
 037A 550000            mov [__r0],0
 037D 5008              mov A,8
 037F           X20:
 037F 6500              asl [__r3]
 0381 6B00              rlc [__r2]
 0383 6B00              rlc [__r1]
 0385 6B00              rlc [__r0]
 0387 78                dec A
 0388 BFF6              jnz X20
 038A 5100              mov A,[__r3]
 038C 1203              sub A,[_tempBias+3]
 038E 5303              mov [_temp+3],A
 0390 5100              mov A,[__r2]
 0392 1A02              sbb A,[_tempBias+2]
 0394 5302              mov [_temp+2],A
 0396 5100              mov A,[__r1]
 0398 1A01              sbb A,[_tempBias+1]
 039A 5301              mov [_temp+1],A
 039C 5100              mov A,[__r0]
 039E 1A00              sbb A,[_tempBias]
 03A0 5300              mov [_temp],A
 03A2                   .dbline 215
 03A2           ;       
 03A2           ;       //Drift Compensation
 03A2           ;       driftComp(&gyroY, &gyroZ, &temp, &mode);
 03A2 5000              mov A,>_mode
 03A4 08                push A
 03A5 5000              mov A,<_mode
 03A7 08                push A
 03A8 5000              mov A,>_temp
 03AA 08                push A
 03AB 5000              mov A,<_temp
 03AD 08                push A
 03AE 5000              mov A,>_gyroZ
 03B0 08                push A
 03B1 5000              mov A,<_gyroZ
 03B3 08                push A
 03B4 5000              mov A,>_gyroY
 03B6 08                push A
 03B7 5000              mov A,<_gyroY
 03B9 08                push A
 03BA 7C0000            xcall _driftComp
 03BD 38F8              add SP,-8
 03BF                   .dbline 222
 03BF           ; 
 03BF           ;       #ifdef TEMP_DEBUG_INFO
 03BF           ;       printf("%*d %*d %*d\n", 10, gyroY>>8, 10, gyroZ>>8, 10, temp>>8);
 03BF           ;       #endif
 03BF           ;       
 03BF           ;       //Dead zone
 03BF           ;       if (((gyroY<(DEAD_ZONE)) && (gyroY>(-DEAD_ZONE))) && (mode>5)) {
 03BF 5103              mov A,[_gyroY+3]
 03C1 1100              sub A,0
 03C3 5102              mov A,[_gyroY+2]
 03C5 1906              sbb A,6
 03C7 5101              mov A,[_gyroY+1]
 03C9 1900              sbb A,0
 03CB 5100              mov A,[_gyroY]
 03CD 3180              xor A,-128
 03CF 1980              sbb A,(0 ^ 0x80)
 03D1 D02B              jnc L46
 03D3           X21:
 03D3 5000              mov A,0
 03D5 1203              sub A,[_gyroY+3]
 03D7 50FA              mov A,-6
 03D9 1A02              sbb A,[_gyroY+2]
 03DB 50FF              mov A,-1
 03DD 1A01              sbb A,[_gyroY+1]
 03DF 5100              mov A,[_gyroY]
 03E1 3180              xor A,-128
 03E3 5300              mov [__rX],A
 03E5 507F              mov A,(255 ^ 0x80)
 03E7 1A00              sbb A,[__rX]
 03E9 D013              jnc L46
 03EB           X22:
 03EB 5005              mov A,5
 03ED 3A00              cmp A,[_mode]
 03EF D00D              jnc L46
 03F1           X23:
 03F1                   .dbline 222
 03F1                   .dbline 223
 03F1           ;               gyroY=0;
 03F1 550000            mov [_gyroY],0
 03F4 550100            mov [_gyroY+1],0
 03F7 550200            mov [_gyroY+2],0
 03FA 550300            mov [_gyroY+3],0
 03FD                   .dbline 224
 03FD           ;       }
 03FD           L46:
 03FD                   .dbline 225
 03FD           ;       if (((gyroZ<(DEAD_ZONE)) && (gyroZ>(-DEAD_ZONE))) && (mode>5)) {
 03FD 5103              mov A,[_gyroZ+3]
 03FF 1100              sub A,0
 0401 5102              mov A,[_gyroZ+2]
 0403 1906              sbb A,6
 0405 5101              mov A,[_gyroZ+1]
 0407 1900              sbb A,0
 0409 5100              mov A,[_gyroZ]
 040B 3180              xor A,-128
 040D 1980              sbb A,(0 ^ 0x80)
 040F D02B              jnc L48
 0411           X24:
 0411 5000              mov A,0
 0413 1203              sub A,[_gyroZ+3]
 0415 50FA              mov A,-6
 0417 1A02              sbb A,[_gyroZ+2]
 0419 50FF              mov A,-1
 041B 1A01              sbb A,[_gyroZ+1]
 041D 5100              mov A,[_gyroZ]
 041F 3180              xor A,-128
 0421 5300              mov [__rX],A
 0423 507F              mov A,(255 ^ 0x80)
 0425 1A00              sbb A,[__rX]
 0427 D013              jnc L48
 0429           X25:
 0429 5005              mov A,5
 042B 3A00              cmp A,[_mode]
 042D D00D              jnc L48
 042F           X26:
 042F                   .dbline 225
 042F                   .dbline 226
 042F           ;               gyroZ=0;
 042F 550000            mov [_gyroZ],0
 0432 550100            mov [_gyroZ+1],0
 0435 550200            mov [_gyroZ+2],0
 0438 550300            mov [_gyroZ+3],0
 043B                   .dbline 227
 043B           ;       }
 043B           L48:
 043B                   .dbline 230
 043B           ; 
 043B           ;       //Unless mode is OFF (on the desk), start in mode 6
 043B           ;       if (mode!=8) {mode = 6;}
 043B 3C0008            cmp [_mode],8
 043E A004              jz L50
 0440                   .dbline 230
 0440                   .dbline 230
 0440 550006            mov [_mode],6
 0443                   .dbline 230
 0443           L50:
 0443                   .dbline 233
 0443           ; 
 0443           ;     //Determine if pointer should be in "STOP" mode
 0443           ;     signY = 0;
 0443 550000            mov [_signY],0
 0446                   .dbline 234
 0446           ;     signZ = 0;       
 0446 550000            mov [_signZ],0
 0449                   .dbline 235
 0449           ;       if (gyroY>0) {
 0449 5000              mov A,0
 044B 1203              sub A,[_gyroY+3]
 044D 5000              mov A,0
 044F 1A02              sbb A,[_gyroY+2]
 0451 5000              mov A,0
 0453 1A01              sbb A,[_gyroY+1]
 0455 5100              mov A,[_gyroY]
 0457 3180              xor A,-128
 0459 5300              mov [__rX],A
 045B 5080              mov A,(0 ^ 0x80)
 045D 1A00              sbb A,[__rX]
 045F D004              jnc L52
 0461           X27:
 0461                   .dbline 235
 0461                   .dbline 236
 0461           ;         signY = 1;
 0461 550001            mov [_signY],1
 0464                   .dbline 237
 0464           ;       }
 0464           L52:
 0464                   .dbline 238
 0464           ;       if (gyroZ>0) {
 0464 5000              mov A,0
 0466 1203              sub A,[_gyroZ+3]
 0468 5000              mov A,0
 046A 1A02              sbb A,[_gyroZ+2]
 046C 5000              mov A,0
 046E 1A01              sbb A,[_gyroZ+1]
 0470 5100              mov A,[_gyroZ]
 0472 3180              xor A,-128
 0474 5300              mov [__rX],A
 0476 5080              mov A,(0 ^ 0x80)
 0478 1A00              sbb A,[__rX]
 047A D004              jnc L54
 047C           X28:
 047C                   .dbline 238
 047C                   .dbline 239
 047C           ;         signZ = 1;
 047C 550001            mov [_signZ],1
 047F                   .dbline 240
 047F           ;       }
 047F           L54:
 047F                   .dbline 241
 047F           ;       if (signY==lastSignY) {
 047F 5100              mov A,[_signY]
 0481 3A00              cmp A,[_lastSignY]
 0483 B00C              jnz L56
 0485                   .dbline 241
 0485                   .dbline 242
 0485           ;         signYCount+=1;
 0485 7600              inc [_signYCount]
 0487                   .dbline 243
 0487           ;               if (signYCount==255) {
 0487 3C00FF            cmp [_signYCount],-1
 048A B008              jnz L57
 048C                   .dbline 243
 048C                   .dbline 244
 048C           ;                       signYCount-=1;
 048C 7A00              dec [_signYCount]
 048E                   .dbline 245
 048E           ;               }
 048E                   .dbline 246
 048E 8004              xjmp L57
 0490           L56:
 0490                   .dbline 246
 0490           ;       } else {
 0490                   .dbline 247
 0490           ;         signYCount = 0;
 0490 550000            mov [_signYCount],0
 0493                   .dbline 248
 0493           ;       }
 0493           L57:
 0493                   .dbline 249
 0493           ;       if (signZ==lastSignZ) {
 0493 5100              mov A,[_signZ]
 0495 3A00              cmp A,[_lastSignZ]
 0497 B00C              jnz L60
 0499                   .dbline 249
 0499                   .dbline 250
 0499           ;         signZCount+=1;
 0499 7600              inc [_signZCount]
 049B                   .dbline 251
 049B           ;               if (signZCount==255) {
 049B 3C00FF            cmp [_signZCount],-1
 049E B008              jnz L61
 04A0                   .dbline 251
 04A0                   .dbline 252
 04A0           ;                       signZCount-=1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -