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

📄 hh.asm

📁 串口通信pic16f873a 里面有比较程序及 串口模块的初始话
💻 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 + -