📄 full.s
字号:
.module full.c
.area text(rom, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\电流CAN网\full.c
.dbfunc e full_ref _full_ref fV
; Ad_Fu_Data -> y+108
; ta -> R10
; Fu_temp -> y+104
; temp_dd -> R12
; Ad_buf -> y+100
; Ad_Fu -> y+0
; j -> R14
; i -> R10
.even
_full_ref::
xcall push_gset5
sbiw R28,63
sbiw R28,49 ; offset = 112
.dbline -1
.dbline 7
; #include "main.h"
;
; extern unsigned char tempL,tempH;
; extern unsigned int Ad_Fu_Buf[11];
; extern unsigned int Ad_Ze_Buf[11];
; void full_ref(void) //满量程校准函数
; {
.dbline 12
; unsigned char ta,i,j,temp_dd;
; unsigned int Ad_Fu[50];
; float Ad_Fu_Data;
; long Ad_buf,Fu_temp;
; Ad_buf=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
subi R30,156 ; addi 100
sbci R31,255
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 14
;
; spi_write(RD_Id_Reg);
ldi R16,96
xcall _spi_write
.dbline 15
; ta=spi_read();
xcall _spi_read
mov R10,R16
.dbline 17
;
; if((ta&0x0f)!=0x0a)
mov R24,R10
andi R24,15
cpi R24,10
breq L8
.dbline 18
; RESET;
jmp 0x000
xjmp L9
L8:
.dbline 21
;
; else
; {
.dbline 23
;
; spi_write(WR_Con_Reg);
ldi R16,16
xcall _spi_write
.dbline 24
; spi_write(ConHreg_u_mask);
ldi R16,16
xcall _spi_write
.dbline 25
; spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
ldi R16,144
xcall _spi_write
.dbline 27
;
; spi_write(WR_Io_Reg);
ldi R16,40
xcall _spi_write
.dbline 28
; spi_write(0x00);
clr R16
xcall _spi_write
.dbline 30
;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 31
; spi_write(ModHreg_md2_mask);
ldi R16,128
xcall _spi_write
.dbline 32
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
L10:
.dbline 35
L11:
.dbline 34
;
; while(!PINB3)
.dbline 36
; ;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 37
; spi_write(ModHreg_md2_mask|ModHreg_md0_mask);
ldi R16,160
xcall _spi_write
.dbline 38
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
L13:
.dbline 41
L14:
.dbline 40
;
; while(!PINB3)
.dbline 42
; ;
; spi_write(WR_Con_Reg);
ldi R16,16
xcall _spi_write
.dbline 43
; spi_write(ConHreg_u_mask);
ldi R16,16
xcall _spi_write
.dbline 44
; spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
ldi R16,144
xcall _spi_write
.dbline 46
;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 47
; spi_write(0x00);
clr R16
xcall _spi_write
.dbline 48
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
.dbline 49
; }
L9:
.dbline 52
;
;
; chan_change(0);
clr R16
xcall _chan_change
.dbline 53
; delay_ms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_ms
.dbline 54
; for(j=0;j<50;j++)
clr R14
xjmp L19
L16:
.dbline 55
; {
.dbline 56
; for(i=0;i<11;i++)
clr R10
xjmp L23
L20:
.dbline 57
.dbline 58
xcall _conves_ad
.dbline 59
lds R18,_tempH
lds R16,_tempL
xcall _char_int
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_Ad_Ze_Buf
ldi R25,>_Ad_Ze_Buf
add R30,R24
adc R31,R25
std z+1,R17
std z+0,R16
.dbline 60
L21:
.dbline 56
inc R10
L23:
.dbline 56
mov R24,R10
cpi R24,11
brlo L20
.dbline 61
xcall _filter
ldi R24,2
mul R24,R14
movw R30,R0
movw R24,R28
add R30,R24
adc R31,R25
std z+1,R17
std z+0,R16
.dbline 62
L17:
.dbline 54
inc R14
L19:
.dbline 54
mov R24,R14
cpi R24,50
brlo L16
.dbline 63
; {
; conves_ad();
; Ad_Ze_Buf[i] = char_int(tempL,tempH);
; }
; Ad_Fu[j] = filter(); //冒泡排序滤波
; }
; for(i=0;i<50;i++)
clr R10
xjmp L27
L24:
.dbline 64
.dbline 65
ldi R24,2
mul R24,R10
movw R30,R0
movw R24,R28
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
clr R4
clr R5
movw R30,R28
subi R30,156 ; addi 100
sbci R31,255
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
subi R30,156 ; addi 100
sbci R31,255
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 66
L25:
.dbline 63
inc R10
L27:
.dbline 63
mov R24,R10
cpi R24,50
brlo L24
.dbline 68
; {
; Ad_buf +=Ad_Fu[i];
; }
;
; asm("nop");
nop
.dbline 69
; asm("nop");
nop
.dbline 70
; Ad_Fu_Data=Ad_buf/50.0;
movw R30,R28
subi R30,156 ; addi 100
sbci R31,255
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall long2fp
movw R2,R16
movw R4,R18
ldi R16,<L28
ldi R17,>L28
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpdiv2
movw R30,R28
subi R30,148 ; addi 108
sbci R31,255
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 71
; Fu_temp=Ad_Fu_Data*1000;
ldi R16,<L29
ldi R17,>L29
xcall lpm32
movw R24,R28
subi R24,148 ; offset = 108
sbci R25,255
st -y,R25
st -y,R24
xcall fpmule1
xcall fpint
movw R30,R28
subi R30,152 ; addi 104
sbci R31,255
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 73
;
; temp_dd = (Fu_temp&0xff000000)>>24; //数据按字节依次存入EEROM的04到07地址
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,255
movw R30,R28
subi R30,152 ; addi 104
sbci R31,255
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
and R16,R20
and R17,R21
and R18,R22
and R19,R23
ldi R24,24
ldi R25,0
st -y,R24
xcall lsr32
mov R12,R16
.dbline 74
; EEPROMwrite(0x05,temp_dd);
mov R18,R12
ldi R16,5
ldi R17,0
xcall _EEPROMwrite
.dbline 76
;
; temp_dd = (Fu_temp&0x00ff0000)>>16;
ldi R20,0
ldi R21,0
ldi R22,255
ldi R23,0
movw R30,R28
subi R30,152 ; addi 104
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
and R2,R20
and R3,R21
and R4,R22
and R5,R23
movw R12,R4
.dbline 77
; EEPROMwrite(0x06,temp_dd);
mov R18,R12
ldi R16,6
ldi R17,0
xcall _EEPROMwrite
.dbline 79
;
; temp_dd = (Fu_temp&0x00ff00)>>8;
ldi R20,0
ldi R21,255
ldi R22,0
ldi R23,0
movw R30,R28
subi R30,152 ; addi 104
sbci R31,255
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
and R16,R20
and R17,R21
and R18,R22
and R19,R23
ldi R24,8
ldi R25,0
st -y,R24
xcall asr32
mov R12,R16
.dbline 80
; EEPROMwrite(0x07,temp_dd);
mov R18,R12
ldi R16,7
ldi R17,0
xcall _EEPROMwrite
.dbline 82
;
; temp_dd = (Fu_temp&0x00ff);
ldi R20,255
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
subi R30,152 ; addi 104
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
and R2,R20
and R3,R21
and R4,R22
and R5,R23
mov R12,R2
.dbline 83
; EEPROMwrite(0x08,temp_dd);
mov R18,R2
ldi R16,8
ldi R17,0
xcall _EEPROMwrite
.dbline 84
; EEPROMwrite(0x09,0x5a);
ldi R18,90
ldi R16,9
ldi R17,0
xcall _EEPROMwrite
.dbline 85
; asm("nop");
nop
.dbline 86
; asm("nop");
nop
.dbline 87
; PORTB|=0x20; //点亮指示灯 表示满量程测量完成
sbi 0x5,5
.dbline -2
L7:
adiw R28,63
adiw R28,49 ; offset = 112
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l Ad_Fu_Data 108 D
.dbsym r ta 10 c
.dbsym l Fu_temp 104 L
.dbsym r temp_dd 12 c
.dbsym l Ad_buf 100 L
.dbsym l Ad_Fu 0 A[100:50]i
.dbsym r j 14 c
.dbsym r i 10 c
.dbend
.area lit(rom, con, rel)
L29:
.word 0x0,0x447a
L28:
.word 0x0,0x4248
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -