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

📄 boat.lis

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 057C FC01              movw R30,R24
 057E 8081              ldd R24,z+0
 0580 9181              ldd R25,z+1
 0582 0196              adiw R24,1
 0584 2C01              movw R4,R24
 0586 5182              std z+1,R5
 0588 4082              std z+0,R4
 058A F901              movw R30,R18
 058C 2680              ldd R2,z+6
 058E 3780              ldd R3,z+7
 0590 8215              cp R24,R2
 0592 9305              cpc R25,R3
 0594 09F0              breq X16
 0596 27C0              xjmp L106
 0598           X16:
 0598                   .dbline 291
 0598                   .dbline 292
 0598           ;                       pt_r->real_speed -= pt_r->step;
 0598 C901              movw R24,R18
 059A 0296              adiw R24,2
 059C F901              movw R30,R18
 059E 4284              ldd R4,z+10
 05A0 5384              ldd R5,z+11
 05A2 FC01              movw R30,R24
 05A4 6080              ldd R6,z+0
 05A6 7180              ldd R7,z+1
 05A8 6418              sub R6,R4
 05AA 7508              sbc R7,R5
 05AC 7182              std z+1,R7
 05AE 6082              std z+0,R6
 05B0                   .dbline 293
 05B0           ;                       if ( pt_r->real_speed < 0 ){    //取绝对值
 05B0 F901              movw R30,R18
 05B2 8281              ldd R24,z+2
 05B4 9381              ldd R25,z+3
 05B6 8030              cpi R24,0
 05B8 E0E0              ldi R30,0
 05BA 9E07              cpc R25,R30
 05BC 54F4              brge L108
 05BE                   .dbline 293
 05BE                   .dbline 294
 05BE           ;                               OCR1B = (uint)(-pt_r->real_speed);
 05BE F901              movw R30,R18
 05C0 8281              ldd R24,z+2
 05C2 9381              ldd R25,z+3
 05C4 8095              com R24
 05C6 9095              com R25
 05C8 8F5F              subi R24,0xFF
 05CA 9F4F              sbci R25,0xFF
 05CC 99BD              out 0x29,R25
 05CE 88BD              out 0x28,R24
 05D0                   .dbline 295
 05D0 05C0              xjmp L109
 05D2           L108:
 05D2                   .dbline 295
 05D2           ;                       } else {
 05D2                   .dbline 296
 05D2           ;                               OCR1B = (uint)(pt_r->real_speed);
 05D2 F901              movw R30,R18
 05D4 2280              ldd R2,z+2
 05D6 3380              ldd R3,z+3
 05D8 39BC              out 0x29,R3
 05DA 28BC              out 0x28,R2
 05DC                   .dbline 297
 05DC           ;                       }
 05DC           L109:
 05DC                   .dbline 298
 05DC           ;                       pt_r->counter = 0;
 05DC 2224              clr R2
 05DE 3324              clr R3
 05E0 F901              movw R30,R18
 05E2 3186              std z+9,R3
 05E4 2086              std z+8,R2
 05E6                   .dbline 299
 05E6           ;               }
 05E6           L106:
 05E6                   .dbline 300
 05E6           ;       }
 05E6           L104:
 05E6           L99:
 05E6           L89:
 05E6                   .dbline -2
 05E6                   .dbline 301
 05E6           ; }
 05E6           L65:
 05E6                   .dbline 0 ; func end
 05E6 0895              ret
 05E8                   .dbsym r pt_r 18 pS[_trap]
 05E8                   .dbsym r pt_l 16 pS[_trap]
 05E8                   .dbend
 05E8                   .dbfunc e trap_ctrler _trap_ctrler fV
 05E8           ;    r_des_speed -> R18,R19
 05E8           ;    l_des_speed -> R16,R17
                        .even
 05E8           _trap_ctrler::
 05E8                   .dbline -1
 05E8                   .dbline 305
 05E8           ; 
 05E8           ; //电机速度控制接口函数
 05E8           ; void trap_ctrler( int l_des_speed, int r_des_speed )
 05E8           ; {
 05E8                   .dbline 306
 05E8           ;       l_trap.acce_count = L_ACCE_COUNT;                       //设定左电机
 05E8 82E0              ldi R24,2
 05EA 90E0              ldi R25,0
 05EC 90934200          sts _l_trap+4+1,R25
 05F0 80934100          sts _l_trap+4,R24
 05F4                   .dbline 307
 05F4           ;       l_trap.dece_count = L_DECE_COUNT;
 05F4 90934400          sts _l_trap+6+1,R25
 05F8 80934300          sts _l_trap+6,R24
 05FC                   .dbline 308
 05FC           ;       l_trap.step = L_STEP;
 05FC 81E0              ldi R24,1
 05FE 90934800          sts _l_trap+10+1,R25
 0602 80934700          sts _l_trap+10,R24
 0606                   .dbline 309
 0606           ;       if ( l_des_speed > ( MAX_SPEED - l_trap.step ) ){                       //给定值限幅处理
 0606 1C01              movw R2,R24
 0608 8EEF              ldi R24,510
 060A 91E0              ldi R25,1
 060C 8219              sub R24,R2
 060E 9309              sbc R25,R3
 0610 8017              cp R24,R16
 0612 9107              cpc R25,R17
 0614 4CF4              brge L114
 0616                   .dbline 309
 0616                   .dbline 310
 0616           ;               l_trap.des_speed = MAX_SPEED - l_trap.step;
 0616 8EEF              ldi R24,510
 0618 91E0              ldi R25,1
 061A 8219              sub R24,R2
 061C 9309              sbc R25,R3
 061E 90933E00          sts _l_trap+1,R25
 0622 80933D00          sts _l_trap,R24
 0626                   .dbline 311
 0626 18C0              xjmp L115
 0628           L114:
 0628                   .dbline 311
 0628           ;       } else if ( l_des_speed < ( MIN_SPEED + l_trap.step ) ){
 0628 80914700          lds R24,_l_trap+10
 062C 90914800          lds R25,_l_trap+10+1
 0630 8E5F              subi R24,254
 0632 9140              sbci R25,1
 0634 0817              cp R16,R24
 0636 1907              cpc R17,R25
 0638 5CF4              brge L118
 063A                   .dbline 311
 063A                   .dbline 312
 063A           ;               l_trap.des_speed = MIN_SPEED + l_trap.step;
 063A 80914700          lds R24,_l_trap+10
 063E 90914800          lds R25,_l_trap+10+1
 0642 8E5F              subi R24,254
 0644 9140              sbci R25,1
 0646 90933E00          sts _l_trap+1,R25
 064A 80933D00          sts _l_trap,R24
 064E                   .dbline 313
 064E 04C0              xjmp L119
 0650           L118:
 0650                   .dbline 313
 0650           ;       } else {
 0650                   .dbline 314
 0650           ;               l_trap.des_speed = l_des_speed;
 0650 10933E00          sts _l_trap+1,R17
 0654 00933D00          sts _l_trap,R16
 0658                   .dbline 315
 0658           ;       }
 0658           L119:
 0658           L115:
 0658                   .dbline 316
 0658           ;       r_trap.acce_count = R_ACCE_COUNT;                       //设定右电机
 0658 82E0              ldi R24,2
 065A 90E0              ldi R25,0
 065C 90933600          sts _r_trap+4+1,R25
 0660 80933500          sts _r_trap+4,R24
 0664                   .dbline 317
 0664           ;       r_trap.dece_count = R_DECE_COUNT;
 0664 90933800          sts _r_trap+6+1,R25
 0668 80933700          sts _r_trap+6,R24
 066C                   .dbline 318
 066C           ;       r_trap.step = R_STEP;
 066C 81E0              ldi R24,1
 066E 90933C00          sts _r_trap+10+1,R25
 0672 80933B00          sts _r_trap+10,R24
 0676                   .dbline 319
 0676           ;       if ( r_des_speed > ( MAX_SPEED - r_trap.step ) ){                       //给定值限幅处理
 0676 1C01              movw R2,R24
 0678 8EEF              ldi R24,510
 067A 91E0              ldi R25,1
 067C 8219              sub R24,R2
 067E 9309              sbc R25,R3
 0680 8217              cp R24,R18
 0682 9307              cpc R25,R19
 0684 4CF4              brge L125
 0686                   .dbline 319
 0686                   .dbline 320
 0686           ;               r_trap.des_speed = MAX_SPEED - r_trap.step;
 0686 8EEF              ldi R24,510
 0688 91E0              ldi R25,1
 068A 8219              sub R24,R2
 068C 9309              sbc R25,R3
 068E 90933200          sts _r_trap+1,R25
 0692 80933100          sts _r_trap,R24
 0696                   .dbline 321
 0696 18C0              xjmp L126
 0698           L125:
 0698                   .dbline 321
 0698           ;       } else if ( r_des_speed < ( MIN_SPEED + r_trap.step ) ){
 0698 80913B00          lds R24,_r_trap+10
 069C 90913C00          lds R25,_r_trap+10+1
 06A0 8E5F              subi R24,254
 06A2 9140              sbci R25,1
 06A4 2817              cp R18,R24
 06A6 3907              cpc R19,R25
 06A8 5CF4              brge L129
 06AA                   .dbline 321
 06AA                   .dbline 322
 06AA           ;               r_trap.des_speed = MIN_SPEED + r_trap.step;
 06AA 80913B00          lds R24,_r_trap+10
 06AE 90913C00          lds R25,_r_trap+10+1
 06B2 8E5F              subi R24,254
 06B4 9140              sbci R25,1
 06B6 90933200          sts _r_trap+1,R25
 06BA 80933100          sts _r_trap,R24
 06BE                   .dbline 323
 06BE 04C0              xjmp L130
 06C0           L129:
 06C0                   .dbline 323
 06C0           ;       } else {
 06C0                   .dbline 324
 06C0           ;               r_trap.des_speed = r_des_speed;
 06C0 30933200          sts _r_trap+1,R19
 06C4 20933100          sts _r_trap,R18
 06C8                   .dbline 325
 06C8           ;       }
 06C8           L130:
 06C8           L126:
 06C8                   .dbline -2
 06C8                   .dbline 326
 06C8           ; }
 06C8           L110:
 06C8                   .dbline 0 ; func end
 06C8 0895              ret
 06CA                   .dbsym r r_des_speed 18 I
 06CA                   .dbsym r l_des_speed 16 I
 06CA                   .dbend
 06CA                   .dbfunc e key_process _key_process fV
 06CA           ;        key_buf -> R20,R21
                        .even
 06CA           _key_process::
 06CA 0E940000          xcall push_gset1
 06CE A801              movw R20,R16
 06D0                   .dbline -1
 06D0                   .dbline 330
 06D0           ; 
 06D0           ; /**************************** 键盘信号处理模块 ********************************/
 06D0           ; void key_process( uint key_buf )
 06D0           ; {
 06D0                   .dbline 331
 06D0           ;       if ( key_buf & BIT( L_STOP_KEY ) ){
 06D0 54FF              sbrs R21,4
 06D2 1BC0              rjmp L134
 06D4                   .dbline 331
 06D4                   .dbline 332
 06D4           ;               l_temp_speed = l_trap.des_speed;
 06D4 20903D00          lds R2,_l_trap
 06D8 30903E00          lds R3,_l_trap+1
 06DC 30923000          sts _l_temp_speed+1,R3
 06E0 20922F00          sts _l_temp_speed,R2
 06E4                   .dbline 333
 06E4           ;               l_trap.des_speed = 0;
 06E4 2224              clr R2
 06E6 3324              clr R3
 06E8 30923E00          sts _l_trap+1,R3
 06EC 20923D00          sts _l_trap,R2
 06F0                   .dbline 334
 06F0           ;               trap_ctrler( 0, r_trap.des_speed );
 06F0 20913100          lds R18,_r_trap
 06F4 30913200          lds R19,_r_trap+1
 06F8 0027              clr R16
 06FA 1127              clr R17
 06FC 75DF              xcall _trap_ctrler
 06FE                   .dbline 335
 06FE           ;               key_prev_status |= BIT( L_STOP_KEY_PRESS );
 06FE 80910000          lds R24,_key_prev_status
 0702 8061              ori R24,16
 0704 80930000          sts _key_prev_status,R24
 0708                   .dbline 336
 0708 38C0              xjmp L135
 070A           L134:
 070A                   .dbline 336
 070A           ;       } else if ( ( key_buf & BIT( L_RESUME_KEY ) ) && ( key_prev_status & BIT( L_STOP_KEY_PRESS ) ) ){
 070A 50FF              sbrs R21,0
 070C 1BC0              rjmp L136
 070E 20900000          lds R2,_key_prev_status
 0712 24FE              sbrs R2,4
 0714 17C0              rjmp L136
 0716                   .dbline 336
 0716                   .dbline 337
 0716           ;               l_trap.des_speed = l_temp_speed;
 0716 20902F00          lds R2,_l_temp_speed
 071A 30903000          lds R3,_l_temp_speed+1
 071E 30923E00          sts _l_trap+1,R3
 0722 20923D00          sts _l_trap,R2
 0726                   .dbline 338
 0726           ;               trap_ctrler( l_trap.des_speed, r_trap.des_speed );
 0726 20913100          lds R18,_r_trap
 072A 30913200          lds R19,_r_trap+1
 072E 00913D00          lds R16,_l_trap
 0732 10913E00          lds R17,_l_trap+1
 0736 58DF              xcall _trap_ctrler
 0738                   .dbline 339
 0738           ;               key_prev_status &= ~BIT( L_STOP_KEY_PRESS );
 0738 80910000          lds R24,_key_prev_status
 073C 8F7E              andi R24,239
 073E 80930000          sts _key_prev_status,R24
 0742                   .dbline 340
 0742 1BC0              xjmp L137
 0744           L136:
 0744                   .dbline 340
 0744           ;       } else if ( key_buf & BIT( L_ACCE_KEY ) ){
 0744 40FF              sbrs R20,0
 0746 0CC0              rjmp L138
 0748                   .dbline 340
 0748                   

⌨️ 快捷键说明

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