📄 scon2.lis
字号:
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 + -