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

📄 alarmprocess.s

📁 LED显示面板
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module alarmprocess.c
	.area text(rom, con, rel)
	.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\CAN网可配置型报警灯板程序\alarmprocess.c
	.dbfunc e current_jisuan _current_jisuan fi
;             tt -> R10,R11
;             k1 -> y+12
;           temp -> y+8
;         result -> y+4
;             k0 -> y+0
;        current -> R12,R13
;       fullscal -> R10,R11
	.even
_current_jisuan::
	xcall push_gset4
	movw R12,R18
	movw R10,R16
	sbiw R28,16
	.dbline -1
	.dbline 7
; #include "main.h"
; 
; extern VCI_CAN_OBJ rece_data[50];
; extern SHD_LED  pannel_led[48];
; 
; unsigned int current_jisuan(unsigned fullscal,unsigned int current)
; {
	.dbline 10
;  float result,temp,k0,k1;
;  unsigned int tt;
;  CLI();
	cli
	.dbline 11
;  WDR();
	wdr
	.dbline 13
;  
;  temp = (float)(current/100.0);               //电流测量值计算
	ldi R16,<L3
	ldi R17,>L3
	xcall lpm32
	movw R2,R16
	movw R4,R18
	movw R16,R12
	lsr R17
	ror R16
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpmule2
	movw R2,R16
	movw R4,R18
	movw R16,R12
	andi R16,1
	andi R17,0
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpadd2
	movw R2,R16
	movw R4,R18
	ldi R16,<L4
	ldi R17,>L4
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpdiv2
	std y+8,R16
	std y+9,R17
	std y+10,R18
	std y+11,R19
	.dbline 15
;  
;  k1 = fullscal;
	ldi R16,<L3
	ldi R17,>L3
	xcall lpm32
	movw R2,R16
	movw R4,R18
	movw R16,R10
	lsr R17
	ror R16
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpmule2
	movw R2,R16
	movw R4,R18
	movw R16,R10
	andi R16,1
	andi R17,0
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpadd2
	std y+12,R16
	std y+13,R17
	std y+14,R18
	std y+15,R19
	.dbline 17
;  
;  k0 = k1/16.0;                               //斜率计算
	ldd R2,y+12
	ldd R3,y+13
	ldd R4,y+14
	ldd R5,y+15
	ldi R16,<L5
	ldi R17,>L5
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpdiv2
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 19
;  
;  result = k0*temp -4*k0;                     //显示值计算
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,8
	st -y,R25
	st -y,R24
	xcall fpmule1
	movw R2,R16
	movw R4,R18
	ldi R16,<L6
	ldi R17,>L6
	xcall lpm32
	movw R24,R28
	st -y,R25
	st -y,R24
	xcall fpmule1x
	movw R16,R2
	movw R18,R4
	xcall fpsub2
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	.dbline 21
; 
;  tt = (unsigned int )(result); 
	ldd R2,y+4
	ldd R3,y+5
	ldd R4,y+6
	ldd R5,y+7
	ldi R16,<L9
	ldi R17,>L9
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpcmp2
	brlt L7
	ldd R2,y+4
	ldd R3,y+5
	ldd R4,y+6
	ldd R5,y+7
	ldi R16,<L9
	ldi R17,>L9
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpsub2
	xcall fpint
	movw R24,R16
	subi R24,0  ; offset = 32768
	sbci R25,128
	movw R12,R24
	xjmp L8
L7:
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	xcall fpint
	movw R12,R16
L8:
	movw R10,R12
	.dbline 23
;  
;  SEI();
	sei
	.dbline 24
;  WDR();
	wdr
	.dbline 26
;  
;  return tt;
	movw R16,R10
	.dbline -2
L2:
	adiw R28,16
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r tt 10 i
	.dbsym l k1 12 D
	.dbsym l temp 8 D
	.dbsym l result 4 D
	.dbsym l k0 0 D
	.dbsym r current 12 i
	.dbsym r fullscal 10 i
	.dbend
	.dbfunc e alarm_out _alarm_out fV
;              i -> R20
	.even
_alarm_out::
	xcall push_gset1
	.dbline -1
	.dbline 30
; }
; 
; void alarm_out(void)                          //报警输出
; {
	.dbline 33
;   unsigned char i;
;   
;   for(i=0;i<48;i++)
	clr R20
	xjmp L14
L11:
	.dbline 34
;   {
	.dbline 35
;   WDR();
	wdr
	.dbline 36
;      if(pannel_led[i].state!=normal)
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+13
	ldi R25,>_pannel_led+13
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	breq L15
	.dbline 37
;     {
	.dbline 38
;        if(pannel_led[i].soundoff!=acked)
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,2
	breq L18
	.dbline 39
; 	   {
	.dbline 40
; 	     pannel_led[i].soundoff = noack;
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 41
; 	   }
	xjmp L16
L18:
	.dbline 44
;        
; 	   else
; 	   {
	.dbline 45
; 	   pannel_led[i].soundoff = acked;
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	add R30,R24
	adc R31,R25
	ldi R24,2
	std z+0,R24
	.dbline 46
; 	   }
	.dbline 47
;     }
	xjmp L16
L15:
	.dbline 50
;  
;     else
; 	   {
	.dbline 51
; 	   pannel_led[i].soundoff = normal;
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 52
; 	   buzzer_off();
	xcall _buzzer_off
	.dbline 53
; 	   relay1_off(); 
	xcall _relay1_off
	.dbline 54
; 	   }
L16:
	.dbline 55
L12:
	.dbline 33
	inc R20
L14:
	.dbline 33
	cpi R20,48
	brsh X0
	xjmp L11
X0:
	.dbline 57
;    }
;      
; 	 if(pannel_led[i].soundoff==acked)
	ldi R24,20
	mul R24,R20
	movw R30,R0
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,2
	brne L24
	.dbline 58
; 	 {
	.dbline 59
; 	   buzzer_off();
	xcall _buzzer_off
	.dbline 60
; 	   relay1_off(); 
	xcall _relay1_off
	.dbline 61
; 	 }
L24:
	.dbline 63
	ldi R24,20
	mul R24,R20
	ldi R24,<_pannel_led+17
	ldi R25,>_pannel_led+17
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,1
	brne L27
	ldi R24,<_pannel_led+16
	ldi R25,>_pannel_led+16
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,165
	brne L27
	.dbline 64
	.dbline 65
	xcall _buzzer_on
	.dbline 66
	xcall _relay1_on
	.dbline 67
L27:
	.dbline -2
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e channel_process _channel_process fV
;          temp2 -> R20,R21
;          temp1 -> R22,R23
;              i -> R10
	.even
_channel_process::
	xcall push_gset3
	.dbline -1
	.dbline 72
;   
; 	 if((pannel_led[i].soundoff==noack)&&(pannel_led[i].cut_off==off))
; 	 {
; 	   buzzer_on();
; 	   relay1_on(); 
; 	 }
; }
; 
; 
; void channel_process(void)
; {
	.dbline 75
;  unsigned char i;
;  unsigned int temp1,temp2;
;  for(i=0;i<48;i++)
	clr R10
	xjmp L35
L32:
	.dbline 76
; {
	.dbline 77
;  WDR();
	wdr
	.dbline 78
;  if(pannel_led[i].sen_typed==ma)
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led
	ldi R25,>_pannel_led
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	breq X2
	xjmp L36
X2:
	.dbline 79
;  {WDR();
	.dbline 79
	wdr
	.dbline 80
;  temp1 = rece_data[pannel_led[i].ID].Data[2*pannel_led[i].channel];                      //高位
	ldi R24,20
	mul R24,R10
	movw R2,R0
	ldi R24,<_pannel_led+1
	ldi R25,>_pannel_led+1
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldi R24,12
	mul R24,R4
	movw R4,R0
	ldi R24,<_rece_data+4
	ldi R25,>_rece_data+4
	add R4,R24
	adc R5,R25
	ldi R24,<_pannel_led+2
	ldi R25,>_pannel_led+2
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,2
	mul R24,R2
	movw R30,R0
	add R30,R4
	adc R31,R5
	ldd R22,z+0
	clr R23
	.dbline 81
;  temp2 = rece_data[pannel_led[i].ID].Data[2*pannel_led[i].channel+1];                    //低位
	ldi R24,20
	mul R24,R10
	movw R2,R0
	ldi R24,<_pannel_led+1
	ldi R25,>_pannel_led+1
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldi R24,12
	mul R24,R4
	movw R4,R0
	ldi R24,<_rece_data+4
	ldi R25,>_rece_data+4
	add R4,R24
	adc R5,R25
	ldi R24,<_pannel_led+2
	ldi R25,>_pannel_led+2
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,2
	mul R24,R2
	movw R30,R0
	adiw R30,1
	add R30,R4
	adc R31,R5
	ldd R20,z+0
	clr R21
	.dbline 82
;  temp1 = temp1*256;
	ldi R16,256
	ldi R17,1
	movw R18,R22
	xcall empy16s
	movw R22,R16
	.dbline 83
;  temp1 = temp1+temp2;
	add R22,R20
	adc R23,R21
	.dbline 84
;  pannel_led[i].data = temp1;
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+11
	ldi R25,>_pannel_led+11
	add R30,R24
	adc R31,R25
	std z+1,R23
	std z+0,R22
	.dbline 85
;  if(pannel_led[i].data<400)
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+11
	ldi R25,>_pannel_led+11
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	ldd R25,z+1
	cpi R24,144
	ldi R30,1
	cpc R25,R30
	brsh L45
	.dbline 86
;  {
	.dbline 87
;  pannel_led[i].current_state = fault;                                                    //传感器故障
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	ldi R24,3
	std z+0,R24
	.dbline 88
;  }
	xjmp L37
L45:
	.dbline 91
;  
;  else
;  {
	.dbline 92
;  pannel_led[i].displaydata=current_jisuan(pannel_led[i].fullscal,pannel_led[i].data);   //显示值计算
	ldi R24,20
	mul R24,R10
	movw R2,R0
	ldi R24,<_pannel_led+11
	ldi R25,>_pannel_led+11
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	ldd R19,z+1
	ldi R24,<_pannel_led+8
	ldi R25,>_pannel_led+8
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldd R17,z+1
	push R0
	push R1
	xcall _current_jisuan
	pop R3
	pop R2
	ldi R24,<_pannel_led+18
	ldi R25,>_pannel_led+18
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+1,R17
	std z+0,R16
	.dbline 94
;    
;    if(pannel_led[i].alarm_type==above)                                //上限报警处理
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+3
	ldi R25,>_pannel_led+3
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,90
	breq X3
	xjmp L52
X3:
	.dbline 95
;      {
	.dbline 96
; 	   if(pannel_led[i].displaydata>pannel_led[i].limit+pannel_led[i].zone)
	ldi R24,20
	mul R24,R10
	ldi R24,<_pannel_led+6
	ldi R25,>_pannel_led+6
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_pannel_led+4
	ldi R25,>_pannel_led+4
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	add R4,R2
	adc R5,R3
	ldi R24,<_pannel_led+18
	ldi R25,>_pannel_led+18
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	cp R4,R2
	cpc R5,R3
	brsh L55
	.dbline 97
; 	    {
	.dbline 98
; 		 if(pannel_led[i].state!=acked)                            //未应答
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+13
	ldi R25,>_pannel_led+13
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,2
	breq L60
	.dbline 99
; 		    {
	.dbline 100
; 		     pannel_led[i].current_state = noack;
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 101
; 		     }
	xjmp L37
L60:
	.dbline 103
; 		 else
; 		    {
	.dbline 104
; 		     pannel_led[i].current_state = acked;                          //已应答
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	ldi R24,2
	std z+0,R24
	.dbline 105
; 		        }
	.dbline 106
; 		 }
	xjmp L37
L55:
	.dbline 108
; 		 
; 		 else if(pannel_led[i].displaydata<pannel_led[i].limit-pannel_led[i].zone)
	ldi R24,20
	mul R24,R10
	ldi R24,<_pannel_led+6
	ldi R25,>_pannel_led+6
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_pannel_led+4
	ldi R25,>_pannel_led+4
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	sub R4,R2
	sbc R5,R3
	ldi R24,<_pannel_led+18
	ldi R25,>_pannel_led+18
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	cp R2,R4
	cpc R3,R5
	brlo X4
	xjmp L37
X4:
	.dbline 109
; 		      {
	.dbline 110
; 			   pannel_led[i].current_state = normal;                      //正常
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 111
; 			  }
	.dbline 113
; 	 
;       }
	xjmp L37
L52:
	.dbline 115
;    else                                                          //下限报警
;    {
	.dbline 116
;       if(pannel_led[i].displaydata<pannel_led[i].limit-pannel_led[i].zone)
	ldi R24,20
	mul R24,R10
	ldi R24,<_pannel_led+6
	ldi R25,>_pannel_led+6
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_pannel_led+4
	ldi R25,>_pannel_led+4
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	sub R4,R2
	sbc R5,R3
	ldi R24,<_pannel_led+18
	ldi R25,>_pannel_led+18
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	cp R2,R4
	cpc R3,R5
	brsh L71
	.dbline 117
; 	    {
	.dbline 118
; 		 if(pannel_led[i].state!=acked)                      
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+13
	ldi R25,>_pannel_led+13
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,2
	breq L76
	.dbline 119
; 		    {
	.dbline 120
; 		     pannel_led[i].current_state = noack;                       //未应答
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 121
; 		     }
	xjmp L37
L76:
	.dbline 123
; 		 else
; 		    {
	.dbline 124
; 		     pannel_led[i].current_state = acked;                      //已应答
	ldi R24,20
	mul R24,R10
	movw R30,R0
	ldi R24,<_pannel_led+14
	ldi R25,>_pannel_led+14
	add R30,R24
	adc R31,R25
	ldi R24,2
	std z+0,R24
	.dbline 125
; 		        }
	.dbline 126
; 		 }
	xjmp L37
L71:
	.dbline 128
; 		 
; 		 else if(pannel_led[i].displaydata>pannel_led[i].limit+pannel_led[i].zone)
	ldi R24,20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -