📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_DFC_tbl::
.blkb 2
.area idata
.byte 5,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 5,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,5
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 6
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 5,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 5,5
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 4
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 4,4
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,255
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 6,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,3
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 6,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,0
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 254
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 6,5
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,251
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 250
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 251,3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,2
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 250,251
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 3
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 3,1
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 250,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 1,1
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,254
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 254,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 251,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,255
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 254
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 250,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 255,255
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 253,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 250,251
.area data(ram, con, rel)
.blkb 9
.area idata
.byte 0,0,0,0,0,0,0,0,0
.area data(ram, con, rel)
.blkb 13
.area idata
.word 0,0,0,0,0
.byte 0,0,0
.area data(ram, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
.dbsym e DFC_tbl _DFC_tbl A[143:11:13]c
.area text(rom, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
.dbfunc e GetDeltFuzzyValue _GetDeltFuzzyValue fI
; j -> R20
; i -> R22
; delt_ei -> R22,R23
; ei -> R20,R21
.even
_GetDeltFuzzyValue::
xcall push_gset2
movw R22,R18
movw R20,R16
.dbline -1
.dbline 57
; #define ENABLE_BIT_DEFINITIONS
;
; #include "includes.h"
; //#define Vref 25600
;
;
; //#define Vref 50000
; void init_adc(void);
; void WDR(void);
; void WDT_init(void);
;
; //unsigned char adc_mux = 0x01; //通道选择
;
; unsigned char RSend;
; unsigned char RS_buf[10];
; unsigned char RS_flag;
;
; unsigned int SerPoint; //设定目标,应用时实际上取该值的1/10,出现温度的0.x度
; int ei; //最近1次的偏差,ei = stPID.SetPoint-stPID.T_adc_data[2]
; int LastError; //SetPoint-T_adc_data[1]
; int delt_ei; //偏差的变化:delt_ei = PID.LastError-ei
; int T_adc_data[3]; //近3次的测量值,T_adc_data[2]为最近的一次
; int ui; //ui:输出
; int delt_ui; //delt_ei为增量式增量输出
; /*
; char DFC_tbl[11][13]={
; //-12,-10,-8,-6,-4,-2,0,+2,+4,+6,+8,+10,+12
; -5,-5,-4,-4,-3,-3,-3,-3,-3,-2,-2,-1, 0,
; -5,-5,-4,-3,-2,-2,-2,-2,-2,-2,-1, 0, 0,
; -5,-4,-3,-2,-1,-1,-1,-1,-2,-1, 0, 0, 0,
; -4,-3,-2,-2,-1, 0, 0,-1,-1,-1, 0, 1, 2,
; -3,-2,-1,-1,-1, 0, 0, 0, 1, 1, 2, 3, 4,
; -3,-2,-1,-1,-1, 0, 0, 1, 1, 1, 2, 3, 4,
; -2,-2,-1,-1,-1, 0, 0, 2, 2, 2, 2, 3, 4,
; 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 5,
; 0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5,
; 0, 0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5,
; 0, 0, 0, 0, 2, 2, 3, 3, 4, 5, 5, 5, 5
; };
; */
; char DFC_tbl[11][13]={
; /*-12,-10,-8,-6,-4,-2,0,+2,+4,+6,+8,+10,+12*/
; /*-5*/ 5, 5, 5, 3, 3, 3, 1, 1, 0, 0, 0,
; /*-4*/ 5, 6, 5, 3, 3, 3, 1, 1, 0, 0, 0,
; /*-3*/ 5, 5, 5, 4, 4, 4, 1, 1, 0,-1,-1,
; /*-2*/ 5, 6, 5, 3, 3, 1, 0, 0,-2,-3,-3,
; /*-1*/ 5, 6, 5, 3, 3, 1, 0,-2,-2,-3,-3,
; /*0*/ 5, 6, 5, 3, 1, 0, 0,-3,-5,-6,-5,
; /*1*/ 3, 3, 2, 1, 0,-1,-3,-3,-5,-6,-5,
; /*2*/ 3, 3, 1, 0, 0,-1,-3,-3,-5,-6,-5,
; /*3*/ 1, 1, 0, 0, 0,-1,-2,-2,-5,-5,-5,
; /*4*/ 0, 0,-1,-1,-2,-3,-3,-3,-5,-6,-5,
; /*5*/ 0, 0,-1,-1,-2,-3,-3,-3,-5,-6,-5,
; };
;
; int GetDeltFuzzyValue(int ei,int delt_ei)
; {
.dbline 60
; unsigned char i,j;
; #define delt_M 20
; if(ei > delt_M)
ldi R24,20
ldi R25,0
cp R24,R20
cpc R25,R21
brge L2
.dbline 61
; ei = delt_M;
ldi R20,20
ldi R21,0
L2:
.dbline 62
; if(ei<-delt_M)
cpi R20,236
ldi R30,255
cpc R21,R30
brge L4
.dbline 63
; ei = -delt_M;
ldi R20,-20
ldi R21,-1
L4:
.dbline 64
; i = delt_ei + 5;
subi R22,251 ; offset = 5
sbci R23,255
.dbline 65
; j = 6 + ei*6/delt_M;
ldi R16,6
ldi R17,0
movw R18,R20
xcall empy16s
ldi R18,20
ldi R19,0
xcall div16s
mov R20,R16
subi R20,250 ; offset = 6
sbci R21,255
.dbline 66
; return DFC_tbl[i][j];
ldi R24,13
mul R24,R22
movw R2,R0
ldi R24,<_DFC_tbl
ldi R25,>_DFC_tbl
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
clr R17
.dbline -2
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r delt_ei 22 I
.dbsym r ei 20 I
.dbend
.dbfunc e Delt_FuzzyCtrl _Delt_FuzzyCtrl fV
.even
_Delt_FuzzyCtrl::
.dbline -1
.dbline 83
; }
; /*
; int GetDeltFuzzyValue(int ei,int delt_ei)
; {
; unsigned char i,j;
; #define delt_M 20
; if(ei > delt_M)
; ei = delt_M;
; if(ei<-delt_M)
; ei = -delt_M;
; i = delt_ei + 5;
; j = 5 + ei*5/delt_M;
; return DFC_tbl[i][j];
; }
; */
; void Delt_FuzzyCtrl(void)
; {
.dbline 85
; #define delt_Um 50
; LastError = ei;//刷新近2次偏差
lds R2,_ei
lds R3,_ei+1
sts _LastError+1,R3
sts _LastError,R2
.dbline 86
; ei = ADC-SerPoint;//ei = SerPoint - ADC;//ei = SerPoint - T_adc_data[2];
lds R2,_SerPoint
lds R3,_SerPoint+1
in R4,0x4
in R5,0x5
sub R4,R2
sbc R5,R3
sts _ei+1,R5
sts _ei,R4
.dbline 87
; delt_ei = LastError-ei;//刷新偏差的变化
movw R2,R4
lds R4,_LastError
lds R5,_LastError+1
sub R4,R2
sbc R5,R3
sts _delt_ei+1,R5
sts _delt_ei,R4
.dbline 88
; if(delt_ei > 5)
ldi R24,5
ldi R25,0
cp R24,R4
cpc R25,R5
brge L7
.dbline 89
; delt_ei = 5;
sts _delt_ei+1,R25
sts _delt_ei,R24
L7:
.dbline 90
; if(delt_ei < -5)
lds R24,_delt_ei
lds R25,_delt_ei+1
cpi R24,251
ldi R30,255
cpc R25,R30
brge L9
.dbline 91
; delt_ei = -5;
ldi R24,-5
ldi R25,-1
sts _delt_ei+1,R25
sts _delt_ei,R24
L9:
.dbline 92
; delt_ui = GetDeltFuzzyValue(ei,delt_ei);//采用模糊控制模型
lds R18,_delt_ei
lds R19,_delt_ei+1
lds R16,_ei
lds R17,_ei+1
xcall _GetDeltFuzzyValue
sts _delt_ui+1,R17
sts _delt_ui,R16
.dbline 94
; //delt_ui = delt_ui; //delt_ui = delt_ui*2; //其中2是比例因子K
; if(delt_ui > delt_Um)
ldi R24,50
ldi R25,0
cp R24,R16
cpc R25,R17
brge L11
.dbline 95
; delt_ui = delt_Um;
sts _delt_ui+1,R25
sts _delt_ui,R24
L11:
.dbline 96
; if(delt_ui < -delt_Um)//if(delt_ui < -delt_Um)
lds R24,_delt_ui
lds R25,_delt_ui+1
cpi R24,206
ldi R30,255
cpc R25,R30
brge L13
.dbline 97
; delt_ui = -delt_Um;//delt_ui = -delt_Um;
ldi R24,-50
ldi R25,-1
sts _delt_ui+1,R25
sts _delt_ui,R24
L13:
.dbline 98
lds R2,_delt_ui
lds R3,_delt_ui+1
lds R4,_ui
lds R5,_ui+1
add R4,R2
adc R5,R3
sts _ui+1,R5
sts _ui,R4
.dbline 99
movw R24,R4
cpi R24,1
ldi R30,0
cpc R25,R30
brge L15
.dbline 100
ldi R24,1
ldi R25,0
sts _ui+1,R25
sts _ui,R24
L15:
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; count -> <dead>
; j -> y+0
; RS -> R20,R21
; value -> R20,R21
; test -> R20,R21
.even
_main::
sbiw R28,4
.dbline -1
.dbline 103
; ui += delt_ui;
; if(ui<1)
; ui = 1;
; }
; void main(void)
; {
.dbline 106
; float j;
; int count;
; unsigned char *test = "The Voltage is: ";
ldi R20,<L18
ldi R21,>L18
.dbline 107
; unsigned char *value = "0.000 V";
ldi R20,<L19
ldi R21,>L19
.dbline 109
; unsigned char *RS;
; RS = RS_buf;
ldi R20,<_RS_buf
ldi R21,>_RS_buf
.dbline 110
; RS_flag = 0;
clr R2
sts _RS_flag,R2
.dbline 111
; delay_nms(1);
ldi R16,1
ldi R17,0
xcall _delay_nms
.dbline 112
; SerPoint=500;
ldi R24,500
ldi R25,1
sts _SerPoint+1,R25
sts _SerPoint,R24
.dbline 114
; //dataport=0xff;
; OSCCAL=0Xab;//系统时钟校准,不同的芯片和不的频率,
ldi R24,171
out 0x31,R24
.dbline 115
; init_adc();
xcall _init_adc
xjmp L21
L20:
.dbline 163
.dbline 164
xcall _Delt_FuzzyCtrl
.dbline 165
.dbline 166
L21:
.dbline 162
xjmp L20
X0:
.dbline -2
L17:
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l count 1 I
.dbsym l j 0 D
.dbsym r RS 20 pc
.dbsym r value 20 pc
.dbsym r test 20 pc
.dbend
.area bss(ram, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
_delt_ui::
.blkb 2
.dbsym e delt_ui _delt_ui I
_ui::
.blkb 2
.dbsym e ui _ui I
_T_adc_data::
.blkb 6
.dbsym e T_adc_data _T_adc_data A[6:3]I
_delt_ei::
.blkb 2
.dbsym e delt_ei _delt_ei I
_LastError::
.blkb 2
.dbsym e LastError _LastError I
_ei::
.blkb 2
.dbsym e ei _ei I
_SerPoint::
.blkb 2
.dbsym e SerPoint _SerPoint i
_RS_flag::
.blkb 1
.dbsym e RS_flag _RS_flag c
_RS_buf::
.blkb 10
.dbsym e RS_buf _RS_buf A[10:10]c
_RSend::
.blkb 1
.dbsym e RSend _RSend c
.area data(ram, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
L19:
.blkb 8
.area idata
.byte 48,46,48,48,48,32,'V,0
.area data(ram, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
L18:
.blkb 17
.area idata
.byte 'T,'h,'e,32,'V,'o,'l,'t,'a,'g,'e,32,'i,'s,58,32
.byte 0
.area data(ram, con, rel)
.dbfile D:\仿真\增量式模糊控制\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -