📄 hh.asm
字号:
LIST P=16F873,R=HEX
STATUS EQU 03h
PORTB EQU 06h
PORTC EQU 07h
INTCON EQU 0Bh
PIR1 EQU 0Ch
PIE1 EQU 8Ch
T1CON EQU 10h
PCLATH EQU 0Ah
TMR1L EQU 0Eh
TMR1H EQU 0Fh
TMR2 EQU 11h
T2CON EQU 12h
CCP1CON EQU 17h
CCPR2L EQU 1Bh
CCPR2H EQU 1Ch
CCP2CON EQU 1Dh
OPTION_REG EQU 81h
TRISB EQU 86h
TRISC EQU 87h
PR2 EQU 92h
;======*****************
TRISA EQU 85h
ADCON0 EQU 1fh
ADCON1 EQU 9fh
ADRESH EQU 1eh
ADRESL EQU 9eh
TXSTA EQU 98h
TXREG EQU 19h
RCSTA EQU 18h
RCREG EQU 1Ah
SPBRG EQU 99h
W_TEMP EQU 20h
STATUS_TEMP EQU 21h
timer2_TEMP EQU 22h
PCLATH_TEMP EQU 23h
AD_WORKH EQU 24h
AD_WORKL EQU 36h
COMP1H EQU 25h
COMP1L EQU 26h
COMP2H EQU 27h
ADD_WORK0 EQU 28h
ADD_WORK1 EQU 29h
COUNT EQU 30h
NUMBER EQU 31h
BIT_TEMP EQU 32h
COUNT1 EQU 33H
COMP2L EQU 34H
TEMP EQU 35H
COUNT2 EQU 37H
COUNT3 EQU 38H
PORTC_BIT4 EQU 4
RC1_CCP2 EQU 1 ;2 bit of TRISC
TMR1ON EQU 0
TMR2ON EQU 2
RP1 EQU 6 ;6,5 bit of STATUS
RP0 EQU 5
TO EQU 4
Z EQU 2
C EQU 0
CCP1IE EQU 2
CCP1IF EQU 2
CCP2IF EQU 0 ;2,1 bit of PIR1
TMR2IF EQU 1
TMR1IF EQU 0
CCP2IE EQU 0 ;2,1 bit of PIE1
TMR2IE EQU 1
GIE EQU 7 ;7,6 bit of INTCON
PEIE EQU 6
;======*****************
ADIF EQU 6 ;6 bit of PIR1
ADIE EQU 6 ;6 bit of PIE1
ADON EQU 0 ;0,2 bit of ADCON0
GO_DOWN EQU 2
ADFM EQU 7 ;7 bit of ADCON1
TX89 EQU 6 ;6,5,4,2 bit of TXSTA
TXEN EQU 5
SYNC EQU 4
BRGH EQU 2
SPEN EQU 7 ;7,6,4,2,1 bit of RCSTA
RC89 EQU 6
CREN EQU 4
TRMT EQU 2 ;receive buffer weather overflow
OERR EQU 1
TXIF EQU 4 ;5,4 bit PIR1
RCIF EQU 5
TXIE EQU 4 ;5,4 bit PIE1
RCIE EQU 5
ORG 0x00
NOP
GOTO MAINLINE
;====********
MAINLINE
MOVLW 0x01 ;modify~~~2
MOVWF COMP1H
MOVLW 0x11
MOVWF COMP1L
MOVLW 0x03 ;modify~~~~4
MOVWF COMP2H
MOVLW 0x9A
MOVWF COMP2L
MOVLW 0x64
MOVWF NUMBER
CLRF COUNT
BSF STATUS,RP0
MOVLW 0x0F
MOVWF OPTION_REG
;====**********
CALL AD_INIT
CALL USART_INIT
BCF STATUS,RP0
CLRF PORTB
MAINLOOP
CALL OUT_FUN
GOTO MAINLOOP
OUT_FUN
MOVLW 0xFF
MOVWF COUNT1
CALL AD_TRANSITION
MOVF AD_WORKH,0
SUBWF COMP1H,0
BTFSS STATUS,C
GOTO COMP
BTFSS STATUS,Z
GOTO SEND2
MOVF AD_WORKL,0
SUBWF COMP1L,0
BTFSC STATUS,C
GOTO SEND2
COMP
MOVF AD_WORKH,0
SUBWF COMP2H,0
BTFSS STATUS,C
GOTO SEND2
BTFSS STATUS,Z
GOTO SEND1
MOVF AD_WORKL,0
SUBWF COMP2L,0
BTFSS STATUS,C
GOTO SEND2
GOTO SEND1
SEND1
MOVF COUNT,0
SUBWF NUMBER,0
BTFSC STATUS,Z
GOTO RE
INCF COUNT
MOVLW 0xff
MOVWF PORTB
CALL SEND_DATA
GOTO RE
SEND2
BCF STATUS,RP0
CLRF PORTB
CALL SEND_ERROR
CLRF COUNT
RE
MOVLW 0XFF
MOVWF COUNT2
LP
DECFSZ COUNT2,1
GOTO LP
DECFSZ COUNT1,1
GOTO RE
RETURN
;============================
USART_INIT
BSF STATUS,RP0
MOVLW 0xC4
MOVWF TRISC
movlw D'12' ;modify~~~1
movwf SPBRG
BCF TXSTA,TX89
BSF TXSTA,TXEN
BCF TXSTA,SYNC
BSF TXSTA,BRGH
BCF STATUS,RP0
MOVLW 0xc0
MOVWF PORTC ;set up value of i/o of portc
BCF RCSTA,RC89
BSF RCSTA,CREN
BSF RCSTA,SPEN
RETURN
;==================================
AD_INIT
BSF STATUS,RP0
MOVLW 0x8f ; right~0x0e='1000 1111' select AD channal, 0 of part A
MOVWF ADCON1
MOVLW 0x0f
MOVWF TRISA
BCF STATUS,RP0
MOVLW 0x81 ;'10000001'
MOVWF ADCON0
RETURN
;==================================
SEND_DATA
BCF STATUS,RP0
BTFSC PIR1,TXIF
GOTO SENT_TX
GOTO SEND_DATA
SENT_TX
BCF STATUS,RP0
MOVF AD_WORKH,0
MOVWF TXREG
SENT_TX2
BCF STATUS,RP0
BTFSS PIR1,TXIF
GOTO SENT_TX2
MOVF AD_WORKL,0
MOVWF TXREG
RETURN
;============================
AD_TRANSITION
BCF STATUS,RP0
;=======AD_delay~~~~~~!======
MOVLW 0x96 ;modify~~~~3
MOVWF COUNT3
TT1
NOP
NOP
DECFSZ COUNT3,1
GOTO TT1
;============================
BSF ADCON0,GO_DOWN
WAIT
BTFSC ADCON0,GO_DOWN
GOTO WAIT
BCF PIR1,ADIF
MOVF ADRESH,0
MOVWF AD_WORKH
BSF STATUS,RP0
MOVF ADRESL,0
BCF STATUS,RP0
MOVWF AD_WORKL
BCF PIR1,ADIF
BSF STATUS,RP0
MOVLW 0x8f ; right~0x0e='1000 1111' select AD channal, 0 of part A
MOVWF ADCON1
MOVLW 0x0f
MOVWF TRISA
BCF STATUS,RP0
MOVLW 0x81 ;'10000001'
MOVWF ADCON0
RETURN
;=========================
SEND_ERROR
BCF STATUS,RP0
BTFSC PIR1,TXIF
GOTO SENT_TX1
GOTO SEND_ERROR
SENT_TX1
BCF STATUS,RP0
MOVLW 0X55
MOVWF TXREG
RETURN
;============================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -