📄 实验.asm
字号:
MOVWF FSR
WADIN2 BCF PORTA,0 ;AD_CS
NOP
NOP
MOVLW 08H
MOVWF COUNT ;一字节8位
INBY2 CALL ADSK
BTFSS PORTA,5 ;AD_Dout
BCF STATUS,0
BTFSC PORTA,5
BSF STATUS,0
RLF 7AH
DECFSZ COUNT
GOTO INBY2
MOVF 7AH,W
MOVWF INDF
INCF FSR
NOP
NOP
BSF PORTA,0 ;AD_CS
NOP
NOP
MOVF FSR,W
SUBLW 46H
BTFSS STATUS,2
GOTO WADIN2
NOP
RETURN
;-------------发送AD命令字------------------------------
OUTBYT MOVLW 8 ;LOOP=COMMAND CODE 8 BIT
MOVWF COUNT
BCF PORTA,0
NOP
NOP
COMTXL
BTFSC ADCOM,7 ;COMMAND.7=0 D=0
GOTO COMTX1
BCF PORTA,3 ;AD_Din
GOTO COMTX0 ;D=0
COMTX1 BSF PORTA,3 ;D=1
NOP
COMTX0 CALL ADSK
RLF ADCOM
DECFSZ COUNT
GOTO COMTXL
NOP
NOP
NOP
BSF PORTA,0
NOP
RETURN
;----------时钟-----------------------------------------
ADSK BCF PORTA,2 ;AD_SCK
NOP
NOP
BSF PORTA,2 ;AD_SCK
NOP
NOP
RETURN
;---------------初始化PORT-------------------------------------
INITPORTS ;INIT I/O
BCF STATUS,RP0
MOVLW B'00000000'
MOVWF PORTB
BSF STATUS,RP0 ;BANK1
MOVLW B'00000111'
MOVWF ADCON1
BCF TRISA,0 ;AD_CS
BSF TRISA,1 ;AD_DRDY
BCF TRISA,2 ;AD_SCK
BCF TRISA,3 ;AD_DIN
BSF TRISA,5 ;AD_DOUT
MOVLW B'11111111'
MOVWF TRISB ;SET RB TO I/O ALL INPUT
MOVLW B'10110000'
MOVWF TRISC ;SET RC7,5,4 INPUT,RC6,3,2,1,0 OUTPUT
BCF STATUS,RP0
MOVLW 0H
MOVWF PORTC
RETURN
;------------------初始化TIME1--------------------------------------------------
INITTIMERS ;INT TMR1
BSF STATUS,RP0 ;BANK1
MOVLW B'10001111' ;WDT 1/128 576msX4
MOVWF OPTION_REG
BSF PIE1,0 ;TMR1 INT ON
BCF STATUS,RP0 ;BANK0
MOVLW B'01000000' ;START TMR1
MOVWF INTCON
MOVLW 0B8H ;SET TMR1 DS=10MS
MOVWF TMR1H
CLRF TMR1L
MOVLW D'5' ;SET TIME DS=50MS
MOVWF TIME0
MOVLW D'10' ;SET TIME DS=500MS
MOVWF TIME1
MOVLW D'2' ;SET TIME DS=1 S
MOVWF TIME2
RETURN
;--------------初始化SCI--------------------------------
INITSCI
BSF STATUS,RP0 ;BANK1
; MOVLW D'3' ;SELECT BRG=115200BPS
; MOVLW D'23' ;SELECT BRG=19200BPS
MOVLW D'47' ;SELECT BRG=9600BPS
MOVWF SPBRG
MOVLW B'10100100' ;SET TXSTA
MOVWF TXSTA
BCF PIE1,TXIE ;SET TXINT OFF
BSF PIE1,RCIE ;SET RCINT ON
BCF PIE1,SSPIE ;SSP INT OFF
BCF STATUS,RP0 ;BANK0
BSF RCSTA,SPEN
BCF RCSTA,6 ;SET 8bit
BSF RCSTA,CREN ;SET RC ON
MOVLW 70H
MOVWF RXBUF ;JSDZ
MOVLW 42H
MOVWF ADBUF ;ADDZ
MOVLW 40H ;@
MOVWF 3DH
MOVLW 40H ;@
MOVWF 3EH
MOVLW 40H ;@
MOVWF 3FH
RETURN
;----------排序求平均值------------------
PXPJ BCF STATUS,RP0 ;BANK0
MOVLW 68H ;排序
MOVWF PXCOU1
PXLOO MOVLW 42H
MOVWF PXCOU2
PXLOO1 MOVF PXCOU2,W
MOVWF FSR
MOVF INDF,W ;42H->W
INCF FSR
INCF FSR
SUBWF INDF,0 ;44H-W->W
BTFSC STATUS,Z ;Z=0,NOT SAME, JMP
GOTO EQUAL ;(44H)=(42H) JMP EQUAL
BTFSC STATUS,C ;C=0,JMP
GOTO EQUAL1 ;(44H) > (42H)
DECF FSR
DECF FSR
MOVF INDF,W ;(44H) < (42H)
MOVWF 40H
INCF FSR
INCF FSR
MOVF INDF,W
DECF FSR
DECF FSR
MOVWF INDF
MOVF 40H,W
INCF FSR
INCF FSR
MOVWF INDF
DECF FSR
MOVF INDF,W
MOVWF 41H
INCF FSR
INCF FSR
MOVF INDF,W
DECF FSR
DECF FSR
MOVWF INDF
MOVF 41H,W
INCF FSR
INCF FSR
MOVWF INDF
GOTO EQUAL1
EQUAL DECF FSR
MOVF INDF,W ;43H->W
INCF FSR
INCF FSR
SUBWF INDF,0 ;45H-W->W
BTFSC STATUS,Z ;Z=0,NOT SAME, JMP
GOTO EQUAL1 ;(45H)=(43H) JMP EQUAL
BTFSC STATUS,C ;C=0,JMP
GOTO EQUAL1 ;(45H) > (43H)
DECF FSR
DECF FSR
MOVF INDF,W
MOVWF 41H
INCF FSR
INCF FSR
MOVF INDF,W
DECF FSR
DECF FSR
MOVWF INDF
MOVF 41H,W
INCF FSR
INCF FSR
MOVWF INDF ;(45H) < (43H)
EQUAL1 INCF PXCOU2
INCF PXCOU2
MOVF PXCOU1,W
SUBWF PXCOU2,W
BTFSS STATUS,Z ;PXCOU1=PXCOU2
GOTO PXLOO1 ;PXCOU1<>PXCOU2
DECF PXCOU1
DECF PXCOU1
MOVF PXCOU1,W
SUBLW 42H
BTFSS STATUS,Z ;PXCOU1=42H
GOTO PXLOO ;PXCOU1<>42H
PJZ MOVLW 4CH ;求平均值
MOVWF FSR
CLRF 40H
CLRF 41H
PJZLP MOVF INDF,W
ADDWF 40H,1
BTFSC STATUS,C
INCF 41H
INCF FSR
INCF FSR
MOVLW 60H
SUBWF FSR,W
BTFSS STATUS,Z
GOTO PJZLP
MOVF 41H,W
MOVWF ACCBHI
MOVF 40H,W
MOVWF ACCBLO
MOVLW 0AH
MOVWF ACCALO
CLRF ACCAHI
CALL D_DIVS
MOVF ACCBLO,W
MOVWF 44H
NOP
MOVLW 4DH
MOVWF FSR
CLRF 40H
CLRF 41H
PJZLP1 MOVF INDF,W
ADDWF 40H,1
BTFSC STATUS,C
INCF 41H
INCF FSR
INCF FSR
MOVLW 61H
SUBWF FSR,W
BTFSS STATUS,Z
GOTO PJZLP1
MOVF 41H,W
MOVWF ACCBHI
MOVF 40H,W
MOVWF ACCBLO
MOVLW 0AH
MOVWF ACCALO
CLRF ACCAHI
CALL D_DIVS
MOVF ACCBLO,W
MOVWF 45H
RETURN
;------16位加/减子程序----------------
;减法程序是把减数转换成减数的负值,再与被减数想加
;入口 16位加数/减数在ACCALO和ACCAHI中
; 16位被加数/被减数在ACCBLO和ACCBHI中
;出口 16位结果和/差在ACCBLO和ACCBHI中
;-------16位减法子程序-------------------
D_SUB
CALL NAG_A ;求ACCA的负值,再想加
;-------16位加法子程序-------------------
D_ADD
MOVF ACCALO,W
ADDWF ACCBLO,1 ;加低8位->ACCALO
BTFSC STATUS,C ;加进位
INCF ACCBHI
MOVF ACCAHI,W
ADDWF ACCBHI,1 ;加高8位->ACCAHI
RETURN
NAG_A
COMF ACCALO,1 ;求ACCA的负值
INCF ACCALO
BTFSC STATUS,Z
DECF ACCAHI
COMF ACCAHI,1
RETURN
;---------;16*16位无符号二进制除法-----------------
;该子程序用重复减法算法
;入口参数:除数在积存器ACCAHI(高),ACCALO(低)中,被除数在ACCBHI(高),ACCBLO(低)中.
;出口参数:商存于ACCBHI(高),ACCBLO(低),余数存于ACCCHI(高),ACCCLO(低)中
D_DIVS
CALL WSETUP
CLRF ACCCHI ;余数请0
CLRF ACCCLO
DLOOP BCF STATUS,C
RLF ACCDLO ;被除数,余数左移一位
RLF ACCDHI
RLF ACCCLO
RLF ACCCHI
MOVF ACCAHI,W
SUBWF ACCCHI,W ;被除数-除数
BTFSS STATUS,Z
GOTO NOCHK
MOVF ACCALO,W
SUBWF ACCCLO,W
NOCHK BTFSS STATUS,C ;被除数<除数?
GOTO NOGO ;商上0
MOVF ACCALO,W ;被除数>除数
SUBWF ACCCLO ;商上1,减除数
BTFSS STATUS,C
DECF ACCCHI
MOVF ACCAHI,W
SUBWF ACCCHI
BSF STATUS,C
NOGO RLF ACCBLO ;商左移一位
RLF ACCBHI
DECFSZ PXCOU1 ;循环16次
GOTO DLOOP
RETURN
WSETUP MOVLW 10H
MOVWF PXCOU1 ;循环次数16->TEMP
MOVF ACCBHI,W ;被除数ACCB->ACCD
MOVWF ACCDHI
MOVF ACCBLO,W
MOVWF ACCDLO
CLRF ACCBHI ;商清0
CLRF ACCBLO
RETURN
;---------------------------------------------
TXER ;FSBZ
BCF STATUS,RP0 ;BANK0
MOVLW 24H ;$ JIE SHU BIAO ZHI
MOVWF 4DH
CLRF 4CH ;出错标志
CLRF 4EH
MOVLW 3DH
MOVWF FSR
WAITB BTFSS PIR1,TXIF
GOTO WAIT1
MOVF INDF,W
MOVWF TXREG
ADDWF 4EH,1
INCF FSR
MOVF FSR,W
SUBLW 4FH ;68H
BTFSS STATUS,2 ;GPS SJ=0D0H?
GOTO WAITB
RETURN
;----------------------------------------------------------
TX0 ;FSMNL
BCF STATUS,RP0 ;BANK0
MOVLW 24H ;$ JIE SHU BIAO ZHI
MOVWF 4DH
MOVLW 0FFH ;正确标志
MOVWF 4CH
CLRF 4EH
MOVLW 3DH
MOVWF FSR
WAIT1 BTFSS PIR1,TXIF
GOTO WAIT1
MOVF INDF,W
MOVWF TXREG
ADDWF 4EH,1
INCF FSR
MOVF FSR,W
SUBLW 4FH ;68H
BTFSS STATUS,2 ;GPS SJ=0D0H?
GOTO WAIT1
MOVLW 42H
MOVWF ADBUF
RETURN
;----------------------------------------------------------
MLYM
MOVF 73H,W ;READ RCSJ
SUBLW 42H
BTFSS STATUS,2 ;B?
GOTO YM1
MOVF 74H,W
SUBLW 45H
BTFSS STATUS,2 ;E?
GOTO YM8
MOVF 75H,W
SUBLW 47H
BTFSS STATUS,2 ;G?
GOTO YM8
MOVF 76H,W
SUBLW 0DH
BTFSS STATUS,2 ;HC?
GOTO YM8
BSF GNBZ,7
BSF GNBZ,1
BCF GNBZ,2 ;START
BCF GNBZ,3
BCF GNBZ,4
BCF GNBZ,5
RETURN
YM1 MOVF 73H,W ;READ RCSJ
SUBLW 50H
BTFSS STATUS,2 ;P?
GOTO YM2
MOVF 74H,W
SUBLW 41H
BTFSS STATUS,2 ;A?
GOTO YM8
MOVF 75H,W
SUBLW 55H
BTFSS STATUS,2 ;U?
GOTO YM8
MOVF 76H,W
SUBLW 0DH
BTFSS STATUS,2 ;HC?
GOTO YM8
BSF GNBZ,7
BSF GNBZ,2 ;PAUSE
BCF GNBZ,1
BCF GNBZ,3
BCF GNBZ,4
BCF GNBZ,5
RETURN
YM2 MOVF 73H,W ;READ RCSJ
SUBLW 43H
BTFSS STATUS,2 ;C?
GOTO YM3
MOVF 74H,W
SUBLW 4FH
BTFSS STATUS,2 ;O?
GOTO YM8
MOVF 75H,W
SUBLW 4EH
BTFSS STATUS,2 ;N?
GOTO YM8
MOVF 76H,W
SUBLW 0DH
BTFSS STATUS,2 ;HC?
GOTO YM8
BSF GNBZ,7
BSF GNBZ,3 ;CONUT
BCF GNBZ,1
BCF GNBZ,2
BCF GNBZ,4
BCF GNBZ,5
RETURN
YM3 MOVF 73H,W ;READ RCSJ
SUBLW 45H
BTFSS STATUS,2 ;E?
GOTO YM4
MOVF 74H,W
SUBLW 4EH
BTFSS STATUS,2 ;N?
GOTO YM8
MOVF 75H,W
SUBLW 44H
BTFSS STATUS,2 ;D?
GOTO YM8
MOVF 76H,W
SUBLW 0DH
BTFSS STATUS,2 ;HC?
GOTO YM8
BSF GNBZ,7
BSF GNBZ,4 ;END
BCF GNBZ,1
BCF GNBZ,2
BCF GNBZ,3
BCF GNBZ,5
RETURN
YM4 MOVF 73H,W ;READ RCSJ
SUBLW 44H
BTFSS STATUS,2 ;D?
GOTO YM8
MOVF 74H,W
SUBLW 53H
BTFSS STATUS,2 ;S?
GOTO YM8
MOVF 75H,W
SUBLW 43H
BTFSS STATUS,2 ;C?
GOTO YM8
MOVF 76H,W
SUBLW 0DH
BTFSS STATUS,2 ;HC?
GOTO YM8
BSF DSCBZ,0
BSF GNBZ,7
BSF GNBZ,5 ;DSC
BCF GNBZ,4
BCF GNBZ,1
BCF GNBZ,2
BCF GNBZ,3
RETURN
YM8 BCF GNBZ,7
MOVLW 0FFH
MOVWF 4CH
RETURN
;-----------------------------------------------------
END
;---------------------------------------------*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -