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

📄 temp_dis.asm

📁 基于PIC 8位机的智能温控仪
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 				RRF   		TEMP2,1
 				RRF   		TEMP2,1
 				RRF   		TEMP2,1
 				RRF   		TEMP2,1
 				RRF   		TEMP2,1
 				RRF   		TEMP2,1  		;采样结果右移6位送TEMP2
 				MOVLW 		03H
 				ANDWF 		TEMP2,1    		;屏蔽高6位
 				MOVF  		TEMP2,0
 				ADDWF 		TEMP1,0
 				MOVWF 		ADR_int
 				ADDWF 		ADR_int,0
 				MOVWF 		ADR
 				RETURN
;******************************上限修改子程序*******************************
Change_Max	MOVLW 		01H
 				MOVWF 		DISP_dig
 				MOVF  		MAX,0
 				MOVWF 		DISP_seg
 				CALL  		Display       	;显示上限值个位
 				MOVLW 		02H
 				MOVWF 		DISP_dig
 				MOVF  		MAX,0
 				MOVWF 		DISP_seg
 				SWAPF 		DISP_seg,1
 				CALL  		Display      	;显示上限值十位
 				MOVLW 		03H
 				MOVWF 		DISP_dig
 				MOVLW  		00H
 				MOVWF 		DISP_seg
 				CALL  		Display      	;显示上限值百位
 				MOVLW 		04H
 				MOVWF 		DISP_dig
 				MOVLW 		0CH
 				MOVWF 		DISP_seg
 				CALL  		Display     	;最高位显示"H"
            MOVF        MAX,0           
            MOVWF       MAX?_temp
LOP1 		BTFSS 		PORTB,0    		;K1键松开?
 				GOTO  		LOP1            ;否,循环检测
            CALL        DELAY10         ;是,延时10ms
BTFSS 		PORTB,0    		;再次检测K1键是否松开?
          GOTO  		LOP1            ;否,循环检测
 			    BSF 		T1CON,0         ;是,TMR1开始计数,15s定时中断开始
 				MOVLW 		1EH          	;TMR1中断"30"次则自动跳出上下限值修改
 				MOVWF 		TMR1_count
LOP2 		BTFSC 		PORTB,2    		;K3键按下?
				GOTO        LOP2_K4         ;否,检测K4键
            CALL        DELAY10         ;是,延时10ms
BTFSC       PORTB,2         ;再次检测K3键是否按下?
            GOTO  		LOP2_K4         ;否,检测K4键
            GOTO        LOP3            ;是,开始修改上限值十位
LOP2_K4     BTFSC 		PORTB,3         ;K4键按下?
 				GOTO        LOP2_K1         ;否,检测K1
CALL        DELAY10         ;是,延时10ms
 				BTFSC 		PORTB,3         ;再次检测K4键是否按下?
GOTO        LOP2_K1         ;否,检测K1
GOTO        LOP4            ;是,开始修改上限值个位
LOP2_K1     BTFSC 		PORTB,0         ;K1键按下?
 				GOTO  		LOP2            ;否,检测K3
 				CALL        DELAY10         ;是,延时10ms
BTFSC 		PORTB,0         ;再次检测K1键是否按下?
GOTO  		LOP2            ;否,检测K3
            BCF 		T1CON,0         ;关TMR1计数器,禁止中断
		    MOVF        MAX?_temp,0      ;保存修改后的上限值
            MOVWF       MAX?
CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				GOTO  		NEXT1           ;跳出上下限修改
LOP3 		BSF 		T1CON,0         ;TMR1开始计数,15ms定时中断开始
 				MOVLW 		1EH             ;TMR1中断"30"次则自动跳出上下限值修改
 				MOVWF 		TMR1_count
 				CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
            MOVLW 		10H
ADDWF 		MAX?_temp,1    ;十位值加1
MOVF  		MAX?_temp,0
            SUBLW 		99H             ;是否超出温度测量范围
            BTFSC 		STATUS,0
            GOTO 		LOP5            ;否,则转显示
            MOVF  		MIN,0           ;是,则把下限值赋给上限值
            MOVWF 		MAX?_temp
            GOTO  		LOP5            ;转显示
LOP4        BSF 		T1CON,0         ;TMR1开始计数,15ms定时中断开始
MOVLW 		1EH             ;TMR1中断"30"次则自动跳出上下限值修改
            MOVWF 		TMR1_count
            CALL  		DELAY30
            CALL  		DELAY30
            CALL  		DELAY30
            CALL  		DELAY30
 				MOVLW 		01H
 				ADDWF 		MAX?_temp,1      ;个位值加1
 				MOVF  		MAX?_temp,0
 				ANDLW 		0FH
 				SUBLW 		09H
 				BTFSC 		STATUS,0   		;个位值是否大于9
 				GOTO  		LOP5       		;否,转显示
 				MOVLW 		0F0H       		;是,个位值清零
 				ANDWF 		MAX?_temp,1
 				MOVF  		MIN,0
 				SUBWF 		MAX?_temp,0     	;上限值是否低于下限值
 				BTFSC 		STATUS,0
 				GOTO  		LOP5       		;否,转显示
 				MOVF  		MIN,0      	    ;是,则把下限值赋给上限值
 				MOVWF 		MAX?_temp
 				GOTO  		LOP5       		;转显示
LOP5 		MOVLW 		01H
 				MOVWF 		DISP_dig
 				MOVF  		MAX?_temp,0
 				MOVWF 		DISP_seg
 				CALL  		Display    		;显示个位
 				MOVLW 		02H
 				MOVWF 		DISP_dig
 				MOVF 		MAX?_temp,0
 				MOVWF 		DISP_seg
 				SWAPF 		DISP_seg,1
 				CALL  		Display    		;显示十位
 				GOTO  		LOP2
 				RETURN
;*******************************下限修改子程序****************************
	Change_Min  MOVLW 		01H
 				MOVWF 		DISP_dig
 				MOVF  		MIN,0
 				MOVWF 		DISP_seg
 				CALL  		Display      	;显示下限值个位
 				MOVLW 		02H
 				MOVWF 		DISP_dig
 				MOVF  		MIN,0
 				MOVWF 		DISP_seg
 				SWAPF 		DISP_seg,1
 				CALL  		Display      	;显示下限值十位
 				MOVLW 		03H
 				MOVWF 		DISP_dig
 				MOVLW  		00H
 				MOVWF 		DISP_seg
 				CALL  		Display      	;显示下限值百位
 				MOVLW 		04H
 	MOVWF 		DISP_dig
 	MOVLW  		0DH
 	MOVWF 		DISP_seg
	CALL  		Display      	;最高位显示"L"
		MOVF        MIN,0
            MOVWF       MIN_temp
LOP6        BTFSS 		PORTB,1    		;K2键松开?
 	GOTO  		LOP6            ;否,循环检测
 	CALL        DELAY10         ;是,延时10ms
  BTFSS       PORTB,1         ;再次检测K2是否松开
  GOTO        LOP6            ;否,循环检测
  BSF 		T1CON,0         ;是,TMR1开始计数,15ms定时中断开始
 	MOVLW 		1EH          	;TMR1中断"30"次则自动跳出上下限值修改
 	MOVWF 		TMR1_count
LOP7 		BTFSC 		PORTB,2    		;K3键是否按下?
 				GOTO  		LOP7_K4         ;否,检测K4键
            CALL        DELAY10         ;是,延时10ms
            BTFSC 		PORTB,2    		;再次检测K3键是否按下?
            GOTO        LOP7_K4         ;否,检测K4键
            GOTO        LOP8            ;是,开始下限值十位修改
LOP7_K4     BTFSC 		PORTB,3         ;K4键是否按下?
            GOTO        LOP7_K2         ;否,检测K2键
            CALL        DELAY10         ;是,延时10ms
            BTFSC 		PORTB,3         ;再次检测K4键是否按下?
 				GOTO  		LOP7_K2         ;否,检测K2键
 				GOTO        LOP9            ;是,开始下限值个位修改
LOP7_K2     BTFSC 		PORTB,1         ;K2键是否按下?
 				GOTO  		LOP7            ;否,检测K3键
 				CALL        DELAY10         ;是,延时10ms
            BTFSC 		PORTB,1         ;再次检测K2键是否按下?
            GOTO        LOP7            ;否,检测K3键
            BCF 		T1CON,0         ;是,关TMR1计数器,禁止中断
MOVF        MIN_temp,0
            MOVWF       MIN             ;保存修改后的下限值
CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				GOTO  		NEXT2           ;跳出上下限修改
LOP8		BSF 		T1CON,0       	;TMR1开始计数,15ms定时中断开始
 				MOVLW 		1EH             ;TMR1中断"30"次则自动跳出上下限值修改
 				MOVWF 		TMR1_count 
 				CALL 		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				MOVLW 		10H
 				ADDWF 		MIN_temp,1      ;下限十位值加1
 				MOVF  		MAX,0
 				SUBWF 		MIN_temp,0     
 				BTFSS 		STATUS,0     	;下限值比上限值大?
 				GOTO  		LOP10        	;否,转显示
 				MOVF 		MAX,0         	;是,则把上限值赋给下限值
 				MOVWF 		MIN_temp
 				GOTO 		LOP10          	;转显示
LOP9   		BSF 		T1CON,0         ;TMR1开始计数,15ms定时中断开始
 				MOVLW 		1EH          	;TMR1中断"30"次则自动跳出上下限值修改
 				MOVWF 		TMR1_count
 				CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				CALL  		DELAY30
 				MOVLW 		01H
 				ADDWF 		MIN_temp,1      ;个位值加1
 				MOVF  		MAX,0
 				SUBWF 		MIN_temp,0 
 				BTFSC 		STATUS,0    	;下限值比上限值大?
 				GOTO  		LOP11       	;否,转下一步
 				MOVF  		MAX,0       	;是,则把上限值赋给下限值
 				MOVWF 		MIN_temp
 				GOTO  		LOP10
LOP11 		MOVF 		MIN_temp,0
 				ANDLW 		0FH
 				SUBLW 		09H
 				BTFSC 		STATUS,0    	;个位值大于9
 				GOTO 		LOP10        	;否,转显示
 				MOVLW 		0F0H        	;是,个位值清零
 				ANDWF 		MIN_temp,1
LOP10 		MOVLW 		01H
 				MOVWF 		DISP_dig
			 	MOVF  		MIN_temp,0
 				MOVWF 		DISP_seg
 				CALL  		Display      	;显示个位
 				MOVLW 		02H
 				MOVWF 		DISP_dig
 				MOVF  		MIN_temp,0
 				MOVWF 		DISP_seg
 				SWAPF 		DISP_seg,1
 				CALL  		Display      	;显示十位   
 				RETURN
;*******************************显示子程序********************************
Display		BCF   		PORTC,4      	;置7219LORD端低电平,允许接收
 				MOVLW 		08H
 				MOVWF 		DISP_count   	;置循环次数为8
LP1 		BCF 		PORTC,3     	;时钟端置低电平,准备转换
 				BTFSS 		DISP_dig,7  	;判断待传数据位是1吗?
 				GOTO        PC5_CLR1        ;否,PORTC.5清零
 				BSF   		PORTC,5     	;是,PORTC.5置1
            GOTO        CLK_UP1         ;转CLK_UP1
PC5_CLR1    BCF   		PORTC,5      	;否,待传数据置0
NOP
CLK_UP1     BSF   		PORTC,3      	;给时钟上跳沿启动一位传输
 				RLF   		DISP_dig,1   	;下一位待传数据送Disp_dig第7位
 				DECFSZ 		DISP_count,1	;是否传完本字节?
 				GOTO  		LP1          	;否,循环
 				MOVLW 		08H          	;是,传下一字节数据
 				MOVWF 		DISP_count
LP2 		BCF 		PORTC,3         ;时钟端置低电平,准备转换
 				BTFSS 		DISP_seg,7      ;判断待传数据位是1吗?
 				GOTO        PC5_CLR2        ;否,PORTC.5清零
            BSF   		PORTC,5     	;是,PORTC.5置1
GOTO        CLK_UP2         ;转CLK_UP2
PC5_CLR2    BCF   		PORTC,5      	;否,待传数据置0
 				NOP
CLK_UP2     BSF   		PORTC,3         ;给时钟上跳沿启动一位传输
 				RLF   		DISP_seg,1      ;下一位待传数据送Disp_seg第7位
            DECFSZ      DISP_count,1    ;是否传完本字节?
 				GOTO  		LP2             ;否,循环
 				BSF   		PORTC,4       	;是,置7219LORD端高电平,禁止接收
 				RETURN
 				END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -