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

📄 full.s

📁 工业开关量检测模块的原代码,带断线检测功能
💻 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 + -