📄 wrwd4.asm
字号:
MOVWF COUNT3
T200MS_1 CALL DISPLAY
DECFSZ COUNT3,1
GOTO T200MS_1
RETURN
T10MS MOVLW .10
MOVWF COUNT1
GOTO T1MS_1
;-------------------------------
T1MS
MOVLW 1
MOVWF COUNT1
GOTO T1MS_1
;--------------------------
T1MS_1
MOVLW .250
MOVWF COUNT2
T1MS_2
NOP
DECFSZ COUNT2,1
GOTO T1MS_2
DECFSZ COUNT1,1
GOTO T1MS_1
RETURN
;----------------------------
;-----------0.5秒延时-----------
YMYS
BANKSEL T1CON
MOVLW B'00110001'
MOVWF T1CON
BTFSC PIR1,TMR1IF
GOTO YMYSA
BCF MYS;0.5秒
MOVLW 0F4H
SUBWF TMR1H,0
SKPC
RETURN
SKPZ
GOTO YMYS1
MOVLW 24H
SUBWF TMR1L,0
SKPC
RETURN
YMYS1 MOVLW 24H
SUBWF TMR1L,1
SKPC
DECF TMR1H,1
MOVLW 0F4H
SUBWF TMR1H,0
SKPC
GOTO YMYSB
MOVWF TMR1H
GOTO YMYSB
YMYSA MOVLW 0DBH
ADDWF TMR1L,1
SKPNC
INCF TMR1H,1
MOVLW 0BH
ADDWF TMR1H,1
BCF PIR1,TMR1IF
YMYSB
INCF CNTS,1
MOVLW 2
SUBWF CNTS,0
SKPC
RETURN
CLRF CNTS
BSF MYS;0.5秒
INCF CNTYS,1
MOVLW .10
SUBWF CNTYS,0
SKPC
RETURN
MOVLW .10
MOVWF CNTYS
RETURN
;----------------------------
XZA
BCF XB
NOP
NOP
NOP
BSF XA
RETURN
;------------------------------
XZB BCF XA
NOP
NOP
NOP
BSF XB
RETURN
;----------------------------
MADD
BANKSEL ACCAL
MOVF ACCAL,W
ADDWF ACCBL,1
BTFSC 3,0
INCF ACCBH,1
MOVF ACCAH,W
ADDWF ACCBH,1
RETLW 0
NOP
MPY CALL SETUP
MLOOP
RRF ACCDH,1
RRF ACCDL,1
BTFSC 3,0
CALL MADD
RRF ACCBH,1
RRF ACCBL,1
RRF ACCCH,1
RRF ACCCL,1
CALL DISPLAY
DECFSZ TEMPCC,1
GOTO MLOOP
RETLW 0
SETUP
BANKSEL TEMPCC
MOVLW .16
MOVWF TEMPCC
MOVF ACCBH,W
MOVWF ACCDH
MOVF ACCBL,W
MOVWF ACCDL
MOVF ACCCH,W
MOVWF ACCEH
MOVF ACCCL,W
MOVWF ACCEL
CLRF ACCBH
CLRF ACCBL
RETLW 0
DIV CALL SETUP
MOVLW .32
MOVWF TEMPCC
CLRF ACCCH
CLRF ACCCL
DLOOP BCF 3,0
RLF ACCEL,1
RLF ACCEH,1
RLF ACCDL,1
RLF ACCDH,1
RLF ACCCL,1
RLF ACCCH,1
MOVF ACCAH,W
SUBWF ACCCH,W
BTFSS 3,2
GOTO NOCHK
MOVF ACCAL,W
SUBWF ACCCL,W
NOCHK BTFSS 3,0
GOTO NOGO
MOVF ACCAL,W
SUBWF ACCCL,1
BTFSS 3,0
DECF ACCCH,1
MOVF ACCAH,0
SUBWF ACCCH,1
BSF 3,0
NOGO RLF ACCBL,1
RLF ACCBH,1
CALL DISPLAY
DECFSZ TEMPCC,1
GOTO DLOOP
RETLW 0
;----------------------------
;标准100欧姆的AD值
;AD*100=AD*(64+32+4)
BZDZJCH
CALL XZA
CALL WRBYTE_3421
CALL T100MS
MOVLW ADC_V1
MOVWF 4
MOVLW .3
MOVWF COUNT1
CALL RDBYTE_3421
RETURN
;----------------------------
SB1AN
MOVLW .10
SUBWF CNTYS,0
SKPC
RETURN
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL T100MS
BTFSS SB1
GOTO SB1AN_1
CALL XZB
CALL WRBYTE_3421
CALL T200MS
MOVLW ADC_V1
MOVWF 4
MOVLW .3
MOVWF COUNT1
CALL RDBYTE_3421
CALL WRBYTE_3421
CALL T200MS
MOVLW ADC_V1
MOVWF 4
MOVLW .3
MOVWF COUNT1
CALL RDBYTE_3421
CALL WRBYTE_3421
CALL T200MS
MOVLW ADC_BZ1
MOVWF 4
MOVLW .3
MOVWF COUNT1
CALL RDBYTE_3421
;两次采集的数据相加
MOVF ADC_V3,0
ADDWF ADC_BZ3,1
SKPNC
CALL J2W
MOVF ADC_V2,0
ADDWF ADC_BZ2,1
SKPNC
CALL J1W
;求平均
MOVF ADC_V1,0
ADDWF ADC_BZ1,1
BCF 3,C
RRF ADC_BZ1,1
RRF ADC_BZ2,1
RRF ADC_BZ3,1
MOVLW 10H
MOVWF ADDRL
MOVLW 3
MOVWF COUNT1
MOVLW ADC_BZ1
MOVWF 4
CALL WRBYTE_02
RETURN
SB1AN_1
RETURN
;-----------------------------
SB2QH
BTFSS SB2
GOTO SB2QH_0
BTFSC SB2G
RETURN
CALL T100MS
BTFSS SB2
GOTO SB2QH_0
CLRF CNTYS
BSF SB2G;SB2高
BTFSS SB2BZ
GOTO SB2QH_1
GOTO SB2QH_2
SB2QH_1
BSF SB2BZ;按SB2切换显示温度
RETURN
SB2QH_2
BCF SB2BZ
RETURN
SB2QH_0
BCF SB2G;SB2高
RETURN
;----
SB12DZ
BTFSS SB2G;SB2高
GOTO SB12DZ_0
BTFSS SB1
GOTO SB12DZ_0
CALL T100MS
BTFSS SB1
GOTO SB12DZ_0
BSF XSDZ;显示电阻
RETURN
SB12DZ_0
BCF XSDZ
RETURN ;显示电阻
;-----------------------------
BIN2BCD
BCF 3,5
MOVLW .16
MOVWF CNT
CLRF DBH
CLRF DBM
CLRF DBL
LOOPB
RLF DDL,1
RLF DDH,1
RLF DBL,1
RLF DBM,1
RLF DBH,1
DECFSZ CNT,1
GOTO ADJDEC
RETLW 0
ADJDEC MOVLW DBL
MOVWF FSR
CALL ADJBCD
MOVLW DBM
MOVWF FSR
CALL ADJBCD
MOVLW DBH
MOVWF FSR
CALL ADJBCD
GOTO LOOPB
ADJBCD MOVLW 3
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,3
MOVWF 0
MOVLW 30
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,7
MOVWF 0
RETLW 0
;-----------------------------
J2W
MOVLW 1
ADDWF ADC_BZ2,1
SKPC
RETURN
J1W
MOVLW 1
ADDWF ADC_BZ1,1
RETURN
;数码管表格
SMGBG
MOVLW HIGH(SMGBG_0)
MOVWF PCLATH
MOVF SMGZ,W
ADDLW LOW(SMGBG_0)
SKPNC
INCF PCLATH,F
MOVWF PCL
SMGBG_0
RETLW B'11111100';0
RETLW B'01100000';1
RETLW B'11011010';2
RETLW B'11110010';3
RETLW B'01100110';4
RETLW B'10110110';5
RETLW B'10111110';6
RETLW B'11100100';7
RETLW B'11111110';8
RETLW B'11110110';9
RETLW B'11101110';;A
RETLW B'00000010';-
RETLW B'10011100';C
RETLW B'00000000';黑
RETLW B'10011110';E
RETLW B'00001010';r
;--------左移循环-----------
ZYXH MOVWF CNT
MOVF ADC_V1,0
MOVWF ADC_GD1
MOVF ADC_V2,0
MOVWF ADC_GD2
MOVF ADC_V3,0
MOVWF ADC_GD3
CLRF ADC_GD0
ZYXH_1 BCF 3,C
RLF ADC_GD3,1
RLF ADC_GD2,1
RLF ADC_GD1,1
RLF ADC_GD0,1
DECFSZ CNT,1
GOTO ZYXH_1
MOVF ADC_GD3,0
ADDWF ACCCL,1
SKPNC
CALL ADJ1
MOVF ADC_GD2,0
ADDWF ACCCH,1
SKPNC
CALL ADJ2
MOVF ADC_GD1,0
ADDWF ACCBL,1
SKPNC
CALL ADJ3
MOVF ADC_GD0,0
ADDWF ACCBH,1
RETURN
;--------------------------------------
ADJ1
MOVLW 1
ADDWF ACCCH,1
SKPC
RETURN
ADJ2
MOVLW 1
ADDWF ACCBL,1
SKPC
RETURN
ADJ3
MOVLW 1
ADDWF ACCBH,1
RETURN
;----------测量电阻,计数温度---------
CLDZ
BTFSS SB2BZ;按SB2切换温度温度探头
GOTO CLDZ_1
GOTO CLDZ_2
CLDZ_1
CALL XZB;电子开关b通
GOTO CLDZ_3
CLDZ_2
CALL XZA;电子开关a通
CLDZ_3
CALL WRBYTE_3421;写3421,通知3421需转换
CALL T200MS
CLRF ACCBL
CLRF ACCBH
CLRF ACCCL
CLRF ACCCH
MOVLW ADC_V1;读3421的值到ADC_V1,ADC_V2,ADC_V3
MOVWF 4
MOVLW .3
MOVWF COUNT1
CALL RDBYTE_3421
;==如3421的值超过1F000,表示探头出错
MOVF ADC_V1,1
SKPNZ
GOTO WDZC
MOVLW 2
SUBWF ADC_V1,0
SKPNC
GOTO TDCC;探头出错
MOVLW 0F0
SUBWF ADC_V2,0
SKPC
GOTO WDZC
GOTO TDCC;探头出错
TDCC
MOVLW 0BB
MOVWF DBM
MOVWF DBL
BSF CWBZ ;出错标志
CALL DISPLAY
RETURN
;==
WDZC
;ADC_V1为被测探头的3421值,ADC_BZ为100欧姆的3421值
;被测探头的阻值=100*(ADC_V1)/ADC_BZ
;由于表格的温度值扩大了100倍,所以计算的被测探头的阻值再*100
BCF CWBZ ;出错标志
;ADC_V1*100=ADC_V1*(64+32+4)
;ADC_V1*100
MOVLW .6
CALL ZYXH;左移循环6次(扩大64倍)
MOVLW 5
CALL ZYXH;左移循环5次(扩大32倍)
MOVLW 2
CALL ZYXH;左移循环2次(扩大4倍)
MOVF ACCBL,0
MOVWF ADC_V1
MOVF ACCCH,0
MOVWF ADC_V2
MOVF ACCCL,0
MOVWF ADC_V3
;(ADC_V1*100)*100
CLRF ACCBH
CLRF ACCBL
CLRF ACCCH
CLRF ACCCL
MOVLW .6
CALL ZYXH;左移循环6次(扩大64倍)
MOVLW 5
CALL ZYXH;左移循环5次(扩大32倍)
MOVLW 2
CALL ZYXH;左移循环2次(扩大4倍)
;==
;(ADC_V1*100*100)/ADC_BZ
MOVF ADC_BZ2,0
MOVWF ACCAH
MOVF ADC_BZ3,0
MOVWF ACCAL
CALL DIV
MOVF ACCBH,0
MOVWF BCDZH;被测电阻值高位
MOVF ACCBL,0
MOVWF BCDZL;被测电阻值低位
CALL WCNVT
WDZHXS
BTFSC XSDZ;显示电阻
GOTO DZZXS
MOVF NUMBL,0
MOVWF DDL
MOVF NUMBH,0
MOVWF DDH
CALL BIN2BCD
GOTO WDZHXS_0
;显示电阻值,只需小数点一位,所以舍弃小数点第二位
DZZXS
MOVF BCDZL,0
MOVWF DDL
MOVF BCDZH,0
MOVWF DDH
CALL BIN2BCD
BCF 3,C
RRF DBH,1
RRF DBM,1
RRF DBL,1
BCF 3,C
RRF DBH,1
RRF DBM,1
RRF DBL,1
BCF 3,C
RRF DBH,1
RRF DBM,1
RRF DBL,1
BCF 3,C
RRF DBH,1
RRF DBM,1
RRF DBL,1
BCF WDFZ;WDFZ为一,数码管最高位需显示负值
WDZHXS_0
CALL XSML;显示是否灭零
CALL DISPLAY
RETURN
;--------------------------------------
;==========================
WCNVT
CLRF TAB
CLRF NUMBL
CLRF NUMBH
ZWCNVT
CALL WTAB
MOVWF DZZH
MOVF ACCBH,0
SUBWF DZZH,0
; SUBWF ACCBH,0
SKPC
GOTO WCNVT_2 ;热敏电阻值小于查表值
SKPZ
GOTO WCNVT1 ;热敏电阻值大于查表值
INCF TAB,1 ;热敏电阻值等于查表值
CALL WTAB
MOVWF DZZL
MOVF ACCBL,0
SUBWF DZZL,0
; SUBWF ACCBL,0
SKPNC
GOTO WCNVT_1
INCF TAB,1
GOTO ZWCN
WCNVT_2 INCF TAB,1
INCF TAB,1
ZWCN MOVLW .76;表格长度为76,超过76,温度显示最大值
SUBWF NUMBL,0
SKPC
GOTO ZWCN1
;温度最大值
;650.0
MOVLW 19
MOVWF NUMBH
MOVLW 64
MOVWF NUMBL
GOTO WCNVT_6
ZWCN1 INCF NUMBL,1
GOTO ZWCNVT
WCNVT1 INCF TAB,1
CALL WTAB
MOVWF DZZL
WCNVT_1 MOVF NUMBL,1
SKPNZ
GOTO WCNVT_6
DECF TAB,1
DECF TAB,1
DECF TAB,1
CALL KTAB ;读(X2-X1)值
MOVWF DZCZH
INCF TAB,1
CALL KTAB
MOVWF DZCZL
;-------Y=Y2-100*(X-X1)/(X2-X1)---------------
;Y 当前温度值
;Y2-Y1=10.0度
;-------------------------------------------
KX
;(X-X1)
MOVF ACCBL,0
SUBWF DZZL,0
MOVWF ACCBL
SKPC
DECF DZZH,1
MOVF ACCBH,0
SUBWF DZZH,0
MOVWF ACCBH
;100(X-X1)
CLRF ACCAH
MOVLW .100 ;100*(X-X1)
MOVWF ACCAL
CALL MPY
MOVF DZCZH,0
MOVWF ACCAH
MOVF DZCZL,0
MOVWF ACCAL
CALL DIV ;100*(X-X1)/(X2-X1)
MOVF ACCBH,0
MOVWF ACCAH
MOVF ACCBL,0
MOVWF ACCAL
CLRF ACCBH
CLRF ACCBL
CLRF ACCCH
CLRF ACCCL
;==
;Y2扩大100倍
MOVF NUMBH,0
MOVWF ADC_V2
MOVF NUMBL,0
MOVWF ADC_V3
CLRF ADC_V1
MOVLW .6
CALL ZYXH;左移循环6次(扩大64倍)
MOVLW 5
CALL ZYXH;左移循环5次(扩大32倍)
MOVLW 2
CALL ZYXH;左移循环2次(扩大4倍)
;==
;由于温度范围-99.9-650.0
;ACCAH,ACCAL=100*(X-X1)/(X2-X1)
;ACCCH,ACCCL=Y2
;Y=(Y2-100*(X-X1)/(X2-X1))-1000
BCF WDFZ;温度负值
MOVLW 0E8H
ADDWF ACCAL,1
SKPNC
INCF ACCAH,1
MOVLW 3
ADDWF ACCAH,1
MOVF ACCAL,0
SUBWF ACCCL,0
MOVWF NUMBL
SKPC
DECF ACCCH,1
MOVF ACCAH,0
SUBWF ACCCH,0
MOVWF NUMBH
SKPC
GOTO WCNVT_F
GOTO WCNVT_6
;此时NUMBH,NUMNL=温度值
WCNVT_F
COMF NUMBL,1
COMF NUMBH,1
MOVLW 1
ADDWF NUMBL,1
SKPNC
INCF NUMBH,1
BSF WDFZ;温度负值
GOTO WCNVT_6
KX_11 CLRF NUMBL
CLRF NUMBH
WCNVT_6
RETURN
;---------显示是否灭零-------------------------
XSML
BTFSS WDFZ;温度负值
GOTO XSML_Z
MOVLW B'00001111'
ANDWF DBM,1
MOVLW 0DH
SKPNZ
MOVWF DBM
MOVLW 0B0
ADDWF DBM,1
RETURN
XSML_Z
MOVF DBM,1
SKPNZ
GOTO XSML_Z_0
MOVLW B'11110000'
ANDWF DBM,0
SKPNZ
GOTO XSML_Z_1
RETURN
XSML_Z_0
MOVLW 0DH
ADDWF DBM,1
XSML_Z_1
MOVLW 0D0H
ADDWF DBM,1
RETURN
;----------------------------------
DISPLAY
BCF HS4
BCF HS3
BCF HS2
BCF HS1
SWAPF DBM,0
ANDLW B'00001111'
MOVWF SMGZ
CALL SMGBG
MOVWF PORTB
BSF HS4
CALL T1MS
BCF HS4
MOVF DBM,0
ANDLW B'00001111'
MOVWF SMGZ
CALL SMGBG
MOVWF PORTB
BSF HS3
CALL T1MS
BCF HS3
SWAPF DBL,0
ANDLW B'00001111'
MOVWF SMGZ
CALL SMGBG
MOVWF PORTB
BTFSS CWBZ ;出错标志
BSF PORTB,0
BSF HS2
CALL T1MS
BCF HS2
BCF PORTB,0
MOVF DBL,0
ANDLW B'00001111'
MOVWF SMGZ
CALL SMGBG
MOVWF PORTB
BSF HS1
CALL T1MS
BCF HS1
RETURN
;------检验100欧姆的参数是否正确---------------------
JYBZCS MOVF ADC_BZ1,1
SKPZ
GOTO BZCSC
MOVLW 0A0
SUBWF ADC_BZ2,0
SKPNC
GOTO BZCSC
BCF BZZC;100欧姆的参数值错误
RETURN
BZCSC
BSF BZZC;100欧姆的参数值错误
RETURN
;------------------------------------
MAIN
BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTA
CLRF PORTB
CLRF PORTC
MOVLW B'00000100'
CLRF PORTD
CLRF PORTE
;========初始化============
CLRF 1EH ;DISAD
CLRF 1FH
BSF STATUS,RP0
;******2006.2.8******
MOVLW B'00110000';B'00111100' 2006.2.8
MOVWF TRISA
;********************
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
; MOVLW B'00000000'
; MOVWF TRISD
; MOVLW B'00000111'
; MOVWF TRISE
MOVLW B'00000110' ;DISAD
MOVWF ADCON1
;***********************
; MOVLW B'11000011'
; MOVWF 81H;设定TMR0
;=====
BCF 3,5
CLRF ADCON0
MOVLW 21H
MOVWF 4
CLRF CNT
LCS1 CLRF 0
INCF 4,1
INCF CNT,1
MOVLW .95
SUBWF CNT,0
SKPZ
GOTO LCS1
CLRF CNT
BCF XB
NOP
NOP
BCF XA
;--
;如24c02的100欧姆的参数值
MOVLW 10
MOVWF ADDRL
MOVLW ADC_BZ1
MOVWF 4
MOVLW 3
MOVWF COUNT1
CALL RDBYTE_02
MAIN1
CALL YMYS
CALL SB1AN;按SB1按钮,读入100欧姆的3421值,作为标准
CALL JYBZCS;检验100欧姆的参数是否正确
CALL SB2QH;按SB2按钮,切换显示电子通道a的值或b的值
CALL SB12DZ;同时按住SB1,SB2时,显示当前通道的电阻值
BTFSC BZZC;100欧姆的参数值错误
GOTO XSCW
;---
;100欧姆的参数正确,则测量温度值
CALL CLDZ;测量电阻,计数温度
GOTO MAIN1
;----如100欧姆的参数不正确,显示" Err"
XSCW
BCF CWBZ
MOVLW 0DEH
MOVWF DBM
MOVLW 0FFH
MOVWF DBL
BSF CWBZ;错误标志,不显示小数点
CALL DISPLAY
GOTO MAIN1
;====
END
;----
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -