📄 clock.src
字号:
; .\clock.SRC generated from: clock.c
; COMPILER INVOKED BY:
; D:\KeilC51\C51\BIN\C51.EXE clock.c ROM(COMPACT) BROWSE DEFINE(evalboard) DEBUG OBJECTEXTEND LISTINCLUDE SYMBOLS SRC(.\clock.SRC)
NAME CLOCK
?PR?clock_init?CLOCK SEGMENT CODE INBLOCK
?PR?clock_update?CLOCK SEGMENT CODE INBLOCK
?XD?CLOCK SEGMENT XDATA
?PR?_clock_set?CLOCK SEGMENT CODE INBLOCK
?PR?_clock_scan?CLOCK SEGMENT CODE INBLOCK
?PR?clock_out_time?CLOCK SEGMENT CODE INBLOCK
?DT?clock_out_time?CLOCK SEGMENT DATA OVERLAYABLE
?PR?_strtotm?CLOCK SEGMENT CODE INBLOCK
?DT?_strtotm?CLOCK SEGMENT DATA OVERLAYABLE
?PR?_alarm_set?CLOCK SEGMENT CODE INBLOCK
?PR?alarm_clr?CLOCK SEGMENT CODE INBLOCK
?PR?alarm_out_time?CLOCK SEGMENT CODE INBLOCK
?DT?alarm_out_time?CLOCK SEGMENT DATA OVERLAYABLE
?CO?CLOCK SEGMENT CODE
?C_INITSEG SEGMENT CODE
?DT?CLOCK SEGMENT DATA
?XD?clock_out_time?CLOCK SEGMENT XDATA OVERLAYABLE
?XD?alarm_out_time?CLOCK SEGMENT XDATA OVERLAYABLE
EXTRN CODE (_timer0_elapsed_count)
EXTRN CODE (cmdb_prompt)
EXTRN CODE (_DISPLY)
EXTRN CODE (_com_puts)
EXTRN CODE (_isdigit)
EXTRN CODE (timer0_count)
EXTRN CODE (_strlen)
EXTRN CODE (_com_putchar)
EXTRN CODE (?C?LSTKXDATA)
EXTRN CODE (?C?LSTXDATA)
EXTRN CODE (?C?ULCMP)
EXTRN CODE (?C?ULDIV)
EXTRN CODE (?C?UIDIV)
EXTRN CODE (?C?CLDPTR)
EXTRN CODE (?C?CLDOPTR)
EXTRN CODE (?C?LSTPTR)
EXTRN CODE (?C?LLDPTR)
EXTRN CODE (?C?LMUL)
PUBLIC alarm_out_time
PUBLIC alarm_clr
PUBLIC _alarm_set
PUBLIC ?_strtotm?BYTE
PUBLIC _strtotm
PUBLIC clock_out_time
PUBLIC _clock_scan
PUBLIC _clock_set
PUBLIC clock_update
PUBLIC clock_init
RSEG ?DT?_strtotm?CLOCK
?_strtotm?BYTE:
t?549: DS 3
s?550: DS 3
ORG 6
s2?551: DS 3
tmp?552: DS 1
RSEG ?DT?clock_out_time?CLOCK
?clock_out_time?BYTE:
hsecs?444: DS 2
secs?445: DS 2
mins?446: DS 2
t?448: DS 4
RSEG ?DT?alarm_out_time?CLOCK
?alarm_out_time?BYTE:
mins?855: DS 2
RSEG ?XD?CLOCK
last_daysecs?140: DS 4
scan_flag: DS 1
alm_flag: DS 1
last_tick: DS 2
dayhsecs: DS 4
almmins: DS 2
RSEG ?DT?CLOCK
dg: DS 8
RSEG ?XD?clock_out_time?CLOCK
buf?443: DS 21
RSEG ?XD?alarm_out_time?CLOCK
buf?854: DS 21
RSEG ?CO?CLOCK
?SC_0:
DB 00DH,00AH,000H
?SC_3:
DB 00DH,00AH,'N' ,'o' ,'n' ,'e' ,00DH,00AH,000H
RSEG ?PR?_strtotm?CLOCK
RSEG ?C_INITSEG
DB 008H
DB dg
DB 000H
DB 000H
DB 00AH
DB 000H
DB 000H
DB 00AH
DB 000H
DB 000H
; #include <ctype.h>
; #include <string.h>
; #include <stdio.h>
; #include "tdp.h"
; #ifdef evalboard /* 采用硬件目标板时需要使用以下外部函数 */
; extern void DINPUT(unsigned char aa, unsigned char bb);
; extern void DISPLY(unsigned char data *cc);
; #endif
;
; /* 全局变量定义 */
; static xdata unsigned long dayhsecs;
; static xdata unsigned last_tick;
; static xdata unsigned char scan_flag;
; static xdata unsigned char alm_flag;
; static xdata unsigned almmins;
;
; #define MAX_HSEC_DAY (100 * 60 * 60 * 24)
; #ifdef evalboard /* 采用硬件目标板时需要使用以下数组 */
; static unsigned char data dg[]={0,0,10,0,0,10,0,0};
; #endif
;
; /* 时钟初始化函数 */
; void clock_init (void) {
RSEG ?PR?clock_init?CLOCK
clock_init:
USING 0
; SOURCE LINE # 23
; scan_flag = 0;
; SOURCE LINE # 24
CLR A
MOV DPTR,#scan_flag
MOVX @DPTR,A
; alm_flag = 0;
; SOURCE LINE # 25
INC DPTR
MOVX @DPTR,A
; dayhsecs = 0L;
; SOURCE LINE # 26
MOV DPTR,#dayhsecs
LCALL ?C?LSTKXDATA
DB 00H
DB 00H
DB 00H
DB 00H
; last_tick = timer0_count ();
; SOURCE LINE # 27
LCALL timer0_count
MOV DPTR,#last_tick
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; }
; SOURCE LINE # 28
RET
; END OF clock_init
;
; /* 时钟更新函数 */
; void clock_update (void) {
RSEG ?PR?clock_update?CLOCK
clock_update:
USING 0
; SOURCE LINE # 31
; static xdata unsigned long last_daysecs;
; dayhsecs += timer0_elapsed_count (last_tick);
; SOURCE LINE # 33
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
MOV DPTR,#last_tick
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL _timer0_elapsed_count
CLR A
MOV R4,A
MOV R5,A
POP AR3
POP AR2
POP AR1
POP AR0
MOV A,R3
ADD A,R7
MOV R7,A
MOV A,R2
ADDC A,R6
MOV R6,A
MOV A,R5
ADDC A,R1
MOV R5,A
MOV A,R4
ADDC A,R0
MOV R4,A
MOV DPTR,#dayhsecs
LCALL ?C?LSTXDATA
; last_tick = timer0_count ();
; SOURCE LINE # 34
LCALL timer0_count
MOV DPTR,#last_tick
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
?C0002:
; while (dayhsecs >= MAX_HSEC_DAY)
; SOURCE LINE # 35
MOV R7,#00H
MOV R6,#0D6H
MOV R5,#0FFH
MOV R4,#0FFH
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
CLR C
LCALL ?C?ULCMP
JC ?C0003
; dayhsecs -= MAX_HSEC_DAY;
; SOURCE LINE # 36
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
SUBB A,#00H
MOV R7,A
MOV A,R6
SUBB A,#0D6H
MOV R6,A
MOV A,R5
SUBB A,#0FFH
MOV R5,A
MOV A,R4
SUBB A,#0FFH
MOV R4,A
MOV DPTR,#dayhsecs
LCALL ?C?LSTXDATA
SJMP ?C0002
?C0003:
; if ((dayhsecs / 100) == last_daysecs)
; SOURCE LINE # 37
CLR A
MOV R3,#064H
MOV R2,A
MOV R1,A
MOV R0,A
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL ?C?ULDIV
MOV DPTR,#last_daysecs?140
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
CLR C
LCALL ?C?ULCMP
JZ ?C0005
?C0004:
; return;
; last_daysecs = dayhsecs / 100;
; SOURCE LINE # 39
CLR A
MOV R3,#064H
MOV R2,A
MOV R1,A
MOV R0,A
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL ?C?ULDIV
MOV DPTR,#last_daysecs?140
LCALL ?C?LSTXDATA
; if (alm_flag != 0)
; SOURCE LINE # 40
MOV DPTR,#alm_flag
MOVX A,@DPTR
JZ ?C0006
; if ((dayhsecs / (100 * 60)) == almmins)
; SOURCE LINE # 41
CLR A
MOV R3,#070H
MOV R2,#017H
MOV R1,A
MOV R0,A
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL ?C?ULDIV
MOV R0,AR4
MOV R1,AR5
MOV R2,AR6
MOV R3,AR7
MOV DPTR,#almmins
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR A
MOV R4,A
MOV R5,A
CLR C
LCALL ?C?ULCMP
JNZ ?C0006
; com_putchar ('\x7');
; SOURCE LINE # 42
MOV R7,#07H
LCALL _com_putchar
?C0006:
; if (scan_flag != 0) {
; SOURCE LINE # 43
MOV DPTR,#scan_flag
MOVX A,@DPTR
JZ ?C0005
; clock_out_time ();
; SOURCE LINE # 44
LCALL clock_out_time
; cmdb_prompt ();
; SOURCE LINE # 45
LCALL cmdb_prompt
; }
; SOURCE LINE # 46
; }
; SOURCE LINE # 47
?C0005:
RET
; END OF clock_update
;
; /* 时钟设置函数 */
; void clock_set ( unsigned long sethsec) {
RSEG ?PR?_clock_set?CLOCK
_clock_set:
USING 0
; SOURCE LINE # 50
;---- Variable 'sethsec?241' assigned to Register 'R4/R5/R6/R7' ----
; dayhsecs = sethsec;
; SOURCE LINE # 51
MOV DPTR,#dayhsecs
LCALL ?C?LSTXDATA
; last_tick = timer0_count ();
; SOURCE LINE # 52
LCALL timer0_count
MOV DPTR,#last_tick
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; clock_update ();
; SOURCE LINE # 53
LJMP clock_update
; END OF _clock_set
; }
;
; /* 时钟扫描函数 */
; void clock_scan (unsigned char flag) {
RSEG ?PR?_clock_scan?CLOCK
_clock_scan:
; SOURCE LINE # 57
;---- Variable 'flag?342' assigned to Register 'R7' ----
; scan_flag = flag;
; SOURCE LINE # 58
MOV DPTR,#scan_flag
MOV A,R7
MOVX @DPTR,A
; }
; SOURCE LINE # 59
RET
; END OF _clock_scan
;
; /* 时间输出函数 */
; void clock_out_time (void) {
RSEG ?PR?clock_out_time?CLOCK
clock_out_time:
USING 0
; SOURCE LINE # 62
; xdata char buf [21];
; unsigned hsecs, secs, mins, hours;
; unsigned long t;
;
; t = dayhsecs;
; SOURCE LINE # 67
MOV DPTR,#dayhsecs
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV t?448+03H,A
MOV t?448+02H,R6
MOV t?448+01H,R5
MOV t?448,R4
; hsecs = t % 100;
; SOURCE LINE # 68
CLR A
MOV R3,#064H
MOV R2,A
MOV R1,A
MOV R0,A
MOV R7,t?448+03H
MOV R6,t?448+02H
MOV R5,t?448+01H
MOV R4,t?448
LCALL ?C?ULDIV
MOV R6,AR2
MOV R7,AR3
MOV hsecs?444,R6
MOV hsecs?444+01H,R7
; t /= 100;
; SOURCE LINE # 69
MOV R7,t?448+03H
MOV R6,t?448+02H
MOV R5,t?448+01H
MOV R4,t?448
CLR A
MOV R3,#064H
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
MOV t?448+03H,R7
MOV t?448+02H,R6
MOV t?448+01H,R5
MOV t?448,R4
; secs = t % 60;
; SOURCE LINE # 70
CLR A
MOV R3,#03CH
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
MOV R6,AR2
MOV R7,AR3
MOV secs?445,R6
MOV secs?445+01H,R7
; t /= 60;
; SOURCE LINE # 71
MOV R7,t?448+03H
MOV R6,t?448+02H
MOV R5,t?448+01H
MOV R4,t?448
CLR A
MOV R3,#03CH
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
MOV t?448+03H,R7
MOV t?448+02H,R6
MOV t?448+01H,R5
MOV t?448,R4
; mins = t % 60;
; SOURCE LINE # 72
CLR A
MOV R3,#03CH
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
MOV R6,AR2
MOV R7,AR3
MOV mins?446,R6
MOV mins?446+01H,R7
; t /= 60;
; SOURCE LINE # 73
MOV R7,t?448+03H
MOV R6,t?448+02H
MOV R5,t?448+01H
MOV R4,t?448
CLR A
MOV R3,#03CH
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
MOV t?448+03H,R7
MOV t?448+02H,R6
MOV t?448+01H,R5
MOV t?448,R4
; hours = t % 24;
; SOURCE LINE # 74
CLR A
MOV R3,#018H
MOV R2,A
MOV R1,A
MOV R0,A
LCALL ?C?ULDIV
;---- Variable 'hours?447' assigned to Register 'R2/R3' ----
;
; buf [0] = (hours / 10) + '0';
; SOURCE LINE # 76
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV A,R7
ADD A,#030H
MOV DPTR,#buf?443
MOVX @DPTR,A
; buf [1] = (hours % 10) + '0';
; SOURCE LINE # 77
MOV R6,AR2
MOV R7,AR3
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV A,R5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -