📄 dataproc.lis
字号:
013B X3:
013B .dbline 87
013B ; {
013B .dbline 88
013B ; INITTIMER();
013B .dbline 88
013B 5500BE mov [_timer_pulse],-66
013E .dbline 88
013E .dbline 88
013E .dbline 89
013E ; pulse_buffer[index++] = instant_pulse;
013E 5F0003 mov [__r1],[_index]
0141 550000 mov [__r0],0
0144 5100 mov A,[__r1]
0146 0101 add A,1
0148 5300 mov [__r3],A
014A 5000 mov A,0
014C 0900 adc A,0
014E 5F0300 mov [_index],[__r3]
0151 6500 asl [__r1]
0153 6B00 rlc [__r0]
0155 060000 add [__r1],<_pulse_buffer
0158 0E0000 adc [__r0],>_pulse_buffer
015B 5200 mov A,[X+0]
015D 3F00 mvi [__r1],A
015F 5201 mov A,[X+1]
0161 3F00 mvi [__r1],A
0163 .dbline 91
0163 ;
0163 ; if (MEDIAN_FILTER1_LENGHT == index)
0163 3C030D cmp [_index],13
0166 B0A9 jnz L25
0168 .dbline 92
0168 ; {
0168 .dbline 93
0168 ; index = 0;
0168 550300 mov [_index],0
016B .dbline 94
016B ; median_filter(pulse_buffer, MEDIAN_FILTER1_LENGHT);
016B 500D mov A,13
016D 08 push A
016E 5000 mov A,>_pulse_buffer
0170 08 push A
0171 5000 mov A,<_pulse_buffer
0173 08 push A
0174 9EC2 xcall _median_filter
0176 38FD add SP,-3
0178 .dbline 96
0178 ;
0178 ; instant_pulse = pulse_buffer[MEDIAN1 + 1] - pulse_buffer[MEDIAN1 - 1];
0178 510F mov A,[_pulse_buffer+14+1]
017A 120B sub A,[_pulse_buffer+10+1]
017C 5300 mov [__r1],A
017E 510E mov A,[_pulse_buffer+14]
0180 1A0A sbb A,[_pulse_buffer+10]
0182 5300 mov [__r0],A
0184 5100 mov A,[__r1]
0186 5401 mov [X+1],A
0188 5100 mov A,[__r0]
018A 5400 mov [X+0],A
018C .dbline 97
018C ; instant_pulse <<= 3;
018C 6601 asl [X+1]
018E 6C00 rlc [X+0]
0190 6601 asl [X+1]
0192 6C00 rlc [X+0]
0194 6601 asl [X+1]
0196 6C00 rlc [X+0]
0198 .dbline 98
0198 ; if (instant_pulse > pulse_buffer[MEDIAN1]) return PULSE_CALC_ERROR;
0198 5200 mov A,[X+0]
019A 3A0C cmp A,[_pulse_buffer+12]
019C B007 jnz X5
019E 5201 mov A,[X+1]
01A0 3A0D cmp A,[_pulse_buffer+12+1]
01A2 A00B jz L29
01A4 X5:
01A4 C009 jc L29
01A6 X4:
01A6 .dbline 98
01A6 5500FF mov [__r1],-1
01A9 5500FF mov [__r0],-1
01AC 8081 xjmp L22
01AE L29:
01AE .dbline 100
01AE ;
01AE ; instant_pulse = pulse_buffer[MEDIAN1] + pulse_buffer[MEDIAN1-1] + pulse_buffer[MEDIAN1+1];
01AE 510D mov A,[_pulse_buffer+12+1]
01B0 020B add A,[_pulse_buffer+10+1]
01B2 5300 mov [__r1],A
01B4 510C mov A,[_pulse_buffer+12]
01B6 0A0A adc A,[_pulse_buffer+10]
01B8 5300 mov [__r0],A
01BA 510F mov A,[_pulse_buffer+14+1]
01BC 0400 add [__r1],A
01BE 510E mov A,[_pulse_buffer+14]
01C0 0C00 adc [__r0],A
01C2 5100 mov A,[__r1]
01C4 5401 mov [X+1],A
01C6 5100 mov A,[__r0]
01C8 5400 mov [X+0],A
01CA .dbline 101
01CA ; return (LONG)(3*60*PULSE_ADC_SAMPLE_FREQ)/instant_pulse;
01CA 5201 mov A,[X+1]
01CC 5300 mov [__r3],A
01CE 5200 mov A,[X+0]
01D0 5300 mov [__r2],A
01D2 470080 tst [__r2],-128
01D5 A009 jz X6
01D7 5500FF mov [__r1],-1
01DA 5500FF mov [__r0],-1
01DD 8007 jmp X7
01DF X6:
01DF 550000 mov [__r1],0
01E2 550000 mov [__r0],0
01E5 X7:
01E5 5100 mov A,[__r0]
01E7 08 push A
01E8 5100 mov A,[__r1]
01EA 08 push A
01EB 5100 mov A,[__r2]
01ED 08 push A
01EE 5100 mov A,[__r3]
01F0 08 push A
01F1 5000 mov A,0
01F3 08 push A
01F4 08 push A
01F5 5046 mov A,70
01F7 08 push A
01F8 5050 mov A,80
01FA 08 push A
01FB 7C0000 xcall __divmod_32X32_32
01FE 18 pop A
01FF 5300 mov [__r3],A
0201 18 pop A
0202 5300 mov [__r2],A
0204 18 pop A
0205 18 pop A
0206 38FC add SP,-4
0208 5F0000 mov [__r1],[__r3]
020B 5F0000 mov [__r0],[__r2]
020E 801F xjmp L22
0210 L25:
0210 .dbline 103
0210 ; }
0210 ; return PULSE_IN_PROGRESS;
0210 550000 mov [__r1],0
0213 550000 mov [__r0],0
0216 8017 xjmp L22
0218 L23:
0218 .dbline 106
0218 ; }
0218 ; else
0218 ; if (CHECKTIMER()) return PULSE_IN_PROGRESS; else
0218 3C0000 cmp [_timer_pulse],0
021B A009 jz L35
021D .dbline 106
021D 550000 mov [__r1],0
0220 550000 mov [__r0],0
0223 800A xjmp L22
0225 L35:
0225 .dbline 107
0225 ; {
0225 .dbline 108
0225 ; index = 0;
0225 550300 mov [_index],0
0228 .dbline 109
0228 ; return PULSE_CALC_ERROR;
0228 5500FF mov [__r1],-1
022B 5500FF mov [__r0],-1
022E .dbline -2
022E L22:
022E 38FE add SP,-2
0230 20 pop X
0231 .dbline 0 ; func end
0231 7F ret
0232 .dbsym l instant_pulse 0 I
0232 .dbend
0232 .dbfunc e Pulse_Init_Calculate _Pulse_Init_Calculate fV
0232 _Pulse_Init_Calculate::
0232 .dbline -1
0232 .dbline 114
0232 ; }
0232 ; }
0232 ;
0232 ; void Pulse_Init_Calculate(void)
0232 ; {
0232 .dbline 115
0232 ; state = RESET;
0232 550200 mov [_state],0
0235 .dbline 116
0235 ; index = 0;
0235 550300 mov [_index],0
0238 .dbline -2
0238 .dbline 117
0238 ; }
0238 L37:
0238 .dbline 0 ; func end
0238 7F ret
0239 .dbend
.area data(ram, con, rel)
0004 .dbfile ./dataproc.c
0004 L39:
0004 .blkb 2
.area idata
0004 0000 .word 0
.area data(ram, con, rel)
0006 .dbfile ./dataproc.c
0006 L40:
0006 .blkb 2
.area idata
0006 0000 .word 0
.area data(ram, con, rel)
0008 .dbfile ./dataproc.c
.area text(rom, con, rel)
0239 .dbfile ./dataproc.c
0239 .dbfunc e Pulse_Averaged_Calculate _Pulse_Averaged_Calculate fI
0239 .dbsym s pulses L40 i
0239 .dbsym s total_intervals L39 i
0239 ; aver -> X+13
0239 ; med_buffer -> X+3
0239 ; instant_pulse -> X+1
0239 ; i -> X+0
0239 _Pulse_Averaged_Calculate::
0239 .dbline -1
0239 10 push X
023A 4F mov X,SP
023B 3811 add SP,17
023D .dbline 121
023D ;
023D ;
023D ; INT Pulse_Averaged_Calculate(void)
023D ; {
023D .dbline 125
023D ; static WORD total_intervals = 0;
023D ; static WORD pulses = 0;
023D ;
023D ; INT instant_pulse = GetPulseDelta();
023D 7C0000 xcall _GetPulseDelta
0240 5100 mov A,[__r1]
0242 5402 mov [X+2],A
0244 5100 mov A,[__r0]
0246 5401 mov [X+1],A
0248 .dbline 128
0248 ;
0248 ; WORD med_buffer[MEDIAN_FILTER2_LENGHT], aver;
0248 ; BYTE i = MEDIAN_FILTER2_LENGHT;
0248 560005 mov [X+0],5
024B .dbline 130
024B ;
024B ; if (instant_pulse)
024B 3D0100 cmp [X+1],0
024E B006 jnz X10
0250 3D0200 cmp [X+2],0
0253 A290 jz L41
0255 X10:
0255 .dbline 131
0255 ; {
0255 .dbline 132
0255 ; INITTIMER();
0255 .dbline 132
0255 5500BE mov [_timer_pulse],-66
0258 .dbline 132
0258 .dbline 132
0258 .dbline 134
0258 ;
0258 ; switch (state)
0258 5102 mov A,[_state]
025A 5410 mov [X+16],A
025C 560F00 mov [X+15],0
025F 3D0F00 cmp [X+15],0
0262 B006 jnz X11
0264 3D1000 cmp [X+16],0
0267 A017 jz L46
0269 X11:
0269 3D0F00 cmp [X+15],0
026C B006 jnz X12
026E 3D1001 cmp [X+16],1
0271 A027 jz L47
0273 X12:
0273 3D0F00 cmp [X+15],0
0276 B006 jnz X13
0278 3D1002 cmp [X+16],2
027B A108 jz L58
027D X13:
027D 8234 xjmp L43
027F X8:
027F .dbline 135
027F ; {
027F L46:
027F .dbline 137
027F ; case RESET:
027F ; pulses = total_intervals = index = 0;
027F 550300 mov [_index],0
0282 550000 mov [__r1],0
0285 550000 mov [__r0],0
0288 550500 mov [L39+1],0
028B 550400 mov [L39],0
028E 550700 mov [L40+1],0
0291 550600 mov [L40],0
0294 .dbline 138
0294 ; state = INITFILL;
0294 550201 mov [_state],1
0297 .dbline 139
0297 ; break;
0297 821D xjmp L44
0299 L47:
0299 .dbline 141
0299 ; case INITFILL:
0299 ; if ((MEDIAN_FILTER2_LENGHT-1) == index)
0299 3C0304 cmp [_index],4
029C B218 jnz L44
029E .dbline 142
029E ; {
029E 8031 xjmp L51
02A0 L50:
02A0 .dbline 143
02A0 5200 mov A,[X+0]
02A2 5300 mov [__r1],A
02A4 550000 mov [__r0],0
02A7 6500 asl [__r1]
02A9 6B00 rlc [__r0]
02AB 5A00 mov [__r3],X
02AD 060003 add [__r3],3
02B0 5100 mov A,[__r1]
02B2 0200 add A,[__r3]
02B4 5300 mov [__r3],A
02B6 5100 mov A,[__r0]
02B8 0A00 adc A,[__r2]
02BA 060000 add [__r1],<_pulse_buffer
02BD 0E0000 adc [__r0],>_pulse_buffer
02C0 3E00 mvi A,[__r1]
02C2 5300 mov [__r0],A
02C4 3E00 mvi A,[__r1]
02C6 5300 mov [__r1],A
02C8 5100 mov A,[__r0]
02CA 3F00 mvi [__r3],A
02CC 5100 mov A,[__r1]
02CE 3F00 mvi [__r3],A
02D0 L51:
02D0 .dbline 143
02D0 ; while(i--) med_buffer[i] = pulse_buffer[i];
02D0 5200 mov A,[X+0]
02D2 5300 mov [__r1],A
02D4 550000 mov [__r0],0
02D7 1101 sub A,1
02D9 5300 mov [__r3],A
02DB 5000 mov A,0
02DD 1900 sbb A,0
02DF 5100 mov A,[__r3]
02E1 5400 mov [X+0],A
02E3 3C0000 cmp [__r0],0
02E6 BFB9 jnz L50
02E8 3C0000 cmp [__r1],0
02EB BFB4 jnz L50
02ED X14:
02ED .dbline 144
02ED ; median_filter(med_buffer, MEDIAN_FILTER2_LENGHT);
02ED 5005 mov A,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -