📄 time_relay.src
字号:
JP T,TIME
;****************3s FLAG****************
KEY_ADD_EXIT_1
TM P2,#00000100B
JR Z,KEY_ADD_EXIT_3S
LD T_3S_FLAG,#0AAH
JP T,TIME
KEY_ADD_EXIT_3S
CP T_100MS_FLAG,#55H
JR NE,KEY_ADD_EXIT_3S
LD T_100MS_FLAG,#0AAH
DEC T_3S_TEMP
JR NZ,KEY_ADD_EXIT_1
LD T_3S_FLAG,#55H
JP T,TIME
;********************
KEY_DEC
CP KEY_ENTER,#01H
JP ULT,KEY_DEC_ADD
CP KEY_MOV_FLAG,#03H
JP UGE,KEY_BW_DEC ;代表百位标志
CP KEY_MOV_FLAG,#02H ;代表十位标志
JP EQ,KEY_SW_DEC
CP KEY_MOV_FLAG,#01H ;代表个位标志
JP ULT,KEY_DEC1
JP EQ,KEY_GW_DEC
;JP T,KEY_DEC_EXIT
KEY_DEC1
SUB KEY_DP,#01H
JR C,KEY_DEC2
JP KEY_DEC_EXIT
KEY_DEC2
LD KEY_DP,#09H
KEY_GW_DEC
SUB KEY_GW,#01H
JR C,KEY_DEC3
JP KEY_DEC_EXIT
KEY_DEC3
LD KEY_GW,#05H
KEY_SW_DEC
SUB KEY_SW,#01H
JP C,KEY_DEC4
JP KEY_DEC_EXIT
KEY_DEC4
LD KEY_SW,#09H
KEY_BW_DEC
SUB KEY_BW,#01H
JR C,KEY_DEC5
JP KEY_DEC_EXIT
KEY_DEC5
CLR KEY_DP
CLR KEY_GW
CLR KEY_SW
CLR KEY_BW
KEY_DEC_EXIT
LD T_300MS_TEMP,#10
LD T_3S_TEMP,#10
CP T_3S_FLAG,#55H
JR NE,KEY_DEC_EXIT_1
;****************300ms FLAG****************
KEY_DEC_EXIT_0
TM P2,#00000010B
JR Z,KEY_DEC_EXIT_300MS
LD T_3S_FLAG,#0AAH
JP T,TIME
KEY_DEC_EXIT_300MS
CP T_10MS_FLAG,#55H
JR NE,KEY_DEC_EXIT_300MS
LD T_10MS_FLAG,#0AAH
DEC T_300MS_TEMP
JR NZ,KEY_DEC_EXIT_0
JP T,TIME
;****************3s FLAG****************
KEY_DEC_EXIT_1
TM P2,#00000010B
JR Z,KEY_DEC_EXIT_3S
LD T_3S_FLAG,#0AAH
JP T,TIME
KEY_DEC_EXIT_3S
CP T_100MS_FLAG,#55H
JR NE,KEY_DEC_EXIT_3S
LD T_100MS_FLAG,#0AAH
DEC T_3S_TEMP
JR NZ,KEY_DEC_EXIT_1
LD T_3S_FLAG,#55H
JP T,TIME
;******************加减同时按下进入复位状态************
KEY_ADD_DEC
TM P2,#00000010B
JP NZ,TIME
LD DIS_DP,KEY_DP_TIME_POSITIVE
LD DIS_GW,KEY_GW_TIME_POSITIVE
LD DIS_SW,KEY_SW_TIME_POSITIVE
LD DIS_BW,KEY_BW_TIME_POSITIVE
LD KEY_DP1,KEY_DP_TIME_POSITIVE
LD KEY_GW1,KEY_GW_TIME_POSITIVE
LD KEY_SW1,KEY_SW_TIME_POSITIVE
LD KEY_BW1,KEY_BW_TIME_POSITIVE
LD KEY_DP,KEY_DP_TIME_POSITIVE
LD KEY_GW,KEY_GW_TIME_POSITIVE
LD KEY_SW,KEY_SW_TIME_POSITIVE
LD KEY_BW,KEY_BW_TIME_POSITIVE
JP T,KEY_ADD_DEC_EXIT
KEY_DEC_ADD
TM P2,#00000100B
JP NZ,TIME
LD DIS_DP,KEY_DP_TIME_POSITIVE
LD DIS_GW,KEY_GW_TIME_POSITIVE
LD DIS_SW,KEY_SW_TIME_POSITIVE
LD DIS_BW,KEY_BW_TIME_POSITIVE
LD KEY_DP1,KEY_DP_TIME_POSITIVE
LD KEY_GW1,KEY_GW_TIME_POSITIVE
LD KEY_SW1,KEY_SW_TIME_POSITIVE
LD KEY_BW1,KEY_BW_TIME_POSITIVE
LD KEY_DP,KEY_DP_TIME_POSITIVE
LD KEY_GW,KEY_GW_TIME_POSITIVE
LD KEY_SW,KEY_SW_TIME_POSITIVE
LD KEY_BW,KEY_BW_TIME_POSITIVE
KEY_ADD_DEC_EXIT
TM P2,#00000100B
JP Z,KEY_ADD_DEC_EXIT
TM P2,#00000010B
JP Z,KEY_ADD_DEC_EXIT
JP T,TIME
;****************移位*******************
KEY_MOV
CP KEY_ENTER,#00H
JP EQ,KEY_MOV_EXIT ;不动作退出
KEY_MOV_1
INC KEY_MOV_FLAG ;代表加位标志
CP KEY_MOV_FLAG,#04H
JP ULT,KEY_MOV_EXIT
CLR KEY_MOV_FLAG
KEY_MOV_EXIT
TM P2,#00000001B
JR Z,KEY_MOV_EXIT
JP T,TIME
;****************EXIT*******************
KEY_EXIT
JP T,TIME
;*************************数码管显示程序**************************
DISPLAY3
CP DIS_CP1,#0AH
JR NE,DISPLAY1
LD R3,#2AH ;DIS_BUF_DP
LD DISPLAY_CNT,#2AH
DISPLAY1
DEC DIS_CP1
LD R3,DISPLAY_CNT
LD CNT,#08H
LD R4,#00H
LD R5,@R3
INC DISPLAY_CNT
LDC R0,#LED_TABLE[RR4]
; LD P2CONL,#10100110B ; P2.0–P2.6 push-pull output P2。0推挽式输出
AND P0,#11110111B ;关掉数码管
OR P2,#00001000B ;关发光二极管
NEXT1
RLC R0
OR P0,#00010000B ;发送数据
JR C,NEXT2
AND P0,#11101111B
NEXT2
NOP
NOP
AND P0,#11011111B ;发送时钟
NOP
NOP
OR P0,#00100000B
DEC CNT
JR NZ,NEXT1
cp DIS_CP1,#6 ;8
jp eq,DIS1
cp DIS_CP1,#7 ;7
jp eq,DIS2
cp DIS_CP1,#8 ;6
jp eq,DIS3
CP DIS_CP1,#9 ;5
Jp eq,DIS4
CP DIS_CP1,#1
JP EQ,KEY_LED1
CP DIS_CP1,#2
JP EQ,KEY_DIS1
CP DIS_CP1,#3
JP EQ,KEY_DIS2
CP DIS_CP1,#4
JP EQ,KEY_DIS3
CP DIS_CP1,#5
JP EQ,KEY_DIS4
DIS1
AND P0,#11111000B ;Y0为低电平
OR P0,#00001000B ;开数码管
RET
DIS2
AND P0,#11111001B
OR P0,#00001001B ;Y1为低电平
;OR P0,#00001000B ;开数码管
RET
DIS3
AND P0,#11111010B
OR P0,#00001010B ;Y2为低电平
;OR P0,#00001000B ;开数码管
RET
DIS4
AND P0,#11111011B
OR P0,#00001011B ;Y3为低电平
; OR P0,#00001000B ;开数码管
RET
KEY_DIS1
AND P0,#11111100B
OR P0,#00001100B ;Y4为低电平
; OR P0,#00001000B ;开数码管
RET
KEY_DIS2
AND P0,#11111101B
OR P0,#00001101B ;Y5为低电平
;OR P0,#00001000B ;开数码管
RET
KEY_DIS3
AND P0,#11111110B
OR P0,#00001110B ;Y6为低电平
;OR P0,#00001000B ;开数码管
RET
KEY_DIS4
OR P0,#00001111B ;Y7为低电平
; OR P0,#00001000B ;开数码管
RET
KEY_LED1
AND P2,#11110111B
LD DISPLAY_CNT,#2AH
LD DIS_CP1,#0AH
RET
;****************************I2CSTAR**********************************
;本程序实现在虚拟I2C总线上发送起始位。
;入口参数:无
;出口参数:无
I2CSTAR
LD P0CONH,#10001010B ;P0输出
LD P2CONH,#01001010B ;P2输出
OR P2,#01000000B ;SDA置位
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
AND P2,#10111111B ;SDA清零
NOP
NOP
NOP
AND P0,#01111111B ;SCL清零
RET
;****************************I2CSTOP**********************************
;本程序实现在虚拟I2C总线上发送结束位。
;入口参数:无
;出口参数:无
I2CSTOP
AND P2,#10111111B ;SDA清零
;LD P0CONH,#10101011B ;P0输出
LD P2CONH,#01011010B ;P2输出
NOP
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
OR P2,#01000000B ;SDA置位
RET
;*******************************MACK***********************************
;本程序实现在虚拟I2C总线上发送应答位。
;入口参数:无
;出口参数:无
MACK
AND P2,#10111111B ;SDA清零
LD P0CONH,#10001010B ;P0输出
LD P2CONH,#01001010B ;P2输出
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
AND P0,#01111111B ;SCL清零
OR P2,#01000000B ;SDA置位
RET
;**************************MNACK*****************************************
;本程序实现在虚拟I2C总线上发送非应答位。
;入口参数:无
;出口参数:无
MANCK
OR P2,#01000000B ;SDA置位
LD P0CONH,#10001010B ;P0输出
LD P2CONH,#01001010B ;P2输出
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
AND P0,#01111111B ;SCL清零
AND P2,#10111111B ;SDA清零
RET
;****************************CHECK*************************************
;本程序实现在虚拟I2C总线上检测应答位。
;入口参数:无
;出口参数:无
CHECK
LD P2CONH,#01011010B ;P2输出
OR P2,#01000000B ;SDA置位
NOP
NOP
OR P0,#10000000B ;SCL置位
LD P2CONH,#0001010B ;P2高电平输入
SCF
TM P2,#01000000B ;检测SDA是否为高电平
JR NZ,CHECK1
RCF
CHECK1
AND P0,#01111111B ;SCL清零
LD P2CONH,#01011010B ;P2输出
RET
;***************************WRBYT**************************************
;本程序实现向虚拟I2C总线上发送1字节数据
;入口参数:数据在TXBUF
;出口参数:无
WRBYT
LD BCOUNT,#08H
LD P2CONH,#01001010B ;P2高电平输出
WLP
RLC TXBUF
JP C,WR1
AND P2,#10111111B ;SDA清零
; AND TXBUF,#11111110B
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
AND P0,#01111111B ;SCL清零
JP DONE
WR1
OR P2,#01000000B ;SDA置位
; OR TXBUF,#00000001B
OR P0,#10000000B ;SCL置位
NOP
NOP
NOP
AND P0,#01111111B ;SCL清零
AND P2,#10111111B ;SDA清零
DONE
DEC BCOUNT
JP NZ,WLP
RET
;****************************RDBYT***********************************
;本程序实现向虚拟I2C总线上接收1字节数据
;入口参数:无
;出口参数:数据在RXBUF
RBYT
LD BCOUNT,#08H
LD P2CONH,#00001010B ;P2高电平输入
RLP
OR P0,#10000000B ;SCL置位
SCF
TM P2,#01000000B ;检测SDA是否为高电平
JP NZ,RLP1
RCF
RLP1
RLC RXBUF
AND P0,#01111111B ;SCL清零
DEC BCOUNT
JP NZ,RLP
RET
LED_TABLE:
DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H
DB 80H,90H
DB 40H,79H,24H,30H
DB 19H,12H,02H,78H
DB 00H,10H
DB 92H ;s 14H
DB 86H ;E
DB 87H ;t
DB 0FFH ;17H
DB 0FEH ;11111110b
DB 0FDH ;11111101B
DB 0FBH ;11111011B 1AH
DB 0F7H ;显示_ 1bh
;***************************中断程序**********************************
INT_9454:
and t0con,#11111110b
OR T0CON,#00001000B
PUSH FLAGS
PUSH R0
PUSH R3
PUSH R4
PUSH R5
PUSH CNT
int_s:
DEC T_1MS_TEMP
JP NZ,int_end
LD T_1MS_TEMP,#02
LD T_1MS_FLAG,#55H
CALL DISPLAY3
INT_S_1
dec T_2MS_TEMP
jp NZ,int_end
ld T_2MS_TEMP,#2
LD T_2MS_FLAG,#55H
dec t_10ms_tmp
jp NZ,int_end
;int_1:
ld t_10ms_tmp,#5
LD T_10MS_FLAG,#55H
DEC T_100MS_TEMP
JP NZ,int_end
LD T_100MS_TEMP,#10
LD T_100MS_FLAG,#55H
DEC T_500MS_TEMP
JP NZ,int_end
LD T_500MS_TEMP,#5
LD T_500MS_FLAG,#55H
LD T_500MS_FLAG1,#55H
DEC T_1S_TEMP
JP NZ,int_end
LD T_1S_TEMP,#2
LD T_1S_FLAG,#55H
LD T_1S_FLAG1,#55H
DEC T_5S_TEMP
JP NZ,int_end
LD T_5S_TEMP,#5
LD T_5S_FLAG,#55H
int_end:
POP CNT
POP R5
POP R4
POP R3
POP R0
POP FLAGS
IRET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -