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

📄 jishi.txt

📁 本例是通过汇编语言实现电子日历牌的自动计时、调时功能。硬件采用89c51单片机
💻 TXT
字号:
year            DATA    66H
month           DATA    65H
week            DATA    64H
day             DATA    63H
hour            DATA    62H
mintue          DATA    61H
second          DATA    60H
DS12887A        DATA    7F0AH
DS12887B        DATA   	7F0BH
DS12887C        DATA   	7F0CH
DS12887D        DATA    7F0DH
DS12887         DATA    7F00H
                ORG     0000H
                AJMP    MAIN
                ORG     0003H
                RETI
                ORG     000BH
                RETI
                ORG     0013H
                RETI
                ORG     001BH
                LJMP    INTEL
                ORG     0023H
                RETI
MAIN:           MOV     SCON,#00H               ;串行输出,方式0
                MOV     TMOD,#10H               ;计数器1,方式1';
                LCALL   S12887
                SETB    PSW.5
	WAIT0:  MOV     DPTR,#DS12887A
 		MOVX	A,@DPTR
		JBC	ACC.7,WAIT0             ;UIP=1,时钟更新正在进行,不能读取时钟值;
           KK:  MOV     DPTR,#00H               ;UIP=0,可以读取值
                MOVX    A,@DPTR
                MOV     second,A
                MOV     R0,second
                LCALL   DIVIDE
                MOV     70H,R1
                MOV     40H,R1
                MOV     71H,R2
                MOV     41H,R2
                MOV     DPTR,#02H
                MOVX    A,@DPTR
                MOV     mintue,A
                MOV     R0,mintue
                LCALL   DIVIDE
                MOV     72H,R1
                MOV     42H,R1
                MOV     73H,R2
                MOV     43H,R2
                MOV     DPTR,#04H
                MOVX    A,@DPTR
                MOV    62H,A
                MOV     R0,62H
                LCALL   DIVIDE
                MOV     74H,R1
                MOV     44H,R1
                MOV     75H,R2
                MOV     45H,R2
                MOV     DPTR,#06H
                MOVX    A,@DPTR
                MOV    	week,A
                MOV     76H,week
                MOV     46H,week
                MOV     DPTR,#07H
                MOVX    A,@DPTR
                MOV     day,A
                MOV     R0,day
                LCALL   DIVIDE
                MOV    	77H,R1
                MOV    	47H,R1
                MOV    	78H,R2
                MOV    	48H,R2
                MOV   	DPTR,#08H
                MOVX  	A,@DPTR
                MOV   	month,A
                MOV   	R0,month
                LCALL  	DIVIDE
                MOV   	79H,R1
                MOV   	49H,R1
                MOV   	7AH,R2
                MOV   	4AH,R2
                MOV   	DPTR,#09H
                MOVX  	A,@DPTR
                MOV   	year,A
                MOV   	R0,year
                LCALL  	DIVIDE
                MOV  	7BH,R1
                MOV  	4BH,R1
                MOV  	7CH,R2
                MOV  	4CH,R2
		;MOV  	R0,#70H
		;MOV  	R1,#76H
		;MOV  	R2,#30H
		MOV  	7DH,#00H
		MOV  	7EH,#02H
		JNB     PSW.5,HH
                LCALL  	DISPLAY1
 HH:            LCALL	DISPLAY2
		JNB     P1.0,SETG;判断调整键是否按下
                LJMP 	WAIT0
SETG:		MOV     TL1,#0B0H    ;送计数初值
                MOV     TH1,#3CH
                SETB    EA   ;开中断
                SETB	TR1   ;计数器1的运行控制位,为1时启动记数
		SETB	ET1   ;溢出中断允许位,为1,允许T1中断
		CLR	08H   ;调时标志清零
		CLR	09H
		CLR	0AH
		CLR	0BH
		CLR	0CH
		CLR	0DH
		CLR	0EH
		CLR	0FH
		MOV	DPTR,#DS12887B
		MOV	A,#82H;禁止更新,初始化时间和日历
		MOVX	@DPTR,A
	        LCALL	DISPLAY1
		LCALL	DISPLAY2
		JNB	P1.0,GWAIT   ;判断调整键是否抬起,为0未抬
		AJMP    SETG1
       GWAIT:  AJMP    SETG
	SETG1:	SETB    09H       ;调年闪标志
	        LCALL	DISPLAY1
		JNB	P1.0,SETG2
		JNB	P1.1,GADDYEAR
		JNB	P1.2,GSUBYEAR
		AJMP	SETG1
     GADDYEAR:	MOV	R7,year			;年加一
		LCALL	ADD1
		MOV	year,A
    GADDYEAR1:	MOV	DPTR,#09H		;年值送入12887
		MOVX	@DPTR,A
		MOV	R0,A
		LCALL	DIVIDE			;年分离送显示缓存
		MOV	7BH,R1
		MOV	4BH,R1
		MOV	7CH,R2
		MOV	4CH,R2
	WAITT1:	LCALL	DISPLAY1
		JNB	P1.1,WAITT1
		AJMP	SETG1
 GSUBYEAR:	MOV	R7,year			;年减一
		LCALL	SUB1
		MOV	year,A
    GSUBYEAR1:	MOV	DPTR,#09H		;年值送入12887
		MOVX	@DPTR,A
		MOV	R0,A
		LCALL	DIVIDE			;年分离送显示缓存
		MOV	7BH,R1
		MOV	4BH,R1
		MOV	7CH,R2
		MOV	4CH,R2
       WAITT2:	LCALL	DISPLAY1
		JNB	P1.2,WAITT2
		AJMP	SETG1
	SETG2:	SETB	0AH			;调月时闪标志
       GWAIT2:	LCALL	DISPLAY1
		JNB	P1.0,GWAIT2
	SETG3:	LCALL	DISPLAY1
		JNB	P1.0,SETG4
		JNB	P1.1,GADDMONTH
		JNB	P1.2,GSUBMONTH
    		AJMP	SETG3
    GADDMONTH:	MOV	R7,month		;月加一
		LCALL	ADD1
		MOV	month,A
		CJNE	A,#13H,GADDMONTH1
		MOV	month,#01H
GADDMONTH1:	MOV	DPTR,#08		;月值送入12887
 		MOV	A,month
		MOVX	@DPTR,A
		MOV	R0,month
		LCALL	DIVIDE			;月分离送显示缓存
		MOV	79H,R1
		MOV	49H,R1
		MOV	7AH,R2
		MOV	4AH,R2
       WAITT3:	LCALL	DISPLAY1
		JNB	P1.1,WAITT3
		AJMP	SETG3
 GSUBMONTH:	MOV	R7,month		;月减一
		LCALL	SUB1
		MOV	month,A
		CJNE	A,#00H,GSUBMONTH1
		MOV	month,#12H
GSUBMONTH1:	MOV	DPTR,#08		;月值送入12887
		MOV	A,month
		MOVX	@DPTR,A
		MOV	R0,month
		LCALL	DIVIDE			;月分离送显示缓存
		MOV	79H,R1
		MOV	49H,R1
		MOV	7AH,R2
		MOV	4AH,R2
       WAITT4:	LCALL	DISPLAY1
		JNB	P1.2,WAITT4
		AJMP	SETG3
	SETG4:	SETB	0BH			;调日时闪标志
       GWAIT4:	LCALL	DISPLAY1
		JNB	P1.0,GWAIT4
	SETG5:	LCALL	DISPLAY1
		JNB	P1.0,SETG6
		JNB	P1.1,GADDDAY
		JNB	P1.2,GSUBDAY
    		AJMP	SETG5
    GADDDAY:	MOV	R7,day			;日加一
		LCALL	ADD1
		MOV	day,A
                MOV     R0,A
                CJNE    R0,#02H,PPP
                CJNE    A,#29H,GADDDAY1
                MOV     day,#01H
                AJMP    GADDDAY1
  PPP:          CJNE    A,#32H,GADDDAY1
        	MOV	day,#01H
   GADDDAY1:    MOV	DPTR,#07H		;日值送入12887
     		MOV	A,day
		MOVX	@DPTR,A
		MOV	R0,day
		LCALL	DIVIDE			;日分离送显示缓存
		MOV	77H,R1
		MOV	47H,R1
		MOV	78H,R2
		MOV	48H,R2
       WAITT5:	LCALL	DISPLAY1
		JNB	P1.1,WAITT5
		AJMP	SETG5
GSUBDAY:	MOV	R7,day			;日减一
		LCALL	SUB1
		MOV	day,A
                MOV     R0,A
                CJNE    R0,#02H,MMM
                CJNE    A,#00H,GSUBDAY1
                MOV     day,#28H
                AJMP     GSUBDAY1
  MMM:		CJNE	A,#00H,GSUBDAY1
		MOV	day,#31H
     GSUBDAY1:	MOV	DPTR,#07H		;日值送入12887
     		MOV	A,day
		MOVX	@DPTR,A
		MOV	R0,day
		LCALL	DIVIDE			;日分离送显示缓存
		MOV	77H,R1
		MOV	47H,R1
		MOV	78H,R2
		MOV	48H,R2
       WAIT6:	LCALL	DISPLAY1
		JNB	P1.2,WAIT6
		AJMP	SETG5
        SETG6:	SETB	0CH			;调星期时闪标志
       GWAIT6:	LCALL	DISPLAY1
		JNB	P1.0,GWAIT6
	SETG7:	LCALL	DISPLAY1
		JNB	P1.0,SETG8
		JNB	P1.1,GADDWEEK
		JNB	P1.2,GSUBWEEK
    		AJMP	SETG7
    GADDWEEK:	MOV	R7,week			;星期加一
		LCALL	ADD1
		MOV	week,A
		CJNE	A,#08H,GADDWEEK1
		MOV	week,#01H
     GADDWEEK1:	MOV	DPTR,#06H		;星期值送入12887
                MOV     A,week
		MOVX	@DPTR,A
		MOV	R0,week
		LCALL	DIVIDE			;星期分离送显示缓存
		MOV	76H,R1
		MOV	46H,R1
       WAITT7:	LCALL	DISPLAY1
		JNB	P1.1,WAITT7
		AJMP	SETG7
GSUBWEEK:	MOV	R7,week			;星期减一
		LCALL	SUB1
		MOV	week,A
		CJNE	A,#00H,GSUBWEEK1
		MOV	week,#07H
     GSUBWEEK1:	MOV	DPTR,#06H		;星期值送入12887
     		MOV	A,week
		MOVX	@DPTR,A
		MOV	R0,week
		LCALL	DIVIDE			;星期分离送显示缓存
		MOV	76H,R1
		MOV	46H,R1
       WAITT8:	LCALL	DISPLAY1
		JNB	P1.2,WAITT8
		AJMP	SETG7
	SETG8:	SETB	0DH			;调[小]时闪标志
       GWAIT8:	LCALL	DISPLAY2
		JNB	P1.0,GWAIT8
	SETG9:	LCALL	DISPLAY2
		JNB	P1.0,SETG10
		JNB	P1.1,GADDHOUR
		JNB	P1.2,GSUBHOUR
    		AJMP	SETG9
    GADDHOUR:	MOV	R7,hour			;[小]时加一
		LCALL	ADD1
		MOV	hour,A
		CJNE	A,#24H,GADDHOUR1
		MOV	hour,#00H
     GADDHOUR1:	MOV	DPTR,#04H		;[小]时值送入12887
     		MOV	A,hour
		MOVX	@DPTR,A
		MOV	R0,hour
		LCALL	DIVIDE			;[[小]时分离送显示缓存
		MOV	74H,R1
		MOV	44H,R1
		MOV	75H,R2
		MOV	45H,R2
       WAITT9:	LCALL	DISPLAY2
		JNB	P1.1,WAITT9
		AJMP	SETG9
GSUBHOUR:	MOV	R7,hour			;[小]时减一
		LCALL	SUB1
		MOV	hour,A
		CJNE	A,#99H,GSUBHOUR1
		MOV	hour,#23H
     GSUBHOUR1:	MOV	DPTR,#04H		;[小]时值送入12887
     		MOV	A,hour
		MOVX	@DPTR,A
		MOV	R0,hour
		LCALL	DIVIDE			;[[小]时分离送显示缓存
		MOV	74H,R1
		MOV	44H,R1
		MOV	75H,R2
		MOV	45H,R2
       WAITT10:	LCALL	DISPLAY2
		JNB	P1.2,WAITT10
		AJMP	SETG9
	SETG10:	SETB	0EH			;调分时闪标志
       GWAIT10:	LCALL	DISPLAY2
		JNB	P1.0,GWAIT10
	SETG11:	LCALL	DISPLAY2
		JNB	P1.0,SETGOUT
		JNB	P1.1,GADDMINTUE
		JNB	P1.2,GSUBMINTUE
    		AJMP	SETG11
    GADDMINTUE:	MOV	R7,mintue		;分加一
		LCALL	ADD1
		MOV	mintue,A
		CJNE	A,#60H,GADDMINTUE1
		MOV	mintue,#00H
   GADDMINTUE1:	MOV	DPTR,#02H		;分值送入12887
   		MOV	A,mintue
		MOVX	@DPTR,A
		MOV	R0,mintue
		LCALL	DIVIDE			;分分离送显示缓存
		MOV	72H,R1
		MOV	42H,R1
		MOV	73H,R2
		MOV	43H,R2
       WAITT11:	LCALL	DISPLAY2
		JNB	P1.1,WAITT11
		AJMP	SETG11
GSUBMINTUE:	MOV	R7,mintue		;分减一
		LCALL	SUB1
		MOV	mintue,A
		CJNE	A,#99H,GADDMINTUE2
		MOV	mintue,#59
   GADDMINTUE2:	MOV	DPTR,#02H		;分值送入12887
   		MOV	A,mintue
		MOVX	@DPTR,A
		MOV	R0,mintue
		LCALL	DIVIDE			;分分离送显示缓存
		MOV	72H,R1
		MOV	42H,R1
		MOV	73H,R2
		MOV	43H,R2
       WAITT12:	LCALL	DISPLAY2
		JNB	P1.2,WAITT12
		AJMP	SETG11
      SETGOUT:	LCALL	DISPLAY1
		LCALL	DISPLAY2
		JNB	P1.0,SETGOUT
		MOV	DPTR,#DS12887B
		MOV	A,#02H			;12887启动更新
		MOVX    @DPTR,A
		CLR	08H
		CLR	09H
		CLR	0AH
		CLR	0BH
		CLR	0CH
		CLR	0DH
		CLR	0EH
		CLR	0FH
		CLR	EA			;关闭中断
		CLR	TR1
		LJMP	WAIT0

S12887:         MOV     DPTR,#DS12887B   ;寄存器B的地址7F0B送到DPTR
                MOV     A,#0082H  ;SET=1,禁止更新,程序可初始化时间和日历,选用24时制
		MOVX    @DPTR,A
                MOV     DPTR,#DS12887A
                MOV     A,#20H
                MOVX    @DPTR,A
                MOV     DPTR,#00H      ;秒地址
		MOV	A,#00H         ;second=00
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#0FFH    ;不报警
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#59H             	;mintue=00
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#0FFH
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#23H             	;hour=00
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#0FFH
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#1H              	;week=1
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#27H              	;day=1
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#2H              	;month=1
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#06H                  ;year=06
                MOVX    @DPTR,A
                MOV     DPTR,#DS12887C
                CLR     A
                MOVX    @DPTR,A   ;寄存器C清零
                INC     DPTR
                MOVX    @DPTR,A   ;寄存器D清零
                MOV     DPTR,#DS12887B
                MOV     A,#02H;SET=0,更新正常运行,禁止中断,选用24时制,不用夏时制
                MOVX    @DPTR,A
                RET
DISPLAY1:       SETB	P1.4
		CLR	P1.3
		MOV     DPTR,#TAB
		MOV	R0,#76H
		MOV	R7,#9
NEXT:		MOV 	A,@R0
		MOVC	A,@A+DPTR
		MOV	SBUF,A
W2:		JBC	TI,W1
		SJMP	W2
W1: 		INC	R0
		DJNZ	R7,NEXT
		SETB	P1.3
		CLR	P1.4
                LCALL    DL1MS
		RET
DISPLAY2:       MOV     DPTR,#TAB
		MOV	R0,#70H
		MOV	R4,#6
NEXT1:		MOV 	A,@R0
		MOVC	A,@A+DPTR
		MOV	SBUF,A
W4:		JBC	TI,W3
		SJMP	W4
W3:		INC	R0
		DJNZ	R4,NEXT1
                LCALL    DL1MS
		MOV     R1,#62H    ;小时地址送给R1
	        CJNE   @R1,#00H,L2
	        SETB    PSW.5
	        SJMP    L3
   L2:          CLR     PSW.5
                
L3:             RET
DL1MS:		MOV	R6,#100
	DL1:    MOV	R7,#255
	DL2:    DJNZ	R7,DL2
		DJNZ	R6,DL1
		RET
DIVIDE:		MOV	A,R0
		ANL	A,#0FH
		MOV	R1,A
		MOV	A,R0
		SWAP	A
		ANL	A,#0FH
		MOV	R2,A
		RET
ADD1:		MOV	A,R7			;加一程序
		ADD	A,#01H
		DA      A
		RET
SUB1:		MOV	A,R7		     ;减一程序
                ADD	A,#99H
                DA      A
		RET
   INTEL:       MOV     TL1,#0B0H            ;定时器中断程序,重装定时器初值
 		MOV	TH1,#3CH
                MOV     R1,#59H
 K2:            MOV     R0,#255H
 K1:            DEC     R0
                CJNE    R0,#00H,K1
                DJNZ    R1,K2
                PUSH	ACC	             ;保护现场
		PUSH	PSW
GFLASH:	        CPL    0FH
		JB	0FH,GFLASH1
		MOV	70H,40H
		MOV	71H,41H
		MOV	72H,42H
		MOV	73H,43H
		MOV     74H,44H
		MOV	75H,45H
		MOV	76H,46H
		MOV     77H,47H
		MOV	78H,48H
		MOV	79H,49H
		MOV	7AH,4AH
		MOV	7BH,4BH
		MOV     7CH,4CH
GFLASHOUT:	POP 	PSW
		POP	ACC
		RETI
GFLASH1:	JB	0AH,GFLASH2
		MOV	7CH,#0AH
		MOV	7BH,#0AH
		AJMP	GFLASHOUT
GFLASH2:	JB	0BH,GFLASH3
		MOV	7AH,#0AH
		MOV	79H,#0AH
		AJMP	GFLASHOUT
GFLASH3:	JB	0CH,GFLASH4
		MOV	78H,#0AH
		MOV	77H,#0AH
		AJMP	GFLASHOUT
GFLASH4:	JB	0DH,GFLASH5
		MOV	76H,#0AH
		AJMP    GFLASHOUT
GFLASH5:	JB	0EH,GFLASH6
		MOV	75H,#0AH
		MOV	74H,#0AH
		AJMP	GFLASHOUT
GFLASH6:	MOV	73H,#0AH
		MOV	72H,#0AH
		AJMP	GFLASHOUT
TAB:		DB      03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,0FFH
		END

⌨️ 快捷键说明

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