📄 pid.s
字号:
.module PID.c
.area text(rom, con, rel)
.dbfile D:\hujie\PID.c
.dbfunc e PID _PID fV
; flag -> R12,R13
; newDAC -> y+0
; ee -> R10,R11
.even
_PID::
rcall push_gset4
mov R10,R16
mov R11,R17
sbiw R28,4
.dbline -1
.dbline 11
; // PID.c
; // 8/7/2005 written by MrLiu
; //
;
; #include <io8515v.h>
; #include "PID.h"
; #include "main.h"
; #define PID_EE_VALUE_MAX 100
;
; void PID(int ee)
; {
.dbline 13
; long newDAC;
; int flag=1;
ldi R24,1
ldi R25,0
mov R12,R24
mov R13,R25
.dbline 15
;
; if(ee>PID_EE_VALUE_MAX) ee=PID_EE_VALUE_MAX;
ldi R24,100
cp R24,R10
cpc R25,R11
brge L2
.dbline 15
mov R10,R24
mov R11,R25
L2:
.dbline 16
; if(ee<-PID_EE_VALUE_MAX) ee=-PID_EE_VALUE_MAX;
mov R24,R10
mov R25,R11
cpi R24,156
ldi R30,255
cpc R25,R30
brge L4
.dbline 16
ldi R24,-100
ldi R25,-1
mov R10,R24
mov R11,R25
L4:
.dbline 17
; newDAC=(long)DAC-((long)ee<<2);
ldi R24,2
ldi R25,0
mov R2,R10
mov R3,R11
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
st -y,R24
mov R16,R2
mov R17,R3
mov R18,R4
mov R19,R5
rcall lsl32
lds R2,_DAC
lds R3,_DAC+1
clr R4
clr R5
sub R2,R16
sbc R3,R17
sbc R4,R18
sbc R5,R19
mov R30,R28
mov R31,R29
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
.dbline 18
; if (newDAC>65535) DAC=65535;
ldi R20,255
ldi R21,255
ldi R22,0
ldi R23,0
mov R30,R28
mov R31,R29
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L6
.dbline 18
ldi R24,65535
ldi R25,255
sts _DAC+1,R25
sts _DAC,R24
rjmp L7
L6:
.dbline 19
; else if (newDAC<0) DAC=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
mov R30,R28
mov R31,R29
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L8
.dbline 19
clr R2
clr R3
sts _DAC+1,R3
sts _DAC,R2
rjmp L9
L8:
.dbline 20
; else DAC=newDAC&0x0ffff;
ldi R20,255
ldi R21,255
ldi R22,0
ldi R23,0
mov R30,R28
mov R31,R29
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
and R2,R20
and R3,R21
and R4,R22
and R5,R23
sts _DAC+1,R3
sts _DAC,R2
L9:
L7:
.dbline -2
.dbline 21
; }
L1:
adiw R28,4
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r flag 12 I
.dbsym l newDAC 0 L
.dbsym r ee 10 I
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -