📄 温度控制.txt
字号:
温度显示器
AD_STATUS EQU 20H;定义寄存器地址
DELAY1 EQU 21H
DELAY2 EQU 22H
AD_STATUS1 EQU 23H
M1 EQU 24H
MUXHIGH EQU 25H
MUXLOW EQU 26H
M2 EQU 27H
MSD EQU 28H
LSD EQU 29H
VALUE_REG EQU 30H
AD_STATUSPLY EQU 31H
BCD_STATUS EQU 32H
*************************************************************
*************************************************************
ORG 0000H
NOP
GOTO MAIN;
ORG 0004H
BCF PIR1 1
RETFIE
TABLE MOVF AD_STATUSPLY, W;
ANDLW B"00001111"
ADDWF PCL, F
RETLW B'01111110'; 0
RETLW B'00001100'
RETLW B'10110110'
RETLW B'10011110'
RETLW B'11001100'
RETLW B'11011010'
RETLW B'11111010'
RETLW B'00001110'
RETLW B'11111110'
RETLW B'11011110'
RETURN
**********************
ZHUCHENGXU
*********************
MAINLINE
CALL LNITIAL
MAINLOOP
CALL AD_COVERT; 调用AD转化子程序
MOVF AD_STATUS, W
MOVWF BCD_STATUS
CALL BCD_CONVERT
CALL DISPLAYVALUE; 调用显示子程序
CALL CMP
BTFSC PORTB, 0
GOTO MAINLOOP
CALL DELAY4MS
CALL DELAY4MS 防抖
BTFSC PORTB, 0 按键1未按下,进入主循环
*****************************
INITIAL
BANKSEL PORTC;初始化
CLRF PORTC
BANKSEL TRISC
CLRF TRISC;设为输出口
BANKSEL TRISB
MOVLW 0FF
MOVWF TRISB;b设为输入
CLRF TRISD
BANKSEL ADCON1;设A口A0为转换接入口
MOVLW B'00001110'
MOVWF ADCON1
BSF TRISA,0
BANKSEL ADCON0
MOVLW B'10000001'
MOVWF ADCON0
BANKSEL INTCON
BSF INTCON, GIE
CALL READ
RETURN
***********************
AD转化子程序
************************
AD_CONVERT
BANKSEL ADCON0
BSF ADCON0, GO
WAIT
BTFSC ADCON0, GO
GOTO WAIT
MOVF ADRESH, W
MOVWF AD_STATUSL
MUXAB 乘法子程序
CLRF MUXHIGH
MOVLW 98
MOVWF M1
CLRW
LOOP1
ADDWF AD_STATUS, W 自加98次
BTFSC STATUS,C
INCF MUXHIGH, F
DECFSZ M1,F
GOTO LOOP1
MOVWF MUXLOW
MOVLW 128
SUBWF MUXLOW, W
BTFSC STATUS,C
INCF MUXHIGH
MOVLW 2
ADDWF MUXHIGH,F
MOVF MUXHIGH,W
MOVWF AD_STATUS
CALL DELAY4MS
CALL DELAY4MS
RETURN
***********************************
BCD转化程序
***********************************
BCD_CONVERT
CLRW
MOVF BCD_STATUS,W
MOOVWF LSD
CLRF MSD
LOOP
MOVLW 10
SUBWF LSD,W
BTFSS STATUS,C
GOTO OVER
MOVWF LSD
INCF MSD
GOTO LOOP
OVER
RETURN
********************************
4m延时程序
****************************
DELAY4MS
MOVLW 80H
MOVWF DELAY1
CLRF DELAY2
LOOP4MS
DECFSZ DELAY2,F
GOTO LOOP4MS
DECFSZ DELAY1,F
GOTO LOOP4MS
RETURN
*************************
显示子程序
*************************************
DISPLAYVALUE
DISPLAY_MSD
MOVF MSD,W
MOVWF AD_STATUSPLY
CALL TABLE
MOVWF PORTC
DISPLAY_LSD显示低位
MOVWF AD_STATUSPLY
CALL TABLE
MOVWF PORTD
RETURN
************************************
UPDATAVALUE
CALL INITIATSET
CALL BCD_COVERT
CALL DISPLAYVALUE
ADDSUBLOOP
BANKSEL PORTD
BSF PORTD,0
CALL DELAY4MS; 去抖
CALL DELAY4MS
BTFSS PORTB,0; 未更改按键,结束
GOTO STOPADD
MOVLW 100; 否则进入更改,判断设置值与100的大小
SUBWF VALUE_REG,W; 大于进入ABOVE100子程序
BTFSC STATUS, Z
GOTO ABOVE100
BTFSC PORTB,1 否则,判断是否按下加1键
CALL DELAY4MS 并去抖动
CALL DELAY4MS
BTFSC PORTB,1 若按下,则设定值加1
INCF VALUE_REG,F
MOVLW 01H 否则,判断是否小于1
SUBWF VALUE_REG,W
BTFSS STATUS,C
GOTO ADDSUBLOOP
ABOVE100
BTFSC PORTB,2
CALL DELAY4MS
CALL DELAY4MS
BTFSC PORTB,2
DECF VALUE_REG,F
CLRW
MOVF VALUE_REG,F
MOVWF BCD_STATUS
CALL BCD_CONVERT
CALL DISPALYVALUE
GOTO ADDSUBLOOP
STOPADD
MOVF VALUE_REG,W
BCF PORTD,0
CALL WRITE 调用写子程序
RETURN
******************************************
INITIALSET
CALL READ
RETURN
********************************************
WRITE
BANKSEL EEADR
MOVLW 35H
MOVWF EEDAR
BANKSEL VALUE_REG
MOVF VALUE_REG,W
BANKSEL EEDATA
MOVWF EEDATA
BANKSEL EECON1
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BANKSEL PIR2
WAIT_EEIF
BTFSC PIR2,EEIF
GOTO WAITT_EEIF
BCF PIR2,EEIF
BCF INTCON,GIE
BCF EECON1,WREN
BANKSEL M1
RETURN
READ
BANKSEL EEADR
MOVLW 35H
MOVWF EEADR
BANKSEL EECON1
BCF EECON1,EEPGD
BSF EECON1,RD
BANKSEL EEDATA
MOVF EEDATA,W
BANKSEL VALUE_REG
MOVWF VALUE_REG
RETURN
CMP
BANKSEL TRISE
CLRF TRISE
BANKSEL VALUE_REG
CLRF PORTE
MOVF VALUE_REG,W
SUBWF AD_STATUS,W
BTFSC STATUS,Z 若相等进入cmp2
GOTO CMP2
BTFSC STATUS,C 否则判断是否大于
GOTO CMP1
BTFSC STATUS,C
GOTO CMP3
CMP1
BSF PORTE,0
RETURN
CMP2
BSF PORTE,1
RETURN
CMP3
BSF PORTRE,2
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -