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

📄 motor.lis

📁 直流电机驱动系统设计,以单片机实现电动机的调速控制.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module Motor.c
                        .area data(ram, con, rel)
 0000           _Ek::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0002                   .dbsym e Ek _Ek I
 0002           _Ek_1::
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0004                   .dbsym e Ek_1 _Ek_1 I
 0004           _Ek_2::
 0004                   .blkb 2
                        .area idata
 0004 0000              .word 0
                        .area data(ram, con, rel)
 0006                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0006                   .dbsym e Ek_2 _Ek_2 I
 0006           _flage::
 0006                   .blkb 1
                        .area idata
 0006 00                .byte 0
                        .area data(ram, con, rel)
 0007                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0007                   .dbsym e flage _flage c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0000                   .dbfunc e Putdata _Putdata fV
 0000           ;              i -> R20,R21
 0000           ;           data -> R16,R17
                        .even
 0000           _Putdata::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 30
 0002           ; //***************************FileName:Motor.C************************
 0002           ; //***************************ICCAVR6.30编译**************************
 0002           ; #include <io8535v.h>
 0002           ; #include <macros.h>
 0002           ; #include <eeprom.h>
 0002           ; 
 0002           ; //***************************全局变量定义**************************//
 0002           ; #define U1 5 
 0002           ; char Data[10];               //接收数据数组
 0002           ; int adress;                  //数据地址
 0002           ; int a;                       //采样时间次数
 0002           ; float t;                     //采样时间.s
 0002           ; int itime;                   //给定采样时间的次数
 0002           ; int Ek=0;                    //本次偏差
 0002           ; int Ek_1=0;                  //上次偏差
 0002           ; int Ek_2=0;                  //上上次偏差
 0002           ; char flage=0;                //监控标志
 0002           ; union chang1                 //float数据与char数据转换
 0002           ; {char c[4];    
 0002           ;  float x;
 0002           ; }floatxin;
 0002           ; union chang2                 //int数据与char数据转换           
 0002           ; {char c[2];
 0002           ;  int x;
 0002           ; }intxin; 
 0002           ; 
 0002           ; //**************************串口数据发送函数***********************//
 0002           ; //说明:串口数据发送采用查询方式,每一帧发送10个字节
 0002           ; void Putdata(char data[10])
 0002           ; {int i;
 0002                   .dbline 31
 0002           ;  for(i=0;i<=9;i++)
 0002 4427              clr R20
 0004 5527              clr R21
 0006                   .dbline 32
 0006           L6:
 0006                   .dbline 32
 0006           L7:
 0006                   .dbline 32
 0006 5D9B              sbis 0xb,5
 0008 FECF              rjmp L6
 000A                   .dbline 33
 000A E42F              mov R30,R20
 000C F52F              mov R31,R21
 000E E00F              add R30,R16
 0010 F11F              adc R31,R17
 0012 2080              ldd R2,z+0
 0014 2CB8              out 0xc,R2
 0016                   .dbline 33
 0016           L3:
 0016                   .dbline 31
 0016 4F5F              subi R20,255  ; offset = 1
 0018 5F4F              sbci R21,255
 001A                   .dbline 31
 001A 89E0              ldi R24,9
 001C 90E0              ldi R25,0
 001E 8417              cp R24,R20
 0020 9507              cpc R25,R21
 0022 8CF7              brge L7
 0024                   .dbline -2
 0024                   .dbline 34
 0024           ;  {while(!(USR&(1<<UDRE)));
 0024           ;   UDR=data[i];}
 0024           ; }
 0024           L1:
 0024 00D0              rcall pop_gset1
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 20 I
 0028                   .dbsym r data 16 pc
 0028                   .dbend
 0028                   .dbfunc e GetOutputADC _GetOutputADC fI
 0028           ;           temp -> R16,R17
                        .even
 0028           _GetOutputADC::
 0028                   .dbline -1
 0028                   .dbline 38
 0028           ; 
 0028           ; //**************************读AD转换结果***************************//
 0028           ; int GetOutputADC()
 0028           ; {int temp;
 0028                   .dbline 39
 0028           ;  temp=ADCH;
 0028 05B1              in R16,0x5
 002A 1127              clr R17
 002C                   .dbline 40
 002C           ;  temp=temp<<8;
 002C 102F              mov R17,R16
 002E 0027              clr R16
 0030                   .dbline 41
 0030           ;  return(temp+ADCL);
 0030 24B0              in R2,0x4
 0032 3324              clr R3
 0034 020D              add R16,R2
 0036 131D              adc R17,R3
 0038                   .dbline -2
 0038           L9:
 0038                   .dbline 0 ; func end
 0038 0895              ret
 003A                   .dbsym r temp 16 I
 003A                   .dbend
 003A                   .dbfunc e Upspeed _Upspeed fV
                        .even
 003A           _Upspeed::
 003A 2297              sbiw R28,2
 003C                   .dbline -1
 003C                   .dbline 46
 003C           ; }
 003C           ; 
 003C           ; //***************************电机加速函数**************************//
 003C           ; void Upspeed()
 003C           ; {EEPROMReadBytes(0x0010,intxin.c,2);
 003C                   .dbline 46
 003C 82E0              ldi R24,2
 003E 90E0              ldi R25,0
 0040 9983              std y+1,R25
 0042 8883              std y+0,R24
 0044 20E0              ldi R18,<_intxin
 0046 30E0              ldi R19,>_intxin
 0048 00E1              ldi R16,16
 004A 10E0              ldi R17,0
 004C 00D0              rcall _EEPROMReadBytes
 004E                   .dbline 47
 004E           ;  intxin.c[0]+=Data[6];
 004E 20901600          lds R2,_Data+6
 0052 30900000          lds R3,_intxin
 0056 320C              add R3,R2
 0058 30920000          sts _intxin,R3
 005C                   .dbline 48
 005C           ;  intxin.c[1]+=Data[7];
 005C 20901700          lds R2,_Data+7
 0060 30900100          lds R3,_intxin+1
 0064 320C              add R3,R2
 0066 30920100          sts _intxin+1,R3
 006A                   .dbline 49
 006A           ;  EEPROMWriteBytes(0x0010,intxin.c,2);
 006A 82E0              ldi R24,2
 006C 90E0              ldi R25,0
 006E 9983              std y+1,R25
 0070 8883              std y+0,R24
 0072 20E0              ldi R18,<_intxin
 0074 30E0              ldi R19,>_intxin
 0076 00E1              ldi R16,16
 0078 10E0              ldi R17,0
 007A 00D0              rcall _EEPROMWriteBytes
 007C                   .dbline -2
 007C                   .dbline 50
 007C           ; }
 007C           L10:
 007C 2296              adiw R28,2
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbend
 0080                   .dbfunc e Downspeed _Downspeed fV
                        .even
 0080           _Downspeed::
 0080 2297              sbiw R28,2
 0082                   .dbline -1
 0082                   .dbline 54
 0082           ; 
 0082           ; //***************************电机减速函数**************************//
 0082           ; void Downspeed()
 0082           ; {
 0082                   .dbline 55
 0082           ;   EEPROMReadBytes(0x0010,intxin.c,2);
 0082 82E0              ldi R24,2
 0084 90E0              ldi R25,0
 0086 9983              std y+1,R25
 0088 8883              std y+0,R24
 008A 20E0              ldi R18,<_intxin
 008C 30E0              ldi R19,>_intxin
 008E 00E1              ldi R16,16
 0090 10E0              ldi R17,0
 0092 00D0              rcall _EEPROMReadBytes
 0094                   .dbline 56
 0094           ;   intxin.c[0]-=Data[6];
 0094 20901600          lds R2,_Data+6
 0098 30900000          lds R3,_intxin
 009C 3218              sub R3,R2
 009E 30920000          sts _intxin,R3
 00A2                   .dbline 57
 00A2           ;   intxin.c[1]-=Data[7];
 00A2 20901700          lds R2,_Data+7
 00A6 30900100          lds R3,_intxin+1
 00AA 3218              sub R3,R2
 00AC 30920100          sts _intxin+1,R3
 00B0                   .dbline 58
 00B0           ;   EEPROMWriteBytes(0x0010,intxin.c,2);
 00B0 82E0              ldi R24,2
 00B2 90E0              ldi R25,0
 00B4 9983              std y+1,R25
 00B6 8883              std y+0,R24
 00B8 20E0              ldi R18,<_intxin
 00BA 30E0              ldi R19,>_intxin
 00BC 00E1              ldi R16,16
 00BE 10E0              ldi R17,0
 00C0 00D0              rcall _EEPROMWriteBytes
 00C2                   .dbline -2
 00C2                   .dbline 59
 00C2           ; }
 00C2           L14:
 00C2 2296              adiw R28,2
 00C4                   .dbline 0 ; func end
 00C4 0895              ret
 00C6                   .dbend
 00C6                   .dbfunc e PIDB _PIDB fV
 00C6           ;          speed -> R14,R15
 00C6           ;              z -> y+20
 00C6           ;              u -> y+14
 00C6           ;              t -> R10,R11
 00C6           ;              y -> R12,R13
 00C6           ;          temp1 -> R20
 00C6           ;              k -> y+2
 00C6           ;              i -> y+18
                        .even
 00C6           _PIDB::
 00C6 00D0              rcall push_gset5
 00C8 6697              sbiw R28,22
 00CA                   .dbline -1
 00CA                   .dbline 63
 00CA           ; 
 00CA           ; //***************************PID调节函数***************************//
 00CA           ; void PIDB()
 00CA           ; {int y;           //本次速度值 
 00CA                   .dbline 71
 00CA           ;  float u;         //电压差值
 00CA           ;  int z;           //输出增量
 00CA           ;  int t;           //采样时间
 00CA           ;  char temp1;      //暂存
 00CA           ;  int i;
 00CA           ;  int speed;       //速度设定
 00CA           ;  float k[3];      //PID参数记录
 00CA           ;  for (i=0;i<=2;i++)
 00CA 0024              clr R0
 00CC 1124              clr R1
 00CE 1B8A              std y+19,R1
 00D0 0A8A              std y+18,R0
 00D2           L19:
 00D2                   .dbline 72
 00D2                   .dbline 72
 00D2 84E0              ldi R24,4
 00D4 90E0              ldi R25,0
 00D6 9983              std y+1,R25
 00D8 8883              std y+0,R24
 00DA 20E0              ldi R18,<_floatxin
 00DC 30E0              ldi R19,>_floatxin
 00DE 0A89              ldd R16,y+18
 00E0 1B89              ldd R17,y+19
 00E2 000F              lsl R16
 00E4 111F              rol R17
 00E6 000F              lsl R16
 00E8 111F              rol R17
 00EA 00D0              rcall _EEPROMReadBytes
 00EC                   .dbline 73
 00EC 8C2F              mov R24,R28
 00EE 9D2F              mov R25,R29
 00F0 0296              adiw R24,2
 00F2 EA89              ldd R30,y+18
 00F4 FB89              ldd R31,y+19
 00F6 EE0F              lsl R30
 00F8 FF1F              rol R31
 00FA EE0F              lsl R30
 00FC FF1F              rol R31
 00FE E80F              add R30,R24
 0100 F91F              adc R31,R25
 0102 40900400          lds R4,_floatxin+2
 0106 50900500          lds R5,_floatxin+2+1
 010A 20900200          lds R2,_floatxin
 010E 30900300          lds R3,_floatxin+1
 0112 2082              std z+0,R2
 0114 3182              std z+1,R3
 0116 4282              std z+2,R4
 0118 5382              std z+3,R5
 011A                   .dbline 73
 011A           L20:
 011A                   .dbline 71
 011A 8A89              ldd R24,y+18
 011C 9B89              ldd R25,y+19
 011E 0196              adiw R24,1
 0120 9B8B              std y+19,R25
 0122 8A8B              std y+18,R24
 0124                   .dbline 71
 0124 82E0              ldi R24,2
 0126 90E0              ldi R25,0
 0128 0A88              ldd R0,y+18
 012A 1B88              ldd R1,y+19
 012C 8015              cp R24,R0
 012E 9105              cpc R25,R1
 0130 84F6              brge L19
 0132                   .dbline 74
 0132           ;   {EEPROMReadBytes(i*4,floatxin.c,4);
 0132           ;    k[i]=floatxin.x;}
 0132           ;   EEPROMReadBytes(0x0010,intxin.c,1);   //读EEPROM
 0132 81E0              ldi R24,1
 0134 9983              std y+1,R25
 0136 8883              std y+0,R24
 0138 20E0              ldi R18,<_intxin
 013A 30E0              ldi R19,>_intxin
 013C 00E1              ldi R16,16
 013E 10E0              ldi R17,0
 0140 00D0              rcall _EEPROMReadBytes
 0142                   .dbline 75
 0142           ;   speed=intxin.x;
 0142 E0900000          lds R14,_intxin
 0146 F0900100          lds R15,_intxin+1
 014A                   .dbline 76
 014A           ;   t=itime*0.0001275;
 014A 00E0              ldi R16,<L23
 014C 10E0              ldi R17,>L23
 014E 00D0              rcall lpm32
 0150 3A93              st -y,R19
 0152 2A93              st -y,R18
 0154 1A93              st -y,R17

⌨️ 快捷键说明

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