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

📄 02.lst

📁 小车自动寻迹代码,可以进行电子设计,设计电动小车
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00E2 B422      IN	R2,0x22
    00E3 FC20      SBRC	R2,0
    00E4 CFFD      RJMP	0x00E2
(0096)   } 
    00E5 9508      RET
(0097) }
(0098) //右电机滑行
(0099) void motor_right_stop(void)
(0100) {
(0101)  motor_uen1;
_motor_right_stop:
    00E6 98C4      CBI	0x18,4
(0102)  motor_uen2;
    00E7 98C5      CBI	0x18,5
(0103)  T2_UEN;
    00E8 B789      IN	R24,0x39
    00E9 778F      ANDI	R24,0x7F
    00EA BF89      OUT	0x39,R24
    00EB 9508      RET
(0104) }
(0105) 
(0106) //右电机急停
(0107) void motor_right_quick_stop(void)
(0108) {
(0109)  motor_en1;
_motor_right_quick_stop:
    00EC 9AC4      SBI	0x18,4
(0110)  motor_en2;
    00ED 9AC5      SBI	0x18,5
(0111)  T2_UEN;
    00EE B789      IN	R24,0x39
    00EF 778F      ANDI	R24,0x7F
    00F0 BF89      OUT	0x39,R24
    00F1 9508      RET
(0112) }
(0113) 
(0114) /**********************小车动作*****************************/
(0115) 
(0116) void straight(void) //直行
(0117) {//motor_right_quick_stop();
(0118)  motor_left_forward(0xfe);
_straight:
    00F2 EF0E      LDI	R16,0xFE
    00F3 DFB7      RCALL	_motor_left_forward
(0119)  motor_right_forward(0xfe);
    00F4 EF0E      LDI	R16,0xFE
    00F5 DFD7      RCALL	_motor_right_forward
    00F6 9508      RET
(0120) 
(0121) }
(0122) 
(0123) void turn_left(void) //左转
(0124) {
(0125) motor_left_forward(0xfe);
_turn_left:
    00F7 EF0E      LDI	R16,0xFE
    00F8 DFB2      RCALL	_motor_left_forward
(0126)  motor_right_forward(0x50);
    00F9 E500      LDI	R16,0x50
    00FA DFD2      RCALL	_motor_right_forward
    00FB 9508      RET
(0127) }
(0128) 
(0129) void turn_right(void) //右转
(0130) {
(0131)  motor_left_forward(0xfe);
_turn_right:
    00FC EF0E      LDI	R16,0xFE
    00FD DFAD      RCALL	_motor_left_forward
(0132)  motor_right_backward(0x50);
    00FE E500      LDI	R16,0x50
    00FF DFD6      RCALL	_motor_right_backward
    0100 9508      RET
(0133) }
(0134) 
(0135) void straight_back(void) //直回
(0136) {//motor_right_quick_stop();
(0137)  motor_left_backward(0xfe);
_straight_back:
    0101 EF0E      LDI	R16,0xFE
    0102 DFB1      RCALL	_motor_left_backward
(0138) motor_right_backward(0xfe);
    0103 EF0E      LDI	R16,0xFE
    0104 DFD1      RCALL	_motor_right_backward
    0105 9508      RET
(0139) }
(0140) 
(0141) void stop(void)       //急停
(0142) {
(0143)  motor_left_quick_stop();
_stop:
    0106 DFC0      RCALL	_motor_left_quick_stop
(0144)  motor_right_quick_stop();
    0107 DFE4      RCALL	_motor_right_quick_stop
    0108 9508      RET
(0145) }
(0146) 
(0147) void mic_turn_right(void) //向右微调
(0148) {
(0149)  motor_left_forward(0xa0);
_mic_turn_right:
    0109 EA00      LDI	R16,0xA0
    010A DFA0      RCALL	_motor_left_forward
(0150)  motor_right_backward(0x30);
    010B E300      LDI	R16,0x30
    010C DFC9      RCALL	_motor_right_backward
    010D 9508      RET
(0151) }
(0152) 
(0153) void mic_turn_left(void) //向左微调
(0154) {
(0155) motor_left_forward(0xa0);
_mic_turn_left:
    010E EA00      LDI	R16,0xA0
    010F DF9B      RCALL	_motor_left_forward
(0156)  motor_right_forward(0x30);
    0110 E300      LDI	R16,0x30
    0111 DFBB      RCALL	_motor_right_forward
    0112 9508      RET
_flag_test:
  temp                 --> R20
    0113 940E01A3  CALL	push_gset1
(0157) }
(0158) 
(0159) void flag_test(void)  //测试小车状态
(0160) {
(0161)  uint8 temp;
(0162)  temp = PINA&0x0f; //PINA的低四位
    0115 B349      IN	R20,0x19
    0116 704F      ANDI	R20,0xF
(0163)  switch(temp)
    0117 2755      CLR	R21
    0118 3040      CPI	R20,0
    0119 E0E0      LDI	R30,0
    011A 075E      CPC	R21,R30
    011B F154      BLT	0x0146
    011C E08F      LDI	R24,0xF
    011D E090      LDI	R25,0
    011E 1784      CP	R24,R20
    011F 0795      CPC	R25,R21
    0120 F12C      BLT	0x0146
    0121 E002      LDI	R16,2
    0122 E010      LDI	R17,0
    0123 019A      MOVW	R18,R20
    0124 940E018B  CALL	empy16s
    0126 01F8      MOVW	R30,R16
    0127 E584      LDI	R24,0x54
    0128 E090      LDI	R25,0
    0129 0FE8      ADD	R30,R24
    012A 1FF9      ADC	R31,R25
    012B 9005      LPM	R0,Z+
    012C 9014      LPM	R1,0(Z)
    012D 01F0      MOVW	R30,R0
    012E 9409      IJMP
(0164)   {
(0165)    case 0x0f:
(0166)        flag = 0;  //未偏
    012F 2422      CLR	R2
    0130 92200060  STS	flag,R2
(0167) 	   break;
    0132 C013      RJMP	0x0146
(0168)    case 0x01:
(0169)    case 0x06:
(0170)    case 0x07:
(0171)    case 0x08:
(0172)    case 0x0a:
(0173)    case 0x0e:
(0174)        flag = 1;  //左偏
    0133 E081      LDI	R24,1
    0134 93800060  STS	flag,R24
(0175) 	   break;
    0136 C00F      RJMP	0x0146
(0176)    case 0x02:
(0177)    case 0x04:
(0178)    case 0x05:
(0179)    case 0x09:
(0180)    case 0x0b:
(0181)    case 0x0d:
(0182)        flag = 2;  //右偏
    0137 E082      LDI	R24,2
    0138 93800060  STS	flag,R24
(0183) 	   break;
    013A C00B      RJMP	0x0146
(0184)    case 0x0c:
(0185)        flag = 3;  //前两出线
    013B E083      LDI	R24,3
    013C 93800060  STS	flag,R24
(0186) 	   break;
    013E C007      RJMP	0x0146
(0187)    case 0x03:
(0188)        flag = 4; //后两出线
    013F E084      LDI	R24,4
    0140 93800060  STS	flag,R24
(0189) 	   break;
    0142 C003      RJMP	0x0146
(0190)    case 0x00:
(0191)        flag = 5; //脱轨
    0143 E085      LDI	R24,5
    0144 93800060  STS	flag,R24
(0192) 	   break;
(0193)    default:
(0194)        break;
    0146 940E01A6  CALL	pop_gset1
    0148 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\小车寻迹\init_device.c
(0001) //ICC-AVR application builder : 2006-9-7 0:27:10
(0002) // Target : M32
(0003) // Crystal: 7.3728Mhz
(0004) #include "config.h"
(0005) 
(0006) void port_init(void)
(0007) {
(0008)  PORTA = 0x00;
_port_init:
    0149 2422      CLR	R2
    014A BA2B      OUT	0x1B,R2
(0009)  DDRA  = 0x00;
    014B BA2A      OUT	0x1A,R2
(0010)  PORTB = 0x00;
    014C BA28      OUT	0x18,R2
(0011)  DDRB  = 0xFF;
    014D EF8F      LDI	R24,0xFF
    014E BB87      OUT	0x17,R24
(0012)  PORTC = 0x00;
    014F BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
    0150 BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
    0151 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x80;
    0152 E880      LDI	R24,0x80
    0153 BB81      OUT	0x11,R24
    0154 9508      RET
(0016) }
(0017) 
(0018) //============timer1 PWM输出==================//
(0019) //TIMER0 initialize - prescale:1024
(0020) // desired value: 25mSec
(0021) // actual value: 25.000mSec (0.0%)
(0022) void timer0_init(void)
(0023) {
(0024)  TCCR0 = 0x00;  //stop
_timer0_init:
    0155 2422      CLR	R2
    0156 BE23      OUT	0x33,R2
(0025)  TCNT0= 0x01;  //set count
    0157 E081      LDI	R24,1
    0158 BF82      OUT	0x32,R24
(0026)  OCR0 = 0x66;  //set compare
    0159 E686      LDI	R24,0x66
    015A BF8C      OUT	0x3C,R24
(0027)  TCCR0 = (1<<WGM00)|(1<<WGM01)|(1<<COM01)|0x04;//0x04 0100B 代表256预分频
    015B E68C      LDI	R24,0x6C
    015C BF83      OUT	0x33,R24
    015D 9508      RET
(0028) }
(0029) 
(0030) //TIMER1 initialize - prescale:8
(0031) // desired value: 50mSec
(0032) // actual value:  50mSec (0.0%)
(0033) void timer1_init(void) 
(0034) {
(0035)  TCCR1B = 0x00; //stop
_timer1_init:
    015E 2422      CLR	R2
    015F BC2E      OUT	0x2E,R2
(0036)  TCNT1H = 0x4C; //setup
    0160 E48C      LDI	R24,0x4C
    0161 BD8D      OUT	0x2D,R24
(0037)  TCNT1L = 0x01;
    0162 E081      LDI	R24,1
    0163 BD8C      OUT	0x2C,R24
(0038)  OCR1AH = 0xB3;
    0164 EB83      LDI	R24,0xB3
    0165 BD8B      OUT	0x2B,R24
(0039)  OCR1AL = 0xFF;
    0166 EF8F      LDI	R24,0xFF
    0167 BD8A      OUT	0x2A,R24
(0040)  OCR1BH = 0xB3;
    0168 EB83      LDI	R24,0xB3
    0169 BD89      OUT	0x29,R24
(0041)  OCR1BL = 0xFF;
    016A EF8F      LDI	R24,0xFF
    016B BD88      OUT	0x28,R24
(0042)  ICR1H  = 0xB3;
    016C EB83      LDI	R24,0xB3
    016D BD87      OUT	0x27,R24
(0043)  ICR1L  = 0xFF;
    016E EF8F      LDI	R24,0xFF
    016F BD86      OUT	0x26,R24
(0044)  TCCR1A = 0x00;
    0170 BC2F      OUT	0x2F,R2
(0045)  TCCR1B = 0x02; //start Timer
    0171 E082      LDI	R24,2
    0172 BD8E      OUT	0x2E,R24
    0173 9508      RET
(0046) }
(0047) /**************************timer2 PWM输出***********************/
(0048) // PWM频率 = 系统时钟频率/(分频系数*2*计数器上限值)) 
(0049) void timer2_init(void)
(0050) {
(0051)  TCCR2 = 0x00;  //stop
_timer2_init:
    0174 2422      CLR	R2
    0175 BC25      OUT	0x25,R2
(0052)  TCNT2= 0x01;  //set count
    0176 E081      LDI	R24,1
    0177 BD84      OUT	0x24,R24
(0053)  OCR2 = 0x66;  //set compare
    0178 E686      LDI	R24,0x66
    0179 BD83      OUT	0x23,R24
(0054)  TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|0x06; //  start timer 快速pwm模式,匹配清零,溢出置位 256分频
    017A E68E      LDI	R24,0x6E
    017B BD85      OUT	0x25,R24
    017C 9508      RET
(0055) //高比低为:(OCR2-0X55)/(0XFF-OCR2)    OX55++++++(0X77)__________OXFF
(0056) //即OCR2越大,输出越大
(0057) }
(0058) 
(0059) //call this routine to initialize all peripherals
(0060) void init_devices(void)
(0061) {
(0062)  //stop errant interrupts until set up
(0063)  CLI(); //disable all interrupts
_init_devices:
    017D 94F8      BCLR	7
(0064)  port_init();
    017E DFCA      RCALL	_port_init
(0065)  timer2_init();
    017F DFF4      RCALL	_timer2_init
(0066) // timer1_init();
(0067)  timer0_init();
    0180 DFD4      RCALL	_timer0_init
(0068)  MCUCR |= (1<<ISC01);    // INT0,INT1 下降沿产生中断请求
    0181 B785      IN	R24,0x35
    0182 6082      ORI	R24,2
    0183 BF85      OUT	0x35,R24
(0069)  //MCUCSR |= (1<<ISC2);             //INT2上升沿产生中断请求
(0070)  GICR |= (1<<INT0)|(1<<INT1);
    0184 B78B      IN	R24,0x3B
    0185 6C80      ORI	R24,0xC0
    0186 BF8B      OUT	0x3B,R24
(0071)  TIMSK = (1<<TOIE0)|(1<<TOIE2)|(1<<OCIE0)|(0<<OCIE2); //timer interrupt sources
    0187 E483      LDI	R24,0x43
    0188 BF89      OUT	0x39,R24
(0072)  SEI(); //re-enable interrupts
FILE: <library>
    0189 9478      BSET	7
    018A 9508      RET
empy16s:
    018B 920A      ST	R0,-Y
    018C 921A      ST	R1,-Y
    018D 938A      ST	R24,-Y
    018E 939A      ST	R25,-Y
    018F 9F02      MUL	R16,R18
    0190 01C0      MOVW	R24,R0
    0191 9F12      MUL	R17,R18
    0192 0D90      ADD	R25,R0
    0193 9F03      MUL	R16,R19
    0194 0D90      ADD	R25,R0
    0195 018C      MOVW	R16,R24
    0196 9199      LD	R25,Y+
    0197 9189      LD	R24,Y+
    0198 9019      LD	R1,Y+
    0199 9009      LD	R0,Y+
    019A 9508      RET
push_gset5:
    019B 92FA      ST	R15,-Y
    019C 92EA      ST	R14,-Y
push_gset4:
    019D 92DA      ST	R13,-Y
    019E 92CA      ST	R12,-Y
push_gset3:
    019F 92BA      ST	R11,-Y
    01A0 92AA      ST	R10,-Y
push_gset2:
    01A1 937A      ST	R23,-Y
    01A2 936A      ST	R22,-Y
push_gset1:
    01A3 935A      ST	R21,-Y
    01A4 934A      ST	R20,-Y
    01A5 9508      RET
pop_gset1:
    01A6 E0E1      LDI	R30,1
pop:
    01A7 9149      LD	R20,Y+
    01A8 9159      LD	R21,Y+
    01A9 FDE0      SBRC	R30,0
    01AA 9508      RET
    01AB 9169      LD	R22,Y+
    01AC 9179      LD	R23,Y+
    01AD FDE1      SBRC	R30,1
    01AE 9508      RET
    01AF 90A9      LD	R10,Y+
    01B0 90B9      LD	R11,Y+
    01B1 FDE2      SBRC	R30,2
    01B2 9508      RET
    01B3 90C9      LD	R12,Y+
    01B4 90D9      LD	R13,Y+
    01B5 FDE3      SBRC	R30,3
    01B6 9508      RET
    01B7 90E9      LD	R14,Y+
    01B8 90F9      LD	R15,Y+
    01B9 9508      RET

⌨️ 快捷键说明

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