📄 数字电压表.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 + -