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

📄 clock.src

📁 C51单片机的C语言例程,可实现定时器中断及其时钟功能的源代码
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [2]  = ':';
			; SOURCE LINE # 78
	INC  	DPTR
	MOV  	A,#03AH
	MOVX 	@DPTR,A
; 	buf [3]  = (mins / 10) + '0';
			; SOURCE LINE # 79
	MOV  	R6,mins?446
	MOV  	R7,mins?446+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R7
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [4]  = (mins % 10) + '0';
			; SOURCE LINE # 80
	MOV  	R6,mins?446
	MOV  	R7,mins?446+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R5
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [5]  = ':';
			; SOURCE LINE # 81
	INC  	DPTR
	MOV  	A,#03AH
	MOVX 	@DPTR,A
; 	buf [6]  = (secs / 10) + '0';
			; SOURCE LINE # 82
	MOV  	R6,secs?445
	MOV  	R7,secs?445+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R7
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [7]  = (secs % 10) + '0';
			; SOURCE LINE # 83
	MOV  	R6,secs?445
	MOV  	R7,secs?445+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R5
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [8]  = '.';
			; SOURCE LINE # 84
	INC  	DPTR
	MOV  	A,#02EH
	MOVX 	@DPTR,A
; 	buf [9]  = (hsecs / 10) + '0';
			; SOURCE LINE # 85
	MOV  	R6,hsecs?444
	MOV  	R7,hsecs?444+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R7
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [10] = (hsecs % 10) + '0';
			; SOURCE LINE # 86
	MOV  	R6,hsecs?444
	MOV  	R7,hsecs?444+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R5
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [11] = '\0';
			; SOURCE LINE # 87
	CLR  	A
	INC  	DPTR
	MOVX 	@DPTR,A
; 
; 	#ifdef evalboard    /* 采用硬件目标板时需要使用以下数组 */
; 	dg[7]=buf[7];       /* 准备硬件目标板LED 显示数据 */
			; SOURCE LINE # 90
	MOV  	DPTR,#buf?443+07H
	MOVX 	A,@DPTR
	MOV  	dg+07H,A
; 	dg[6]=buf[6];
			; SOURCE LINE # 91
	MOV  	DPTR,#buf?443+06H
	MOVX 	A,@DPTR
	MOV  	dg+06H,A
; 	dg[4]=buf[4];
			; SOURCE LINE # 92
	MOV  	DPTR,#buf?443+04H
	MOVX 	A,@DPTR
	MOV  	dg+04H,A
; 	dg[3]=buf[3];
			; SOURCE LINE # 93
	MOV  	DPTR,#buf?443+03H
	MOVX 	A,@DPTR
	MOV  	dg+03H,A
; 	dg[1]=buf[1];
			; SOURCE LINE # 94
	MOV  	DPTR,#buf?443+01H
	MOVX 	A,@DPTR
	MOV  	dg+01H,A
; 	dg[0]=buf[0];                        
			; SOURCE LINE # 95
	MOV  	DPTR,#buf?443
	MOVX 	A,@DPTR
	MOV  	dg,A
; 	DISPLY(dg);       /* 点亮硬件目标板LED */
			; SOURCE LINE # 96
	MOV  	R7,#LOW (dg)
	LCALL	_DISPLY
; 	#endif
; 
; 	com_puts ("\r\n");
			; SOURCE LINE # 99
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	LCALL	_com_puts
; 	com_puts (buf);
			; SOURCE LINE # 100
	MOV  	R3,#01H
	MOV  	R2,#HIGH (buf?443)
	MOV  	R1,#LOW (buf?443)
	LCALL	_com_puts
; 	com_puts ("\r\n");
			; SOURCE LINE # 101
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	LJMP 	_com_puts
; END OF clock_out_time

; }
; 
; /* 设置屏幕时间按"HHMMSS"格式显示 */
; char strtotm ( unsigned long *t, char *s)  {

	RSEG  ?PR?_strtotm?CLOCK
_strtotm:
	USING	0
			; SOURCE LINE # 105
	MOV  	t?549,R3
	MOV  	t?549+01H,R2
	MOV  	t?549+02H,R1
; 	char *s2;
; 	unsigned char tmp;
; 	if (strlen (s) != 6)
			; SOURCE LINE # 108
	MOV  	R3,s?550
	MOV  	R2,s?550+01H
	MOV  	R1,s?550+02H
	LCALL	_strlen
	MOV  	A,R7
	XRL  	A,#06H
	ORL  	A,R6
	JZ   	?C0012
; 	  return (-1);
			; SOURCE LINE # 109
	MOV  	R7,#0FFH
	RET  	
?C0012:
; 
; 	for (s2 = s; *s2 != '\0'; s2++)  {
			; SOURCE LINE # 111
	MOV  	s2?551,s?550
	MOV  	s2?551+01H,s?550+01H
	MOV  	s2?551+02H,s?550+02H
?C0014:
	MOV  	R3,s2?551
	MOV  	R2,s2?551+01H
	MOV  	R1,s2?551+02H
	LCALL	?C?CLDPTR
	MOV  	R7,A
	JZ   	?C0015
; 	  if (!isdigit (*s2))
			; SOURCE LINE # 112
	LCALL	_isdigit
	JC   	?C0016
;     	return (-1);
			; SOURCE LINE # 113
	MOV  	R7,#0FFH
	RET  	
;     }
			; SOURCE LINE # 114
?C0016:
	MOV  	A,#01H
	ADD  	A,s2?551+02H
	MOV  	s2?551+02H,A
	CLR  	A
	ADDC 	A,s2?551+01H
	MOV  	s2?551+01H,A
	SJMP 	?C0014
?C0015:
; 
; 	tmp = ((s[0] - '0') * 10) + (s[1] - '0');
			; SOURCE LINE # 116
	MOV  	R3,s?550
	MOV  	R2,s?550+01H
	MOV  	R1,s?550+02H
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	MOV  	R7,A
	LCALL	?C?CLDPTR
	ADD  	A,#0D0H
	MOV  	B,#0AH
	MUL  	AB
	ADD  	A,R7
	MOV  	tmp?552,A
; 	if (tmp >= 24)
			; SOURCE LINE # 117
	CLR  	C
	SUBB 	A,#018H
	JC   	?C0018
; 	  return (-1);
			; SOURCE LINE # 118
	MOV  	R7,#0FFH
	RET  	
?C0018:
; 	*t = tmp;
			; SOURCE LINE # 119
	MOV  	R7,tmp?552
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LSTPTR
; 	tmp = ((s[0] - '0') * 10) + (s[1] - '0');
			; SOURCE LINE # 120
	MOV  	R3,s?550
	MOV  	R2,s?550+01H
	MOV  	R1,s?550+02H
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	MOV  	R7,A
	LCALL	?C?CLDPTR
	ADD  	A,#0D0H
	MOV  	B,#0AH
	MUL  	AB
	ADD  	A,R7
	MOV  	tmp?552,A
; 	if (tmp >= 24)
			; SOURCE LINE # 121
	CLR  	C
	SUBB 	A,#018H
	JC   	?C0019
; 	  return (-1);
			; SOURCE LINE # 122
	MOV  	R7,#0FFH
	RET  	
?C0019:
; 	*t = tmp;
			; SOURCE LINE # 123
	MOV  	R7,tmp?552
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LSTPTR
; 	tmp = ((s[2] - '0') * 10) + (s[3] - '0');
			; SOURCE LINE # 124
	MOV  	R3,s?550
	MOV  	R2,s?550+01H
	MOV  	R1,s?550+02H
	MOV  	DPTR,#02H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	MOV  	B,#0AH
	MUL  	AB
	MOV  	R7,A
	MOV  	DPTR,#03H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	ADD  	A,R7
	MOV  	tmp?552,A
; 	if (tmp >= 60)
			; SOURCE LINE # 125
	CLR  	C
	SUBB 	A,#03CH
	JC   	?C0020
; 	  return (-1);
			; SOURCE LINE # 126
	MOV  	R7,#0FFH
	RET  	
?C0020:
; 	*t = (60 * *t) + tmp;
			; SOURCE LINE # 127
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LLDPTR
	CLR  	A
	MOV  	R3,#03CH
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	R0,AR4
	MOV  	R1,AR5
	MOV  	R2,AR6
	MOV  	R3,AR7
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	A,R3
	ADD  	A,tmp?552
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,R2
	MOV  	R6,A
	MOV  	A,R5
	ADDC 	A,R1
	MOV  	R5,A
	MOV  	A,R4
	ADDC 	A,R0
	MOV  	R4,A
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LSTPTR
; 	tmp = ((s[4] - '0') * 10) + (s[5] - '0');
			; SOURCE LINE # 128
	MOV  	R3,s?550
	MOV  	R2,s?550+01H
	MOV  	R1,s?550+02H
	MOV  	DPTR,#04H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	MOV  	B,#0AH
	MUL  	AB
	MOV  	R7,A
	MOV  	DPTR,#05H
	LCALL	?C?CLDOPTR
	ADD  	A,#0D0H
	ADD  	A,R7
	MOV  	tmp?552,A
; 	if (tmp >= 60)
			; SOURCE LINE # 129
	CLR  	C
	SUBB 	A,#03CH
	JC   	?C0021
; 	  return (-1);
			; SOURCE LINE # 130
	MOV  	R7,#0FFH
	RET  	
?C0021:
; 	*t = (60 * *t) + tmp;
			; SOURCE LINE # 131
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LLDPTR
	CLR  	A
	MOV  	R3,#03CH
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?LMUL
	MOV  	R0,AR4
	MOV  	R1,AR5
	MOV  	R2,AR6
	MOV  	R3,AR7
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	A,R3
	ADD  	A,tmp?552
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,R2
	MOV  	R6,A
	MOV  	A,R5
	ADDC 	A,R1
	MOV  	R5,A
	MOV  	A,R4
	ADDC 	A,R0
	MOV  	R4,A
	MOV  	R3,t?549
	MOV  	R2,t?549+01H
	MOV  	R1,t?549+02H
	LCALL	?C?LSTPTR
; 	return (0);
			; SOURCE LINE # 132
	MOV  	R7,#00H
; }
			; SOURCE LINE # 133
?C0013:
	RET  	
; END OF _strtotm

; 
; /* 闹钟设置函数 */
; void alarm_set (unsigned setmins) {

	RSEG  ?PR?_alarm_set?CLOCK
_alarm_set:
			; SOURCE LINE # 136
;---- Variable 'setmins?653' assigned to Register 'R6/R7' ----
; 	almmins = setmins;
			; SOURCE LINE # 137
	MOV  	DPTR,#almmins
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
; 	alm_flag = 1;
			; SOURCE LINE # 138
	MOV  	DPTR,#alm_flag
	MOV  	A,#01H
	MOVX 	@DPTR,A
; }
			; SOURCE LINE # 139
	RET  	
; END OF _alarm_set

; 
; /* 闹钟清零函数 */
; void alarm_clr (void) {

	RSEG  ?PR?alarm_clr?CLOCK
alarm_clr:
			; SOURCE LINE # 142
; 	alm_flag = 0;
			; SOURCE LINE # 143
	CLR  	A
	MOV  	DPTR,#alm_flag
	MOVX 	@DPTR,A
; }
			; SOURCE LINE # 144
	RET  	
; END OF alarm_clr

; 
; /* 闹钟时间输出函数 */
; void alarm_out_time (void) {

	RSEG  ?PR?alarm_out_time?CLOCK
alarm_out_time:
	USING	0
			; SOURCE LINE # 147
; 	xdata char buf [21];
; 	unsigned mins;
; 	unsigned hours;
; 	unsigned t;
; 
; 	if (alm_flag == 0)   {
			; SOURCE LINE # 153
	MOV  	DPTR,#alm_flag
	MOVX 	A,@DPTR
	JNZ  	?C0024
; 	  com_puts ("\r\nNone\r\n");
			; SOURCE LINE # 154
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_3)
	MOV  	R1,#LOW (?SC_3)
	AJMP 	?C0026
; 	  return;
;     }
			; SOURCE LINE # 156
?C0024:
; 	t = almmins;
			; SOURCE LINE # 157
	MOV  	DPTR,#almmins
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
;---- Variable 't?857' assigned to Register 'R2/R3' ----
	MOV  	R3,A
	MOV  	R2,AR6
; 	mins  = t % 60;
			; SOURCE LINE # 158
	MOV  	R4,#00H
	MOV  	R5,#03CH
	MOV  	R7,A
	LCALL	?C?UIDIV
	MOV  	mins?855,R4
	MOV  	mins?855+01H,R5
; 	t /= 60;
			; SOURCE LINE # 159
	MOV  	R4,#00H
	MOV  	R5,#03CH
	MOV  	R7,AR3
	MOV  	R6,AR2
	LCALL	?C?UIDIV
; 	hours = t % 24;
			; SOURCE LINE # 160
	MOV  	R4,#00H
	MOV  	R5,#018H
	LCALL	?C?UIDIV
;---- Variable 'hours?856' assigned to Register 'R2/R3' ----
	MOV  	R3,AR5
	MOV  	R2,AR4
; 
; 	buf [0] = (hours / 10) + '0';
			; SOURCE LINE # 162
	MOV  	R4,#00H
	MOV  	R5,#0AH
	MOV  	R7,AR3
	MOV  	R6,AR2
	LCALL	?C?UIDIV
	MOV  	A,R7
	ADD  	A,#030H
	MOV  	DPTR,#buf?854
	MOVX 	@DPTR,A
; 	buf [1] = (hours % 10) + '0';
			; SOURCE LINE # 163
	MOV  	R6,AR2
	MOV  	R7,AR3
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R5
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [2] = ':';
			; SOURCE LINE # 164
	INC  	DPTR
	MOV  	A,#03AH
	MOVX 	@DPTR,A
; 	buf [3] = (mins / 10) + '0';
			; SOURCE LINE # 165
	MOV  	R6,mins?855
	MOV  	R7,mins?855+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R7
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [4] = (mins % 10) + '0';
			; SOURCE LINE # 166
	MOV  	R6,mins?855
	MOV  	R7,mins?855+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?UIDIV
	MOV  	A,R5
	ADD  	A,#030H
	INC  	DPTR
	MOVX 	@DPTR,A
; 	buf [5] = '\0';
			; SOURCE LINE # 167
	CLR  	A
	INC  	DPTR
	MOVX 	@DPTR,A
; 	
; 	com_puts ("\r\n");
			; SOURCE LINE # 169
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	LCALL	_com_puts
; 	com_puts (buf);
			; SOURCE LINE # 170
	MOV  	R3,#01H
	MOV  	R2,#HIGH (buf?854)
	MOV  	R1,#LOW (buf?854)
	LCALL	_com_puts
; 	com_puts ("\r\n");
			; SOURCE LINE # 171
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
?C0026:
	LCALL	_com_puts
; }
			; SOURCE LINE # 172
?C0025:
	RET  	
; END OF alarm_out_time

	END

⌨️ 快捷键说明

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