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

📄 数字电压表.asm

📁 基于PIC16F877单片机的简易数字电压表的源程序
💻 ASM
字号:
;	Author:	zhouxuan
;	Date:	03/3/3
;	Describe:显示为7位,单位为V,只能测0-5V电压
 	LIST	P=16F877
	#INCLUDE<P16F877.INC>
;--------------------------------------------------------------------------
COUNT1		EQU	2FH
COUNT0		EQU	30H		
COUNT      	EQU	31H	
COUNT2		EQU	2EH			
SEND_A		EQU	33H		;发送7219的地址
SEND_D 		EQU	34H		;发送7219的数据
ADH0     	EQU	32H		;A0口A/D转换的高字节暂存
ADL0	 	EQU	35H		;A0口A/D转换的低字节暂存
ADH1		EQU	36H		;A0口A/D转换的高字节
ADL1		EQU	37H		;A0口A/D转换的低字节	
TEMP4		EQU	38H		
TEMP		EQU	3AH		
TEMPE		EQU	3BH	
DIP0		EQU	20H		;显示结果寄存
DIP1		EQU	21H
DIP2		EQU	22H
DIP3		EQU	23H
DIP4		EQU	24H
DIP5		EQU	25H
DIP6		EQU	26H
DIP7		EQU	27H
COUNT3		EQU	28H	
BUF0		EQU	29H		;BCD码,8
BUF1		EQU	2AH		;2
BUF2		EQU	2BH		;8
BUF3		EQU	2CH		;8
BUF4		EQU	2DH		;4				
;位定义
CLK		EQU	3		
LOAD		EQU	4
DOUT		EQU	5
    	ORG	00H
	NOP
	ORG	10H
;------------------------------------------------------------------
STAR	
	NOP
 	CALL	INIT
	CALL	INITPORT
	CALL	INIT7219
LOOP
	CALL	ADC
	;CALL	ADC2
	CALL	DISPLAY
	GOTO	STAR
;-------------------------------------------------------------------
INIT		;寄存器初始化
	CLRF	DIP0
	CLRF	DIP1
	CLRF	DIP2
	CLRF	DIP3
	CLRF	DIP4
	CLRF	DIP5
	CLRF	DIP6
	CLRF	DIP7
	CLRF	ADH0
	CLRF	ADL0
	CLRF	ADH1
	CLRF	ADL1
	CLRF	TEMP4
	CLRF	TEMP
	CLRF	TEMPE
	MOVLW	08H		;常量48828用BCD码表示
	MOVWF	BUF0
	MOVWF	BUF2
	MOVWF	BUF3
	MOVLW	02H
	MOVWF	BUF1
	MOVLW	04H
	MOVWF	BUF4
	MOVLW	10H
	MOVWF	COUNT0
	RETURN

INITPORT		;断口初始化
	BSF	STATUS,5
	MOVLW	03H
	MOVWF	TRISA
	MOVLW	0C7H
	MOVWF	TRISC
	BCF	STATUS,5
	CLRF	PORTA
	CLRF	PORTC 
	RETURN
;----------------------------------------------------------------------------
INIT7219				;7219初始化
	MOVLW	09H		
	MOVWF	SEND_A
	MOVLW	0FFH
	MOVWF	SEND_D
	CALL	SEND		
	CALL	DELAY
	MOVLW	0AH		
	MOVWF	SEND_A
	MOVLW	08H
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	0BH		
	MOVWF	SEND_A
	MOVLW	7H
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	0CH		
	MOVWF	SEND_A
	MOVLW	01H
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	0FH	
	MOVWF	SEND_A
	MOVLW	0H
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	0F0H
	MOVWF	PORTB
	RETURN 
;------------------------------------------------------------------
;A/D转换,16次求和取平均
ADC	;A/D转换
	CALL	DELAY0			;延时,减少闪烁	
	CALL	DELAY0
	CALL	DELAY0
	CALL	DELAY0
	BCF	STATUS,5
	MOVLW	041H		
	MOVWF	ADCON0 
	BSF	STATUS,5
	MOVLW	84H
	MOVWF	ADCON1
	BCF	STATUS,5
	CALL	DELAY
	BSF	ADCON0,2    	; A/D开始
ADC_1	BTFSC	ADCON0,2	;是否结束
	GOTO	ADC_1		
	MOVF	ADRESH,0	;高字节
	MOVWF	ADH0
	BSF	STATUS,5	;选中ADRESL所在的体
	MOVF	ADRESL,0	
	BCF	STATUS,5
	MOVWF	ADL0
	MOVF	ADH0,0
	ADDWF	ADH1,1
	MOVF	ADL0,0
	ADDWF	ADL1,1
	BTFSC	STATUS,0	;ADL0+ADH1>FFH?
	INCF	ADH1,1		;是,TEMP3+1
GO_ON
	DECFSZ	COUNT0,1	;16是否结束
	GOTO	ADC	
	MOVLW	04H		;右移4次
	MOVWF	COUNT1
GO1
	RRF	ADH1,1
	RRF	ADL1,1
	DECFSZ	COUNT1,1
	GOTO	GO1
	MOVLW	0FH
	ANDWF	ADH1,1	
	INCF	ADH1,1	
;------------------------------------------------------------------
;求显示值
DIPNUM			
	MOVLW	DIP5
	CALL	JIANCE
	MOVLW	DIP6
	CALL	JIANCE
	CALL	BCD_ADD
	DECFSZ	ADL1,1
	GOTO	DIPNUM
	DECFSZ	ADH1,1
	GOTO	DIPNUM
	RETURN	
JIANCE
	MOVWF	FSR
	MOVF	INDF,0
	MOVWF	TEMPE
	CALL	BCD2
	MOVF	TEMPE,0
	MOVWF	INDF
	RETURN
BCD_ADD			;求乘积		
	MOVLW	DIP0
	MOVWF	FSR		;间接寻址,指向DIP0
	MOVF	BUF0,0
	MOVWF	TEMP
	CALL	TT0
	MOVF	BUF1,0
	MOVWF	TEMP
	CALL	TT0
	MOVF	BUF2,0
	MOVWF	TEMP
	CALL	TT0
	MOVF	BUF3,0
	MOVWF	TEMP
	CALL	TT0
	MOVF	BUF4,0
	MOVWF	TEMP
	CALL	TT0
	CALL	DELAY			
	RETURN		
TT0
	MOVF	INDF,0
	MOVWF	TEMPE
	CALL	X0
	MOVF	TEMPE,0		
	MOVWF	INDF
	INCF	FSR,1		;指针加1,指向下一个寄存器
	RETURN	
X0				
	MOVF	TEMP,0
	ADDWF	TEMPE,1
BCD2	BCF	STATUS,0	;转换为BCD码
	MOVLW	0AH
	SUBWF	TEMPE,0
	BTFSC	STATUS,0
	GOTO	BCD1		;TEMPE>9,求BCD码
	RETURN			;TEMPE<9,返回
BCD1	MOVLW	06H
	ADDWF	TEMPE,1
	MOVLW	0FH
	ANDWF	TEMPE,1
	INCF	FSR,1
	INCF	INDF,1
	DECF	FSR,1
	RETURN
DISPLAY				;7219显示电压
	MOVLW	01H
	MOVWF	SEND_A
	MOVF	DIP0,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	02H
	MOVWF	SEND_A
	MOVF	DIP1,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	03H
	MOVWF	SEND_A
	MOVF	DIP2,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	04H
	MOVWF	SEND_A
	MOVF	DIP3,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	05H
	MOVWF	SEND_A
	MOVF	DIP4,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	06H
	MOVWF	SEND_A
	MOVF	DIP5,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	07H
	MOVWF	SEND_A
	MOVF	DIP6,0
	MOVWF	SEND_D
	CALL	SEND
	CALL	DELAY
	MOVLW	08H
	MOVWF	SEND_A
	MOVF	DIP7,0
	MOVWF	SEND_D
	BSF	SEND_D,7
	CALL	SEND
	CALL	DELAY
	RETURN
;--------------------------------------------------------------------------
SEND				;发送地址和数据到7219
	MOVLW	8
	MOVWF	COUNT
	BCF	PORTC,LOAD
	CALL	DELAY
SET_LP1	BCF	STATUS,C	
	BSF	PORTC,CLK
	RLF	SEND_A,1
	BCF	PORTC,DOUT
	BTFSC	STATUS,C
	BSF	PORTC,DOUT
	BCF	PORTC,CLK
	CALL	DELAY
	DECFSZ	COUNT,1
	GOTO	SET_LP1
	BSF	PORTC,CLK
	MOVLW	8
	MOVWF	COUNT
SET_LP2	BCF	STATUS,C	
	BSF	PORTC,CLK
	RLF	SEND_D,1
	BCF	PORTC,DOUT
	BTFSC	STATUS,C
	BSF	PORTC,DOUT
	BCF	PORTC,CLK
	CALL	DELAY
	DECFSZ	COUNT,1
	GOTO	SET_LP2
	BSF	PORTC,CLK
	CALL	DELAY
	BSF	PORTC,LOAD
	BSF	PORTC,DOUT
	RETURN
;-----------------------------------------------------------------------------
DELAY0
	MOVLW	 0FFH		
	MOVWF	 COUNT3
T0	CALL	DELAY
	DECFSZ	COUNT3,1		;OSC=11.059M,DELAY=27us
	GOTO	T0
	RETURN
DELAY				
	MOVLW	16H
	MOVWF	COUNT2
T1	DECFSZ	COUNT2,1	
	GOTO	T1
	RETURN
 END	

⌨️ 快捷键说明

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