📄 ex0701.asm
字号:
;
; 8 BITS A/D + HEX TO BCD CONVERTER
;
LIST P=16F877, R=DEC
#INCLUDE P16F877.INC
CBLOCK 0X20
ENDC
;
; DEFINE RAM
;
CBLOCK
BCDBFL, BCDBFH ; result of 8 bit HEX to BCD
ENDC
;
ORG 0
NOP
BANKSEL TRISB
MOVLW 0
MOVWF TRISB
MOVWF PORTD
BANKSEL PORTB
MOVLW H'FF' ; TURN OFF LEDS
MOVWF PORTB
;
CLRF DATBF1 ; CLEAR DATA BUFFERS
CLRF DATBF2
;
;=======================
MAIN:
BANKSEL ADCON1 ; ADCON1 is in bank1
MOVLW B'00000100' ; select left(0) justified (d7)
; 3(ch)/0 refs (0100), 0XXX0100
MOVWF ADCON1
;
BANKSEL ADCON0
MOVLW B'01001001' ; select Fosc/8(01), AN1(001)
MOVWF ADCON0 ; a/d done(0), x(0), a/d ON(1)
;
CALL DLY2_5mS ; wait for input charge
MAIN1:
BSF ADCON0,GO ; start a/d converting
MAIN2:
BTFSC ADCON0,GO ; a/d convertion finished?
GOTO MAIN2 ; no
;
MOVF ADRESH,W ; read a/d result ( high byte )
CALL HX2BCD ; Hexadecimal to decimal converter
MOVF BCDBFL,W
MOVWF DATBF1
MOVF BCDBFH,W
MOVWF DATBF2
;
CALL FOURLED ; display a/d results
GOTO MAIN1
;
;---------------------------------------------------------------;
;
#INCLUDE <FOURLED.INC> ;
;
; externally defined pins (in main program) ;
;
PORTSEG EQU PORTD ; segment port ;
TRISEG EQU TRISD ; direction of segment port ;
PORTCA EQU PORTB ; common anode port ;
TRICA EQU TRISB ; direction of segment port ;
;
#INCLUDE <DLY2_5mS.INC> ;
;
;===============================================================;
;
;
;
; HEX TO BCD CONVERTER
;
; convert w to BCDBFH/BCDBFL
;
;
; define RAM
;
CBLOCK
R0_HX2BCD
ENDC
;
;
HX2BCD:
MOVWF R0_HX2BCD ; temporary store w
CLRF BCDBFL
CLRF BCDBFH
;
HX2BCD1:
MOVLW .100
SUBWF R0_HX2BCD,W
SKPC
GOTO HX2BCD2 ; end of hundred convertion
MOVWF R0_HX2BCD
INCF BCDBFH
GOTO HX2BCD1
HX2BCD2:
MOVLW .10
SUBWF R0_HX2BCD,W
SKPC
GOTO HX2BCD3 ; end of hundred convertion
MOVWF R0_HX2BCD
MOVLW H'10'
ADDWF BCDBFL
GOTO HX2BCD2
HX2BCD3:
MOVF R0_HX2BCD,W
ADDWF BCDBFL
RETURN
;
;
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -