📄 main.asm
字号:
;==================================================================================
; 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 + -