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

📄 main.asm

📁 采用的是凌阳的65系列单片机,型号是2408控制板中有10段水位以及衣物重量测试等功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;==================================================================================
; The information contained herein is the exclusive property of
; Sunplus Technology Co. And shall not be distributed, reproduced,
; or disclosed in whole in part without prior written permission.
;       (C) COPYRIGHT 2004   SUNPLUS TECHNOLOGY CO.                                  
;                   ALL RIGHTS RESERVED
; The entire notice above must be reproduced on all authorized copies.
;==================================================================================
																					
;==================================================================================
;	Project Name	:	
;	Applied Body	:	SPMC65P2408A
;	Firmware version:
;	Programer		:
;	Date			:	
;	Description		:	
;						
;	Hardware Connect:	
;	Link File		:	
;	IDE Version		:	
;	BODY Version	:
;==================================================================================

.SYNTAX 6502							; Process standard 6502 addressing syntax
.LINKLIST								; Generate linklist information
.SYMBOLS								; Generate symbolic debug information

;****************************************
;*										*
;*		System Register Define			*
;*										*
;****************************************
.INCLUDE	SPMC65P2408A.inc			; Define all hardware,Registers and ports.
.INCLUDE	LIB_VAR.INC
.INCLUDE	AN_O0100.INC


;.............................................................
;.......................端口定义..............................
PA:  	      EQU	         0X00   ; Port A data b0~b7(A)
ZT            EQU             0		;   撞桶检测	
D_164         EQU             1		;
C_164         EQU             2     ;
COM5          EQU             3     ;
COM4          EQU             4     ;
COM3          EQU             5     ;
COM2          EQU             6     ;
COM1          EQU             7     ;
;
PB:  	      EQU	         0X01  ; Port B data b0~b7(A)
SW            EQU             0     ;
PB1           EQU             1     ;
CK2	          EQU             2		;
CK1           EQU             3		;
IRQ           EQU             4		;过零信号
PB5           EQU             5		;
PB6           EQU             6     ;蜂鸣器输出
MG            EQU             7		;门盖
; 
PC:  	      EQU	         0X02 ; Port C data b0~b3(A)
JS            EQU             0     ;进水
AK            EQU             1     ;电磁阀
JDQ           EQU             2		;继电器
MH            EQU             3		;模糊测试(衣物)                 //PC3   PA0  PB7   PB0  PB4  PB3  PB2  

;
PD:  	      EQU	         0X03 ; Port D data b0~b2(A)
FZ            EQU             0   	;正转
ZZ            EQU             1   	;反转
PS            EQU             2   	;排水
PD3			  EQU			  3   	;

;
PA_DIR:	      EQU	         0X04 ; Port A direction control  b0~b7(W), 0=In, 1=Out
PB_DIR:       EQU	         0X05 ; Port B direction control b0~b7(W)
PC_DIR:       EQU	         0X06 ; Port C direction control b0~b3(W)
PD_DIR:       EQU	         0X07 ; Port D direction control b0~b2(W)
PA_ATB:       EQU            0X08 ; Port A attribute register b0~b7(W)
PB_ATB:       EQU            0X09 ; Port B attribute register b0~b7(W)
PC_ATB:       EQU            0X0A ; Port C attribute register b0~b3(W)
PD_ATB:       EQU            0X0B ; Port D attribute register b0~b2(W)


SM_SHOW:		.MACRO		VAR7
				LDA			VAR7
				JSR			SHOW_SMG
				.ENDM
				
BJ16:			.MACRO		VAR8,VAR9,VAR10,VAR11
				LDA			VAR8
				STA			X1
				LDA			VAR9
				STA			X2
				LDA			VAR10
				STA			Y1
				LDA			VAR11
				STA			Y2
				JSR			MATH
				.ENDM				



;****************************************
;*										*
;*		Data memory Define				*
;*										*
;****************************************
.PAGE0									; define values in the range from 00h to FFh
GB_Test_BCDdata			DS			1
COM_BUF					DS			1
SHINE_BUF				DS			1
LED_TEMP				DS			1	
LED_BUF1				DS			1
LED_BUF2				DS			1
LED_BUF3				DS			1
LED_BUF4				DS			1
LED_BUF5				DS			1
TEMP_164				DS			1
KEY_S					DS			1
KEY_L					DS			1
GC_COUNT				DS			1
CX_COUNT				DS			1
SW_COUNT				DS			1
DATA_H					DS			1
DATA_L					DS			1

W_S1					DS			1
W_S2					DS			1

MH_JS_L					DS			1
MH_JS_H					DS			1
MH_JS_TEMP				DS			1

MH_T					DS			1
MH_TEMP					DS			1



FLAG_MH					DS			1
MH_C					EQU			0
UP						EQU			1


FLAG1					DS			1
MH_SHINE				EQU			0   ;模糊闪烁标记
SM_G					EQU			1   
SYS_G					EQU			2    
N_MH					EQU			3	;需要模糊么?
WORK					EQU			4   ;工作标记
STOP					EQU			5   ;暂停标记
PS_BH					EQU			6	;排水7秒检测
EOOR					EQU			7	;错误


MATH_FLAG				DS		1		;计算标记
M_DY					EQU		0
M_XY					EQU		1
M_DDY					EQU		2



FLAG2					DS			1
BF_BG					EQU			1	;开始显示时间
AK_W					EQU			2   ;A口的工作标记(进水到后的延时)
FLAG_JP					EQU			3	;浸泡标记
FLAG_JPW				EQU			4	;浸泡洗涤标记
FLAG_PHX				EQU			5	;平衡洗标记
XD_BS					EQU			6	;洗涤补水标记
BH_7					EQU			7	;运行在7S排水延时保护标记


FLAG3					DS			1
BH_JS					EQU			0
WARM_FLAG				EQU			1
FLAG_DOOR				EQU			2
FLAG_TS					EQU			3								
YZ						EQU			4
YZW						EQU			5
SW_WORK					EQU			6
SSS						EQU			7


W_FLAG					DS			1

SHINE2_H				DS			1
SHINE2_L				DS			1
SHINE3_H				DS			1
SHINE3_L				DS			1



E_FLAG					DS			1
AQKG					EQU			0
SWQ						EQU			1
JS_CS					EQU			2
PS_CS					EQU			3
ZT3C					EQU			4
YY_AQKG					EQU			5

POWER					DS			1

FLAG4					DS			1
SW_CK					EQU			0
SW_ALLOW				EQU			1
SW_BJ					EQU			2
KEY_SW					EQU			3


LT_M					DS			1
LT_S					DS			1

ZT_COUNT				DS			1


ZT_FLAG					DS			1
ZT_ALLOW				EQU			0
ZT_MG					EQU			1
K_ZT					EQU			2
CF_KG					EQU			3
CF_ZT					EQU			4
ZT_CS					DS			1

ZT_L_H					DS			1
ZT_L_L					DS			1

ZT_T_SM					DS			1
ZT_T_SS					DS			1

YZ_T					DS			1

WS_MODE					DS			1



.DATA									; define data storage section
delay_count1			DS			1
delay_count2			DS			1
RAM_200MS				DS			1
RAM_01S					DS			1
RAM_05S					DS			1
RAM_1S					DS			1
YY_TIME					DS			1
R_ALL					DS			1
BT_M					DS			1
BT_S					DS			1
WASH_TIMES				DS			1
WASH_SAVE				DS			1
WASH_TEMP				DS			1
SYS_S					DS			1
SW_H					DS			1	
SW_L					DS			1
SW_SET_H				DS			1
SW_SET_L				DS			1
SW_D_H					DS			1
SW_D_L					DS			1
X1						DS			1
X2						DS			1
Y1						DS			1
Y2						DS			1
XD_TM					DS			1			;保存洗涤时间的	
XD_TS					DS			1
XD_TS2					DS			1
XD_Z1					DS			1
XD_Z2					DS			1
XD_Z3					DS			1
XD_Z4					DS			1
SW_C					DS			1
JT_T					DS			1			;间脱的周期
JT_T_SET				DS			1
JT_S					DS			1			;保存R_ALL的变量
BH_S					DS			1
WARM_T					DS			1



;****************************************
;*										*
;*		Program Area					*										
;*										*
;****************************************
.CODE									; 
.INCLUDE HR52_10_P1.ASM
.INCLUDE HR52_10_P2.ASM
.INCLUDE HR52_10_P3.ASM
.INCLUDE HR52_10_P4.ASM
;****************************************
;*										*
;*Power on Reset Process - Main Program	*
;*										*
;****************************************
.PUBLIC		V_Reset						;
V_Reset:

			 SEI
			 
			 ldX		 #C_STACK_BOTTOM   ;设置堆栈,将指针指想栈顶
             txs 
             
             LDA		#0
             STA		PA_ATB
             STA		PB_ATB
             STA		PC_ATB
             STA		PD_ATB
             
             LDA		#11111110B
             STA		PA_DIR
             LDA		#01100000B
             STA		PB_DIR
             LDA		#11110111B
             STA		PC_DIR
             LDA		#255
             STA		PD_DIR
             STA		KEY_L
            	 
             LDA		#0
             STA		PA
             STA		PB
             STA		PC
             STA		PD
             STA		RAM_200MS
             STA		RAM_05S
             STA		RAM_1S
             STA		RAM_01S
             STA		MH_JS_H
             STA		MH_JS_L
             STA		YY_TIME
             STA		MH_JS_TEMP
             STA		LED_BUF1
             STA		LED_BUF2
             STA		LED_BUF3
             STA		LED_BUF4
             STA		LED_BUF5
             STA		KEY_S
             STA		FLAG_MH
			 STA		FLAG1
             STA		FLAG2
             STA		FLAG3
             STA		FLAG4
             STA		E_FLAG
             STA		ZT_COUNT
             STA		ZT_FLAG
             
             LDA		#60
             STA		SYS_S
             
             LDA		#01H
             STA		COM_BUF	
			 
			 LDA		#00001110B
			 STA		W_FLAG
			 
			 ;定时器1计数设置
       		 LDA			#00H
       		 STA			P_TMR0_1_Ctrl0
       		 LDA			#70H
       		 STA			P_TMR0_1_Ctrl1
       		 LDA			#0
       		 STA			P_TMR1_PreloadHi
       		 LDA			#0
       		 STA			P_TMR1_Preload
            ;设置时基中断
       	     LDA			#70H
       		 STA			P_BUZ_Ctrl
       		 SET			P_INT_Ctrl2,CB_INT_ITVALIE
       		 
             LDA			#40H
       		 STA			P_TMR0_1_Ctrl0
             CLI
                          
P_LOOP:			
	         TST			KEY_S,5					;..............检测电源启动键.........................
	         BEQ			P_CK5_N
	    	 TST			KEY_L,5
	    	 BNE			P_CK5_N
	    	 JSR			Delay
	    	 TST			KEY_S,5
	    	 BEQ			P_CK5_N
	    	 SET			KEY_L,5
	    	 JSR			BUZ
	    		
	    	 SET			FLAG4,0	
	    	 LDA			#10
	    	 STA			POWER	
	    	 
	    	 	
	    	 ;上电后的灯显示	
			 LDA			#08H
			 STA			LED_BUF1 
			 LDA			#28H
			 STA			LED_BUF2
			 LDA			#255
			 STA			LED_BUF3
			 LDA			#02H
			 STA			LED_BUF4		
			 STA			LED_BUF5
			 			 
			 ;.....各模式的初始设置.........
			 LDA			#6
			 STA			SW_COUNT
			 LDA			#1
			 STA			CX_COUNT
			 STA			GC_COUNT
			 LDA			#0
			 STA			YY_TIME
			 LDA			#3
			 STA			ZT_CS
			 LDA			#37
			 STA			WASH_TIMES
			 STA			WASH_SAVE
			 
			 ;........默认水位值..............	 
			 LDA			#11H		;第6档
			 STA			SW_SET_H
			 LDA			#4DH
			 STA			SW_SET_L
				
			 LDA			#12H
			 STA			SW_D_H
			 LDA			#2DH
			 STA			SW_D_L
			 			 
			 SET			PC,JDQ
			 SET			FLAG1,N_MH   ;模糊测试标记

			 TST			KEY_S,1
			 BEQ			N_WS			
			 TST			KEY_S,2
			 BEQ			N_WS		 						
			 JMP			WS_WORK  
N_WS:			 
			   		 
			 LDA			#255
			 STA			KEY_L
			 			 				 
	    	 JMP			C_LOOP			;电源键按下后跳转到模式选择			
	            
P_CK5_N:        
            JMP				P_LOOP 
             
             
C_LOOP:
			JSR				CHECK_P          ;检测电源键(关闭)
			TST				KEY_S,0			 ;...........水位....................
			BEQ				CK1_N
			TST				KEY_L,0
			BNE				CK1_N
			TST				LED_BUF2,6			;如果L14亮则锁死水位
			BNE				CK1_N			
			TST				GC_COUNT,4
			BNE				CK1_N
			JSR				Delay
			TST				KEY_S,0
			BEQ				CK1_N
			SET				KEY_L,0
			JSR				BUZ
			INC				SW_COUNT
			JSR				GET_NUM_SW
			SET				FLAG4,KEY_SW
			
CK1_N:			
			
			
			TST				KEY_S,1			;..........程序.......................
			BEQ				CK2_N
			TST				KEY_L,1
			BNE				CK2_N
			JSR				Delay
			TST				KEY_S,1
			BEQ				CK2_N
			SET				KEY_L,1
			JSR				BUZ
			
			ASL				CX_COUNT
			JSR				CX_GET_NUM
			NOP
			
CK2_N:		
			
			TST				KEY_S,2			;..........过程......................
			BEQ				CK3_N
			TST				KEY_L,2
			BNE				CK3_N
			TST				LED_BUF2,6			;如果L14亮则锁死程序
			BNE				CK1_N			
			JSR				Delay
			TST				KEY_S,2
			BEQ				CK3_N
			SET				KEY_L,2
			JSR				BUZ
			
			ASL				GC_COUNT
			JSR				GC_GET_NUM
			JSR				CX_GET_NUM
			
			
CK3_N:		
			
		    TST				KEY_S,3			;..........预约......................
			BEQ				CK4_N
			TST				KEY_L,3
			BNE				CK4_N
			JSR				Delay
			TST				KEY_S,3
			BEQ				CK4_N
			SET				KEY_L,3
			JSR				BUZ
					
			INC				YY_TIME
			LDA				YY_TIME
			CMP				#25
			BNE				YY_N25
			LDA				#0
			STA				YY_TIME		
YY_N25:			
			LDA				YY_TIME
			CMP				#0
			BNE				YY_N0
			LDA				#02H
			STA				LED_BUF4
			STA				LED_BUF5			
			JMP				YY_N0_1														
YY_N0:			
			SM_SHOW			YY_TIME	
YY_N0_1:			
			
CK4_N:		
			
			TST				KEY_S,4			;..........启动......................
			BEQ				CK5_N
			TST				KEY_L,4
			BNE				CK5_N
			JSR				Delay
			TST				KEY_S,4
			BEQ				CK5_N
			SET				KEY_L,4
			JSR				BUZ
			clr				FLAG3,SSS
			JMP				START
						
CK5_N:			

			JMP				C_LOOP                         
START:

			;判断预约
			LDA				YY_TIME
			CMP				#0
			BEQ				SYS_NYY	
			JSR				YY_WORK
		
SYS_NYY:			
			
			

			TST				FLAG1,N_MH
			BEQ				SYS_NMH
			
			
			TST				FLAG4,KEY_SW			;...........如果水位键动过了就不进行模糊...
			BEQ				YYYYS
			JSR				GET_NUM_SW
			LDA				WASH_SAVE
			STA				WASH_TIMES			
			JMP				SYS_NMH
YYYYS:
			
			
			BJ16			SW_H,SW_L,#12H,#E2H
			TST				MATH_FLAG,M_DY
			BEQ				YSBMH							
			
			;模糊测试
			JSR				MOHU_CS
			;获取测试值(判断)
			LDA				MH_JS_H
			LDX				MH_JS_L
			LDY				#3
			JSR				F_Bin16Div8
			STX				MH_JS_TEMP
			
			;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			
		    ;判断测量的值来决定水位
			LDA				MH_JS_TEMP		;高
			CMP				#57
			BCS				SW_N_H				
			
			LDA				#10
			STA				SW_COUNT
			
SW_N_H:			
			LDA				MH_JS_TEMP		;中      
			CMP				#57
			BCC				SW_N_ZD				
			LDA				MH_JS_TEMP	
			CMP				#60			
			BCS				SW_N_ZD
			
			LDA				#8
			STA				SW_COUNT
							
SW_N_ZD:		
			LDA				MH_JS_TEMP
			CMP				#60
			BCC				SW_N_Z				
			LDA				MH_JS_TEMP	
			CMP				#63			
			BCS				SW_N_Z
		
			LDA				#6
			STA				SW_COUNT
						
SW_N_Z:	
			LDA				MH_JS_TEMP
			CMP				#63
			BCC				SW_N_S
			
			LDA				#4
			STA				SW_COUNT
												
SW_N_S:		
YSBMH:	
			JSR				GET_NUM_SW
			LDA				WASH_SAVE
			STA				WASH_TIMES
SYS_NMH:	
			
					
			
			;....运行过程的总判...........
			TST				LED_BUF2,1
			BEQ				S_JP				
			SET				W_FLAG,0        ;浸泡
			JMP				S_NJP		
S_JP:			
			CLR				W_FLAG,0
S_NJP:			

			TST				LED_BUF2,3
			BEQ				S_XD
			SET				W_FLAG,1		;洗涤
			JMP				S_NXD
S_XD:			
			CLR				W_FLAG,1
S_NXD:			
			
			TST				LED_BUF3,7
			BEQ				S_PX			
			SET				W_FLAG,2		;漂洗
			JMP				S_NPX		
S_PX:			
			CLR				W_FLAG,2
S_NPX:			
			TST				LED_BUF3,0
			BEQ				S_TS
			SET				W_FLAG,3		;脱水
			JMP				S_NTS			
S_TS:
			CLR				W_FLAG,3
S_NTS:			
			

⌨️ 快捷键说明

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