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

📄 双足机器人.lst

📁 这段源代码是基于atmel公司mega16单片机做的双足机器人控制程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
_LeftFwd:
  time                 --> R20
    0109 940E0473  CALL	push_gset1
    010B 2F40      MOV	R20,R16
(0162)  
(0163)  }
(0164) 
(0165) }
(0166) 
(0167) void LeftFwd(unsigned char time)//迈左脚步
(0168) {
    010C C00A      RJMP	0x0117
(0169) 
(0170) 
(0171)  while(time>1)
(0172)  {
(0173)   time--;
    010D 954A      DEC	R20
(0174)  
(0175)   PORTD&=0x3f;
    010E B382      IN	R24,0x12
    010F 738F      ANDI	R24,0x3F
    0110 BB82      OUT	0x12,R24
(0176)   delay_20ms();
    0111 DF58      RCALL	_delay_20ms
(0177) 
(0178)  
(0179)   PORTD|=0x40;
    0112 9A96      SBI	0x12,6
(0180)   delay_run();
    0113 DF8A      RCALL	_delay_run
(0181)   PORTD&=0x3f; 
    0114 B382      IN	R24,0x12
    0115 738F      ANDI	R24,0x3F
    0116 BB82      OUT	0x12,R24
    0117 E081      LDI	R24,1
    0118 1784      CP	R24,R20
    0119 F398      BCS	0x010D
    011A 940E0476  CALL	pop_gset1
    011C 9508      RET
_RightUp:
  time                 --> R20
    011D 940E0473  CALL	push_gset1
    011F 2F40      MOV	R20,R16
(0182)  }
(0183) 
(0184) 
(0185) 
(0186) 
(0187) }	
(0188) 	
(0189) void RightUp(unsigned char  time)//抬右脚
(0190) {
    0120 C00A      RJMP	0x012B
(0191)  while(time>1)
(0192)  {
(0193)   time--;
    0121 954A      DEC	R20
(0194)  
(0195)   PORTD&=0x3f;
    0122 B382      IN	R24,0x12
    0123 738F      ANDI	R24,0x3F
    0124 BB82      OUT	0x12,R24
(0196)   delay_20ms();
    0125 DF44      RCALL	_delay_20ms
(0197) 
(0198)  
(0199)   PORTD|=0x80;
    0126 9A97      SBI	0x12,7
(0200)   delay_back();
    0127 DF83      RCALL	_delay_back
(0201)   PORTD&=0x3f;
    0128 B382      IN	R24,0x12
    0129 738F      ANDI	R24,0x3F
    012A BB82      OUT	0x12,R24
    012B E081      LDI	R24,1
    012C 1784      CP	R24,R20
    012D F398      BCS	0x0121
    012E 940E0476  CALL	pop_gset1
    0130 9508      RET
_RightFwd:
  time                 --> R20
    0131 940E0473  CALL	push_gset1
    0133 2F40      MOV	R20,R16
(0202)  
(0203)  }
(0204) }
(0205) 
(0206) void RightFwd(unsigned char time)//迈右脚
(0207) {
    0134 C00A      RJMP	0x013F
(0208)  while(time>1)
(0209)  {
(0210)   time--;
    0135 954A      DEC	R20
(0211)  
(0212)   PORTD&=0x3f;
    0136 B382      IN	R24,0x12
    0137 738F      ANDI	R24,0x3F
    0138 BB82      OUT	0x12,R24
(0213)   delay_20ms();
    0139 DF30      RCALL	_delay_20ms
(0214) 
(0215)  
(0216)   PORTD|=0x40;
    013A 9A96      SBI	0x12,6
(0217)   delay_back();
    013B DF6F      RCALL	_delay_back
(0218)   PORTD&=0x3f; 
    013C B382      IN	R24,0x12
    013D 738F      ANDI	R24,0x3F
    013E BB82      OUT	0x12,R24
    013F E081      LDI	R24,1
    0140 1784      CP	R24,R20
    0141 F398      BCS	0x0135
    0142 940E0476  CALL	pop_gset1
    0144 9508      RET
_display_time:
  j                    --> R20
  display              --> R22
  point                --> R12
  second               --> R10
  minute               --> R14
  n1                   --> R20
    0145 940E046B  CALL	push_gset5
    0147 2EE2      MOV	R14,R18
    0148 2F40      MOV	R20,R16
    0149 84AA      LDD	R10,Y+10
    014A 84CC      LDD	R12,Y+12
(0219)  }
(0220) 
(0221) }
(0222) 
(0223) 
(0224) /////////////////小车运动////////////////////////////////////////
(0225) 
(0226) 
(0227) /////////////液晶屏显示函数/////////////////////////////////////
(0228)  
(0229)  
(0230)  void display_time(unsigned char n1,unsigned char minute,unsigned char second,unsigned char  point)
(0231) //参数n1为控制是否显示冒号,11为不显示,10为显示.
(0232) //minute\second为两个最大为99的整数
(0233) //point为控制是否显示小数点,0为不显示,1为显示.
(0234) {
(0235) 	unsigned char j,display;
(0236) 	 display=number[n1];
    014B E683      LDI	R24,0x63
    014C E090      LDI	R25,0
    014D 2FE4      MOV	R30,R20
    014E 27FF      CLR	R31
    014F 0FE8      ADD	R30,R24
    0150 1FF9      ADC	R31,R25
    0151 8160      LDD	R22,Z+0
(0237)     for(j=0;j<8;j++)
    0152 2744      CLR	R20
    0153 C01A      RJMP	0x016E
(0238)      {
(0239)        PORTC|=0x10;
    0154 9AAC      SBI	0x15,4
(0240)        PORTC&=0xf7;delay_us(5);
    0155 B385      IN	R24,0x15
    0156 7F87      ANDI	R24,0xF7
    0157 BB85      OUT	0x15,R24
    0158 E005      LDI	R16,5
    0159 E010      LDI	R17,0
    015A DEF8      RCALL	_delay_us
(0241)        PORTC|=((display&0x01)<<3);delay_us(5);
    015B 2F86      MOV	R24,R22
    015C 7081      ANDI	R24,1
    015D 0F88      LSL	R24
    015E 0F88      LSL	R24
    015F 0F88      LSL	R24
    0160 B225      IN	R2,0x15
    0161 2A28      OR	R2,R24
    0162 BA25      OUT	0x15,R2
    0163 E005      LDI	R16,5
    0164 E010      LDI	R17,0
    0165 DEED      RCALL	_delay_us
(0242)        PORTC&=0xef;delay_us(5);
    0166 B385      IN	R24,0x15
    0167 7E8F      ANDI	R24,0xEF
    0168 BB85      OUT	0x15,R24
    0169 E005      LDI	R16,5
    016A E010      LDI	R17,0
    016B DEE7      RCALL	_delay_us
(0243)         display>>=1;
    016C 9566      LSR	R22
    016D 9543      INC	R20
    016E 3048      CPI	R20,0x8
    016F F320      BCS	0x0154
(0244)      }
(0245)   display=number[minute/10];
    0170 E02A      LDI	R18,0xA
    0171 E030      LDI	R19,0
    0172 2D0E      MOV	R16,R14
    0173 2711      CLR	R17
    0174 940E042F  CALL	div16s
    0176 01F8      MOVW	R30,R16
    0177 E683      LDI	R24,0x63
    0178 E090      LDI	R25,0
    0179 0FE8      ADD	R30,R24
    017A 1FF9      ADC	R31,R25
    017B 8160      LDD	R22,Z+0
(0246)   for(j=0;j<8;j++)
    017C 2744      CLR	R20
    017D C01D      RJMP	0x019B
(0247)     {
(0248)      PORTC|=0x10;delay_us(5);
    017E 9AAC      SBI	0x15,4
    017F E005      LDI	R16,5
    0180 E010      LDI	R17,0
    0181 DED1      RCALL	_delay_us
(0249)      PORTC&=0xf7;delay_us(5);
    0182 B385      IN	R24,0x15
    0183 7F87      ANDI	R24,0xF7
    0184 BB85      OUT	0x15,R24
    0185 E005      LDI	R16,5
    0186 E010      LDI	R17,0
    0187 DECB      RCALL	_delay_us
(0250)      PORTC|=((display&0x01)<<3);delay_us(5);
    0188 2F86      MOV	R24,R22
    0189 7081      ANDI	R24,1
    018A 0F88      LSL	R24
    018B 0F88      LSL	R24
    018C 0F88      LSL	R24
    018D B225      IN	R2,0x15
    018E 2A28      OR	R2,R24
    018F BA25      OUT	0x15,R2
    0190 E005      LDI	R16,5
    0191 E010      LDI	R17,0
    0192 DEC0      RCALL	_delay_us
(0251)      PORTC&=0xef;delay_us(5);
    0193 B385      IN	R24,0x15
    0194 7E8F      ANDI	R24,0xEF
    0195 BB85      OUT	0x15,R24
    0196 E005      LDI	R16,5
    0197 E010      LDI	R17,0
    0198 DEBA      RCALL	_delay_us
(0252)       display>>=1;
    0199 9566      LSR	R22
    019A 9543      INC	R20
    019B 3048      CPI	R20,0x8
    019C F308      BCS	0x017E
(0253)    }
(0254)   display=number[minute%10];
    019D E02A      LDI	R18,0xA
    019E E030      LDI	R19,0
    019F 2D0E      MOV	R16,R14
    01A0 2711      CLR	R17
    01A1 940E042B  CALL	mod16s
    01A3 01F8      MOVW	R30,R16
    01A4 E683      LDI	R24,0x63
    01A5 E090      LDI	R25,0
    01A6 0FE8      ADD	R30,R24
    01A7 1FF9      ADC	R31,R25
    01A8 8160      LDD	R22,Z+0
(0255)   if(point)  //显示路程时米与厘米之加小数点
    01A9 20CC      TST	R12
    01AA F009      BEQ	0x01AC
(0256)   display&=0x7f;
    01AB 776F      ANDI	R22,0x7F
(0257)    for(j=0;j<8;j++)
    01AC 2744      CLR	R20
    01AD C01D      RJMP	0x01CB
(0258)    {
(0259)      PORTC|=0x10;delay_us(5);
    01AE 9AAC      SBI	0x15,4
    01AF E005      LDI	R16,5
    01B0 E010      LDI	R17,0
    01B1 DEA1      RCALL	_delay_us
(0260)      PORTC&=0xf7;delay_us(5);
    01B2 B385      IN	R24,0x15
    01B3 7F87      ANDI	R24,0xF7
    01B4 BB85      OUT	0x15,R24
    01B5 E005      LDI	R16,5
    01B6 E010      LDI	R17,0
    01B7 DE9B      RCALL	_delay_us
(0261)      PORTC|=((display&0x01)<<3);delay_us(5);
    01B8 2F86      MOV	R24,R22
    01B9 7081      ANDI	R24,1
    01BA 0F88      LSL	R24
    01BB 0F88      LSL	R24
    01BC 0F88      LSL	R24
    01BD B225      IN	R2,0x15
    01BE 2A28      OR	R2,R24
    01BF BA25      OUT	0x15,R2
    01C0 E005      LDI	R16,5
    01C1 E010      LDI	R17,0
    01C2 DE90      RCALL	_delay_us
(0262)      PORTC&=0xef;delay_us(5);
    01C3 B385      IN	R24,0x15
    01C4 7E8F      ANDI	R24,0xEF
    01C5 BB85      OUT	0x15,R24
    01C6 E005      LDI	R16,5
    01C7 E010      LDI	R17,0
    01C8 DE8A      RCALL	_delay_us
(0263)     display>>=1;
    01C9 9566      LSR	R22
    01CA 9543      INC	R20
    01CB 3048      CPI	R20,0x8
    01CC F308      BCS	0x01AE
(0264)   }
(0265)   display=number[second/10];
    01CD E02A      LDI	R18,0xA
    01CE E030      LDI	R19,0
    01CF 2D0A      MOV	R16,R10
    01D0 2711      CLR	R17
    01D1 940E042F  CALL	div16s
    01D3 01F8      MOVW	R30,R16
    01D4 E683      LDI	R24,0x63
    01D5 E090      LDI	R25,0
    01D6 0FE8      ADD	R30,R24
    01D7 1FF9      ADC	R31,R25
    01D8 8160      LDD	R22,Z+0
(0266)   for(j=0;j<8;j++)
    01D9 2744      CLR	R20
    01DA C01D      RJMP	0x01F8
(0267)   {
(0268)    PORTC|=0x10;delay_us(5);
    01DB 9AAC      SBI	0x15,4
    01DC E005      LDI	R16,5
    01DD E010      LDI	R17,0
    01DE DE74      RCALL	_delay_us
(0269)    PORTC&=0xf7;delay_us(5);
    01DF B385      IN	R24,0x15
    01E0 7F87      ANDI	R24,0xF7
    01E1 BB85      OUT	0x15,R24
    01E2 E005      LDI	R16,5
    01E3 E010      LDI	R17,0
    01E4 DE6E      RCALL	_delay_us
(0270)    PORTC|=((display&0x01)<<3);delay_us(5);
    01E5 2F86      MOV	R24,R22
    01E6 7081      ANDI	R24,1
    01E7 0F88      LSL	R24
    01E8 0F88      LSL	R24
    01E9 0F88      LSL	R24
    01EA B225      IN	R2,0x15
    01EB 2A28      OR	R2,R24
    01EC BA25      OUT	0x15,R2
    01ED E005      LDI	R16,5
    01EE E010      LDI	R17,0
    01EF DE63      RCALL	_delay_us
(0271)    PORTC&=0xef;delay_us(5);
    01F0 B385      IN	R24,0x15
    01F1 7E8F      ANDI	R24,0xEF
    01F2 BB85      OUT	0x15,R24
    01F3 E005      LDI	R16,5
    01F4 E010      LDI	R17,0
    01F5 DE5D      RCALL	_delay_us
(0272)    display>>=1;
    01F6 9566      LSR	R22
    01F7 9543      INC	R20
    01F8 3048      CPI	R20,0x8
    01F9 F308      BCS	0x01DB
(0273)   }
(0274)   display=number[second%10];
    01FA E02A      LDI	R18,0xA
    01FB E030      LDI	R19,0
    01FC 2D0A      MOV	R16,R10
    01FD 2711      CLR	R17
    01FE 940E042B  CALL	mod16s
    0200 01F8      MOVW	R30,R16
    0201 E683      LDI	R24,0x63
    0202 E090      LDI	R25,0
    0203 0FE8      ADD	R30,R24
    0204 1FF9      ADC	R31,R25
    0205 8160      LDD	R22,Z+0
(0275)   for(j=0;j<8;j++)
    0206 2744      CLR	R20
    0207 C01D      RJMP	0x0225
(0276)   {
(0277)    PORTC|=0x10;delay_us(5);
    0208 9AAC      SBI	0x15,4
    0209 E005      LDI	R16,5
    020A E010      LDI	R17,0
    020B DE47      RCALL	_delay_us
(0278)    PORTC&=0xf7;delay_us(5);
    020C B385      IN	R24,0x15
    020D 7F87      ANDI	R24,0xF7
    020E BB85      OUT	0x15,R24
    020F E005      LDI	R16,5
    0210 E010      LDI	R17,0
    0211 DE41      RCALL	_delay_us
(0279)    PORTC|=((display&0x01)<<3);delay_us(5);
    0212 2F86      MOV	R24,R22

⌨️ 快捷键说明

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