📄 motor.lis
字号:
.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 + -