📄 motor2.lis
字号:
.module motor2.c
.area text(rom, con, rel)
0000 .dbfile H:\motor2\motor2.c
0000 .dbfunc e InitPorts _InitPorts fV
.even
0000 _InitPorts::
0000 .dbline -1
0000 .dbline 67
0000 ; #include<stdio.h>
0000 ; #include<iom8515v.h>
0000 ; #include<macros.h>
0000 ; // AVR ATmega8515L
0000 ; // (实验板板针注释)
0000 ; // ______ ______
0000 ; // | O \_/ |
0000 ; // 数字开关1---PB0--0 VCC 5V电源(+极)
0000 ; // 数字开关2---PB1--0 1--PA0---L-298
0000 ; // 数字开关3---PB2--0 1--PA1---L-298
0000 ; // 数字开关4---PB3--0 1--PA2---R-298
0000 ; // ---PB4--1 1--PA3---R-298
0000 ; // ---PB5--1 1--PA4---舵机(收集杆)
0000 ; // ---PB6--1 1--PA5---舵机(提升装置)
0000 ; // ---PB7--1 1--PA6---
0000 ; // RESET 1--PA7---
0000 ; // 收集包裹---PD0--1 ICP
0000 ; // 收集包裹---PD1--1 ALE
0000 ; // 电磁铁 ---PD2--1 1--OCIB---ENABLE L(PWM)
0000 ; // 收集包裹使能 ---PD3--1 0--PC7---传感器8,后计数传感器
0000 ; //收集装置传感器 ---PD4--0 0--PC6---传感器7,后右传感器
0000 ; // ENABLE R(PWM)---PD5--1 0--PC5---传感器6,后中传感器
0000 ; // ---PD6--0 0--PC4---传感器5 后左传感器
0000 ; // ---PD7--0 0--PC3---传感器4,前计数传感器
0000 ; // xtal2 0--PC2---传感器3,前右传感器
0000 ; // xtal1 0--PC1---传感器2,前中传感器
0000 ; // (-极)地线 GND 0--PC0---传感器1,前左传感器
0000 ; // |_______________|
0000 ; //****************************************************************************
0000 ; //输出端口位操作(置1为高电平,清0为低电平)
0000 ; #define set_bit(x,y) (x|=(1<<y))
0000 ; //将x端口的第y位设置成1
0000 ; #define clr_bit(x,y) (x&=~(1<<y))
0000 ; //将x端口的第y位设置成0
0000 ; //****************************************************************************
0000 ; //输入端口位操作(1为闭合,0为断开)
0000 ; #define get_bit(x,y) ((x&(1<<y)) ? 1 : 0)
0000 ; //得到x端口第y位的数据
0000 ;
0000 ; #define speedrp 100
0000 ; //motor_R减慢成原来的speedrp%
0000 ; #define speedlp 100
0000 ; //motor_L减慢成原来的speedlp%
0000 ; //****************************************************************************
0000 ; //TL TM TR前左中右传感器 TC 前计数传感器BL BM BR 后左中右传感器 BC 后计数传感器
0000 ; //SJ 收集装置传感器
0000 ; #define TL get_bit(PINC,4)
0000 ; #define TM get_bit(PINC,3)
0000 ; #define TR get_bit(PINC,2)
0000 ; #define TC get_bit(PINC,0)
0000 ; #define BL get_bit(PINC,5)
0000 ; #define BM get_bit(PINC,6)
0000 ; #define BR get_bit(PINC,7)
0000 ; #define BC get_bit(PINC,1)
0000 ; #define SJ get_bit(PIND,4)
0000 ; //D1 D2 D3 D4三个数字开关
0000 ; #define D1 get_bit(PINB,0)
0000 ; #define D2 get_bit(PINB,1)
0000 ; #define D3 get_bit(PINB,2)
0000 ; #define D4 get_bit(PINB,3)
0000 ; //白线宽度
0000 ; #define WD 30
0000 ; //白线污损度0~1000
0000 ; #define DT 35
0000 ; //端口初始化函数
0000 ; void InitPorts()
0000 ; {
0000 .dbline 68
0000 ; DDRA = 0xFF;PORTA = 0x0F;//PA0~PA5控制驱动芯片
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 68
0004 8FE0 ldi R24,15
0006 8BBB out 0x1b,R24
0008 .dbline 70
0008 ; // 1111 1111 0000 1111
0008 ; DDRB = 0xFF;PORTB = 0xFF;//0,1,2,3数字开关
0008 8FEF ldi R24,255
000A 87BB out 0x17,R24
000C .dbline 70
000C 88BB out 0x18,R24
000E .dbline 72
000E ; // 1111 0000 1111 1111
000E ; DDRC = 0x00;PORTC = 0xFF;//PC口输入,接传感器
000E 2224 clr R2
0010 24BA out 0x14,R2
0012 .dbline 72
0012 85BB out 0x15,R24
0014 .dbline 74
0014 ; // 0000 0000 1111 1111
0014 ; DDRD = 0x2F;PORTD = 0x38;//
0014 8FE2 ldi R24,47
0016 81BB out 0x11,R24
0018 .dbline 74
0018 88E3 ldi R24,56
001A 82BB out 0x12,R24
001C .dbline 76
001C ; // 0010 1111 0011 1000
001C ; DDRE = 0x04;PORTE = 0x04;//2口PWM输出
001C 84E0 ldi R24,4
001E 86B9 out 0x6,R24
0020 .dbline 76
0020 87B9 out 0x7,R24
0022 .dbline -2
0022 L1:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbend
0024 .dbfunc e delay_us _delay_us fV
0024 ; time -> R16,R17
.even
0024 _delay_us::
0024 .dbline -1
0024 .dbline 80
0024 L3:
0024 .dbline 80
0024 .dbline 80
0024 0150 subi R16,1
0026 1040 sbci R17,0
0028 .dbline 80
0028 L4:
0028 .dbline 80
0028 ; }
0028 ; //****************************************************************************
0028 ; //微秒级延时程序
0028 ; void delay_us(unsigned int time){do { time--; } while (time>1);}
0028 81E0 ldi R24,1
002A 90E0 ldi R25,0
002C 8017 cp R24,R16
002E 9107 cpc R25,R17
0030 C8F3 brlo L3
0032 .dbline -2
0032 L2:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbsym r time 16 i
0034 .dbend
0034 .dbfunc e delay_ms _delay_ms fV
0034 ; time -> R20,R21
.even
0034 _delay_ms::
0034 00D0 rcall push_gset1
0036 A801 movw R20,R16
0038 .dbline -1
0038 .dbline 82
0038 05C0 rjmp L8
003A L7:
003A .dbline 82
003A .dbline 82
003A 08EE ldi R16,1000
003C 13E0 ldi R17,3
003E F2DF rcall _delay_us
0040 .dbline 82
0040 4150 subi R20,1
0042 5040 sbci R21,0
0044 .dbline 82
0044 L8:
0044 .dbline 82
0044 ; //毫秒级延时程序
0044 ; void delay_ms(unsigned int time){while(time!=0) { delay_us(1000); time--;}}
0044 4030 cpi R20,0
0046 4507 cpc R20,R21
0048 C1F7 brne L7
004A X0:
004A .dbline -2
004A L6:
004A 00D0 rcall pop_gset1
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r time 20 i
004E .dbend
004E .dbfunc e delay_s _delay_s fV
004E ; time -> R20,R21
.even
004E _delay_s::
004E 00D0 rcall push_gset1
0050 A801 movw R20,R16
0052 .dbline -1
0052 .dbline 84
0052 05C0 rjmp L12
0054 L11:
0054 .dbline 84
0054 .dbline 84
0054 08EE ldi R16,1000
0056 13E0 ldi R17,3
0058 EDDF rcall _delay_ms
005A .dbline 84
005A 4150 subi R20,1
005C 5040 sbci R21,0
005E .dbline 84
005E L12:
005E .dbline 84
005E ; //秒级延时程序
005E ; void delay_s(unsigned int time){while(time!=0) { delay_ms(1000); time--;}}
005E 4030 cpi R20,0
0060 4507 cpc R20,R21
0062 C1F7 brne L11
0064 X1:
0064 .dbline -2
0064 L10:
0064 00D0 rcall pop_gset1
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbsym r time 20 i
0068 .dbend
0068 .dbfunc e pwm_init _pwm_init fV
.even
0068 _pwm_init::
0068 .dbline -1
0068 .dbline 88
0068 ; //****************************************************************************
0068 ; //PWM初始化
0068 ; void pwm_init(void)
0068 ; {
0068 .dbline 89
0068 ; TCCR1A=0x00;
0068 2224 clr R2
006A 2FBC out 0x2f,R2
006C .dbline 90
006C ; TCCR1B=0x00;
006C 2EBC out 0x2e,R2
006E .dbline 91
006E ; TCCR1B|=(0<<WGM13)|(1<<WGM12);
006E 8EB5 in R24,0x2e
0070 8860 ori R24,8
0072 8EBD out 0x2e,R24
0074 .dbline 92
0074 ; TCCR1A|=(0<<WGM11)|(1<<WGM10);//选择成8位快速PWM模式
0074 8FB5 in R24,0x2f
0076 8160 ori R24,1
0078 8FBD out 0x2f,R24
007A .dbline 93
007A ; TCCR1A|=(1<<COM1A1)|(0<<COM1A0);//比较比配清零
007A 8FB5 in R24,0x2f
007C 8068 ori R24,128
007E 8FBD out 0x2f,R24
0080 .dbline 94
0080 ; TCCR1A|=(1<<COM1B1)|(0<<COM1B0);
0080 8FB5 in R24,0x2f
0082 8062 ori R24,32
0084 8FBD out 0x2f,R24
0086 .dbline 95
0086 ; TCCR1B|=(1<<CS12)|(0<<CS11)|(0<<CS10);//clk/256分频
0086 8EB5 in R24,0x2e
0088 8460 ori R24,4
008A 8EBD out 0x2e,R24
008C .dbline 96
008C ; TCNT1=0;//清计数器T0
008C 3324 clr R3
008E 3DBC out 0x2d,R3
0090 2CBC out 0x2c,R2
0092 .dbline 97
0092 ; OCR1A=0;
0092 3BBC out 0x2b,R3
0094 2ABC out 0x2a,R2
0096 .dbline 98
0096 ; OCR1B=0;//OCR1A的初值
0096 39BC out 0x29,R3
0098 28BC out 0x28,R2
009A .dbline -2
009A L14:
009A .dbline 0 ; func end
009A 0895 ret
009C .dbend
009C .dbfunc e motor_R _motor_R fV
009C ; speed -> R20,R21
.even
009C _motor_R::
009C 00D0 rcall push_gset1
009E A801 movw R20,R16
00A0 .dbline -1
00A0 .dbline 103
00A0 ; }
00A0 ; //驱动电机控制函数
00A0 ; //右电机驱动函数
00A0 ; void motor_R(int speed)
00A0 ; {
00A0 .dbline 104
00A0 ; if(speed<0)
00A0 4030 cpi R20,0
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -