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

📄 350ad1.asm

📁 C8051F350的抗干扰数据采集程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
						CLR LCDWR
            MOV R2,#3
						MOV A,#0A0H   ;写100代码
            LCALL SENDBIT
						;
            CLR C
            MOV R2,#6   ;送A5~A0
						MOV A,LCD_ADDR
            RLC A
            RLC A
            LCALL SENDBIT 
;
            CLR C
						MOV A,LCD_DATA
            MOV R2,#4     ;送字符  D0~D3
            LCALL SENDBIT 
						CLR LCDWR 
            SETB LCDCS
						RET
;全显
SHOW_LCD:  MOV LCD_ADDR,#0
           MOV R5,#15   
CLR_L:     MOV LCD_DATA,#0FFH
           LCALL LCDWRITE
           INC LCD_ADDR
           DJNZ R5,CLR_L
           RET
;清屏
CLR_LCD:   MOV LCD_ADDR,#0
           MOV R5,#15   
CLR_LC:    MOV LCD_DATA,#00H
           LCALL LCDWRITE
           INC LCD_ADDR
           DJNZ R5,CLR_LC
           RET
;发送位(输入位数R2,数据ACC)
SENDBIT:   PUSH ACC
           PUSH PSW
SENDB1:    RLC A
           MOV LCDDAT,C
					 LCALL D_5
					 SETB LCDWR
					 LCALL D_5
					 CLR LCDWR
           DJNZ R2,SENDB1
					 POP PSW
					 POP ACC
					 RET
TABL:      DB 0FAH,060H,0D6H,0F4H,06CH,0BCH,0BEH,0E0H,0FEH,0FCH,0EEH,03EH,09AH,076H,09EH,08EH;0~F
TABL1:     DB 80H,40H,20H;T1~T3
TABL2:     DB 00H,00H,00H,00H,00H,0F0H,00H,0FH,0F0H,00H,0FFH,0F0H,0FH,0FFH,0F0H,0FFH,0FFH,0F0H;d1~d6


;*********************************
;输入R2R3,单字节16进制,	结果存于BCDCODE	(可用于采样码)
;*********************************
BCD:    MOV R1,#BCDCODE
        MOV A,R2           ;先高后低
        SWAP A
        ANL A,#0FH
        MOV @R1,A
        INC R1
        MOV A,R2
        ANL A,#0FH
        MOV @R1,A
        INC R1
				MOV A,R3           ;先高后低
        SWAP A
        ANL A,#0FH
        MOV @R1,A
        INC R1
        MOV A,R3
        ANL A,#0FH
        MOV @R1,A
			  RET
;**************************
;转成显示用的单字节BCD码(可用于电压\力值显示)
;输入R2R3(十六进制),结果存于BCDCODE
;**************************
BCDM:   LCALL IBTD
			  MOV R1,#BCDCODE
        MOV A,R5           ;先高后低
        SWAP A
        ANL A,#0FH
        MOV @R1,A
        INC R1
        MOV A,R5
        ANL A,#0FH
        MOV @R1,A
        INC R1
				MOV A,R6           ;先高后低
        SWAP A
        ANL A,#0FH
        MOV @R1,A
        INC R1
        MOV A,R6
        ANL A,#0FH
        MOV @R1,A
			  RET
;*************************
;采样码换算成电压值
;输入为R2,R3十六进制采样码,输出为R2,R3电压值
;*************************
VOLTAGE: CLR C         ;(0.5V~2V)
         MOV A,R3
				 SUBB A,#0E8H
				 MOV R3,A
				 MOV A,R2
				 SUBB A,#33H
				 MOV R2,A
         MOV R6,#05H      ;R2R3*1500mv/9AA8
         MOV R7,#0DCH
				 LCALL QMUL
				 MOV R2,#09AH
				 MOV R3,#0A8H
				 LCALL NDIV
				 CLR C
				 MOV A,R7
				 ADD A,#0F4H
				 MOV R3,A
				 MOV A,R6
				 ADDC A,#01H
				 MOV R2,A
				 LCALL BCDM
				 RET
;******************************
;计算
;******************************
;****************************
QMUL:   MOV A,R3            ;R2R3*R6R7-->R4R5R6R7
        MOV B,R7
        MUL AB              ;R3*R7
        XCH A,R7            ;R7=(R3*R7)L
        MOV R5,B            ;R5=(R3*R7)H
        MOV B,R2 
        MUL AB              ;R2*R7
        ADD A,R5            ;R4=(R2*R7)L+(R3*R7)H
        MOV R4,A
        CLR A
        ADDC A,B            ;R5=(R2*R7)H
        MOV R5,A
        MOV A,R6
        MOV B,R3
        MUL AB              ;R3*R6
        ADD A,R4            ;R6=(R3*R6)L+R4
        XCH A,R6            ;A=R6 
        XCH A,B             ;B=R6
        ADDC A,R5           ;R5=(R3*R6)H+R5
        MOV R5,A
        MOV F0,C            ;F0=C
        MOV A,R2
        MUL AB              ;R2*R6
        ADD A,R5            ;R5=(R2*R6)L+R5
        MOV R5,A
        CLR A
        MOV ACC.0,C          
        MOV C,F0
        ADDC A,B            ;R4=(R2*R6)H+F0+C
        MOV R4,A
        RET
;
NDIV:   CLR C               ;R4R5R6R7/R2R3-->R6R7
        MOV A,R5
        SUBB A,R3
        MOV A,R4
        SUBB A,R2
        JNC NDVE
        MOV B,#16
NDVL:   CLR C
        MOV A,R7
        RLC A
        MOV R7,A
        MOV A,R6
        RLC A
        MOV R6,A
        MOV A,R5
        RLC A
        MOV R5,A
        XCH A,R4
        RLC A
        XCH A,R4
        MOV F0,C
        CLR C
        SUBB A,R3
        MOV R1,A
        MOV A,R4
        SUBB A,R2
        JB F0,NDVM
        JC NDVD
NDVM:   MOV R4,A
        MOV A,R1
        MOV R5,A
        INC R7
NDVD:   DJNZ B,NDVL
        CLR F0
        CLR C
        MOV A,R2
        RRC A
        MOV R2,A
        MOV A,R3
        RRC A
        MOV R3,A
        MOV A,R4
        CJNE A,02H,NDVI        ;R4R5-R2R3 >= 0
        MOV A,R5
        CJNE A,03H,NDVI
NDVI:   JC NDVJ
        CLR C                  ;YES 
        MOV A,#1                
        ADD A,R7
        MOV R7,A
        CLR A
        ADDC A,R6
        MOV R6,A
NDVJ:   RET
NDVE:   SETB F0
        RET     
;***************************************
;the programis for B/D change
;inport r2,r3
;outport r4,r5,r6
;***************************************
IBTD:    CLR   A
         MOV   R4,A
         MOV   R5,A
         MOV   R6,A
         MOV   R7,#16
IBTL2:   CLR   C
         MOV   A,R3
         RLC   A
         MOV   R3,A
         MOV   A,R2
         RLC   A
         MOV   R2,A
         MOV   A,R6
         ADDC  A,R6
         DA    A
         MOV   R6,A
         MOV   A,R5
         ADDC  A,R5
         DA    A
         MOV   R5,A          
         MOV   A,R4
         ADDC  A,R4
         DA    A
         MOV   R4,A
         DJNZ  R7,IBTL2
         RET
;***********************************
;平滑滤波
;***********************************
FILT:    MOV R2,#20          ;20,采样次数(10-1)
         MOV R0,#DATABUF+2  ;队列首地址
         MOV R1,#DATABUF+3
FILT1:   MOV A,@R0          ;移动低字节
         DEC R0
				 DEC R0
				 MOV @R0,A          ;修改低字节地址
				 MOV A,R0
				 ADD A,#04H
				 MOV R0,A
         MOV A,@R1          ;移动高字节
         DEC R1
				 DEC R1
				 MOV @R1,A          ;修改高字节地址
				 MOV A,R1
				 ADD A,#04H
				 MOV R1,A
         DJNZ R2,FILT1
				 DEC R0
				 DEC R0
				 DEC R1
				 DEC R1
				 MOV @R0,ADC0M
				 MOV @R1,ADC0H
				 ;LCALL ARIFIL
				 LCALL DAVG
				 RET
;***********************************
;算术平均滤波法
;***********************************
;ARIFIL:  MOV R2,#10        ;采样次数
;         MOV R0,#DATABUF   ;采样值首地址
;       	CLR A
;      	MOV ADSUMH,A
;      	MOV ADSUMM,A
;      	MOV ADSUML,A
;  ARIFI1:  CLR C
;         MOV A,ADSUML
;         ADD A,@R0
;				 MOV ADSUML,A 
;				 INC R0
;		     MOV A,ADSUMM
;				 ADDC A,@R0		  
;				 MOV ADSUMM,A  
;				 INC R0
;				 MOV A,ADSUMH
;				 ADDC A,#0
;				 MOV ADSUMH,A
;				 DJNZ R2,ARIFI1
;				 MOV R4,#0
;				 MOV R5,ADSUMH
;				 MOV R6,ADSUMM
;				 MOV R7,ADSUML
;				 MOV R2,#0
;				 MOV R3,#10     ;采样次数
;	       LCALL NDIV
;    	   MOV BINH,R6     ;10次采样平均值
;	       MOV BINL,R7
;        RET
;***********************************
;防脉冲干扰算术平均滤波法
;***********************************
DAVG:    MOV R2,#10        ;采样次数
         MOV R0,#DATABUF   ;采样值首地址
         CLR A
       	 MOV ADSUMH,A
         MOV ADSUMM,A
         MOV ADSUML,A
	       MOV MAXH,A            ;MAX
         MOV MAXL,A
         MOV MINH,#0FFH        ;MIN
      	 MOV MINL,#0FFH
DAVG1:  CLR C
         MOV A,ADSUML
         ADD A,@R0
				 MOV ADSUML,A 
				 MOV COD1L,@R0
				 INC R0
		     MOV A,ADSUMM
				 ADDC A,@R0		  
				 MOV ADSUMM,A 
				 MOV COD1H,@R0 
				 INC R0
				 MOV A,ADSUMH
				 ADDC A,#0
				 MOV ADSUMH,A
         ;
      	CLR C
      	MOV A,COD1L
      	SUBB A,MAXL
      	MOV A,COD1H
	      SUBB A,MAXH
       	JC DAVG2
       	MOV MAXH,COD1H
       	MOV MAXL,COD1L
DAVG2:	CLR C
      	MOV A,COD1L
      	SUBB A,MINL
      	MOV A,COD1H
	      SUBB A,MINH
	      JNC DAVG3
      	MOV MINH,COD1H
      	MOV MINL,COD1L
				;
DAVG3:	 DJNZ R2,DAVG1
      	CLR C
	      MOV A,ADSUML
	      SUBB A,MAXL
	      MOV R7,A
      	MOV A,ADSUMM
	      SUBB A,MAXH
      	MOV R6,A
      	MOV A,ADSUMH
      	SUBB A,#0
      	MOV R5,A
	      CLR C
      	MOV A,R7
      	SUBB A,MINL
	      MOV R7,A
      	MOV A,R6
      	SUBB A,MINH
      	MOV R6,A
      	MOV A,R5
      	SUBB A,#0
      	MOV R5,A
	      MOV R4,#0
	      MOV R2,#0
	      MOV R3,#8        ;采样次数-2
	      LCALL NDIV
				MOV BINH,R6     ;10次采样平均值
	      MOV BINL,R7
         RET
;***********************************
;多次采样,去最大最小值,再取平均值
;INPUT:ADCOH/M   OUTPUT:BINH/L
;***********************************
DAVGX:  MOV A,SMPTMS
      	CJNE A,#0,DAV1
      	MOV SMPTMS,#100        ;重新赋值采样次数
      	CLR A
      	MOV ADSUMH,A
      	MOV ADSUMM,A
      	MOV ADSUML,A
	      MOV MAXH,A            ;MAX
      	MOV MAXL,A
      	MOV MINH,#0FFH        ;MIN
      	MOV MINL,#0FFH
      	CLR S_E
				;	JMP DAV5
DAV1:	  CLR C
       	MOV A,ADC0M
	      ADD A,ADSUML
	      MOV ADSUML,A
      	MOV A,ADC0H
      	ADDC A,ADSUMM
      	MOV ADSUMM,A
      	MOV A,#0
      	ADDC A,ADSUMH
      	MOV ADSUMH,A
      	CLR C
      	MOV A,ADC0M
      	SUBB A,MAXL
      	MOV A,ADC0H
	      SUBB A,MAXH
       	JC DAV2
       	MOV MAXH,ADC0H
       	MOV MAXL,ADC0M
DAV2:	  CLR C
      	MOV A,ADC0M
      	SUBB A,MINL
      	MOV A,ADC0H
	      SUBB A,MINH
	      JNC DAV3
      	MOV MINH,ADC0H
      	MOV MINL,ADC0M
DAV3:	  DJNZ SMPTMS,DAV5
      	CLR C
	      MOV A,ADSUML
	      SUBB A,MAXL
	      MOV R7,A
      	MOV A,ADSUMM
	      SUBB A,MAXH
      	MOV R6,A
      	MOV A,ADSUMH
      	SUBB A,#0
      	MOV R5,A
	      CLR C
      	MOV A,R7
      	SUBB A,MINL
	      MOV R7,A
      	MOV A,R6
      	SUBB A,MINH
      	MOV R6,A
      	MOV A,R5
      	SUBB A,#0
      	MOV R5,A
	      MOV R4,#0
	      MOV R2,#0
	      MOV R3,#98        ;采样次数-2
	      LCALL NDIV
DAV4:	  MOV BINH,R6     ;10次采样平均值
	      MOV BINL,R7
	      SETB S_E
DAV5:	  RET
;两个16字节相减  COD1H/L-COD2H/L ==> COD1H/L
SUBB_TWO:CLR C
        MOV A,COD1L
				SUBB A,COD2L
				MOV COD1L,A
				MOV A,COD1H
        SUBB A,COD2H
				MOV COD1H,A
				RET
;延时子程序
;DELY:  mov r5,#11h
;dely00: MOV R2,#20
;DEL0:  MOV R3,#50h
;DEL1:  NOP
;       DJNZ R3,DEL1
;       DJNZ R2,DEL0
;       DJNZ R5,DELY00
;       djnz r4,dely
;       RET
;10MS延时(若为1/2外部晶振,20ms)
DELY:  MOV R2,#90H
DEL0:  MOV R3,#0FFH
DEL1:  DJNZ R3,DEL1
       DJNZ R2,DEL0
       djnz R4,dely
       RET
;1ms延时
DELEY:  MOV R2,#13
DELE0:  MOV R3,#80H
DELE1:  DJNZ R3,DELE1
       DJNZ R2,DELE0
       djnz R4,deley
       RET


;-----------------------------------------------------------------------------
; End of file.

END

⌨️ 快捷键说明

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