⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataproc.s

📁 测量脉搏的源码 Cypress公司使用 CY27443 完成相关的功能
💻 S
📖 第 1 页 / 共 2 页
字号:
_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 + -