📄 dataproc.s
字号:
_Pulse_Init_Calculate::
.dbline -1
.dbline 114
; }
; }
;
; void Pulse_Init_Calculate(void)
; {
.dbline 115
; state = RESET;
mov [_state],0
.dbline 116
; index = 0;
mov [_index],0
.dbline -2
.dbline 117
; }
L37:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile ./dataproc.c
L39:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile ./dataproc.c
L40:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile ./dataproc.c
.area text(rom, con, rel)
.dbfile ./dataproc.c
.dbfunc e Pulse_Averaged_Calculate _Pulse_Averaged_Calculate fI
.dbsym s pulses L40 i
.dbsym s total_intervals L39 i
; aver -> X+13
; med_buffer -> X+3
; instant_pulse -> X+1
; i -> X+0
_Pulse_Averaged_Calculate::
.dbline -1
push X
mov X,SP
add SP,17
.dbline 121
;
;
; INT Pulse_Averaged_Calculate(void)
; {
.dbline 125
; static WORD total_intervals = 0;
; static WORD pulses = 0;
;
; INT instant_pulse = GetPulseDelta();
xcall _GetPulseDelta
mov A,[__r1]
mov [X+2],A
mov A,[__r0]
mov [X+1],A
.dbline 128
;
; WORD med_buffer[MEDIAN_FILTER2_LENGHT], aver;
; BYTE i = MEDIAN_FILTER2_LENGHT;
mov [X+0],5
.dbline 130
;
; if (instant_pulse)
cmp [X+1],0
jnz X10
cmp [X+2],0
jz L41
X10:
.dbline 131
; {
.dbline 132
; INITTIMER();
.dbline 132
mov [_timer_pulse],-66
.dbline 132
.dbline 132
.dbline 134
;
; switch (state)
mov A,[_state]
mov [X+16],A
mov [X+15],0
cmp [X+15],0
jnz X11
cmp [X+16],0
jz L46
X11:
cmp [X+15],0
jnz X12
cmp [X+16],1
jz L47
X12:
cmp [X+15],0
jnz X13
cmp [X+16],2
jz L58
X13:
xjmp L43
X8:
.dbline 135
; {
L46:
.dbline 137
; case RESET:
; pulses = total_intervals = index = 0;
mov [_index],0
mov [__r1],0
mov [__r0],0
mov [L39+1],0
mov [L39],0
mov [L40+1],0
mov [L40],0
.dbline 138
; state = INITFILL;
mov [_state],1
.dbline 139
; break;
xjmp L44
L47:
.dbline 141
; case INITFILL:
; if ((MEDIAN_FILTER2_LENGHT-1) == index)
cmp [_index],4
jnz L44
.dbline 142
; {
xjmp L51
L50:
.dbline 143
mov A,[X+0]
mov [__r1],A
mov [__r0],0
asl [__r1]
rlc [__r0]
mov [__r3],X
add [__r3],3
mov A,[__r1]
add A,[__r3]
mov [__r3],A
mov A,[__r0]
adc A,[__r2]
add [__r1],<_pulse_buffer
adc [__r0],>_pulse_buffer
mvi A,[__r1]
mov [__r0],A
mvi A,[__r1]
mov [__r1],A
mov A,[__r0]
mvi [__r3],A
mov A,[__r1]
mvi [__r3],A
L51:
.dbline 143
; while(i--) med_buffer[i] = pulse_buffer[i];
mov A,[X+0]
mov [__r1],A
mov [__r0],0
sub A,1
mov [__r3],A
mov A,0
sbb A,0
mov A,[__r3]
mov [X+0],A
cmp [__r0],0
jnz L50
cmp [__r1],0
jnz L50
X14:
.dbline 144
; median_filter(med_buffer, MEDIAN_FILTER2_LENGHT);
mov A,5
push A
mov [__r1],X
add [__r1],3
mov A,[__r0]
push A
mov A,[__r1]
push A
xcall _median_filter
add SP,-3
.dbline 145
; aver = med_buffer[MEDIAN_FILTER2_LENGHT >> 1];
mov A,[X+8]
mov [X+14],A
mov A,[X+7]
mov [X+13],A
.dbline 147
;
; if ((instant_pulse > (aver -(aver >> 2))) && (instant_pulse < (aver + (aver >> 2))))
mov A,[X+14]
mov [__r1],A
mov A,[X+13]
mov [__r0],A
and F,-5
rrc [__r0]
rrc [__r1]
and F,-5
rrc [__r0]
rrc [__r1]
mov A,[X+14]
sub A,[__r1]
mov [__r3],A
mov A,[X+13]
sbb A,[__r0]
mov [__r2],A
mov A,[X+1]
cmp A,[__r2]
jnz X16
mov A,[X+2]
cmp A,[__r3]
jz L44
X16:
jc L44
X15:
mov A,[X+14]
add A,[__r1]
mov [__r1],A
mov A,[X+13]
adc A,[__r0]
mov [__r0],A
mov A,[X+1]
cmp A,[__r0]
jnz X18
mov A,[X+2]
cmp A,[__r1]
jz L44
X18:
jnc L44
X17:
.dbline 148
; state = RUNNING;
mov [_state],2
.dbline 149
; }
.dbline 150
; break;
xjmp L44
L57:
.dbline 152
mov A,[X+0]
mov [__r1],A
mov [__r0],0
asl [__r1]
rlc [__r0]
mov [__r3],X
add [__r3],3
mov A,[__r1]
add A,[__r3]
mov [__r3],A
mov A,[__r0]
adc A,[__r2]
add [__r1],<_pulse_buffer
adc [__r0],>_pulse_buffer
mvi A,[__r1]
mov [__r0],A
mvi A,[__r1]
mov [__r1],A
mov A,[__r0]
mvi [__r3],A
mov A,[__r1]
mvi [__r3],A
L58:
.dbline 152
; case RUNNING:
; while(i--) med_buffer[i] = pulse_buffer[i];
mov A,[X+0]
mov [__r1],A
mov [__r0],0
sub A,1
mov [__r3],A
mov A,0
sbb A,0
mov A,[__r3]
mov [X+0],A
cmp [__r0],0
jnz L57
cmp [__r1],0
jnz L57
X19:
.dbline 153
; median_filter(med_buffer, MEDIAN_FILTER2_LENGHT);
mov A,5
push A
mov [__r1],X
add [__r1],3
mov A,[__r0]
push A
mov A,[__r1]
push A
xcall _median_filter
add SP,-3
.dbline 154
; aver = med_buffer[MEDIAN_FILTER2_LENGHT >> 1];
mov A,[X+8]
mov [X+14],A
mov A,[X+7]
mov [X+13],A
.dbline 156
;
; if ((instant_pulse > (aver -(aver >> 2))) && (instant_pulse < (aver + (aver >> 2)))) pulses++;
mov A,[X+14]
mov [__r1],A
mov A,[X+13]
mov [__r0],A
and F,-5
rrc [__r0]
rrc [__r1]
and F,-5
rrc [__r0]
rrc [__r1]
mov A,[X+14]
sub A,[__r1]
mov [__r3],A
mov A,[X+13]
sbb A,[__r0]
mov [__r2],A
mov A,[X+1]
cmp A,[__r2]
jnz X21
mov A,[X+2]
cmp A,[__r3]
jz L61
X21:
jc L61
X20:
mov A,[X+14]
add A,[__r1]
mov [__r1],A
mov A,[X+13]
adc A,[__r0]
mov [__r0],A
mov A,[X+1]
cmp A,[__r0]
jnz X23
mov A,[X+2]
cmp A,[__r1]
jz L61
X23:
jnc L61
X22:
.dbline 156
inc [L40+1]
adc [L40],0
L61:
.dbline 158
;
; total_intervals += instant_pulse;
mov A,[X+2]
add [L39+1],A
mov A,[X+1]
adc [L39],A
.dbline 159
; if (total_intervals > PULSE_TIME_INTERVAL)
mov [__r3],[L39+1]
mov [__r2],[L39]
mov A,0
xor A,-128
mov [__rY],A
mov A,0
xor A,-128
mov [__rZ],A
mov [__rX],0
mov A,[__r3]
sub A,-72
or [__rX],A
mov A,[__r2]
sbb A,11
or [__rX],A
mov A,0
sbb A,0
or [__rX],A
mov A,[__rY]
sbb A,[__rZ]
or [__rX],A
jc L44
mov A,[__rX]
jz L44
X24:
.dbline 160
; {
.dbline 161
; state = RESET;
mov [_state],0
.dbline 162
; return (PULSE_SCALE_FACTOR*pulses*PULSE_TIME_INTERVAL)/(long)total_intervals;
mov [__r3],[L40+1]
mov [__r2],[L40]
mov [__r1],0
mov [__r0],0
asl [__r3]
rlc [__r2]
rlc [__r1]
rlc [__r0]
mov A,[__r0]
push A
mov A,[__r1]
push A
mov A,[__r2]
push A
mov A,[__r3]
push A
mov A,0
push A
push A
mov A,11
push A
mov A,-72
push A
xcall __mul_32X32_32
add SP,-4
pop A
mov [__r3],A
pop A
mov [__r2],A
pop A
mov [__r1],A
pop A
mov [__r0],A
mov [__r7],[L39+1]
mov [__r6],[L39]
mov A,0
push A
push A
mov A,[__r6]
push A
mov A,[__r7]
push A
mov A,[__r0]
push A
mov A,[__r1]
push A
mov A,[__r2]
push A
mov A,[__r3]
push A
xcall __divmod_32X32_32
pop A
mov [__r3],A
pop A
mov [__r2],A
pop A
pop A
add SP,-4
mov [__r1],[__r3]
mov [__r0],[__r2]
xjmp L38
X9:
.dbline 164
; }
; break;
L43:
.dbline 167
;
; default:
; state = RESET;
mov [_state],0
.dbline 168
; break;
L44:
.dbline 171
; }
;
; pulse_buffer[index++] = instant_pulse;
mov [__r1],[_index]
mov [__r0],0
mov A,[__r1]
add A,1
mov [__r3],A
mov A,0
adc A,0
mov [_index],[__r3]
asl [__r1]
rlc [__r0]
add [__r1],<_pulse_buffer
adc [__r0],>_pulse_buffer
mov A,[X+1]
mvi [__r1],A
mov A,[X+2]
mvi [__r1],A
.dbline 172
; if (index == MEDIAN_FILTER2_LENGHT) index = 0;
cmp [_index],5
jnz L42
.dbline 172
mov [_index],0
.dbline 173
; }
xjmp L42
L41:
.dbline 175
; else
; if (!CHECKTIMER())
cmp [_timer_pulse],0
jnz L67
.dbline 176
; {
.dbline 177
; state = RESET;
mov [_state],0
.dbline 178
; return PULSE_CALC_ERROR;
mov [__r1],-1
mov [__r0],-1
xjmp L38
L67:
L42:
.dbline 181
; }
;
; return PULSE_IN_PROGRESS;
mov [__r1],0
mov [__r0],0
.dbline -2
L38:
add SP,-17
pop X
.dbline 0 ; func end
ret
.dbsym l aver 13 i
.dbsym l med_buffer 3 A[10:5]i
.dbsym l instant_pulse 1 I
.dbsym l i 0 c
.dbend
.area bss(ram, con, rel)
.dbfile ./dataproc.c
_pulse_buffer:
.blkb 26
.dbsym s pulse_buffer _pulse_buffer A[26:13]i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -