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