📄 02.lst
字号:
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 + -