📄 dataproc.s
字号:
.module dataproc.c
.area data(ram, con, rel)
_timer_pulse:
.blkb 1
.area idata
.byte 190
.area data(ram, con, rel)
.dbfile ./dataproc.c
.dbsym s timer_pulse _timer_pulse X
_timer_update:
.blkb 1
.area idata
.byte 16
.area data(ram, con, rel)
.dbfile ./dataproc.c
.dbsym s timer_update _timer_update X
_state:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile ./dataproc.c
.dbsym s state _state c
_index:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile ./dataproc.c
.dbsym s index _index c
.area text(rom, con, rel)
.dbfile ./dataproc.c
.dbfunc e SleepTimer_handler _SleepTimer_handler fV
_SleepTimer_handler::
.dbline -1
.dbline 41
; #include "PSoCApi.h"
; #include <m8c.h>
; #include "globdefs.h"
; #include "utils.h"
; #include "sigproc.h"
;
;
;
;
; #define TIMER_PULSE_INIT_VALUE 190
; static volatile BYTE timer_pulse = TIMER_PULSE_INIT_VALUE;
;
; #define INITTIMER() {timer_pulse = TIMER_PULSE_INIT_VALUE;}
; #define CHECKTIMER()(timer_pulse)
;
; #define TIMER_UPDATE_INIT_VALUE 16
; static volatile BYTE timer_update = TIMER_UPDATE_INIT_VALUE;
;
;
; static BYTE state = RESET;
; static BYTE index = 0;
;
; #define MEDIAN_FILTER1_LENGHT 13
; #define MEDIAN1 (MEDIAN_FILTER1_LENGHT >> 1)
;
; #define MEDIAN_FILTER2_LENGHT 5
; #define MEDIAN2 ((MEDIAN_FILTER2_LENGHT >> 1))
;
; #if (MEDIAN_FILTER1_LENGHT > MEDIAN_FILTER2_LENGHT)
; static PULSE_INTERVAL_TYPE pulse_buffer[MEDIAN_FILTER1_LENGHT];
; #else
; static PULSE_INTERVAL_TYPE pulse_buffer[MEDIAN_FILTER2_LENGHT];
; #endif
;
; #if ((MEDIAN_FILTER1_LENGHT < 3) || (MEDIAN_FILTER2_LENGHT < 3))
; #error "please set correct lenght for filters"
; #endif
;
; #pragma interrupt_handler SleepTimer_handler;
; void SleepTimer_handler(void)
; {
.dbline 42
cmp [_timer_pulse],-66
jnz L3
.dbline 42
or REG[4],8
xjmp L4
L3:
.dbline 42
; if (TIMER_PULSE_INIT_VALUE == timer_pulse) SETBIT(LED_PORT, LED_BIT); else CLEARBIT(LED_PORT, LED_BIT);
and REG[4],-9
L4:
.dbline 43
; if (timer_pulse) timer_pulse--;
cmp [_timer_pulse],0
jz L5
.dbline 43
dec [_timer_pulse]
L5:
.dbline 45
cmp [_timer_update],0
jz L7
.dbline 45
dec [_timer_update]
L7:
.dbline -2
.dbline 46
;
; if (timer_update) timer_update--;
; }
L2:
.dbline 0 ; func end
reti
.dbend
.dbfunc e Check_Update_Timeout _Check_Update_Timeout fc
; temp -> X+0
_Check_Update_Timeout::
.dbline -1
push X
mov X,SP
add SP,1
.dbline 49
;
; BYTE Check_Update_Timeout(void)
; {
.dbline 50
; BYTE temp = 0;
mov [X+0],0
.dbline 52
;
; M8C_DisableGInt;
and F, FEh
.dbline 53
; if (!timer_update)
cmp [_timer_update],0
jnz L10
.dbline 54
; {
.dbline 55
; timer_update = TIMER_UPDATE_INIT_VALUE;
mov [_timer_update],16
.dbline 56
; temp = TRUE;
mov [X+0],1
.dbline 57
; }
L10:
.dbline 58
; M8C_EnableGInt;
or F, 01h
.dbline 60
;
; return temp;
mov A,[X+0]
.dbline -2
L9:
add SP,-1
pop X
.dbline 0 ; func end
ret
.dbsym l temp 0 c
.dbend
.dbfunc e median_filter _median_filter fV
; changed -> X+3
; temp -> X+1
; i -> X+0
; len -> X-6
; buffer -> X-5
_median_filter::
.dbline -1
push X
mov X,SP
add SP,4
.dbline 64
; }
;
; void median_filter(PULSE_INTERVAL_TYPE *buffer, BYTE len)
; {
L13:
.dbline 68
; PULSE_INTERVAL_TYPE temp;
; BYTE i, changed;
;
; do {
.dbline 69
; changed = 0;
mov [X+3],0
.dbline 70
; for (i = 0; i < (len-1); i++)
mov [X+0],0
xjmp L19
L16:
.dbline 71
; if (buffer[i] > buffer[i+1])
mov A,[X+0]
mov [__r1],A
mov [__r0],0
asl [__r1]
rlc [__r0]
mov A,[X-4]
add [__r1],A
mov A,[X-5]
adc [__r0],A
mvi A,[__r1]
mov [__r0],A
mvi A,[__r1]
mov [__r1],A
mov A,[X+0]
mov [__r3],A
mov [__r2],0
add [__r3],1
adc [__r2],0
asl [__r3]
rlc [__r2]
mov A,[X-4]
add [__r3],A
mov A,[X-5]
adc [__r2],A
mvi A,[__r3]
mov [__r2],A
mvi A,[__r3]
mov [__r3],A
mov A,[__r0]
cmp A,[__r2]
jnz X1
mov A,[__r1]
cmp A,[__r3]
jz L20
X1:
jc L20
X0:
.dbline 72
; {
.dbline 73
; changed = 1;
mov [X+3],1
.dbline 75
;
; temp = buffer[i];
mov A,[X+0]
mov [__r1],A
mov [__r0],0
asl [__r1]
rlc [__r0]
mov A,[X-4]
add [__r1],A
mov A,[X-5]
adc [__r0],A
mvi A,[__r1]
mov [X+1],A
mvi A,[__r1]
mov [X+2],A
.dbline 76
; buffer[i] = buffer[i+1];
mov A,[X+0]
mov [__r1],A
mov [__r0],0
asl [__r1]
rlc [__r0]
mov A,[X-4]
add [__r1],A
mov A,[X-5]
adc [__r0],A
mov A,[X+0]
mov [__r3],A
mov [__r2],0
add [__r3],1
adc [__r2],0
asl [__r3]
rlc [__r2]
mov A,[X-4]
add [__r3],A
mov A,[X-5]
adc [__r2],A
mvi A,[__r3]
mov [__r2],A
mvi A,[__r3]
mov [__r3],A
mov A,[__r2]
mvi [__r1],A
mov A,[__r3]
mvi [__r1],A
.dbline 77
; buffer[i+1] = temp;
mov A,[X+0]
mov [__r1],A
mov [__r0],0
add [__r1],1
adc [__r0],0
asl [__r1]
rlc [__r0]
mov A,[X-4]
add [__r1],A
mov A,[X-5]
adc [__r0],A
mov A,[X+1]
mvi [__r1],A
mov A,[X+2]
mvi [__r1],A
.dbline 78
; }
L20:
L17:
.dbline 70
inc [X+0]
L19:
.dbline 70
mov A,[X-6]
sub A,1
mov [__r0],A
mov A,[X+0]
cmp A,[__r0]
jz X2
jc L16
X2:
.dbline 79
L14:
.dbline 79
; } while (changed);
cmp [X+3],0
jnz L13
.dbline -2
.dbline 80
; }
L12:
add SP,-4
pop X
.dbline 0 ; func end
ret
.dbsym l changed 3 c
.dbsym l temp 1 i
.dbsym l i 0 c
.dbsym l len 0 I
.dbsym l len -6 c
.dbsym l buffer -5 pi
.dbend
.dbfunc e Pulse_Instant_Calculate _Pulse_Instant_Calculate fI
; instant_pulse -> X+0
_Pulse_Instant_Calculate::
.dbline -1
push X
mov X,SP
add SP,2
.dbline 83
;
; INT Pulse_Instant_Calculate(void)
; {
.dbline 84
; INT instant_pulse = GetPulseDelta();
xcall _GetPulseDelta
mov A,[__r1]
mov [X+1],A
mov A,[__r0]
mov [X+0],A
.dbline 86
;
; if (instant_pulse)
cmp [X+0],0
jnz X3
cmp [X+1],0
jz L23
X3:
.dbline 87
; {
.dbline 88
; INITTIMER();
.dbline 88
mov [_timer_pulse],-66
.dbline 88
.dbline 88
.dbline 89
; 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+0]
mvi [__r1],A
mov A,[X+1]
mvi [__r1],A
.dbline 91
;
; if (MEDIAN_FILTER1_LENGHT == index)
cmp [_index],13
jnz L25
.dbline 92
; {
.dbline 93
; index = 0;
mov [_index],0
.dbline 94
; median_filter(pulse_buffer, MEDIAN_FILTER1_LENGHT);
mov A,13
push A
mov A,>_pulse_buffer
push A
mov A,<_pulse_buffer
push A
xcall _median_filter
add SP,-3
.dbline 96
;
; instant_pulse = pulse_buffer[MEDIAN1 + 1] - pulse_buffer[MEDIAN1 - 1];
mov A,[_pulse_buffer+14+1]
sub A,[_pulse_buffer+10+1]
mov [__r1],A
mov A,[_pulse_buffer+14]
sbb A,[_pulse_buffer+10]
mov [__r0],A
mov A,[__r1]
mov [X+1],A
mov A,[__r0]
mov [X+0],A
.dbline 97
; instant_pulse <<= 3;
asl [X+1]
rlc [X+0]
asl [X+1]
rlc [X+0]
asl [X+1]
rlc [X+0]
.dbline 98
; if (instant_pulse > pulse_buffer[MEDIAN1]) return PULSE_CALC_ERROR;
mov A,[X+0]
cmp A,[_pulse_buffer+12]
jnz X5
mov A,[X+1]
cmp A,[_pulse_buffer+12+1]
jz L29
X5:
jc L29
X4:
.dbline 98
mov [__r1],-1
mov [__r0],-1
xjmp L22
L29:
.dbline 100
;
; instant_pulse = pulse_buffer[MEDIAN1] + pulse_buffer[MEDIAN1-1] + pulse_buffer[MEDIAN1+1];
mov A,[_pulse_buffer+12+1]
add A,[_pulse_buffer+10+1]
mov [__r1],A
mov A,[_pulse_buffer+12]
adc A,[_pulse_buffer+10]
mov [__r0],A
mov A,[_pulse_buffer+14+1]
add [__r1],A
mov A,[_pulse_buffer+14]
adc [__r0],A
mov A,[__r1]
mov [X+1],A
mov A,[__r0]
mov [X+0],A
.dbline 101
; return (LONG)(3*60*PULSE_ADC_SAMPLE_FREQ)/instant_pulse;
mov A,[X+1]
mov [__r3],A
mov A,[X+0]
mov [__r2],A
tst [__r2],-128
jz X6
mov [__r1],-1
mov [__r0],-1
jmp X7
X6:
mov [__r1],0
mov [__r0],0
X7:
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,70
push A
mov A,80
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 L22
L25:
.dbline 103
; }
; return PULSE_IN_PROGRESS;
mov [__r1],0
mov [__r0],0
xjmp L22
L23:
.dbline 106
; }
; else
; if (CHECKTIMER()) return PULSE_IN_PROGRESS; else
cmp [_timer_pulse],0
jz L35
.dbline 106
mov [__r1],0
mov [__r0],0
xjmp L22
L35:
.dbline 107
; {
.dbline 108
; index = 0;
mov [_index],0
.dbline 109
; return PULSE_CALC_ERROR;
mov [__r1],-1
mov [__r0],-1
.dbline -2
L22:
add SP,-2
pop X
.dbline 0 ; func end
ret
.dbsym l instant_pulse 0 I
.dbend
.dbfunc e Pulse_Init_Calculate _Pulse_Init_Calculate fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -