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

📄 motor.lis

📁 proteus仿真实例大全
💻 LIS
字号:
                        .module motor.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr\电机控制\电机控制\motor.c
 0000                   .dbfunc e for_ward _for_ward fV
 0000           ;          speed -> R16
                        .even
 0000           _for_ward::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; /****************************************************************
 0000           ; ** 文件名:motor.c   电机驱动函数
 0000           ; ****************************************************************/
 0000           ; #include "config.h"
 0000           ; 
 0000           ; /******************************************************************************/
 0000           ; //正转,速度
 0000           ; void for_ward(uint8 speed)
 0000           ; {
 0000                   .dbline 10
 0000           ;        if(speed!=0)
 0000 0023              tst R16
 0002 21F0              breq L2
 0004           X0:
 0004                   .dbline 11
 0004           ;         {
 0004                   .dbline 12
 0004           ;          OCR2 = speed;
 0004 03BD              out 0x23,R16
 0006           L4:
 0006                   .dbline 13
 0006           ;          while(ASSR&(1<<TCR2UB)==1) ; //启动TC2 pwm 输出,异步操作需要等待 OCR2写入完毕
 0006           L5:
 0006                   .dbline 13
 0006 22B4              in R2,0x22
 0008 20FC              sbrc R2,0
 000A FDCF              rjmp L4
 000C           X1:
 000C                   .dbline 14
 000C           ;         }
 000C           L2:
 000C                   .dbline 15
 000C           ;        TC2_EN;   //pwm_start
 000C 89B7              in R24,0x39
 000E 806C              ori R24,192
 0010 89BF              out 0x39,R24
 0012                   .dbline 16
 0012           ;        moto_en1;
 0012 949A              sbi 0x12,4
 0014                   .dbline 17
 0014           ;        moto_uen2;
 0014 9598              cbi 0x12,5
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbsym r speed 16 c
 0018                   .dbend
 0018                   .dbfunc e back_ward _back_ward fV
 0018           ;          speed -> R16
                        .even
 0018           _back_ward::
 0018                   .dbline -1
 0018                   .dbline 22
 0018           ; }
 0018           ; /******************************************************************************/
 0018           ; //反转,速度
 0018           ; void back_ward(uint8 speed)
 0018           ; {
 0018                   .dbline 23
 0018           ;        if(speed!=0)
 0018 0023              tst R16
 001A 21F0              breq L8
 001C           X2:
 001C                   .dbline 24
 001C           ;       {
 001C                   .dbline 25
 001C           ;        OCR2 = speed;
 001C 03BD              out 0x23,R16
 001E           L10:
 001E                   .dbline 26
 001E           ;          while(ASSR&(1<<TCR2UB)==1) ;// 启动TC2 pwm 输出,异步操作需要等待OCR2写入完毕
 001E           L11:
 001E                   .dbline 26
 001E 22B4              in R2,0x22
 0020 20FC              sbrc R2,0
 0022 FDCF              rjmp L10
 0024           X3:
 0024                   .dbline 27
 0024           ;     }
 0024           L8:
 0024                   .dbline 28
 0024           ;    TC2_EN;   //pwm start
 0024 89B7              in R24,0x39
 0026 806C              ori R24,192
 0028 89BF              out 0x39,R24
 002A                   .dbline 29
 002A           ;    moto_uen1;
 002A 9498              cbi 0x12,4
 002C                   .dbline 30
 002C           ;    moto_en2;
 002C 959A              sbi 0x12,5
 002E                   .dbline -2
 002E           L7:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r speed 16 c
 0030                   .dbend
 0030                   .dbfunc e motor_stop _motor_stop fV
                        .even
 0030           _motor_stop::
 0030                   .dbline -1
 0030                   .dbline 35
 0030           ; }
 0030           ; /******************************************************************************/
 0030           ; //停止
 0030           ; void motor_stop(void)
 0030           ; {
 0030                   .dbline 36
 0030           ;  moto_en1;   //同时置一停止
 0030 949A              sbi 0x12,4
 0032                   .dbline 37
 0032           ;  moto_en2;
 0032 959A              sbi 0x12,5
 0034                   .dbline 38
 0034           ;  TC2_DIS;    //pwm stop
 0034 89B7              in R24,0x39
 0036 8F77              andi R24,127
 0038 89BF              out 0x39,R24
 003A                   .dbline -2
 003A           L13:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e speed_add _speed_add fV
 003C           ;            add -> R16
                        .even
 003C           _speed_add::
 003C                   .dbline -1
 003C                   .dbline 44
 003C           ; }
 003C           ; /******************************************************************************/
 003C           ; 
 003C           ; //加速
 003C           ; void speed_add(uint8 add)
 003C           ; {
 003C                   .dbline 45
 003C           ;  if(OCR2 + add < 240) //防止出现极大情况时候跳跃到很小。
 003C 83B5              in R24,0x23
 003E 800F              add R24,R16
 0040 803F              cpi R24,240
 0042 18F4              brsh L15
 0044           X4:
 0044                   .dbline 46
 0044           ;  {
 0044                   .dbline 47
 0044           ;    OCR2 = OCR2 + add;
 0044 23B4              in R2,0x23
 0046 200E              add R2,R16
 0048 23BC              out 0x23,R2
 004A                   .dbline 48
 004A           ;  }
 004A           L15:
 004A                   .dbline -2
 004A           L14:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r add 16 c
 004C                   .dbend
 004C                   .dbfunc e speed_subtract _speed_subtract fV
 004C           ;       subtract -> R16
                        .even
 004C           _speed_subtract::
 004C                   .dbline -1
 004C                   .dbline 54
 004C           ; }
 004C           ; /******************************************************************************/
 004C           ; 
 004C           ; //加速
 004C           ; void speed_subtract(uint8 subtract)
 004C           ; {
 004C                   .dbline 55
 004C           ;  if(OCR2 - subtract > 10) //防止到很小之后跳跃到很大。
 004C 23B4              in R2,0x23
 004E 201A              sub R2,R16
 0050 8AE0              ldi R24,10
 0052 8215              cp R24,R2
 0054 18F4              brsh L18
 0056           X5:
 0056                   .dbline 56
 0056           ;  {
 0056                   .dbline 57
 0056           ;   OCR2 = OCR2 - subtract;
 0056 23B4              in R2,0x23
 0058 201A              sub R2,R16
 005A 23BC              out 0x23,R2
 005C                   .dbline 58
 005C           ;  }
 005C           L18:
 005C                   .dbline -2
 005C           L17:
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r subtract 16 c
 005E                   .dbend
 005E           ; }
 005E           ; /******************************************************************************/
 005E           ; 

⌨️ 快捷键说明

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