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

📄 xsg.asm

📁 控制系统
💻 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 + -