📄 xsg.asm
字号:
LIST P=16F877A
INCLUDE "P16F877A.INC"
ERRORLEVEL -302
ERRORLEVEL -203
ERRORLEVEL -205
;定义输入
#DEFINE DYKG PORTB,1
#DEFINE KZDSS PORTB,3
#DEFINE KZDSX PORTB,4
#DEFINE KZZL PORTB,5
#DEFINE KZZLS PORTB,6
#DEFINE KZZLX PORTB,7
;定义输出
#DEFINE FSL PORTD,0
#DEFINE FSM PORTD,1
#DEFINE FSH PORTD,2
#DEFINE YSJ PORTD,3
#DEFINE ZLZS PORTD,6
;定义存储地址
ZLYSJ EQU 23H
KGJBZ EQU 24H
QRT EQU 25H
WDS EQU 26H
WDX EQU 27H
JSS20 EQU 28H
JSS21 EQU 29H
GSMG EQU 30H
ZHZ EQU 31H
SZBZ EQU 32H
ZH0 EQU 33H
GW0 EQU 34H
SW0 EQU 35H
GW1 EQU 36H
SW1 EQU 37H
WDSZX EQU 38H
COUNT0 EQU 39H
SZBZ0 EQU 40H
ZHWD1 EQU 41H
ZHWD2 EQU 42H
W_TEMP EQU 43H
STATUS_TEMP EQU 44H
ZH1 EQU 45H
ZLBZ EQU 70H
FSBZ EQU 71H
SZWD EQU 72H
ADDR EQU 73H
;主程序
ORG 0000H
nop
GOTO START
ORG 0004H
GOTO ZDCX
nop
ORG 0020H
;****************************************子程序
CONVERT ;此温度时的AD转换值
ADDWF PCL,1
RETLW 92H ;0℃
RETLW 8FH ;1℃
RETLW 8DH ;2℃
RETLW 8AH ;3℃
RETLW 88H ;4℃
RETLW 85H ;5℃
RETLW 82H ;6℃
RETLW 80H ;7℃
RETLW 7DH ;8℃
RETLW 7AH ;9℃
RETLW 78H ;10℃
RETLW 75H ;11℃
RETLW 73H ;12℃
RETLW 70H ;13℃
RETLW 6EH ;14℃
RETLW 6BH ;15℃
RETLW 69H ;16℃
RETLW 67H ;17℃
CONVERT1 ;此SZWD设置温度时的十进制值
ADDWF PCL,1
RETLW 00H ;00H
RETLW 01H ;01H
RETLW 02H ;02H
RETLW 03H ;03H
RETLW 04H ;04H
RETLW 05H ;05H
RETLW 06H ;06H
RETLW 07H ;07H
RETLW 08H ;08H
RETLW 09H ;09H
RETLW 10H ;0AH
RETLW 11H ;0BH
RETLW 12H ;0CH
RETLW 13H ;0DH
RETLW 14H ;0EH
RETLW 15H ;OFH
CONVERT2 ;显示码
ADDWF PCL,1
RETLW 0C0H ;0
RETLW 0F9H ;1
RETLW 0A4H ;2
RETLW 0B0H ;3
RETLW 99H ;4
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 90H ;9
CONVERT3
ADDWF PCL,1
RETLW 0A2H ;-6℃ 0
RETLW 9FH ;-5℃ 1
RETLW 9DH ;-4℃ 2
RETLW 9AH ;-3℃ 3
RETLW 97H ;-2℃ 4
RETLW 95H ;-1℃ 5
RETLW 92H ;0℃ 6
RETLW 8FH ;1℃ 7
RETLW 8DH ;2℃ 8
RETLW 8AH ;3℃
RETLW 88H ;4℃
RETLW 85H ;5℃
RETLW 82H ;6℃
RETLW 80H ;7℃
RETLW 7DH ;8℃
RETLW 7AH ;9℃
RETLW 78H ;10℃
RETLW 75H ;11℃
RETLW 73H ;12℃
RETLW 70H ;13℃
RETLW 6EH ;14℃
RETLW 6BH ;15℃
RETLW 69H ;16℃
RETLW 67H ;17℃
RETLW 64H ;18℃
RETLW 62H ;19℃
RETLW 60H ;20℃
RETLW 5DH ;21℃
RETLW 5BH ;22℃
RETLW 59H ;23℃
RETLW 57H ;24℃
RETLW 55H ;25℃
RETLW 53H ;26℃
RETLW 52H ;27℃
RETLW 4FH ;28℃
RETLW 4DH ;29℃
RETLW 4BH ;30℃
RETLW 49H ;31℃
RETLW 47H ;32℃
RETLW 45H ;33℃
RETLW 44H ;34℃
RETLW 42H ;35℃
RETLW 40H ;36℃
RETLW 3FH ;37℃
;6-36十进制
CONVERT4
ADDWF PCL,1
RETLW 6H ; -6 ℃ 0
RETLW 5H ; -5 1
RETLW 4H ; -4 2
RETLW 3H ; -3 3
RETLW 2H ; -2 4
RETLW 1H ; -1 5
RETLW 0H ; 0 6
RETLW 1H ; 1 7
RETLW 2H ; 2 8
RETLW 3H ; 3 9
RETLW 4H ; 4
RETLW 5H ; 5
RETLW 6H ; 6
RETLW 7H ; 7
RETLW 8H ; 8
RETLW 9H ; 9
RETLW 10H ; 10
RETLW 11H ; 11
RETLW 12H ; 12
RETLW 13H ; 13
RETLW 14H ; 14
RETLW 15H ; 15
RETLW 16H ; 16
RETLW 17H ; 17
RETLW 18H ; 18
RETLW 19H ; 19
RETLW 20H ; 20
RETLW 21H ; 21
RETLW 22H ; 22
RETLW 23H ; 23
RETLW 24H ; 24
RETLW 25H ; 25
RETLW 26H ; 26
RETLW 27H ; 27
RETLW 28H ; 28
RETLW 29H ; 29
RETLW 30H ; 30
RETLW 31H ; 31
RETLW 32H ; 32
RETLW 33H ; 33
RETLW 34H ; 34
RETLW 35H ; 35
RETLW 36H ; 36
START
BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF STATUS,RP0
MOVLW 03H
MOVWF TRISA
MOVLW B'11111111'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW 00H
MOVWF TRISE
MOVLW 04h
MOVWF OPTION_REG
MOVLW 04H
MOVWF ADCON1
BCF STATUS,RP0
MOVLW B'10110000'
MOVWF INTCON
NOP
MOVLW 83H
MOVWF TMR0
CZQCSG
BCF STATUS,RP1
BCF STATUS,RP0
BCF KGJBZ,0
BCF FSL
BCF FSM
BCF FSH
BCF YSJ
BCF ZLZS
BCF SZBZ,0
BCF GSMG,0
BCF ZLYSJ,0
BCF PORTD,7
CZQCSK ;检测开或关机
BTFSC KGJBZ,0
GOTO CZQGJ ;检测关机
CZQKJ ;检测开机
BTFSC DYKG
GOTO CZQKJ
CALL DELAY10
BTFSC DYKG
GOTO CZQKJ
BSF KGJBZ,0
JCSK0
BTFSS DYKG
GOTO JCSK0
CALL DELAY10
BTFSS DYKG
GOTO JCSK0
GOTO KSZT
CZQGJ ;检测关机
BTFSC DYKG
GOTO CZQKS
CALL DELAY10
BTFSC DYKG
GOTO CZQKS
CALL CEEPROM
BCF KGJBZ,0
JCSK1
BTFSS DYKG
GOTO JCSK1
CALL DELAY10
BTFSS DYKG
GOTO JCSK1
GOTO CZQCSG
KSZT ;开机
BSF GSMG,0
BSF PORTD,7
CALL DEEPROM
;加 看读出的数据是否在范围内/
;检测输入
CZQKS
BCF STATUS,RP1
BCF STATUS,RP0
BTFSC KZDSS
GOTO FSTX
CALL DELAY10
BTFSC KZDSS
GOTO FSTX
MOVLW 03H
SUBWF FSBZ,0
BTFSS STATUS,Z
INCF FSBZ,1
JCSK2
BTFSS KZDSS
GOTO JCSK2
CALL DELAY10
BTFSS KZDSS
GOTO JCSK2
GOTO FSTX
FSTX
BTFSC KZDSX
GOTO ZLTX
CALL DELAY10
BTFSC KZDSX
GOTO ZLTX
MOVLW 01H
SUBWF FSBZ,0
BTFSS STATUS,Z
DECF FSBZ,1
JCSK3
BTFSS KZDSX
GOTO JCSK3
CALL DELAY10
BTFSS KZDSX
GOTO JCSK3
GOTO ZLTX
ZLTX
BTFSC KZZL
GOTO ZLTXPD1
CALL DELAY10
BTFSC KZZL
GOTO ZLTXPD1
COMF ZLBZ,1
BTFSS ZLBZ,0
GOTO JCSK4
MOVLW 20H
MOVWF JSS20
MOVWF JSS21
BSF SZBZ,0
JCSK4
BTFSS KZZL
GOTO JCSK4
CALL DELAY10
BTFSS KZZL
GOTO JCSK4
GOTO ZLTXPD1
ZLTXPD1
BTFSS ZLBZ,0
GOTO ZTSC
BTFSS KZZLS
GOTO ZLTXPD2
CALL DELAY10
BTFSC KZZLS
GOTO ZLTXPD2
MOVLW 20H
MOVWF JSS20
MOVWF JSS21
BSF SZBZ,0
MOVLW 0FH
SUBWF SZWD,0
BTFSS STATUS,Z
INCF SZWD,1
JCSK5
BTFSS KZZLS
GOTO JCSK5
CALL DELAY10
BTFSS KZZLS
GOTO JCSK5
GOTO ZLTXPD2
ZLTXPD2
BTFSC KZZLX
GOTO ZTSC
CALL DELAY10
BTFSC KZZLX
GOTO ZTSC
MOVLW 20H
MOVWF JSS20
MOVWF JSS21
BSF SZBZ,0
MOVLW 01H
SUBWF SZWD,0
BTFSS STATUS,Z
DECF SZWD,1
JCSK6
BTFSS KZZLX
GOTO JCSK6
CALL DELAY10
BTFSS KZZLX
GOTO JCSK6
GOTO ZTSC
ZTSC ;计算
CALL ADZH
DECF SZWD,0
CALL CONVERT
MOVWF ZHWD1
INCF SZWD,0
CALL CONVERT
MOVWF ZHWD2
MOVF ZHWD1,W
SUBWF QRT,0
BTFSC STATUS,C
GOTO PDZL1
MOVF ZHWD2,W
SUBWF QRT,0
BTFSC STATUS,C
GOTO TCX
GOTO PDZL2
PDZL1
BCF ZLYSJ,0
GOTO TCX
PDZL2
BSF ZLYSJ,0
GOTO TCX
TCX
MOVF FSBZ,0
BTFSS FSBZ,1
GOTO FSLD
BTFSS FSBZ,0
GOTO FSMD
GOTO FSHD
FSLD ;输出
BSF FSL
BCF FSM
BCF FSH
GOTO ZLSC
FSMD
BCF FSL
BSF FSM
BCF FSH
GOTO ZLSC
FSHD
BCF FSL
BCF FSM
BSF FSH
GOTO ZLSC
ZLSC
BTFSS ZLBZ,0
GOTO ZLXX
BTFSS ZLYSJ,0
GOTO ZLXX
BSF YSJ
GOTO ZLXXX
ZLXX
BCF YSJ
ZLXXX
GOTO CZQCSK
;****************************************中断
ZDCX
MOVWF W_TEMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
BCF STATUS,RP0
BCF STATUS,RP1
BTFSS INTCON,INTF
GOTO TCCX
BCF INTCON,INTF
BTFSC KGJBZ,0
CALL CEEPROM
GOTO INTRB0
TCCX
BTFSS INTCON,T0IF
GOTO INTRB0
BCF INTCON,T0IF
BTFSC GSMG,0
GOTO SXXS
BSF PORTD,4
BSF PORTD,5
GOTO INTRB0
SXXS
BTFSS SZBZ,0
GOTO XXX3
DECFSZ JSS20,1
GOTO XXX1
DECFSZ JSS21,1
GOTO XXX2
GOTO XXX3
XXX1
CALL SZSMXS ;设置温度显示
GOTO INTRB0
XXX2
MOVLW 20H
MOVWF JSS20
CALL SZSMXS ;设置温度显示
GOTO INTRB0
XXX3
BCF SZBZ,0
CALL SNSMXS ;室内温度显示
INTRB0
MOVLW 83H
MOVWF TMR0
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;****************************************延时10ms子程序
DELAY10
MOVLW 1FH
MOVWF 50H
LOOP1
MOVLW 68H
MOVWF 51H
LOOP2
DECFSZ 51H,1
GOTO LOOP2
DECFSZ 50H,1
GOTO LOOP1
RETURN
;****************************************AD子程序
ADZH
MOVLW B'01000001'
MOVWF ADCON0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF ADCON0,GO
NOP
ADCL
BTFSS PIR1,ADIF
GOTO ADCL
MOVF ADRESH,0
MOVWF QRT
BCF PIR1,ADIF
RETURN
;****************************************扫描子程序
;设置温度显示
SZSMXS
MOVF SZWD,0
CALL CONVERT1
MOVWF ZH0
MOVF ZH0,0
ANDLW 0FH
CALL CONVERT2
MOVWF GW0
SWAPF ZH0,0
ANDLW 0FH
CALL CONVERT2
MOVWF SW0
;扫描
BTFSS WDSZX,0
GOTO SMSW
BSF PORTD,4
BCF PORTD,5
MOVF GW0,0
MOVWF PORTC
GOTO SZTC
SMSW
BCF PORTD,4
BSF PORTD,5
MOVF SW0,0
MOVWF PORTC
SZTC
COMF WDSZX,1
RETURN
;室内温度显示
SNSMXS
CALL ADZH
MOVLW 00H
MOVWF COUNT0
CALL CONVERT3
SUBWF QRT,0
BTFSC STATUS,C
GOTO XHPD3
XHPD
INCF COUNT0,1
MOVF COUNT0,0
SUBLW 2BH
BTFSS STATUS,Z
GOTO XHPD0
GOTO XHPD2
XHPD0
MOVF COUNT0,0
CALL CONVERT3
SUBWF QRT,0
BTFSC STATUS,C
GOTO SNWD
GOTO XHPD
XHPD2 ;高于36度,显示HH
MOVLW 89H
MOVWF GW1
MOVWF SW1
GOTO SMXS
XHPD3 ;低于-5.5度,显示DD
MOVLW 0A1H
MOVWF GW1
MOVWF SW1
GOTO SMXS
SNWD
MOVLW 06H
SUBWF COUNT0,0
BTFSS STATUS,C
GOTO FSXS ;负数处理?<0
GOTO ZSXS ;正数处理》0
FSXS
MOVLW 0BFH
MOVWF SW1
MOVF COUNT0,0
CALL CONVERT4
ANDLW 0FH
CALL CONVERT2
MOVWF GW1
GOTO SMXS
ZSXS
MOVF COUNT0,0
SUBLW 06H
BTFSS STATUS,Z
GOTO DY00 ;>0处理
MOVLW 0FFH ;=0处理
MOVWF SW1
MOVLW 0C0H
MOVWF GW1
GOTO SMXS
DY00
MOVF COUNT0,0
CALL CONVERT4
MOVWF ZH1
MOVF ZH1,0
ANDLW 0FH
CALL CONVERT2
MOVWF GW1
SWAPF ZH1,0
ANDLW 0FH
CALL CONVERT2
MOVWF SW1
GOTO SMXS
SMXS ;扫描
BTFSS WDSZX,0
GOTO SMSW1
BSF PORTD,4
BCF PORTD,5
MOVF GW1,0
MOVWF PORTC
GOTO SZTC1
SMSW1
BCF PORTD,4
BSF PORTD,5
MOVF SW1,0
MOVWF PORTC
SZTC1
COMF WDSZX,1
RETURN
;*********************读EEPROM 子程序
DEEPROM
BSF STATUS,RP1
BCF STATUS,RP0
MOVLW 00H
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,0
MOVWF ZLBZ
BSF STATUS,RP1
BCF STATUS,RP0
MOVLW 01H
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF FSBZ
BSF STATUS,RP1
BCF STATUS,RP0
MOVLW 02H
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF SZWD
BCF STATUS,RP1
RETURN
;****************************************写EEPROM 子程序
CEEPROM
BSF STATUS,RP1
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 00H
MOVWF ADDR
MOVF ADDR,0
MOVWF EEADR
MOVF ZLBZ,0
MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP1
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 01H
MOVWF ADDR
MOVF ADDR,0
MOVWF EEADR
MOVF FSBZ,0
MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP1
BSF STATUS,RP0
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 02H
MOVWF ADDR
MOVF ADDR,0
MOVWF EEADR
MOVF SZWD,0
MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -