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

📄 ji_qi_ren.lst

📁 基于atmel公司的mega16单片机做的机器人控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0146 E005      LDI	R16,5
    0147 E010      LDI	R17,0
    0148 DF0A      RCALL	_delay_us
(0175)       display>>=1;
    0149 9566      LSR	R22
    014A 9543      INC	R20
    014B 3048      CPI	R20,0x8
    014C F308      BCS	0x012E
(0176)    }
(0177)   display=number[minute%10];
    014D E02A      LDI	R18,0xA
    014E E030      LDI	R19,0
    014F 2D0E      MOV	R16,R14
    0150 2711      CLR	R17
    0151 940E03EE  CALL	mod16s
    0153 01F8      MOVW	R30,R16
    0154 E683      LDI	R24,0x63
    0155 E090      LDI	R25,0
    0156 0FE8      ADD	R30,R24
    0157 1FF9      ADC	R31,R25
    0158 8160      LDD	R22,Z+0
(0178)   if(point)  //显示路程时米与厘米之加小数点
    0159 20CC      TST	R12
    015A F009      BEQ	0x015C
(0179)   display&=0x7f;
    015B 776F      ANDI	R22,0x7F
(0180)    for(j=0;j<8;j++)
    015C 2744      CLR	R20
    015D C01D      RJMP	0x017B
(0181)    {
(0182)      PORTC|=0x10;delay_us(5);
    015E 9AAC      SBI	0x15,4
    015F E005      LDI	R16,5
    0160 E010      LDI	R17,0
    0161 DEF1      RCALL	_delay_us
(0183)      PORTC&=0xf7;delay_us(5);
    0162 B385      IN	R24,0x15
    0163 7F87      ANDI	R24,0xF7
    0164 BB85      OUT	0x15,R24
    0165 E005      LDI	R16,5
    0166 E010      LDI	R17,0
    0167 DEEB      RCALL	_delay_us
(0184)      PORTC|=((display&0x01)<<3);delay_us(5);
    0168 2F86      MOV	R24,R22
    0169 7081      ANDI	R24,1
    016A 0F88      LSL	R24
    016B 0F88      LSL	R24
    016C 0F88      LSL	R24
    016D B225      IN	R2,0x15
    016E 2A28      OR	R2,R24
    016F BA25      OUT	0x15,R2
    0170 E005      LDI	R16,5
    0171 E010      LDI	R17,0
    0172 DEE0      RCALL	_delay_us
(0185)      PORTC&=0xef;delay_us(5);
    0173 B385      IN	R24,0x15
    0174 7E8F      ANDI	R24,0xEF
    0175 BB85      OUT	0x15,R24
    0176 E005      LDI	R16,5
    0177 E010      LDI	R17,0
    0178 DEDA      RCALL	_delay_us
(0186)     display>>=1;
    0179 9566      LSR	R22
    017A 9543      INC	R20
    017B 3048      CPI	R20,0x8
    017C F308      BCS	0x015E
(0187)   }
(0188)   display=number[second/10];
    017D E02A      LDI	R18,0xA
    017E E030      LDI	R19,0
    017F 2D0A      MOV	R16,R10
    0180 2711      CLR	R17
    0181 940E03F2  CALL	div16s
    0183 01F8      MOVW	R30,R16
    0184 E683      LDI	R24,0x63
    0185 E090      LDI	R25,0
    0186 0FE8      ADD	R30,R24
    0187 1FF9      ADC	R31,R25
    0188 8160      LDD	R22,Z+0
(0189)   for(j=0;j<8;j++)
    0189 2744      CLR	R20
    018A C01D      RJMP	0x01A8
(0190)   {
(0191)    PORTC|=0x10;delay_us(5);
    018B 9AAC      SBI	0x15,4
    018C E005      LDI	R16,5
    018D E010      LDI	R17,0
    018E DEC4      RCALL	_delay_us
(0192)    PORTC&=0xf7;delay_us(5);
    018F B385      IN	R24,0x15
    0190 7F87      ANDI	R24,0xF7
    0191 BB85      OUT	0x15,R24
    0192 E005      LDI	R16,5
    0193 E010      LDI	R17,0
    0194 DEBE      RCALL	_delay_us
(0193)    PORTC|=((display&0x01)<<3);delay_us(5);
    0195 2F86      MOV	R24,R22
    0196 7081      ANDI	R24,1
    0197 0F88      LSL	R24
    0198 0F88      LSL	R24
    0199 0F88      LSL	R24
    019A B225      IN	R2,0x15
    019B 2A28      OR	R2,R24
    019C BA25      OUT	0x15,R2
    019D E005      LDI	R16,5
    019E E010      LDI	R17,0
    019F DEB3      RCALL	_delay_us
(0194)    PORTC&=0xef;delay_us(5);
    01A0 B385      IN	R24,0x15
    01A1 7E8F      ANDI	R24,0xEF
    01A2 BB85      OUT	0x15,R24
    01A3 E005      LDI	R16,5
    01A4 E010      LDI	R17,0
    01A5 DEAD      RCALL	_delay_us
(0195)    display>>=1;
    01A6 9566      LSR	R22
    01A7 9543      INC	R20
    01A8 3048      CPI	R20,0x8
    01A9 F308      BCS	0x018B
(0196)   }
(0197)   display=number[second%10];
    01AA E02A      LDI	R18,0xA
    01AB E030      LDI	R19,0
    01AC 2D0A      MOV	R16,R10
    01AD 2711      CLR	R17
    01AE 940E03EE  CALL	mod16s
    01B0 01F8      MOVW	R30,R16
    01B1 E683      LDI	R24,0x63
    01B2 E090      LDI	R25,0
    01B3 0FE8      ADD	R30,R24
    01B4 1FF9      ADC	R31,R25
    01B5 8160      LDD	R22,Z+0
(0198)   for(j=0;j<8;j++)
    01B6 2744      CLR	R20
    01B7 C01D      RJMP	0x01D5
(0199)   {
(0200)    PORTC|=0x10;delay_us(5);
    01B8 9AAC      SBI	0x15,4
    01B9 E005      LDI	R16,5
    01BA E010      LDI	R17,0
    01BB DE97      RCALL	_delay_us
(0201)    PORTC&=0xf7;delay_us(5);
    01BC B385      IN	R24,0x15
    01BD 7F87      ANDI	R24,0xF7
    01BE BB85      OUT	0x15,R24
    01BF E005      LDI	R16,5
    01C0 E010      LDI	R17,0
    01C1 DE91      RCALL	_delay_us
(0202)    PORTC|=((display&0x01)<<3);delay_us(5);
    01C2 2F86      MOV	R24,R22
    01C3 7081      ANDI	R24,1
    01C4 0F88      LSL	R24
    01C5 0F88      LSL	R24
    01C6 0F88      LSL	R24
    01C7 B225      IN	R2,0x15
    01C8 2A28      OR	R2,R24
    01C9 BA25      OUT	0x15,R2
    01CA E005      LDI	R16,5
    01CB E010      LDI	R17,0
    01CC DE86      RCALL	_delay_us
(0203)    PORTC&=0xef;delay_us(5);
    01CD B385      IN	R24,0x15
    01CE 7E8F      ANDI	R24,0xEF
    01CF BB85      OUT	0x15,R24
    01D0 E005      LDI	R16,5
    01D1 E010      LDI	R17,0
    01D2 DE80      RCALL	_delay_us
(0204)    display>>=1;
    01D3 9566      LSR	R22
    01D4 9543      INC	R20
    01D5 3048      CPI	R20,0x8
    01D6 F308      BCS	0x01B8
    01D7 940E042B  CALL	pop_gset5
    01D9 9508      RET
(0205)   }
(0206) } 
(0207) /////////////液晶屏显示函数/////////////////////////////////////
(0208) 
(0209) 
(0210) 
(0211) /////////////////寻找黑线////////////////////////////////////////
(0212) void trace_road(void) //黑线寻迹函数
(0213) {
(0214)    unsigned char pinc;
(0215)     PINC=PINC&0x07;  //PC0~PC2信号送给变量pinc
_trace_road:
  pinc                 --> Y+1
    01DA B383      IN	R24,0x13
    01DB 7087      ANDI	R24,7
    01DC BB83      OUT	0x13,R24
(0216)   if((PINC==0x02)||(PINC==0x07))//只有中间传感器有信号,
    01DD B383      IN	R24,0x13
    01DE 3082      CPI	R24,2
    01DF F019      BEQ	0x01E3
    01E0 B383      IN	R24,0x13
    01E1 3087      CPI	R24,7
    01E2 F439      BNE	0x01EA
(0217)       { run();turn_state0=0;  turn_state1=0;}//或三个均有信号,则直走
    01E3 DEDD      RCALL	_run
    01E4 2422      CLR	R2
    01E5 92200060  STS	turn_state0,R2
    01E7 92200061  STS	turn_state1,R2
    01E9 C033      RJMP	0x021D
(0218) 	else if(PINC==0x06)//若右边无信号
    01EA B383      IN	R24,0x13
    01EB 3086      CPI	R24,6
    01EC F429      BNE	0x01F2
(0219) 	  {turn_left();turn_state0=1;}     //左转
    01ED DEF3      RCALL	_turn_left
    01EE E081      LDI	R24,1
    01EF 93800060  STS	turn_state0,R24
    01F1 C02B      RJMP	0x021D
(0220) 	  else if(PINC==0x03)//若左边无信号
    01F2 B383      IN	R24,0x13
    01F3 3083      CPI	R24,3
    01F4 F429      BNE	0x01FA
(0221) 	    {turn_right(); turn_state1=1;}   //右转
    01F5 DEF5      RCALL	_turn_right
    01F6 E081      LDI	R24,1
    01F7 93800061  STS	turn_state1,R24
    01F9 C023      RJMP	0x021D
(0222) 		else if(PINC==0x04)//若右边和中间均无信号
    01FA B383      IN	R24,0x13
    01FB 3084      CPI	R24,4
    01FC F429      BNE	0x0202
(0223) 		 { turn_left();turn_state0=1;}   //左转
    01FD DEE3      RCALL	_turn_left
    01FE E081      LDI	R24,1
    01FF 93800060  STS	turn_state0,R24
    0201 C01B      RJMP	0x021D
(0224) 		  else if(PINC==0x01)//若左边和中间均无信号
    0202 B383      IN	R24,0x13
    0203 3081      CPI	R24,1
    0204 F429      BNE	0x020A
(0225) 		    {turn_right();turn_state1=1;}   //右转
    0205 DEE5      RCALL	_turn_right
    0206 E081      LDI	R24,1
    0207 93800061  STS	turn_state1,R24
    0209 C013      RJMP	0x021D
(0226) 			else if((turn_state0==1)&&(PINC==0))//若三个均无信号
    020A 91800060  LDS	R24,turn_state0
    020C 3081      CPI	R24,1
    020D F429      BNE	0x0213
    020E B223      IN	R2,0x13
    020F 2022      TST	R2
    0210 F411      BNE	0x0213
(0227) 			   turn_left();  //左转半圈
    0211 DECF      RCALL	_turn_left
    0212 C00A      RJMP	0x021D
(0228)               else if((turn_state1==1)&&(PINC==0))
    0213 91800061  LDS	R24,turn_state1
    0215 3081      CPI	R24,1
    0216 F429      BNE	0x021C
    0217 B223      IN	R2,0x13
    0218 2022      TST	R2
    0219 F411      BNE	0x021C
(0229) 			    turn_right();
    021A DED0      RCALL	_turn_right
    021B C001      RJMP	0x021D
(0230) 				else
(0231) 				  run();
    021C DEA4      RCALL	_run
    021D 9508      RET
(0232)   }
(0233) ///////////////////寻找黑线////////////////////////////////////////
(0234) 
(0235) 
(0236) 
(0237) ////////////////////探测光源函数///////////////////////////////////
(0238) void trace_light_init(void)
(0239)  {
(0240)    DDRA&=0xf8;       // PC0 1分别为探测光源的左 右端口,
_trace_light_init:
    021E B38A      IN	R24,0x1A
    021F 7F88      ANDI	R24,0xF8
    0220 BB8A      OUT	0x1A,R24
(0241)    PORTA&=0xf8;
    0221 B38B      IN	R24,0x1B
    0222 7F88      ANDI	R24,0xF8
    0223 BB8B      OUT	0x1B,R24
(0242)   ADMUX=0x60;         //初始化ADC0 
    0224 E680      LDI	R24,0x60
    0225 B987      OUT	0x07,R24
(0243)   ADCSRA=0x82;         //初始化ADC0,64分频
    0226 E882      LDI	R24,0x82
    0227 B986      OUT	0x06,R24
    0228 9508      RET
_trace_light:
  adc                  --> R20
    0229 940E0434  CALL	push_gset2
(0244)  }
(0245) void trace_light(void)
(0246) {
(0247)    unsigned char adc;
(0248)     for(adc=0;adc<3;adc++)
    022B 2744      CLR	R20
    022C C042      RJMP	0x026F
(0249) 	{
(0250) 	   if(adc==0)
    022D 2344      TST	R20
    022E F419      BNE	0x0232
(0251)           ADMUX=0x60;
    022F E680      LDI	R24,0x60
    0230 B987      OUT	0x07,R24
    0231 C007      RJMP	0x0239
(0252) 	        else if(adc==1)
    0232 3041      CPI	R20,1
    0233 F419      BNE	0x0237
(0253)                ADMUX=0x61;
    0234 E681      LDI	R24,0x61
    0235 B987      OUT	0x07,R24
    0236 C002      RJMP	0x0239
(0254) 			     else 
(0255)                     ADMUX=0x62;
    0237 E682      LDI	R24,0x62
    0238 B987      OUT	0x07,R24
(0256)    delay_us(10);
    0239 E00A      LDI	R16,0xA
    023A E010      LDI	R17,0
    023B DE17      RCALL	_delay_us
(0257)     ADCSRA|=0x40;
    023C 9A36      SBI	0x06,6
(0258)    delay_ms(100);
    023D E604      LDI	R16,0x64
    023E E010      LDI	R17,0
    023F DE1B      RCALL	_delay_ms
(0259)    switch(adc)
    0240 2F64      MOV	R22,R20
    0241 2777      CLR	R23
    0242 3060      CPI	R22,0
    0243 0767      CPC	R22,R23
    0244 F049      BEQ	0x024E
    0245 3061      CPI	R22,1
    0246 E0E0      LDI	R30,0
    0247 077E      CPC	R23,R30
    0248 F081      BEQ	0x0259
    0249 3062      CPI	R22,2
    024A E0E0      LDI	R30,0
    024B 077E      CPC	R23,R30
    024C F0B9      BEQ	0x0264
    024D C020      RJMP	0x026E
(0260)        {
(0261)         case 0: left=(ADC>>6);break;
    024E E026      LDI	R18,6
    024F E030      LDI	R19,0
    0250 B104      IN	R16,0x04
    0251 B115      IN	R17,0x05
    0252 940E047B  CALL	lsr16
    0254 93100076  STS	left+1,R17
    0256 93000075  STS	left,R16
    0258 C015      RJMP	0x026E
(0262) 	    case 1: right=(ADC>>6);break;
    0259 E026      LDI	R18,6
    025A E030      LDI	R19,0
    025B B104      IN	R16,0x04
    025C B115      IN	R17,0x05
    025D 940E047B  CALL	lsr16
    025F 93100074  STS	right+1,R17
    0261 93000073  STS	right,R16
    0263 C00A      RJMP	0x026E
(0263) 		case 2: interval=(ADC>>6);break;
    0264 E026      LDI	R18,6
    0265 E030      LDI	R19,0
    0266 B104      IN	R16,0x04
    0267 B115      IN	R17,0x05
    0268 940E047B  CALL	lsr16
    026A 93100070  STS	interval+1,R17
    026C 9300006F  STS	interval,R16
    026E 9543      INC	R20
    026F 3043      CPI	R20,3
    0270 F408      BCC	0x0272
    0271 CFBB      RJMP	0x022D
(0264) 	        default:  break;
(0265)         }
(0266)     }
(0267)   zhong=right-left;
    0272 90200075  LDS	R2,left
    0274 90300076  LDS	R3,left+1
    0276 90400073  LDS	R4,right
    0278 90500074  LDS	R5,right+1
    027A 1842      SUB	R4,R2
    027B 0853      SBC	R5,R3
    027C 92500072  STS	zhong+1,R5
    027E 92400071  STS	zhong,R4
(0268)   right=1024-right;
    0280 90200073  LDS	R2,right
    0282 90300074  LDS	R3,right+1
    0284 E080      LDI	R24,0
    0285 E094      LDI	R25,4
    0286 1982      SUB	R24,R2
    0287 0993      SBC	R25,R3
    0288 93900074  STS	right+1,R25
    028A 93800073  STS	right,R24
(0269)   if(interval<420)
    028C 9180006F  LDS	R24,interval
    028E 91900070  LDS	R25,interval+1
    0290 3A84      CPI	R24,0xA4
    0291 E0E1      LDI	R30,1
    0292 079E      CPC	R25,R30
    0293 F428      BCC	0x0299
(0270)    {
(0271)       TIMSK&=0xbf;//停止计时
    0294 B789      IN	R24,0x39
    0295 7B8F      ANDI	R24,0xBF
    0296 BF89      OUT	0x39,R24
(0272) 	       for(;;)
(0273) 	            stop();
    0297 DE20      RCALL	_stop
    0298 CFFE      RJMP	0x0297
(0274) 		}		
(0275)    else if((interval>419)&&(zhong<left)&&(zhong<right)&&((left<(right+10))|(right<(left+10))))
    0299 EA83      LDI	R24,0xA3
    029A E091      LDI	R25,1
    029B 9020006F  LDS	R2,interval
    029D 90300070  LDS	R3,interval+1
    029F 1582      CP	R24,R2
    02A0 0593      CPC	R25,R3
    02A1 F008      BCS	0x02A3
    02A2 C03A      RJMP	0x02DD
    02A3 90200075  LDS	R2,left
    02A5 90300076  LDS	R3,left+1
    02A7 90400071  LDS	R4,zhong
    02A9 90500072  LDS	R5,zhong+1
    02AB 1442      CP	R4,R2
    02AC 0453      CPC	R5,R3
    02AD F578      BCC	0x02DD
    02AE 90200073  LDS	R2,right
    02B0 90300074  LDS	R3,right+1
    02B2 1442      CP	R4,R2
    02B3 0453      CPC	R5,R3
    02B4 F540      BCC	0x02DD
    02B5 01C1      MOVW	R24,R2
    02B6 960A      ADIW	R24,0xA
    02B7 90200075  LDS	R2,left
    02B9 90300076  LDS	R3,left+1
    02BB 1628      CP	R2,R24
    02BC 0639      CPC	R3,R25
    02BD F418      BCC	0x02C1
    02BE E061      LDI	R22,1
    02BF E070      LDI	R23,0
    02C0 C002      RJMP	0x02C3
    02C1 2766      CLR	R22
    02C2 2777      CLR	R23
    02C3 91800075  LDS	R24,left
    02C5 91900076  LDS	R25,left+1
    02C7 960A      ADIW	R24,0xA
    02C8 90200073  LDS	R2,right
    02CA 90300074  LDS	R3,right+1
    02CC 1628      CP	R2,R24
    02CD 0639      CPC	R3,R25
    02CE F418      BCC	0x02D2
    02CF E041      LDI	R20,1
    02D0 E050      LDI	R21,0
    02D1 C002      RJMP	0x02D4
    02D2 2744      CLR	R20
    02D3 2755      CLR	R21
    02D4 011B      MOVW	R2,R22
    02D5 2A24      OR	R2,R20
    02D6 2A35      OR	R3,R21
    02D7 2022      TST	R2
    02D8 F411      BNE	0x02DB
    02D9 2033      TST	R3
    02DA F011      BEQ	0x02DD
(0276)               {run();}
    02DB DDE5      RCALL	_run

⌨️ 快捷键说明

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