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

📄 cx1.asm

📁 PIC16F873单片机A/D转换程序,可用于模拟量采集
💻 ASM
字号:
;***********************************************************************
;故障记录仪程序,用于对被采集信号进行初步分析,判断合适的量程并进行切换.
;程序名:GZJL.asm
;用PIC16F873/873A/876
;***********************************************************************
	INCLUDE "P16F873A.inc"
;---------------------------------------
PUSH	MACRO
	MOVWF	WBUFFER
	SWAPF	WBUFFER,F
	BCF	STATUS,RP0
	SWAPF	STATUS,W
	MOVWF	STATBUFFER
	ENDM
POP	MACRO
	SWAPF	STATBUFFER,W
	MOVWF	STATUS
	SWAPF	WBUFFER,W
	ENDM       

;--------------------------------------
TEMP		EQU	20H
TEMP0		EQU	21H
TEMP2		EQU	22H
TEMP3		EQU	23H
PORTB_T		EQU	24H
INCH		EQU	25H		
DWXXBZ		EQU	26H
DWKZBZ		EQU	27H
CCBZ		EQU	28H
DSBZ		EQU	29H
COUNT0		EQU	2AH
WBUFFER		EQU	2BH
STATBUFFER	EQU	2CH
COUNT		EQU	2EH
COUNT1		EQU	2FH
DYW		EQU	50H
DEW		EQU	51H
DSW		EQU	52H
SSW		EQU	53H
SJCD		EQU	54H
KGL		EQU	55H
ZLDWXX		EQU	56H
ZLDYL		EQU	57H
ZLDYH		EQU	58H
JLDWXX		EQU	59H
JLDYL		EQU	5AH
JLDYH		EQU	5BH
JSBZ0		EQU	5CH
JSBZ1		EQU	5DH


;-------------------------------------------
	ORG	00H
	GOTO	MAIN		
	ORG	04H
	GOTO	INTZ
	ORG	10H			
;--------------------------------------------------*
MAIN
	CALL	INITCLEROM
	CALL	INITPORTS
	CALL	INITSCI
	CALL	INITTIMERS
	CALL	INITAD
	BSF	INTCON,GIE
	MOVLW	01H
	MOVWF	T1CON		;开定时器1
	MOVLW	055H
	MOVWF	DYW
	MOVLW	055H
	MOVWF	DEW
	MOVLW	055H
	MOVWF	DSW
	MOVLW	55H
	MOVWF	SSW
	MOVLW	0DH
	MOVWF	SJCD
	MOVLW	0AAH
	MOVWF	JSBZ0
	MOVLW	0AAH
	MOVWF	JSBZ1
	
START
	BCF	STATUS,RP0	;BANK0
	CLRWDT			;Clear WDT
	MOVF	CCBZ,W
	SUBLW	00H
	BTFSS	STATUS,2
	GOTO	MAIN
	BTFSS	DSBZ,1
	GOTO	JS1
	BCF	DSBZ,1
	BTFSS	PORTC,4
	GOTO	ZSD
	BCF	PORTC,4
JS1	BTFSS	DSBZ,0
	GOTO	START
	BCF	DSBZ,0
	MOVF	PORTB,W
	MOVWF	KGL
	CALL	C_FS
	MOVLW	00H
	MOVWF	INCH
	CALL	ADZH			;调用A/D采集和挡位转换子程序
	MOVF	ADRESH,W
	MOVWF	JLDYH
	BSF	STATUS,RP0
	MOVF	ADRESL,W
	BCF	STATUS,RP0
	MOVWF	JLDYL
	MOVF	DWXXBZ,F
	BTFSC	STATUS,Z
	GOTO	ZLTD
	BTFSS	DWXXBZ,0
	GOTO	JLKZ1
	MOVF	JLDWXX,W
	SUBLW	02H
	BTFSC	STATUS,C
	INCF	JLDWXX,F
	GOTO	JLKZ2
JLKZ1	BTFSC 	DWXXBZ,1
	MOVF	JLDWXX,F
	BTFSS	STATUS,Z
	DECF	JLDWXX,F
JLKZ2	BTFSC	JLDWXX,0
	BSF	PORTC,0
	BTFSS	JLDWXX,0
	BCF	PORTC,0
	BTFSC	JLDWXX,1
	BSF	PORTC,1
	BTFSS	JLDWXX,1
	BCF	PORTC,1

ZLTD	MOVLW	01H
	MOVWF	INCH
	CALL	ADZH			;调用A/D采集和挡位转换子程序
	MOVF	ADRESH,W
	MOVWF	ZLDYH
	BSF	STATUS,RP0
	MOVF	ADRESL,W
	BCF	STATUS,RP0
	MOVWF	ZLDYL
	MOVF	DWXXBZ,F
	BTFSC	STATUS,Z
	GOTO	START
	BTFSS	DWXXBZ,0
	GOTO	ZLKZ1
	MOVF	ZLDWXX,W
	SUBLW	002H
	BTFSC	STATUS,C
	INCF	ZLDWXX,F
	GOTO	ZLKZ2
ZLKZ1	BTFSC 	DWXXBZ,1
	MOVF	ZLDWXX,F
	BTFSS	STATUS,Z
	DECF	ZLDWXX,F
ZLKZ2	BTFSC	ZLDWXX,0
	BSF	PORTC,2
	BTFSS	ZLDWXX,0
	BCF	PORTC,2
	BTFSC	ZLDWXX,1
	BSF	PORTC,3
	BTFSS	ZLDWXX,1
	BCF	PORTC,3	
;	MOVLW	000H
;	MOVWF	DSBZ
	GOTO	START
ZSD	BSF	PORTC,4
	GOTO	JS1
 ;--------------------------------------------
ADZH				;AD转换程序

	BTFSS	INCH,0
	GOTO	TD0
	BSF	ADCON0,3
TD1	CALL	YSZCX
	BSF	ADCON0,2	;开始A/D采集
	MOVLW	00H
	MOVWF	DWXXBZ		;清除挡位信息标志
LOOP1	BTFSC	ADCON0,2
	GOTO	LOOP1		;等待A/D转换完成.
	MOVF	ADRESH,W
	SUBLW	018H
	BTFSS	STATUS,C
	GOTO	ZDLC
	BSF	DWXXBZ,0	;A/D转换值太小标志,需增大放大倍数据.
ZDLC	MOVF	ADRESH,W
	SUBLW	0FDH
	BTFSS	STATUS,C
	BSF	DWXXBZ,1	;A/D转换值太小标志,需增大放大倍数据.
	RETFIE

TD0	BCF	ADCON0,3
	GOTO	TD1
;----------------------------------------------------
YSZCX	
	MOVLW	D'20'
	MOVWF	COUNT1
J1	DECFSZ	COUNT1,F
	GOTO	J1
	RETFIE
;--------------------------------------------------
C_FS
	MOVLW	0X50
	MOVWF	FSR
A0	MOVF	INDF,W
	MOVWF	TXREG
	INCF	FSR,F
	DECFSZ	COUNT,F
	GOTO	A1
	GOTO	SSS
A1	BTFSS	PIR1,4
	GOTO	A1
	GOTO	A0
SSS
	MOVLW	0DH
	MOVWF	COUNT
	RETURN
;----------------------------------------------------	
INITCLEROM
	BCF	STATUS,RP0	;BANK0
	MOVLW	20H		;CLEAR 20H-7FH
	MOVWF	FSR
CLEAR1	CLRW
	MOVWF	INDF
	INCF	FSR,f
	MOVF	FSR,W
	SUBLW	80H
	BTFSS	STATUS,2	;ADD=80H?
	GOTO	CLEAR1
	BSF	STATUS,RP0	;BANK1
	MOVLW	0A0H		;CLEAR A0H-FFH
	MOVWF	FSR
CLEAR2	CLRW
	MOVWF	INDF
	INCF	FSR,f
	MOVF	FSR,W
	SUBLW	0FFH
	BTFSS	STATUS,2	;ADD=0FFH?
	GOTO	CLEAR2
	RETURN

;----------------------------------------*
INITPORTS			
	BSF	STATUS,RP0	
	MOVLW	07H	
	MOVWF	TRISA		;设置A口低2位为输入,用于2路电压采集
	MOVLW	0FFH
	MOVWF	TRISB		;设置B口为开关量信号输入
	MOVLW	B'10000000'	;挡位控制输出  
	MOVWF	TRISC
	BCF	STATUS,RP0	;BANK0
	CLRF	PORTA
	CLRF	PORTB
	MOVLW	010H
	MOVWF	PORTC
	RETURN	

;----------------------------------------------------------------	
INITSCI
	BSF	STATUS,RP0	;BANK1
	MOVLW	D'3'		;设置波特率
	MOVWF	SPBRG	
	MOVLW	B'10100100'	;设置 TXSTA
	MOVWF	TXSTA
	BCF	PIE1,TXIE	;开发送中断
	BCF	STATUS,RP0	;BANK0
	MOVLW	B'10000000'	;设置 RCSTA
	MOVWF	RCSTA
	MOVLW	0DH
	MOVWF	COUNT
	RETURN

;-------------------------------------------------*
INITTIMERS			;INT TMR1
	BSF	STATUS,RP0	;BANK1
	MOVLW	B'10000111'	;WDT 1/128  576msX4
	MOVWF	OPTION_REG
	BSF	PIE1,0		;TMR1 INT ON
	BCF	STATUS,RP0	;BANK0
	MOVLW	B'01000000'	;START TMR1
	MOVWF	INTCON
	MOVLW	0B8H		;SET TMR1 DS=10MS
	MOVWF	TMR1H
	CLRF	TMR1L
	MOVLW	D'50'
	MOVWF	COUNT0
	RETURN

;--------------------------------------------------------
INITAD
	BSF	STATUS,RP0
	MOVLW	B'00000000' 
	MOVWF	ADCON1
	BCF	STATUS,RP0
	MOVLW	081H
	MOVWF	ADCON0
	RETURN

;-------------------------------------------------
INTZ	PUSH
	NOP
	BSF	DSBZ,0		;SET 10MS DSBZ
	DECFSZ	COUNT0,F
	GOTO	DS1
	BSF	DSBZ,1		;SET 500MS DSBZ
	MOVLW	D'50'
	MOVWF	COUNT0
DS1	MOVLW	0B8H
	MOVWF	TMR1H
	CLRF	TMR1L 
	BCF	PIR1,TMR1IF	;CLEAR TMR0 INT
	NOP
	POP
	RETFIE	
	
	END
	
	
	

⌨️ 快捷键说明

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