📄 sky1.asm
字号:
MOV R7, #02H
ACALL WRITE_LED
JMP PG8
PG4:
JMP PG1
PG2:
CJNE A, #0A0H, PG3 ;编辑月份
MOV MAX_VL, #12
MOV MIN_VL, #1
MOV A, FUNREG
ANL A, #0FH
CJNE A, #01H, XD4
MOV A, MON_MD
ACALL BCD_HEX
ACALL DOWN_ROUTINE
SJMP XD5
XD4:
MOV A, MON_MD
ACALL BCD_HEX
ACALL UP_ROUTINE
XD5:
ACALL HEX_BCD
MOV MON_MD, A
MOV LED_D2, R3
MOV LED_D3, R4
MOV A, R3
MOV R7, #03H
ACALL WRITE_LED
MOV A, LED_D3
MOV R7, #04H
ACALL WRITE_LED
SJMP PG7
PG3:
CJNE A, #0C0H, PG7 ;编辑年份
MOV MAX_VL, #63H
MOV MIN_VL, #00H
MOV A, FUNREG
ANL A, #0FH
CJNE A, #01H, XD6
MOV A, YEA_MD
ACALL BCD_HEX
ACALL DOWN_ROUTINE
SJMP XD7
XD6:
MOV A, YEA_MD
ACALL BCD_HEX
ACALL UP_ROUTINE
XD7:
ACALL HEX_BCD
MOV YEA_MD, A
MOV LED_D4, R3
MOV LED_D5, R4
MOV A, R3
MOV R7, #05H
ACALL WRITE_LED
MOV A, LED_D5
MOV R7, #06H
ACALL WRITE_LED
PG7:
JMP PG8
PG1:
CJNE A, #10H, PG1 ;时间编辑
MOV A, MODREG
ANL A, #0F0H
CJNE A, #90H, PG5 ;编辑分钟
MOV MAX_VL, #3BH
MOV MIN_VL, #00H
MOV A, FUNREG
ANL A, #0FH
CJNE A, #01H, XD8
MOV A, MIN_MD
ACALL BCD_HEX
ACALL DOWN_ROUTINE
SJMP XD9
XD8:
MOV A, MIN_MD
ACALL BCD_HEX
ACALL UP_ROUTINE
XD9:
ACALL HEX_BCD
MOV MIN_MD, A
MOV LED_D0, R3
MOV LED_D1, R4
MOV A, R3
MOV R7, #01H
ACALL WRITE_LED
MOV A, LED_D1
MOV R7, #02H
ACALL WRITE_LED
SJMP PG8
PG5:
CJNE A, #0A0H, PG9 ;编辑小时
MOV MAX_VL, #23
MOV MIN_VL, #0
MOV A, FUNREG
ANL A, #0FH
CJNE A, #01H, XD10
MOV A, HOU_MD
ACALL BCD_HEX
ACALL DOWN_ROUTINE
SJMP XD11
XD10:
MOV A, HOU_MD
ACALL BCD_HEX
ACALL UP_ROUTINE
XD11:
ACALL HEX_BCD
MOV HOU_MD, A
MOV LED_D2, R3
MOV LED_D3, R4
MOV A, R3
MOV R7, #03H
ACALL WRITE_LED
MOV A, LED_D3
MOV R7, #04H
ACALL WRITE_LED
PG8:
ACALL SET_TIME
PG9:
RET
;**************************************************************
; 显示记录数
;**************************************************************
DISP_ADS:
ACALL R_AD_TAB
MOV B, A
ANL A, #0F0H
SWAP A
MOV LED_D1, A
MOV A, B
ANL A, #0FH
MOV LED_D0, A
MOV R7, #01H
ACALL WRITE_LED
MOV A, LED_D1
MOV R7, #02H
ACALL WRITE_LED
RET
;**************************************************************
; 显示记录数
;**************************************************************
DISP_REC:
ACALL HEX_BCD
MOV LED_D4, R3
MOV LED_D5, R4
MOV A, R3
MOV R7, #05H
ACALL WRITE_LED
MOV A, LED_D5
MOV R7, #06H
ACALL WRITE_LED
RET
;**************************************************************
; A/D 采样
;
; 返回 -- A: AD采样结果值
;**************************************************************
AD_SAMPLE:
MOV AD_CNT, #00H
MOV A, #00H
CLR AD_CS
NOP ;>1.4us
NOP
PP1:
MOV C, AD_DATA
SETB AD_CLK
RLC A
CLR AD_CLK
INC AD_CNT
MOV R0, AD_CNT
CJNE R0,#08H, PP1
SETB AD_CS
RET
;**************************************************************
; AD 采样处理例程
;**************************************************************
RUN_ADS:
MOV R5, #00H
Q5:
ACALL AD_SAMPLE
SETB C
MOV B, A
SUBB A, #0AH ;AD门限200mV
JC Q6
SJMP Q9
Q6:
CJNE R5, #00H, Q9
SJMP Q1
Q9:
INC R5
CJNE R5, #01H, Q2
MOV AD_VA1, B
SJMP Q5
Q2:
CJNE R5, #02H, Q3
MOV AD_VA2, B
SJMP Q5
Q3:
; CJNE R5, #03H, Q6
MOV AD_VA3, B
; SJMP Q5
;Q6:
; MOV DELAYC, #01H
MOV A, AD_VA1
SETB C
SUBB A, AD_VA2
JC Q7 ;AD_VA1<AD_VA2
SETB C
MOV A, AD_VA1
SUBB A, AD_VA3
JC Q8 ;AD_VA1<AD_VA3
MOV AD_VAL, AD_VA1
SJMP Q0
Q7:
MOV A, AD_VA2
SETB C
SUBB A, AD_VA3
JC Q8 ;AD_VA2<AD_VA3
MOV AD_VAL, AD_VA2
SJMP Q0
Q8:
MOV AD_VAL, AD_VA3
Q0:
MOV A, AD_VAL
SETB C
SUBB A, #0AH ;AD门限200mV
JC Q1
INC REC_NU
MOV A, REC_NU
CJNE A, #100, Q4
MOV A, #00H
MOV REC_NU, A
Q4:
MOV AT2408, #0AEH
MOV R7, #0F8H
MOV R6, A
ACALL WRITE_ROM ;记录最大记录数
MOV A, REC_NU
ACALL GET_ADDR
MOV R6, REC_NU
ACALL WRITE_ROM ;记录当前的AD采样数据
MOV A, REC_NU
ACALL DISP_REC
Q1:
RET
;**************************************************************
; 计算E2PROM存储页地址及偏移地址
;
; 输入 -- A: 记录数
; 返回 -- AT2408: E2PROM页地址
; R7: E2PROM偏移地址
;**************************************************************
GET_ADDR:
MOV B, #25
DIV AB
CJNE A, #00, Z1
MOV AT2408, #0A8H
SJMP Z4
Z1:
CJNE A, #01, Z2
MOV AT2408, #0AAH
SJMP Z4
Z2:
CJNE A, #02, Z3
MOV AT2408, #0ACH
Z3:
MOV AT2408, #0AEH
Z4:
MOV A, #08
MUL AB
MOV R7, A
RET
;**************************************************************
; 时钟中断服务
;**************************************************************
CLOCK:
PUSH ACC
PUSH PSW
; MOV A, DELAYC
; CJNE A, #00H, KB
; SJMP KC
;KB:
; DEC DELAYC
KC:
MOV A, FNDREG ;是否处于查寻状态
CJNE A, #01, TA4
SJMP TA3
TA4:
ACALL READ_TIME
MOV A, MODREG
ANL A, #0F0H
JZ TA1
CJNE A, #90H, K4 ;最低两位闪烁
MOV A, #01H
ACALL CLR_LED
MOV A, #02H
ACALL CLR_LED
SJMP TA3
K4:
CJNE A, #0A0H, K5 ;中间两位闪烁
MOV A, #03H
ACALL CLR_LED
MOV A, #04H
ACALL CLR_LED
SJMP TA3
K5:
CJNE A, #0C0H, TA2 ;最高两位闪烁
MOV A, #05H
ACALL CLR_LED
MOV A, #06H
ACALL CLR_LED
SJMP TA3
TA1:
MOV A, LED_D6
ANL A, #7FH
CJNE A, #20H, TA2 ;日期状态,不显示秒点
SJMP TA3
TA2:
ACALL DISP_SPT
TA3:
MOV R4, #09H
ACALL DELAY
MOV A, LED_D6
CJNE A, #40H, K10
MOV A, FNDREG
CJNE A, #01H, K8
MOV A, CU_REC
ACALL DISP_REC
SJMP K7
K8:
SJMP K6
K10:
CJNE A, #20H, K6
ACALL DISP_DATE
SJMP K7
K6:
ACALL DISP_TIME
MOV A, FNDREG
CJNE A, #01H, K9
ACALL DISP_SPT
SJMP K7
K9:
ACALL CLR_SPT
K7:
POP PSW
POP ACC
RETI
;**************************************************************
; RS232串口中断服务
;**************************************************************
INT_RS232:
CLR RI ;清除接收中断标志
PUSH ACC
PUSH PSW
MOV @R1, SBUF ;将命令读入缓冲区
INC R1
DJNZ COM_LG, X0 ;判断命令接收是否完成
X3:
MOV COM_LG, #08
MOV R1, #68H ;设置接收缓冲区
MOV A, @R1
CJNE A, #0AAH, X0 ;无效的控制命令
INC R1
MOV A, @R1
CJNE A, #0AAH, X1 ;是否是控制命令1
;上报所有的记录数据
JMP X6
X1:
CJNE A, #0BBH, X2 ;是否是控制命令2
INC R1 ;上报指定的记录数据
MOV CU_REC, @R1
MOV A, CU_REC
ACALL REP_DATA
SJMP X6
X2:
CJNE A, #0CCH, X4 ;是否是控制命令3
INC R1 ;设置日历
MOV A, @R1
ACALL HEX_BCD
MOV YEA_MD, A
INC R1
MOV A, @R1
ACALL HEX_BCD
MOV MON_MD, A
INC R1
MOV A, @R1
ACALL HEX_BCD
MOV DAY_MD, A
INC R1
MOV A, @R1
ACALL HEX_BCD
MOV HOU_MD, A
INC R1
MOV A, @R1
ACALL HEX_BCD
MOV MIN_MD, A
ACALL SET_TIME ;设置8563时间
MOV R4, #05FH
ACALL DELAY
SJMP X6
X4:
CJNE A, #0DDH, X5 ;是否是控制命令4
ACALL READ_REC
MOV SBUF, REC_NU ;上报当前记录数
JNB TI, $
CLR TI
SJMP X6
X5:
CJNE A, #0EEH, X0 ;是否是控制命令5
MOV REC_NU, #00H ;清除所有的记录数据
MOV AT2408, #0AEH
MOV R7, #0F8H
MOV R6, #00H
ACALL WRITE_ROM ;记录最大记录数
X6:
MOV R1, #68H
X0:
POP PSW
POP ACC
RETI
;**************************************************************
; 上报指定记录数据
;
; 输入 -- A:记录数
; 返回 --
;**************************************************************
REP_DATA:
CLR TI
ACALL GET_ADDR
ACALL READ_ROM
MOV R1, #78H
MOV A, R6
MOV @R1, A
INC R1
MOV @R1, YEA_MD
INC R1
MOV @R1, MON_MD
INC R1
MOV @R1, DAY_MD
INC R1
MOV @R1, HOU_MD
INC R1
MOV @R1, MIN_MD
INC R1
MOV @R1, AD_VAL
MOV R4, #0AFH ;延时处理
ACALL DELAY
MOV R1, #78H
MOV R7, #07H
X7:
MOV SBUF, @R1 ;发送当前数据
JNB TI, $
CLR TI
INC R1
DJNZ R7, X7
MOV R1, #68H
RET
;**************************************************************
; LED 字符表格
;**************************************************************
LED_TAB: DB 07EH, 030H, 06DH, 079H, 033H
DB 05BH, 05FH, 070H, 07FH, 07BH
;**************************************************************
; AD 采样表格
;**************************************************************
AD_TAB: DB 05H, 07H, 09H, 11H, 12H
DB 13H, 14H, 16H, 18H, 20H
DB 22H, 24H, 26H, 28H, 30H
DB 32H, 34H, 36H, 38H, 40H
DB 42H, 44H, 46H, 48H, 50H
;**************************************************************
END
;**************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -