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

📄 motor2.lis

📁 电机驱动
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -