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

📄 01.lst

📁 小车自动寻迹代码,可以进行电子设计,设计电动小车
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0010)  
(0011)  #define T2_EN TIMSK |= (1<<OCIE2)|(1<<TOIE2)
(0012)  #define T2_UEN TIMSK &=~ (1<<OCIE2)|(1<<TOIE2)
(0013)  #define T2_start TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|0x06
(0014)  #define T2_stop TCCR2 = 0x00
(0015)  
(0016)  
(0017)  
(0018) /************************左电机动作*****************************/
(0019) //左电机前进
(0020) void motor_left_forward(uint8 speed)
(0021) {
(0022)  motol_uen1;
_motor_left_forward:
  speed                --> R16
    0111 98C4      CBI	0x18,4
(0023)  motol_en2;
    0112 9AC5      SBI	0x18,5
(0024)  if(speed!=0) //加入调速指令
    0113 2300      TST	R16
    0114 F009      BEQ	0x0116
(0025)   {
(0026)    OCR0=speed;
    0115 BF0C      OUT	0x3C,R16
(0027)   }
(0028)  T0_EN;
    0116 B789      IN	R24,0x39
    0117 6083      ORI	R24,3
    0118 BF89      OUT	0x39,R24
    0119 9508      RET
(0029) }
(0030) //左电机后退
(0031) void motor_left_backward(uint8 speed)
(0032) {
(0033)  motol_en1;
_motor_left_backward:
  speed                --> R16
    011A 9AC4      SBI	0x18,4
(0034)  motol_uen2;
    011B 98C5      CBI	0x18,5
(0035)  if(speed!=0) //加入调速指令
    011C 2300      TST	R16
    011D F009      BEQ	0x011F
(0036)   {
(0037)    OCR0=speed;
    011E BF0C      OUT	0x3C,R16
(0038)   }
(0039)  T0_EN;
    011F B789      IN	R24,0x39
    0120 6083      ORI	R24,3
    0121 BF89      OUT	0x39,R24
    0122 9508      RET
(0040) }
(0041) //左电机速度设定
(0042) void motor_left_speed_set(uint8 speed)
(0043) {
(0044)  if(speed!=0)
_motor_left_speed_set:
  speed                --> R16
    0123 2300      TST	R16
    0124 F009      BEQ	0x0126
(0045)   {
(0046)    OCR0=speed;
    0125 BF0C      OUT	0x3C,R16
(0047)   } 
    0126 9508      RET
(0048) }
(0049) //左电机滑行
(0050) void motor_left_stop(void)
(0051) {
(0052)  motol_uen1;
_motor_left_stop:
    0127 98C4      CBI	0x18,4
(0053)  motol_uen2;
    0128 98C5      CBI	0x18,5
(0054)  T0_UEN;
    0129 B789      IN	R24,0x39
    012A 7F8D      ANDI	R24,0xFD
    012B BF89      OUT	0x39,R24
    012C 9508      RET
(0055) }
(0056) //左电机急停
(0057) void motor_left_quick_stop(void)
(0058) {
(0059)  motol_en1;
_motor_left_quick_stop:
    012D 9AC4      SBI	0x18,4
(0060)  motol_en2;
    012E 9AC5      SBI	0x18,5
(0061)  T0_UEN;
    012F B789      IN	R24,0x39
    0130 7F8D      ANDI	R24,0xFD
    0131 BF89      OUT	0x39,R24
    0132 9508      RET
(0062) }
(0063) 
(0064) /*************************右电机动作*****************************/
(0065) //右电机前进
(0066) void motor_right_forward(uint8 speed)
(0067) {
(0068)  motor_en1;
_motor_right_forward:
  speed                --> R16
    0133 9AC1      SBI	0x18,1
(0069)  motor_uen2;
    0134 98C2      CBI	0x18,2
(0070)   if(speed!=0) //加入调速指令
    0135 2300      TST	R16
    0136 F021      BEQ	0x013B
(0071)   {
(0072)    OCR2=speed;
    0137 BD03      OUT	0x23,R16
(0073)    while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
    0138 B422      IN	R2,0x22
    0139 FC20      SBRC	R2,0
    013A CFFD      RJMP	0x0138
(0074)   }
    013B 9508      RET
(0075) //T2_EN;
(0076) }
(0077) //右电机后退
(0078) void motor_right_backward(uint8 speed)
(0079) {
(0080)  motor_uen1;
_motor_right_backward:
  speed                --> R16
    013C 98C1      CBI	0x18,1
(0081)  motor_en2;
    013D 9AC2      SBI	0x18,2
(0082)  if(speed!=0) //加入调速指令
    013E 2300      TST	R16
    013F F021      BEQ	0x0144
(0083)   {
(0084)    OCR2=speed;
    0140 BD03      OUT	0x23,R16
(0085)    while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
    0141 B422      IN	R2,0x22
    0142 FC20      SBRC	R2,0
    0143 CFFD      RJMP	0x0141
(0086)   }
    0144 9508      RET
(0087) //T2_EN;
(0088) }
(0089) //右电机速度设定
(0090) void motor_right_speed_set(uint8 speed)
(0091) {
(0092)  if(speed!=0)
_motor_right_speed_set:
  speed                --> R16
    0145 2300      TST	R16
    0146 F021      BEQ	0x014B
(0093)   {
(0094)    OCR0=speed;
    0147 BF0C      OUT	0x3C,R16
(0095)    while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
    0148 B422      IN	R2,0x22
    0149 FC20      SBRC	R2,0
    014A CFFD      RJMP	0x0148
(0096)   } 
    014B 9508      RET
(0097) }
(0098) //右电机滑行
(0099) void motor_right_stop(void)
(0100) {
(0101)  motor_uen1;
_motor_right_stop:
    014C 98C1      CBI	0x18,1
(0102)  motor_uen2;
    014D 98C2      CBI	0x18,2
(0103)  T2_UEN;
    014E B789      IN	R24,0x39
    014F 778F      ANDI	R24,0x7F
    0150 BF89      OUT	0x39,R24
    0151 9508      RET
(0104) }
(0105) 
(0106) //右电机急停
(0107) void motor_right_quick_stop(void)
(0108) {
(0109)  motor_en1;
_motor_right_quick_stop:
    0152 9AC1      SBI	0x18,1
(0110)  motor_en2;
    0153 9AC2      SBI	0x18,2
(0111)  T2_UEN;
    0154 B789      IN	R24,0x39
    0155 778F      ANDI	R24,0x7F
    0156 BF89      OUT	0x39,R24
    0157 9508      RET
(0112) }
(0113) 
(0114) /**********************小车动作*****************************/
(0115) 
(0116) void straight(void) //直行
(0117) {//motor_right_quick_stop();
(0118)  motor_left_forward(0xfe);
_straight:
    0158 EF0E      LDI	R16,0xFE
    0159 DFB7      RCALL	_motor_left_forward
(0119)  motor_right_forward(0xfe);
    015A EF0E      LDI	R16,0xFE
    015B DFD7      RCALL	_motor_right_forward
    015C 9508      RET
(0120) 
(0121) }
(0122) 
(0123) void turn_left(void) //左转
(0124) {
(0125) motor_left_forward(0xfe);
_turn_left:
    015D EF0E      LDI	R16,0xFE
    015E DFB2      RCALL	_motor_left_forward
(0126)  motor_right_forward(0x50);
    015F E500      LDI	R16,0x50
    0160 DFD2      RCALL	_motor_right_forward
    0161 9508      RET
(0127) }
(0128) 
(0129) void turn_right(void) //右转
(0130) {
(0131)  motor_left_forward(0xfe);
_turn_right:
    0162 EF0E      LDI	R16,0xFE
    0163 DFAD      RCALL	_motor_left_forward
(0132)  motor_right_backward(0x50);
    0164 E500      LDI	R16,0x50
    0165 DFD6      RCALL	_motor_right_backward
    0166 9508      RET
(0133) }
(0134) 
(0135) void straight_back(void) //直回
(0136) {//motor_right_quick_stop();
(0137)  motor_left_backward(0xfe);
_straight_back:
    0167 EF0E      LDI	R16,0xFE
    0168 DFB1      RCALL	_motor_left_backward
(0138) motor_right_backward(0xfe);
    0169 EF0E      LDI	R16,0xFE
    016A DFD1      RCALL	_motor_right_backward
    016B 9508      RET
(0139) }
(0140) 
(0141) void stop(void)       //急停
(0142) {
(0143)  motor_left_quick_stop();
_stop:
    016C DFC0      RCALL	_motor_left_quick_stop
(0144)  motor_right_quick_stop();
    016D DFE4      RCALL	_motor_right_quick_stop
    016E 9508      RET
(0145) }
(0146) 
(0147) void mic_turn_right(void) //向右微调
(0148) {
(0149)  motor_left_forward(0xa0);
_mic_turn_right:
    016F EA00      LDI	R16,0xA0
    0170 DFA0      RCALL	_motor_left_forward
(0150)  motor_right_backward(0x30);
    0171 E300      LDI	R16,0x30
    0172 DFC9      RCALL	_motor_right_backward
    0173 9508      RET
(0151) }
(0152) 
(0153) void mic_turn_left(void) //向左微调
(0154) {
(0155) motor_left_forward(0xa0);
_mic_turn_left:
    0174 EA00      LDI	R16,0xA0
    0175 DF9B      RCALL	_motor_left_forward
(0156)  motor_right_forward(0x30);
    0176 E300      LDI	R16,0x30
    0177 DFBB      RCALL	_motor_right_forward
    0178 9508      RET
_flag_test:
  temp                 --> R20
    0179 940E01C7  CALL	push_gset1
(0157) }
(0158) 
(0159) void flag_test(void)  //测试小车状态
(0160) {
(0161)  uint8 temp;
(0162)  temp = PINA&0x0f; //PINA的低四位
    017B B349      IN	R20,0x19
    017C 704F      ANDI	R20,0xF
(0163)  switch(temp)
    017D 2755      CLR	R21
    017E 3040      CPI	R20,0
    017F E0E0      LDI	R30,0
    0180 075E      CPC	R21,R30
    0181 F154      BLT	0x01AC
    0182 E08F      LDI	R24,0xF
    0183 E090      LDI	R25,0
    0184 1784      CP	R24,R20
    0185 0795      CPC	R25,R21
    0186 F12C      BLT	0x01AC
    0187 E002      LDI	R16,2
    0188 E010      LDI	R17,0
    0189 019A      MOVW	R18,R20
    018A 940E01AF  CALL	empy16s
    018C 01F8      MOVW	R30,R16
    018D E584      LDI	R24,0x54
    018E E090      LDI	R25,0
    018F 0FE8      ADD	R30,R24
    0190 1FF9      ADC	R31,R25
    0191 9005      LPM	R0,Z+
    0192 9014      LPM	R1,0(Z)
    0193 01F0      MOVW	R30,R0
    0194 9409      IJMP
(0164)   {
(0165)    case 0x0f:
(0166)        flag = 0;  //未偏
    0195 2422      CLR	R2
    0196 92200060  STS	flag,R2
(0167) 	   break;
    0198 C013      RJMP	0x01AC
(0168)    case 0x01:
(0169)    case 0x06:
(0170)    case 0x07:
(0171)    case 0x08:
(0172)    case 0x0a:
(0173)    case 0x0e:
(0174)        flag = 1;  //左偏
    0199 E081      LDI	R24,1
    019A 93800060  STS	flag,R24
(0175) 	   break;
    019C C00F      RJMP	0x01AC
(0176)    case 0x02:
(0177)    case 0x04:
(0178)    case 0x05:
(0179)    case 0x09:
(0180)    case 0x0b:
(0181)    case 0x0d:
(0182)        flag = 2;  //右偏
    019D E082      LDI	R24,2
    019E 93800060  STS	flag,R24
(0183) 	   break;
    01A0 C00B      RJMP	0x01AC
(0184)    case 0x0c:
(0185)        flag = 3;  //前两出线
    01A1 E083      LDI	R24,3
    01A2 93800060  STS	flag,R24
(0186) 	   break;
    01A4 C007      RJMP	0x01AC
(0187)    case 0x03:
(0188)        flag = 4; //后两出线
    01A5 E084      LDI	R24,4
    01A6 93800060  STS	flag,R24
(0189) 	   break;
    01A8 C003      RJMP	0x01AC
(0190)    case 0x00:
(0191)        flag = 5; //脱轨
    01A9 E085      LDI	R24,5
    01AA 93800060  STS	flag,R24
(0192) 	   break;
(0193)    default:
(0194)        break;
FILE: <library>
    01AC 940E01CA  CALL	pop_gset1
    01AE 9508      RET
empy16s:
    01AF 920A      ST	R0,-Y
    01B0 921A      ST	R1,-Y
    01B1 938A      ST	R24,-Y
    01B2 939A      ST	R25,-Y
    01B3 9F02      MUL	R16,R18
    01B4 01C0      MOVW	R24,R0
    01B5 9F12      MUL	R17,R18
    01B6 0D90      ADD	R25,R0
    01B7 9F03      MUL	R16,R19
    01B8 0D90      ADD	R25,R0
    01B9 018C      MOVW	R16,R24
    01BA 9199      LD	R25,Y+
    01BB 9189      LD	R24,Y+
    01BC 9019      LD	R1,Y+
    01BD 9009      LD	R0,Y+
    01BE 9508      RET
push_gset5:
    01BF 92FA      ST	R15,-Y
    01C0 92EA      ST	R14,-Y
push_gset4:
    01C1 92DA      ST	R13,-Y
    01C2 92CA      ST	R12,-Y
push_gset3:
    01C3 92BA      ST	R11,-Y
    01C4 92AA      ST	R10,-Y
push_gset2:
    01C5 937A      ST	R23,-Y
    01C6 936A      ST	R22,-Y
push_gset1:
    01C7 935A      ST	R21,-Y
    01C8 934A      ST	R20,-Y
    01C9 9508      RET
pop_gset1:
    01CA E0E1      LDI	R30,1
pop:
    01CB 9149      LD	R20,Y+
    01CC 9159      LD	R21,Y+
    01CD FDE0      SBRC	R30,0
    01CE 9508      RET
    01CF 9169      LD	R22,Y+
    01D0 9179      LD	R23,Y+
    01D1 FDE1      SBRC	R30,1
    01D2 9508      RET
    01D3 90A9      LD	R10,Y+
    01D4 90B9      LD	R11,Y+
    01D5 FDE2      SBRC	R30,2
    01D6 9508      RET
    01D7 90C9      LD	R12,Y+
    01D8 90D9      LD	R13,Y+
    01D9 FDE3      SBRC	R30,3
    01DA 9508      RET
    01DB 90E9      LD	R14,Y+
    01DC 90F9      LD	R15,Y+
    01DD 9508      RET

⌨️ 快捷键说明

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