?? alarmprocess.s
字號(hào):
.module alarmprocess.c
.area text(rom, con, rel)
.dbfile D:\報(bào)警系統(tǒng)設(shè)計(jì)資料\報(bào)警系統(tǒng)軟件\測(cè)量模塊基于CAN的系統(tǒng)網(wǎng)程序\CAN網(wǎng)可配置型報(bào)警燈板程序\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); //電流測(cè)量值計(jì)算
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; //斜率計(jì)算
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; //顯示值計(jì)算
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) //報(bào)警輸出
; {
.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); //顯示值計(jì)算
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) //上限報(bào)警處理
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) //未應(yīng)答
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; //已應(yīng)答
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 //下限報(bào)警
; {
.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; //未應(yīng)答
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; //已應(yīng)答
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -