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

📄 main.lis

📁 增量式模糊PID控制方法AVR单片机mega16
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0008           ; /*2*/   3, 3, 1, 0, 0,-1,-3,-3,-5,-6,-5, 
 0008           ; /*3*/   1, 1, 0, 0, 0,-1,-2,-2,-5,-5,-5, 
 0008           ; /*4*/   0, 0,-1,-1,-2,-3,-3,-3,-5,-6,-5, 
 0008           ; /*5*/   0, 0,-1,-1,-2,-3,-3,-3,-5,-6,-5, 
 0008           ; };
 0008           ; 
 0008           ; int GetDeltFuzzyValue(int ei,int delt_ei)
 0008           ; {
 0008                   .dbline 60
 0008           ;   unsigned char i,j;
 0008           ;   #define delt_M 20
 0008           ;   if(ei > delt_M)
 0008 84E1              ldi R24,20
 000A 90E0              ldi R25,0
 000C 8417              cp R24,R20
 000E 9507              cpc R25,R21
 0010 14F4              brge L2
 0012                   .dbline 61
 0012           ;     ei = delt_M;
 0012 44E1              ldi R20,20
 0014 50E0              ldi R21,0
 0016           L2:
 0016                   .dbline 62
 0016           ;   if(ei<-delt_M)
 0016 4C3E              cpi R20,236
 0018 EFEF              ldi R30,255
 001A 5E07              cpc R21,R30
 001C 14F4              brge L4
 001E                   .dbline 63
 001E           ;     ei = -delt_M;     
 001E 4CEE              ldi R20,-20
 0020 5FEF              ldi R21,-1
 0022           L4:
 0022                   .dbline 64
 0022           ;   i = delt_ei + 5;
 0022 6B5F              subi R22,251  ; offset = 5
 0024 7F4F              sbci R23,255
 0026                   .dbline 65
 0026           ;   j = 6 + ei*6/delt_M;
 0026 06E0              ldi R16,6
 0028 10E0              ldi R17,0
 002A 9A01              movw R18,R20
 002C 0E940000          xcall empy16s
 0030 24E1              ldi R18,20
 0032 30E0              ldi R19,0
 0034 0E940000          xcall div16s
 0038 402F              mov R20,R16
 003A 4A5F              subi R20,250  ; offset = 6
 003C 5F4F              sbci R21,255
 003E                   .dbline 66
 003E           ;   return DFC_tbl[i][j]; 
 003E 8DE0              ldi R24,13
 0040 869F              mul R24,R22
 0042 1001              movw R2,R0
 0044 80E0              ldi R24,<_DFC_tbl
 0046 90E0              ldi R25,>_DFC_tbl
 0048 280E              add R2,R24
 004A 391E              adc R3,R25
 004C E42F              mov R30,R20
 004E FF27              clr R31
 0050 E20D              add R30,R2
 0052 F31D              adc R31,R3
 0054 0081              ldd R16,z+0
 0056 1127              clr R17
 0058                   .dbline -2
 0058           L1:
 0058 0E940000          xcall pop_gset2
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r j 20 c
 005E                   .dbsym r i 22 c
 005E                   .dbsym r delt_ei 22 I
 005E                   .dbsym r ei 20 I
 005E                   .dbend
 005E                   .dbfunc e Delt_FuzzyCtrl _Delt_FuzzyCtrl fV
                        .even
 005E           _Delt_FuzzyCtrl::
 005E                   .dbline -1
 005E                   .dbline 83
 005E           ; }
 005E           ; /*
 005E           ; int GetDeltFuzzyValue(int ei,int delt_ei)
 005E           ; {
 005E           ;   unsigned char i,j;
 005E           ;   #define delt_M 20
 005E           ;   if(ei > delt_M)
 005E           ;     ei = delt_M;
 005E           ;   if(ei<-delt_M)
 005E           ;     ei = -delt_M;     
 005E           ;   i = delt_ei + 5;
 005E           ;   j = 5 + ei*5/delt_M;
 005E           ;   return DFC_tbl[i][j]; 
 005E           ; }
 005E           ; */
 005E           ; void Delt_FuzzyCtrl(void)
 005E           ; {
 005E                   .dbline 85
 005E           ;   #define delt_Um 50
 005E           ;   LastError = ei;//刷新近2次偏差
 005E 20900E00          lds R2,_ei
 0062 30900F00          lds R3,_ei+1
 0066 30920D00          sts _LastError+1,R3
 006A 20920C00          sts _LastError,R2
 006E                   .dbline 86
 006E           ;   ei = ADC-SerPoint;//ei = SerPoint - ADC;//ei = SerPoint - T_adc_data[2];
 006E 20901000          lds R2,_SerPoint
 0072 30901100          lds R3,_SerPoint+1
 0076 44B0              in R4,0x4
 0078 55B0              in R5,0x5
 007A 4218              sub R4,R2
 007C 5308              sbc R5,R3
 007E 50920F00          sts _ei+1,R5
 0082 40920E00          sts _ei,R4
 0086                   .dbline 87
 0086           ;   delt_ei = LastError-ei;//刷新偏差的变化
 0086 1201              movw R2,R4
 0088 40900C00          lds R4,_LastError
 008C 50900D00          lds R5,_LastError+1
 0090 4218              sub R4,R2
 0092 5308              sbc R5,R3
 0094 50920B00          sts _delt_ei+1,R5
 0098 40920A00          sts _delt_ei,R4
 009C                   .dbline 88
 009C           ;   if(delt_ei > 5)
 009C 85E0              ldi R24,5
 009E 90E0              ldi R25,0
 00A0 8415              cp R24,R4
 00A2 9505              cpc R25,R5
 00A4 24F4              brge L7
 00A6                   .dbline 89
 00A6           ;     delt_ei = 5;
 00A6 90930B00          sts _delt_ei+1,R25
 00AA 80930A00          sts _delt_ei,R24
 00AE           L7:
 00AE                   .dbline 90
 00AE           ;   if(delt_ei < -5)
 00AE 80910A00          lds R24,_delt_ei
 00B2 90910B00          lds R25,_delt_ei+1
 00B6 8B3F              cpi R24,251
 00B8 EFEF              ldi R30,255
 00BA 9E07              cpc R25,R30
 00BC 34F4              brge L9
 00BE                   .dbline 91
 00BE           ;     delt_ei = -5;
 00BE 8BEF              ldi R24,-5
 00C0 9FEF              ldi R25,-1
 00C2 90930B00          sts _delt_ei+1,R25
 00C6 80930A00          sts _delt_ei,R24
 00CA           L9:
 00CA                   .dbline 92
 00CA           ;   delt_ui = GetDeltFuzzyValue(ei,delt_ei);//采用模糊控制模型
 00CA 20910A00          lds R18,_delt_ei
 00CE 30910B00          lds R19,_delt_ei+1
 00D2 00910E00          lds R16,_ei
 00D6 10910F00          lds R17,_ei+1
 00DA 92DF              xcall _GetDeltFuzzyValue
 00DC 10930100          sts _delt_ui+1,R17
 00E0 00930000          sts _delt_ui,R16
 00E4                   .dbline 94
 00E4           ;   //delt_ui = delt_ui; //delt_ui = delt_ui*2;                    //其中2是比例因子K
 00E4           ;   if(delt_ui > delt_Um)
 00E4 82E3              ldi R24,50
 00E6 90E0              ldi R25,0
 00E8 8017              cp R24,R16
 00EA 9107              cpc R25,R17
 00EC 24F4              brge L11
 00EE                   .dbline 95
 00EE           ;     delt_ui = delt_Um;
 00EE 90930100          sts _delt_ui+1,R25
 00F2 80930000          sts _delt_ui,R24
 00F6           L11:
 00F6                   .dbline 96
 00F6           ;   if(delt_ui < -delt_Um)//if(delt_ui < -delt_Um)
 00F6 80910000          lds R24,_delt_ui
 00FA 90910100          lds R25,_delt_ui+1
 00FE 8E3C              cpi R24,206
 0100 EFEF              ldi R30,255
 0102 9E07              cpc R25,R30
 0104 34F4              brge L13
 0106                   .dbline 97
 0106           ;     delt_ui = -delt_Um;//delt_ui = -delt_Um;
 0106 8EEC              ldi R24,-50
 0108 9FEF              ldi R25,-1
 010A 90930100          sts _delt_ui+1,R25
 010E 80930000          sts _delt_ui,R24
 0112           L13:
 0112                   .dbline 98
 0112 20900000          lds R2,_delt_ui
 0116 30900100          lds R3,_delt_ui+1
 011A 40900200          lds R4,_ui
 011E 50900300          lds R5,_ui+1
 0122 420C              add R4,R2
 0124 531C              adc R5,R3
 0126 50920300          sts _ui+1,R5
 012A 40920200          sts _ui,R4
 012E                   .dbline 99
 012E C201              movw R24,R4
 0130 8130              cpi R24,1
 0132 E0E0              ldi R30,0
 0134 9E07              cpc R25,R30
 0136 34F4              brge L15
 0138                   .dbline 100
 0138 81E0              ldi R24,1
 013A 90E0              ldi R25,0
 013C 90930300          sts _ui+1,R25
 0140 80930200          sts _ui,R24
 0144           L15:
 0144                   .dbline -2
 0144           L6:
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbend
 0146                   .dbfunc e main _main fV
 0146           ;          count -> <dead>
 0146           ;              j -> y+0
 0146           ;             RS -> R20,R21
 0146           ;          value -> R20,R21
 0146           ;           test -> R20,R21
                        .even
 0146           _main::
 0146 2497              sbiw R28,4
 0148                   .dbline -1
 0148                   .dbline 103
 0148           ;   ui += delt_ui;
 0148           ;   if(ui<1)
 0148           ;     ui = 1;
 0148           ; }
 0148           ; void main(void)
 0148           ; {       
 0148                   .dbline 106
 0148           ;     float j;  
 0148           ;     int count;
 0148           ;     unsigned char *test = "The Voltage is: ";
 0148 40E0              ldi R20,<L18
 014A 50E0              ldi R21,>L18
 014C                   .dbline 107
 014C           ;     unsigned char *value = "0.000 V"; 
 014C 40E0              ldi R20,<L19
 014E 50E0              ldi R21,>L19
 0150                   .dbline 109
 0150           ;     unsigned char *RS;
 0150           ;     RS = RS_buf;
 0150 40E0              ldi R20,<_RS_buf
 0152 50E0              ldi R21,>_RS_buf
 0154                   .dbline 110
 0154           ;     RS_flag = 0;
 0154 2224              clr R2
 0156 20921200          sts _RS_flag,R2
 015A                   .dbline 111
 015A           ;     delay_nms(1);  
 015A 01E0              ldi R16,1
 015C 10E0              ldi R17,0
 015E 0E940000          xcall _delay_nms
 0162                   .dbline 112
 0162           ;       SerPoint=500;  
 0162 84EF              ldi R24,500
 0164 91E0              ldi R25,1
 0166 90931100          sts _SerPoint+1,R25
 016A 80931000          sts _SerPoint,R24
 016E                   .dbline 114
 016E           ;     //dataport=0xff;
 016E           ;     OSCCAL=0Xab;//系统时钟校准,不同的芯片和不的频率,
 016E 8BEA              ldi R24,171
 0170 81BF              out 0x31,R24
 0172                   .dbline 115
 0172           ;     init_adc();       
 0172 0E940000          xcall _init_adc
 0176 01C0              xjmp L21
 0178           L20:
 0178                   .dbline 163
 0178                   .dbline 164
 0178 72DF              xcall _Delt_FuzzyCtrl
 017A                   .dbline 165
 017A                   .dbline 166
 017A           L21:
 017A                   .dbline 162
 017A FECF              xjmp L20
 017C           X0:
 017C                   .dbline -2
 017C           L17:
 017C 2496              adiw R28,4
 017E                   .dbline 0 ; func end
 017E 0895              ret
 0180                   .dbsym l count 1 I
 0180                   .dbsym l j 0 D
 0180                   .dbsym r RS 20 pc
 0180                   .dbsym r value 20 pc
 0180                   .dbsym r test 20 pc
 0180                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\仿真\增量式模糊控制\main.c
 0000           _delt_ui::
 0000                   .blkb 2
 0002                   .dbsym e delt_ui _delt_ui I
 0002           _ui::
 0002                   .blkb 2
 0004                   .dbsym e ui _ui I
 0004           _T_adc_data::
 0004                   .blkb 6
 000A                   .dbsym e T_adc_data _T_adc_data A[6:3]I
 000A           _delt_ei::
 000A                   .blkb 2
 000C                   .dbsym e delt_ei _delt_ei I
 000C           _LastError::
 000C                   .blkb 2
 000E                   .dbsym e LastError _LastError I
 000E           _ei::
 000E                   .blkb 2
 0010                   .dbsym e ei _ei I
 0010           _SerPoint::
 0010                   .blkb 2
 0012                   .dbsym e SerPoint _SerPoint i
 0012           _RS_flag::
 0012                   .blkb 1
 0013                   .dbsym e RS_flag _RS_flag c
 0013           _RS_buf::
 0013                   .blkb 10
 001D                   .dbsym e RS_buf _RS_buf A[10:10]c
 001D           _RSend::
 001D                   .blkb 1
 001E                   .dbsym e RSend _RSend c
                        .area data(ram, con, rel)
 008F                   .dbfile D:\仿真\增量式模糊控制\main.c
 008F           L19:
 008F                   .blkb 8
                        .area idata
 008F 302E303030205600  .byte 48,46,48,48,48,32,'V,0
                        .area data(ram, con, rel)
 0097                   .dbfile D:\仿真\增量式模糊控制\main.c
 0097           L18:
 0097                   .blkb 17
                        .area idata
 0097 54686520566F6C746167652069733A20  .byte 'T,'h,'e,32,'V,'o,'l,'t,'a,'g,'e,32,'i,'s,58,32
 00A7 00                .byte 0
                        .area data(ram, con, rel)
 00A8                   .dbfile D:\仿真\增量式模糊控制\main.c

⌨️ 快捷键说明

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