📄 zero.s
字号:
.module zero.c
.area text(rom, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\电流CAN网\zero.c
.dbfunc e zero_ref _zero_ref fV
; Ad_Ze_Data -> y+108
; ta -> R10
; Ze_temp -> y+104
; temp_dd -> R12
; Ad_buf -> y+100
; Ad_Ze -> y+0
; j -> R14
; i -> R10
.even
_zero_ref::
xcall push_gset5
sbiw R28,63
sbiw R28,49 ; offset = 112
.dbline -1
.dbline 5
; #include "main.h"
; extern unsigned char tempL,tempH;
; extern unsigned int Ad_Ze_Buf[11];
; void zero_ref(void)
; {
.dbline 10
; unsigned char ta,i,j,temp_dd;
; unsigned int Ad_Ze[50];
; float Ad_Ze_Data;
; long Ad_buf,Ze_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 12
;
; spi_write(RD_Id_Reg);
ldi R16,96
xcall _spi_write
.dbline 13
; ta=spi_read();
xcall _spi_read
mov R10,R16
.dbline 15
;
; if((ta&0x0f)!=0x0a)
mov R24,R10
andi R24,15
cpi R24,10
breq L8
.dbline 16
; RESET;
jmp 0x000
xjmp L9
L8:
.dbline 19
;
; else
; {
.dbline 20
; spi_write(WR_Con_Reg);
ldi R16,16
xcall _spi_write
.dbline 21
; spi_write(ConHreg_u_mask);
ldi R16,16
xcall _spi_write
.dbline 22
; spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
ldi R16,144
xcall _spi_write
.dbline 24
;
; spi_write(WR_Io_Reg);
ldi R16,40
xcall _spi_write
.dbline 25
; spi_write(0x00);
clr R16
xcall _spi_write
.dbline 27
;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 28
; spi_write(ModHreg_md2_mask);
ldi R16,128
xcall _spi_write
.dbline 29
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
L10:
.dbline 32
L11:
.dbline 31
;
; while(!PINB3)
.dbline 33
; ;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 34
; spi_write(ModHreg_md2_mask|ModHreg_md0_mask);
ldi R16,160
xcall _spi_write
.dbline 35
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
L13:
.dbline 38
L14:
.dbline 37
;
; while(!PINB3)
.dbline 39
; ;
; spi_write(WR_Con_Reg);
ldi R16,16
xcall _spi_write
.dbline 40
; spi_write(ConHreg_u_mask);
ldi R16,16
xcall _spi_write
.dbline 41
; spi_write(ConLreg_ref_mask|ConLreg_buf_mask);
ldi R16,144
xcall _spi_write
.dbline 43
;
; spi_write(WR_Mod_Reg);
ldi R16,8
xcall _spi_write
.dbline 44
; spi_write(0x00);
clr R16
xcall _spi_write
.dbline 45
; spi_write(ModLreg_fs0_mask|ModLreg_fs1_mask|ModLreg_fs2_mask|ModLreg_fs3_mask);
ldi R16,15
xcall _spi_write
.dbline 46
; }
L9:
.dbline 48
;
; chan_change(0);
clr R16
xcall _chan_change
.dbline 49
; delay_ms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_ms
.dbline 50
; for(j=0;j<50;j++)
clr R14
xjmp L19
L16:
.dbline 51
; {
.dbline 52
; for(i=0;i<11;i++)
clr R10
xjmp L23
L20:
.dbline 53
.dbline 54
xcall _conves_ad
.dbline 55
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 56
L21:
.dbline 52
inc R10
L23:
.dbline 52
mov R24,R10
cpi R24,11
brlo L20
.dbline 57
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 58
L17:
.dbline 50
inc R14
L19:
.dbline 50
mov R24,R14
cpi R24,50
brlo L16
.dbline 59
; {
; conves_ad();
; Ad_Ze_Buf[i] = char_int(tempL,tempH);
; }
; Ad_Ze[j] = filter(); //冒泡排序滤波
; }
; for(i=0;i<50;i++)
clr R10
xjmp L27
L24:
.dbline 60
.dbline 61
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 62
L25:
.dbline 59
inc R10
L27:
.dbline 59
mov R24,R10
cpi R24,50
brlo L24
.dbline 64
; {
; Ad_buf +=Ad_Ze[i]; //重复50次 以保证基准点测量的准确性
; }
;
; asm("nop");
nop
.dbline 65
; asm("nop");
nop
.dbline 66
; Ad_Ze_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 67
; Ze_temp=Ad_Ze_Data*1000; //放大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 69
;
; temp_dd = (Ze_temp&0xff000000)>>24; //数据高八位存入EEROM的00地址
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 70
; EEPROMwrite(0x01,temp_dd);
mov R18,R12
ldi R16,1
ldi R17,0
xcall _EEPROMwrite
.dbline 72
;
; temp_dd = (Ze_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 73
; EEPROMwrite(0x02,temp_dd);
mov R18,R12
ldi R16,2
ldi R17,0
xcall _EEPROMwrite
.dbline 75
;
; temp_dd = (Ze_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 76
; EEPROMwrite(0x03,temp_dd);
mov R18,R12
ldi R16,3
ldi R17,0
xcall _EEPROMwrite
.dbline 78
;
; temp_dd = (Ze_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 79
; EEPROMwrite(0x04,temp_dd);
mov R18,R2
ldi R16,4
ldi R17,0
xcall _EEPROMwrite
.dbline 80
; EEPROMwrite(0x09,0x5a);
ldi R18,90
ldi R16,9
ldi R17,0
xcall _EEPROMwrite
.dbline 81
; asm("nop");
nop
.dbline 82
; asm("nop");
nop
.dbline 83
; 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_Ze_Data 108 D
.dbsym r ta 10 c
.dbsym l Ze_temp 104 L
.dbsym r temp_dd 12 c
.dbsym l Ad_buf 100 L
.dbsym l Ad_Ze 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 + -