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

📄 scon2.lis

📁 M8制作的舵机控制器
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 011E                   .dbline 130
 011E           ;  if(OF2){time2=TCNT2+0xff;COF2;}//定时器2扩展使用
 011E 28B6              in R2,0x38
 0120 26FE              sbrs R2,6
 0122 0CC0              rjmp L23
 0124                   .dbline 130
 0124                   .dbline 130
 0124 84B5              in R24,0x24
 0126 9927              clr R25
 0128 8150              subi R24,1  ; offset = 255
 012A 9F4F              sbci R25,255
 012C 90930300          sts _time2+1,R25
 0130 80930200          sts _time2,R24
 0134                   .dbline 130
 0134 88B7              in R24,0x38
 0136 8064              ori R24,64
 0138 88BF              out 0x38,R24
 013A                   .dbline 130
 013A 06C0              rjmp L24
 013C           L23:
 013C                   .dbline 132
 013C           ;  else
 013C           ;  time2=TCNT2;
 013C 24B4              in R2,0x24
 013E 3324              clr R3
 0140 30920300          sts _time2+1,R3
 0144 20920200          sts _time2,R2
 0148           L24:
 0148                   .dbline 133
 0148           ;  time2-=100;
 0148 80910200          lds R24,_time2
 014C 90910300          lds R25,_time2+1
 0150 8456              subi R24,100
 0152 9040              sbci R25,0
 0154 90930300          sts _time2+1,R25
 0158 80930200          sts _time2,R24
 015C                   .dbline 134
 015C           ;  if(time2>250)time2=250;
 015C 8AEF              ldi R24,250
 015E 90E0              ldi R25,0
 0160 20900200          lds R2,_time2
 0164 30900300          lds R3,_time2+1
 0168 8215              cp R24,R2
 016A 9305              cpc R25,R3
 016C 20F4              brsh L25
 016E                   .dbline 134
 016E 90930300          sts _time2+1,R25
 0172 80930200          sts _time2,R24
 0176           L25:
 0176                   .dbline 135
 0176           ;  TCNT2=0;
 0176 2224              clr R2
 0178 24BC              out 0x24,R2
 017A                   .dbline 137
 017A           ;  
 017A           ;  break;
 017A 02C0              rjmp L20
 017C           L27:
 017C                   .dbline 139
 017C           ;  case 0x08://上升触发
 017C           ;  TCCR2 = 0x03; //start
 017C 83E0              ldi R24,3
 017E 85BD              out 0x25,R24
 0180                   .dbline 140
 0180           ;  }
 0180           L19:
 0180           L20:
 0180                   .dbline -2
 0180           L18:
 0180 2990              ld R2,y+
 0182 2FBE              out 0x3f,R2
 0184 E991              ld R30,y+
 0186 9991              ld R25,y+
 0188 8991              ld R24,y+
 018A 1991              ld R17,y+
 018C 0991              ld R16,y+
 018E 3990              ld R3,y+
 0190 2990              ld R2,y+
 0192                   .dbline 0 ; func end
 0192 1895              reti
 0194                   .dbend
 0194                   .dbfunc e init_devices _init_devices fV
                        .even
 0194           _init_devices::
 0194                   .dbline -1
 0194                   .dbline 146
 0194           ;  
 0194           ; }
 0194           ; 
 0194           ; //call this routine to initialize all peripherals
 0194           ; void init_devices(void)
 0194           ; {
 0194                   .dbline 148
 0194           ;  //stop errant interrupts until set up
 0194           ;  CLI(); //disable all interrupts
 0194 F894              cli
 0196                   .dbline 149
 0196           ;  port_init();
 0196 3BDF              rcall _port_init
 0198                   .dbline 150
 0198           ;  timer1_init();
 0198 44DF              rcall _timer1_init
 019A                   .dbline 151
 019A           ;  timer2_init();
 019A 52DF              rcall _timer2_init
 019C                   .dbline 152
 019C           ;  adc_init();
 019C 58DF              rcall _adc_init
 019E                   .dbline 154
 019E           ; 
 019E           ;  MCUCR = 0x05;
 019E 85E0              ldi R24,5
 01A0 85BF              out 0x35,R24
 01A2                   .dbline 155
 01A2           ;  GICR  = 0xC0;
 01A2 80EC              ldi R24,192
 01A4 8BBF              out 0x3b,R24
 01A6                   .dbline 156
 01A6           ;  TIMSK = 0x00; //timer interrupt sources
 01A6 2224              clr R2
 01A8 29BE              out 0x39,R2
 01AA                   .dbline 157
 01AA           ;  SEI(); //re-enable interrupts
 01AA 7894              sei
 01AC                   .dbline -2
 01AC           L29:
 01AC                   .dbline 0 ; func end
 01AC 0895              ret
 01AE                   .dbend
 01AE                   .dbfunc e ReadADC _ReadADC fi
 01AE           ;           int2 -> R20,R21
 01AE           ;           int1 -> R22,R23
 01AE           ;        channel -> R16
                        .even
 01AE           _ReadADC::
 01AE 00D0              rcall push_gset2
 01B0                   .dbline -1
 01B0                   .dbline 166
 01B0           ;  //all peripherals are now initialized
 01B0           ; }
 01B0           ; 
 01B0           ; 
 01B0           ; 
 01B0           ; 
 01B0           ; 
 01B0           ; Uint ReadADC (Uchar channel)
 01B0           ; {
 01B0                   .dbline 168
 01B0           ; Uint int1,int2;
 01B0           ; ADMUX&=~0x1F;
 01B0 87B1              in R24,0x7
 01B2 807E              andi R24,224
 01B4 87B9              out 0x7,R24
 01B6                   .dbline 169
 01B6           ; ADMUX|=channel;
 01B6 27B0              in R2,0x7
 01B8 202A              or R2,R16
 01BA 27B8              out 0x7,R2
 01BC                   .dbline 170
 01BC           ; ADCSRA|=0x40;
 01BC 369A              sbi 0x6,6
 01BE           L31:
 01BE                   .dbline 171
 01BE                   .dbline 171
 01BE           L32:
 01BE                   .dbline 171
 01BE           ; while(~ADCSRA&0x10){}
 01BE 26B0              in R2,0x6
 01C0 3324              clr R3
 01C2 2094              com R2
 01C4 3094              com R3
 01C6 24FC              sbrc R2,4
 01C8 FACF              rjmp L31
 01CA                   .dbline 172
 01CA           ; ADCSRA|=0x10;
 01CA 349A              sbi 0x6,4
 01CC                   .dbline 173
 01CC           ; int2=ADCL;
 01CC 44B1              in R20,0x4
 01CE 5527              clr R21
 01D0                   .dbline 174
 01D0           ; int1=ADCH;
 01D0 65B1              in R22,0x5
 01D2 7727              clr R23
 01D4                   .dbline 175
 01D4           ; int1<<=8;
 01D4 762F              mov R23,R22
 01D6 6627              clr R22
 01D8                   .dbline 176
 01D8           ; return (int1+int2);
 01D8 8B01              movw R16,R22
 01DA 040F              add R16,R20
 01DC 151F              adc R17,R21
 01DE                   .dbline -2
 01DE           L30:
 01DE 00D0              rcall pop_gset2
 01E0                   .dbline 0 ; func end
 01E0 0895              ret
 01E2                   .dbsym r int2 20 i
 01E2                   .dbsym r int1 22 i
 01E2                   .dbsym r channel 16 c
 01E2                   .dbend
 01E2                   .dbfunc e main _main fI
 01E2           ;         stopt1 -> y+2
 01E2           ;         stopt0 -> y+0
 01E2           ;         barke1 -> R20
 01E2           ;         barke0 -> R22
 01E2           ;           dst1 -> R10
 01E2           ;           dst0 -> R12
 01E2           ;        action1 -> R14
 01E2           ;        action0 -> y+20
 01E2           ;          temp1 -> y+18
 01E2           ;          temp0 -> y+16
 01E2           ;           adc1 -> y+14
 01E2           ;           adc0 -> y+12
 01E2           ;           pos1 -> y+10
 01E2           ;           pos0 -> y+8
                        .even
 01E2           _main::
 01E2 6597              sbiw R28,21
 01E4                   .dbline -1
 01E4                   .dbline 184
 01E4           ; }
 01E4           ; 
 01E4           ; 
 01E4           ; 
 01E4           ; 
 01E4           ; 
 01E4           ; main()
 01E4           ; {
 01E4                   .dbline 193
 01E4           ; Uchar dst0,dst1;//距离定点的数值
 01E4           ; Uint stopt0,stopt1;//刹车时间
 01E4           ; Uint adc0,adc1;//舵机电位
 01E4           ; Uint pos0,pos1;//舵机电位
 01E4           ; Uint temp0,temp1;//舵机电位
 01E4           ; Uchar barke0,barke1;//强力刹车,由全速运行转换到爬行需要强力刹车即长时间反向制动
 01E4           ; Uchar action0,action1;//电机动作
 01E4           ; 
 01E4           ; init_devices();
 01E4 D7DF              rcall _init_devices
 01E6 50C1              rjmp L36
 01E8           L35:
 01E8                   .dbline 197
 01E8           ; 
 01E8           ; 
 01E8           ; while(1)
 01E8           ; {
 01E8                   .dbline 198
 01E8           ; adc0=ReadADC (0);
 01E8 0027              clr R16
 01EA E1DF              rcall _ReadADC
 01EC 1D87              std y+13,R17
 01EE 0C87              std y+12,R16
 01F0                   .dbline 199
 01F0           ; adc1=ReadADC (1);
 01F0 01E0              ldi R16,1
 01F2 DDDF              rcall _ReadADC
 01F4 1F87              std y+15,R17
 01F6 0E87              std y+14,R16
 01F8                   .dbline 200
 01F8 8889              ldd R24,y+16
 01FA 9989              ldd R25,y+17
 01FC 0196              adiw R24,1
 01FE 0C84              ldd R0,y+12
 0200 1D84              ldd R1,y+13
 0202 8015              cp R24,R0
 0204 9105              cpc R25,R1
 0206 30F0              brlo L40
 0208 8889              ldd R24,y+16
 020A 9989              ldd R25,y+17
 020C 0197              sbiw R24,1
 020E 0816              cp R0,R24
 0210 1906              cpc R1,R25
 0212 20F4              brsh L38
 0214           L40:
 0214                   .dbline 200
 0214           ; if((adc0>temp0+1)||(adc0<temp0-1))temp0=adc0;
 0214 0C84              ldd R0,y+12
 0216 1D84              ldd R1,y+13
 0218 198A              std y+17,R1
 021A 088A              std y+16,R0
 021C           L38:
 021C                   .dbline 201
 021C 8A89              ldd R24,y+18
 021E 9B89              ldd R25,y+19
 0220 0196              adiw R24,1
 0222 0E84              ldd R0,y+14
 0224 1F84              ldd R1,y+15
 0226 8015              cp R24,R0
 0228 9105              cpc R25,R1
 022A 30F0              brlo L43
 022C 8A89              ldd R24,y+18
 022E 9B89              ldd R25,y+19
 0230 0197              sbiw R24,1
 0232 0816              cp R0,R24
 0234 1906              cpc R1,R25
 0236 20F4              brsh L41
 0238           L43:
 0238                   .dbline 201
 0238           ; if((adc1>temp1+1)||(adc1<temp1-1))temp1=adc1;
 0238 0E84              ldd R0,y+14
 023A 1F84              ldd R1,y+15
 023C 1B8A              std y+19,R1
 023E 0A8A              std y+18,R0
 0240           L41:
 0240                   .dbline 203
 0240           ; 
 0240           ; pos0=temp0>>2;
 0240 2888              ldd R2,y+16
 0242 3988              ldd R3,y+17
 0244 3694              lsr R3
 0246 2794              ror R2
 0248 3694              lsr R3
 024A 2794              ror R2
 024C 3986              std y+9,R3
 024E 2886              std y+8,R2
 0250                   .dbline 204
 0250           ; pos1=temp1>>2;
 0250 2A88              ldd R2,y+18
 0252 3B88              ldd R3,y+19
 0254 3694              lsr R3
 0256 2794              ror R2
 0258 3694              lsr R3
 025A 2794              ror R2
 025C 3B86              std y+11,R3
 025E 2A86              std y+10,R2
 0260                   .dbline 206
 0260           ; 
 0260           ; switch(action0)
 0260 2C88              ldd R2,y+20
 0262 3324              clr R3
 0264 3D82              std y+5,R3
 0266 2C82              std y+4,R2
 0268 C101              movw R24,R2
 026A 8130              cpi R24,1
 026C E0E0              ldi R30,0
 026E 9E07              cpc R25,R30
 0270 49F0              breq L47
 0272 8230              cpi R24,2
 0274 E0E0              ldi R30,0
 0276 9E07              cpc R25,R30
 0278 41F0              breq L48
 027A 8330              cpi R24,3
 027C E0E0              ldi R30,0
 027E 9E07              cpc R25,R30
 0280 39F0              breq L49
 0282 09C0              rjmp L44
 0284           X5:
 0284                   .dbline 207
 0284           ; {
 0284           L47:
 0284                   .dbline 208
 0284           ; case 1:Forward0 break;
 0284 C09A              sbi 0x18,0
 0286                   .dbline 208
 0286 C198              cbi 0x18,1
 0288                   .dbline 208
 0288 06C0              rjmp L45
 028A           L48:
 028A                   .dbline 209
 028A           ; case 2:Backward0 break;
 028A C19A              sbi 0x18,1
 028C                   .dbline 209
 028C C098              cbi 0x18,0
 028E                   .dbline 209
 028E 03C0              rjmp L45
 0290           L49:
 0290                   .dbline 210
 0290           ; case 3:Stop0 break;
 0290 88B3              in R24,0x18
 0292 8360              ori R24,3
 0294 88BB              out 0x18,R24
 0296                   .dbline 210
 0296           L44:
 0296           L45:
 0296                   .dbline 213
 0296           ; }
 0296           ; 
 0296           ; action0=3;
 0296 83E0              ldi R24,3
 0298 8C8B              std y+20,R24
 029A                   .dbline 214
 029A           ; if(pos0>(time1+2))
 029A 80910000          lds R24,_time1
 029E 90910100          lds R25,_time1+1
 02A2 0296              adiw R24,2
 02A4 0884              ldd R0,y+8
 02A6 1984              ldd R1,y+9
 02A8 8015              cp R24,R0
 02AA 9105              cpc R25,R1
 02AC 78F5              brsh L50
 02AE                   .dbline 215
 02AE           ; {action0=1 ;dst0=pos0-time1;
 02AE                   .dbline 215
 02AE 0024              clr R0
 02B0 0394              inc R0
 02B2 0C8A              std y+20,R0
 02B4                   .dbline 215
 02B4 20900000          lds R2,_time1
 02B8 30900100          lds R3,_time1+1
 02BC C884              ldd R12,y+8
 02BE D984              ldd R13,y+9
 02C0 C218              sub R12,R2
 02C2 D308              sbc R13,R3
 02C4                   .dbline 216

⌨️ 快捷键说明

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