📄 mainn.asm
字号:
LIST P=16F72;F=INHX8M
#INCLUDE P16F72.inc
#define SDA PORTA,3
#define SCL PORTA,1
;50H.1 SHIJIANPANDUAN
;50H.2 WENDUBIJIAOBIAOZHI
;---------------------------------
CBLOCK 0X20
DISP1 ;定义6个显示缓冲区
DISP2
DISP3
DISP4
DISP5
DISP6
W_STACK ;中断时用于暂存W寄存器值
ST_STACK ;中断时用于暂存STATUS寄存器值
FLAG ;标志寄存器
ADDR ;温度地址2401中00H为温度值,01H为小时;02H为分钟
COUNT
TEMP
DAT
ADTEMP
REALT
TPRE ;
TIPRE1OH
TIPRE1OM
TIPRE1FH
TIPRE1FM
TIPRE2OH
TIPRE2OM
TIPRE2FH
TIPRE2FM
TIPRE3OH
TIPRE3OM
TIPRE3FH
TIPRE3FM
DH
DM
SETCOUNT
ENDC
;***********标志寄存器位定义以及程序中常数定义***********
CONSTANT SETF=0 ;设置键按下标志
CONSTANT UDF=1 ;增减键按下标志
;------------------------------------------------
ORG 0x0000
GOTO MAIN
ORG 0X0004
GOTO INTPRO
ORG 0X50
MAIN BCF STATUS,RP0
CLRF PORTC
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISC ;C口定义为输出RC0-RC6为数码管A-G段,RC7为分钟低位位选W6
MOVLW 0XE0
MOVWF TRISB ;RB0为温度高位位选W1,RB1为温度低位位选W2,RB2为小时高位
;RB3为小时低位,RB4为分钟高位,RB5=SET,RB6=UP,RB7=DOWN
MOVLW 0x00
MOVWF OPTION_REG ;开启弱上拉功能
MOVLW 0XFF
MOVWF ADCON1 ;A全部设置为数字口
MOVLW 0XFF
MOVWF TRISA
BCF PIR1
BCF STATUS,RP0
MOVLW 0XFF
MOVWF PORTB
MOVLW 0X00
MOVWF INTCON
MOVLW 0X40
MOVWF ADCON0 ;FOSC/8
CLRF PORTA
BSF PORTA,5
;CALL AD
CALL R2401 ;读取存储器内温度和时间预设置值并存放在指定存储器内
CALL R8563 ;读取日历时钟
CALL DISP ;显示
BCF INTCON,RBIF
BSF INTCON,RBIE
BSF INTCON,GIE
LOOP BTFSS PORTB,5
;CALL SET1
CALL RELTAD
CALL TDEAL
BCF INTCON,GIE
CALL R8563
BSF INTCON,GIE
CALL DISP
CALL PDDZ
GOTO LOOP
;CALL DISP_1 ;温度显示子程序
;CALL RD8653 ;读8653的小时和分钟,分别存在TI与MI中
;CALL DISP_2 ;小时显示子程序
;CALL DISP_3 ;分钟显示子程序
MOVLW 0X02
CALL RD2401
MOVF TEMP,0
MOVWF TI2401
CALL DISP_1
CALL DISP_2
CALL DISP_3
MOVLW 0X01
CALL RD2401
MOVF TEMP,0
MOVWF MI2401 ;读2401中设定的时间
CALL DISP_1
CALL DISP_2
CALL DISP_3
CALL BJTIME ;实际时间到设定时间吗?
BTFSS 50H,1 ;50H。1是到设定时间的标志位,到了为1
GOTO MAIN
CLRW
CALL RD2401 ;读2401中设定的温度值
MOVF TEMP,0
MOVWF WENDU2401
CALL DISP_1
CALL DISP_2
CALL DISP_3
BSF STATUS,RP0
MOVLW 0XFF
MOVWF ADCON1
MOVLW 0X00
MOVWF TRISA
BCF STATUS,RP0 ;将A口全设定为数字输出口
CALL BJWENDU ;温度到设定值?
BTFSS 50H.2 ;50H。2是温度标志位,低于设定温度为1
GOTO LOOP1 ;高于设定温度到LOOP1
BSF PORTA,2 ;开泵
GOTO MAIN
LOOP1 BCF PORTA,2 ;停泵
GOTO MAIN
;==========================RD8653===========================
;============================设置程序===================================
SET1 CALL DISP_1
CALL DISP_2
CALL DISP_3
CALL DISP_2
CALL DISP_3
BTFSS PORTB,6 ;UP?
CALL TEADD
BTFSS PORTB,7
CALL TESUB
BTFSS PORTB,5
GOTO SET2
CALL MIN1
BTFSS 50H,3 ;50H。3是1分钟设定时间到的标志,超过1分钟设定为1
GOTO SET1
MOVF WENDU,0
MOVWF DAT
CLRW
CALL WR2401
RETURN
SET2 MOVF WENDU,0
MOVWF DAT
CLRW
CALL WR2401
CALL DISP_1
CALL DISP_2
CALL DISP_3
CALL DISP_1
CALL DISP_3
BTFSS PORTB,6 ;UP?
CALL TADD
BTFSS PORTB,7
CALL TSUB
BTFSS PORTB,5
GOTO SET3
CALL MIN1
BTFSS 50H,3 ;50H。3是1分钟设定时间到的标志,超过1分钟设定为1
GOTO SET2
MOVF TI,0
MOVWF DAT
MOVLW 0X01
CALL WR2401
RETURN
SET3 MOVF TI,0
MOVWF DAT
MOVLW 0X01
CALL WR2401
CALL DISP_1
CALL DISP_2
CALL DISP_3
CALL DISP_1
CALL DISP_2
BTFSS PORTB,6 ;UP?
CALL MADD
BTFSS PORTB,7
CALL MSUB
BTFSS PORTB,5
GOTO SET4
CALL MIN1
BTFSS 50H,3 ;50H。3是1分钟设定时间到的标志,超过1分钟设定为1
GOTO SET3
SET4 MOVF MI,0
MOVWF DAT
MOVLW 0X02
CALL WR2401
RETURN
TEADD INCF WENDU,1
MOVLW 0X99
SUBWF WENDU,0
BTFSC STATUS,0
GOTO TEADD1
MOVLW 0X0F
ANDWF WENDU,0
MOVWF R1
MOVLW 0XF0
ANDWF WENDU,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF WENDU,1
MOVLW 0X10
ADDWF WENDU,1
RETURN
TEADD1 CLRF WENDU
RETURN
TESUB DECF WENDU,1
MOVLW 0XF0
SUBWF WENDU,0
BTFSC STATUS,0
GOTO TESUB1
MOVLW 0X0F
ANDWF WENDU,0
MOVWF R1
MOVLW 0XF0
ANDWF WENDU,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF WENDU,1
MOVLW 0X10
SUBWF WENDU,1
MOVLW 0X09
ADDWF WENDU,1
RETURN
TESUB1 MOVLW 0X99
MOVWF WENDU
RETURN
TADD INCF TI,1
MOVLW 0X23
SUBWF TI,0
BTFSC STATUS,0
GOTO TADD1
MOVLW 0X0F
ANDWF TI,0
MOVWF R1
MOVLW 0XF0
ANDWF TI,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF TI,1
MOVLW 0X10
ADDWF TI,1
RETURN
TADD1 CLRF TI
TRTURN
TSUB DECF TI,1
MOVLW 0XF0
SUBWF TI,0
BTFSC STATUS,0
GOTO TSUB1
MOVLW 0X0F
ANDWF TI,0
MOVWF R1
MOVLW 0XF0
ANDWF TI,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF TI,1
MOVLW 0X10
SUBWF TI,1
MOVLW 0X09
ADDWF TI,1
RETURN
TESUB1 MOVLW 0X23
MOVWF TI
RETURN
MADD INCF MI,1
MOVLW 0X59
SUBWF MI,0
BTFSC STATUS,0
GOTO MADD1
MOVLW 0X0F
ANDWF MI,0
MOVWF R1
MOVLW 0XF0
ANDWF MI,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF MI,1
MOVLW 0X10
ADDWF MI,1
RETURN
MADD1 CLRF MI
RETURN
MSUB DECF MI,1
MOVLW 0XF0
SUBWF MI,0
BTFSC STATUS,0
GOTO MSUB1
MOVLW 0X0F
ANDWF MI,0
MOVWF R1
MOVLW 0XF0
ANDWF MI,0
MOVWF R2
MOVLW 0X0A
SUBWF R1,0
BTFSS STATUS,0
RETURN
MOVLW 0XF0
ANDWF MI,1
MOVLW 0X10
SUBWF MI,1
MOVLW 0X09
ADDWF MI,1
RETURN
MSUB1 MOVLW 0X59
MOVWF MI
RETURN
;-------------------------------------------------a/d-----------------
; ----------AD--------------------
AD BSF STATUS,RP0
MOVLW 0X00
MOVWF ADCON0
MOVLW 0XFF
MOVWF TRISA
BCF STATUS,RP0
BSF ADCON0 , ADON
MOVLW 0x40
MOVWF 0x22
AD1 DECFSZ 0x22 , f
GOTO Label_00CF
BSF ADCON0,GO
AD2 BTFSC ADCON0 ,GO
GOTO AD2
MOVF ADRES , W
MOVWF WENDU1
BCF ADCON0 , ADON;;;;关闭AD
CALL AD_TABLE
RETURN
;======================================读2401中设定的温度值==========================================
RD2401 BSF STATUS,RP0
MOVLW 0XFF
MOVWF ADCON0
MOVLW 0X00
MOVWF TRISA
BCF STATUS,RP0
MOVWF ADDR
CALL START24
MOVLW 0A0H
CALL SUBS
MOVFW ADDR
CALL SUBS
CALL START24
MOVLW 0A1H
CALL SUBS
BSF STATUS ,RP0
BSF TRISA ,3
BCF STATUS ,RP0
MOVLW 08H
MOVWF COUNT
RD000
NOP
NOP
NOP
BSF SCLK
NOP
BSF STATUS,C
BTFSS SDA
BCF STATUS,C
RLF TEMP ,1
BCF SCLK
DECFSZ COUNT ,1
GOTO RD000
BSF STATUS ,RP0
BCF TRISA ,3
BCF STATUS ,RP0
BSF SDA
CALL DELAY2
BSF SCLK
CALL DELAY2
BCF SCLK
CALL STOP
MOVFW TEMP
RETURN
;==========================WR2401=====================================
WT24 MOVWF ADDR
CALL START24
MOVLW 0A0H
CALL SUBS
MOVFW ADDR
CALL SUBS
MOVFW DAT
CALL SUBS
CALL STOP
RETURN
;=======================================================================
============================================================
START24
BSF SDA
BSF SCLK
CALL DELAY2
BCF SDA
CALL DELAY2
BCF SCLK
RETURN
STOP
BCF SDA
NOP
NOP
BSF SCLK
CALL DELAY2
BSF SDA
RETURN
SUBS
MOVWF TEMP
MOVLW 08H
MOVWF COUNT
SH01
RLF TEMP ,1
BSF SDA
BTFSS STATUS ,C
BCF SDA
NOP
BSF SCLK
CALL DELAY2
BCF SCLK
DECFSZ COUNT ,1
GOTO SH01
BSF SDA
NOP
NOP
BSF SCLK
BSF STATUS,RP0
BSF TRISA ,3
BCF STATUS,RP0
REP
BTFSC SDA
GOTO REP
BCF SCLK
BSF STATUS,RP0
BCF TRISA ,3
BCF STATUS,RP0
RETURN
DELAY2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETURN
===============================================================================
====================================温度显示程序====================
DISP_1 MOVF WENDU,0
MOVLW 0X0F
ANDWF WENDU,0
MOVWF R1
MOVLW 0XF0
ANDWF WENDU,0
MOVWF R2
MOVF R1,0
CALL TABLE
MOVWF PORTC
BCF PORTB,1
CALL DELAY5MS
BSF PORTB,1
MOVF R2,0
CALL TABLE
MOVWF PORTC
BCF PORTB,0
CALL DELAY5MS
BSF PORTB,0
RETURN
====================================XIAOSHI显示程序====================
DISP_2 MOVF TI,0
MOVLW 0X0F
ANDWF TI,0
MOVWF R1
MOVLW 0XF0
ANDWF TI,0
MOVWF R2
MOVF R1,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -