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

📄 alamr.asm

📁 Asm Timer Alarm Source Code
💻 ASM
字号:
$MOD51
$TITLE(BYTE SIGNED MULTIPLY)
$DEBUG
$NOPAGING

;VECTOR 
	ORG	0000H
	LJMP	Start


;EXAMPLE MAIN  ********************************************************    
	CSEG
;Test Program ***************
	ORG	30H
	
Start:
	MOV	SP,#30H

	MOV	Scroll,#00H
	MOV	L_Str,#20

	MOV	R0,#Buffer
	MOV	R1,L_Str
	MOV	DPTR,#Version

L_Buffer:
	MOV	A,#0
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	DPTR
	INC	R0
	DJNZ	R1,L_Buffer

	
	CALL	Init_RTC
	CALL	Read_DTime

	MOV	P1,#11110000B

	CLR	P2.7

	CALL	INIT_LCD
	CALL	CLEAR_LCD

	CALL	INIT_LCD
	CALL	CLEAR_LCD

	CLR	P2.7

	MOV	DPTR,#Version
	CALL	First_line
	MOV	DPTR,#WCome
	CALL	Second_line

	MOV	L_Str,#1
	MOV	Scroll,#Buffer
	MOV	Scroll_f,#01H
	MOV	LCD_Addr,#80H
	
	MOV	Keys_f,#00H

	MOV	R4,#00H
	MOV	R5,#00H

L_T:
	CALL	Scan_Time
	JMP	L_T

	RET

Scan_keys:
	SETB	P2.5
	ANL	P2,#10101111B	;CS_2
	SETB	CS_CHIP
	SETB	P1.0
	NOP
	MOV	A,P0
	CLR	P1.0
	CLR	CS_CHIP
	CJNE	A,#0FFH,Keys_press
	JMP	Keys_Exit
Keys_press:
	MOV	Keys_code,A
	MOV	Keys_f,#01H
	SETB	P2.7
Keys_Exit:
	RET

Scan_Time:
	ANL	P2,#10001111B
	SETB	CS_CHIP
	MOV	R0,#REG_A
	MOVX	A ,@R0
	JNB	ACC.7,RTC_Jmp	

	MOV	R0,#SEC
	MOVX	A, @R0
	MOV	Sec_Cmd,A
		
	MOV	R0,#MIN
	MOVX	A, @R0
	MOV	Min_Cmd,A

	MOV	R0,#HOUR
	MOVX	A, @R0
	MOV	Hour_Cmd,A

	MOV	R0,#DAY
	MOVX	A, @R0
	MOV	Day_Cmd,A

	MOV	R0,#MON
	MOVX	A, @R0
	MOV	Mon_Cmd,A

	MOV	R0,#YEAR
	MOVX	A, @R0
	MOV	YEAR_Cmd,A

	CLR	CS_CHIP
	CALL	Show_DTime

	MOV	A,Keys_f
	JZ	RTC_Jmp
	INC	Keys_f
	CJNE	A,#5,RTC_Jmp
	MOV	Keys_f,#00H
	CLR	P2.7

RTC_Jmp:
	CALL	Scan_Keys
	INC	R4
	CJNE	R4,#200,Scan_Time
	MOV	R4,#00H
	INC	R5
	CJNE	R5,#200,Scan_Time
	MOV	R5,#00H
	CALL	Str2Left
	JMP	Scan_Time		 
	RET

Date_Addr	EQU	4100H

Str2Left:
	MOV	A,Scroll_f
	CJNE	A,#00H,CentralPause
	MOV	R0,Scroll
	MOV	R1,L_Str
	MOV	R2,LCD_Addr
	CALL	RWrite
	DEC	LCD_Addr
	INC	L_Str
	MOV	A,L_Str
	CJNE	A,#21,Str2L_Exit
	MOV	L_Str,#0
	MOV	LCD_Addr,#80H
	MOV	Scroll_f,#01H
	JMP	Str2L_Exit
CentralPause:
	CJNE	A,#01H,Central2Left
	INC	L_Str
	MOV	A,L_Str
	CJNE	A,#20,Str2L_Exit
	MOV	Scroll_f,#02H
	JMP	Str2L_Exit	
Central2Left:
	MOV	DPTR,#Blank
	CALL	First_line
	MOV	R0,Scroll
	MOV	R1,L_Str
	MOV	R2,LCD_Addr
	CALL	RWrite
	DEC	L_Str
	INC	Scroll
	MOV	A,L_Str
	CJNE	A,#00,Str2L_Exit
	MOV	L_Str,#1
	MOV	Scroll,#Buffer
	MOV	Scroll_f,#00H
	MOV	LCD_Addr,#93H
Str2L_Exit:
	RET

Show_DTime:
	CLR	RS
	MOV	A,#0C0H
	CALL	Write_2_Nibbles	
	CALL	Wait_LCD
	MOV	A,Day_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Day_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,#'-'
	CALL	Write_TEXT
	MOV	A,Mon_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Mon_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,#'-'
	CALL	Write_TEXT
	MOV	A,#'2'
	CALL	Write_TEXT
	MOV	A,#'0'
	CALL	Write_TEXT
	MOV	A,Year_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Year_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,#' '
	CALL	Write_TEXT
	MOV	A,#' '
	CALL	Write_TEXT
	MOV	A,Hour_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Hour_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,#':'
	CALL	Write_TEXT
	MOV	A,Min_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Min_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,#':'
	CALL	Write_TEXT
	MOV	A,Sec_Cmd
	SWAP	A
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT
	MOV	A,Sec_Cmd
	ANL	A,#0FH
	ADD	A,#48
	CALL	Write_TEXT

	RET


CS_CHIP	EQU	P3.2


;********** Real time(RTC) valure ****************
SEC		EQU	00H
SEC_AL		EQU	01H
MIN		EQU	02H
MIN_AL		EQU	03H
HOUR		EQU	04H
HOUR_AL		EQU	05H
WEEKDAY		EQU	06H
DAY		EQU	07H
MON		EQU	08H
YEAR		EQU	09H
REG_A		EQU	0AH
REG_B		EQU	0BH
REG_C		EQU	0CH
REG_D		EQU	0DH

;*** Date&Time buffer ***
Hour_Cmd	EQU	70H
Min_Cmd		EQU	71H
Sec_Cmd		EQU	72H
Day_Cmd		EQU	73H
Mon_Cmd		EQU	74H
Year_Cmd	EQU	75H

Scroll		EQU	76H
L_Str		EQU	77H	; Length of string
Scroll_f	EQU	78H	; flag
LCD_Addr	EQU	79H

Keys_code	EQU	7AH
Keys_f		EQU	7BH


;*** Buffer of All ***
Buffer		EQU	40H

Init_RTC:
	ANL	P2,#10001111B
	SETB	CS_Chip
	MOV	R0,#REG_B	; SET=1
	MOV	A, #10000000B
	MOVX	@R0,A

	MOV	R0,#REG_B
	MOV	A, #00011010B	; UIE=1, BCD Code, 24H
	MOVX	@R0,A

; OSC ON ==> DV2 DV1 DV0=010: OSC=ON, INT0=0.5s
	MOV	R0,#REG_A
	MOV	A, #10101111B
	MOVX	@R0,A

; SET TIME: 23:25:00
;	MOV	R0,#SEC		; SEC=00
;	MOV	A, #00H		; BCD
;	MOVX	@R0,A

;	MOV	R0,#MIN		; MIN=25
;	MOV	A, #00H		; BCD
;	MOVX	@R0,A

;	MOV	R0,#HOUR		; HOUR=04
;	MOV	A, #13H		; BCD
;	MOVX	@R0,A

; SET DATE: 15/08/06
;	MOV	R0,#DAY		; DAY=15
;	MOV	A, #11H		; BCD
;	MOVX	@R0,A

;	MOV	R0,#MON		; MON=08
;	MOV	A, #11H		; BCD
;	MOVX	@R0,A

;	MOV	R0,#YEAR		; YEAR=06
;	MOV	A, #06H		; BCD
;	MOVX	@R0,A

	CLR	CS_Chip
	RET


;*********Read Date-Time on RTC**********
Read_DTime:
	ANL	P2,#10001111B
	SETB	CS_Chip
Wait_RTC:
	MOV	R0,#REG_A
	MOVX	A ,@R0
	JNB	ACC.7,Wait_RTC

	MOV	R0,#SEC
	MOVX	A, @R0
	MOV	Sec_Cmd,A

	MOV	R0,#MIN
	MOVX	A, @R0
	MOV	Min_Cmd,A

	MOV	R0,#HOUR
	MOVX	A, @R0
	MOV	Hour_Cmd,A

	MOV	R0,#DAY
	MOVX	A, @R0
	MOV	Day_Cmd,A

	MOV	R0,#MON
	MOVX	A, @R0
	MOV	Mon_Cmd,A

	MOV	R0,#YEAR
	MOVX	A, @R0
	MOV	YEAR_Cmd,A
	CLR	CS_Chip
	RET


;*****************************************
; LCD
; Port Connections
; = = = = = = = = = = = = = = = = = 
; P1.4 - > D4
; P1.5 - > D5
; P1.6 - > D6
; P1.7 - > D7
;
; P3.3 - > RS   Register selection signal 
; P3.4 - > RW   Read/Write signal
; P3.5 - > EN   Enable
;*******************************************************

RS      EQU     P3.3    ;Regster selection signal
RW      EQU     P3.4    ;Read/Write signal
EN      EQU     P3.5    ;Enable

Init_LCD:
	CLR	RS
	CLR	RW
	CLR	EN
	SETB	EN

	MOV	A,#00100000B	;20H 4bit
	CALL	Write_2_Nibbles
	CLR	EN      
	CALL	Wait_LCD
	MOV	A,#00101000B	;28H 4bit 2line 5x7font 
	CALL	Write_2_Nibbles
	CALL	Wait_LCD
	MOV	A,#00001100B	;0EH Cursor on
	CALL	Write_2_Nibbles
	CALL	Wait_LCD
	MOV	A,#00000110B	;06H
	CALL	Write_2_Nibbles
	CALL	Wait_LCD

	RET

Wait_LCD:
	CLR	RS
	SETB	RW
	CALL	Read_2_Nibbles
	JB	ACC.7,Wait_LCD
	CLR	RW
	RET

Read_2_Nibbles:
	ORL	P1,#0F0H
	SETB	EN
	MOV	A,P1
	CLR	EN
	ANL	A,#0F0H
	PUSH	ACC
	SETB	EN
	MOV	A,P1
	CLR	EN
	ANL	A,#0F0H
	SWAP	A
	MOV	R7,A
	POP	ACC
	ORL	A,R7
	RET

Write_2_Nibbles:
	PUSH	ACC
	ORL	P1,#0F0H
	ORL	A,#0FH
	ANL	P1,A
	SETB	EN
	CLR	EN
	POP	ACC
	SWAP	A
	ORL	P1,#0F0H
	ORL	A,#0FH
	ANL	P1,A
	SETB	EN
	CLR	EN
	RET

Clear_LCD:
	CLR	RS
	MOV	A,#01H
	CALL	Write_2_Nibbles
	CALL	Wait_LCD
	RET

Write_TEXT:
	SETB	RS
	CALL	Write_2_Nibbles
	CALL	Wait_LCD
	RET

Write:
	MOV	A,#0
	MOVC	A,@A+DPTR
	CJNE	A,#0H,Write_cont
	RET
Write_cont:
	CALL	Write_TEXT
	INC	DPTR
	JMP	Write

RWrite:				; R0: Address of datas
	CLR	RS		; R1: Length of datas
	MOV	A,LCD_Addr	; R2: Address of LCD
	CALL	Write_2_Nibbles	
	CALL	Wait_LCD
RWriteL:
	MOV	A,@R0
	CALL	Write_Text
	INC	R0
	DJNZ	R1,RWriteL
	RET

First_line:
	CLR	RS
	MOV	A,#080H
	CALL	Write_2_Nibbles	
	CALL	Wait_LCD
	CALL	Write
	RET

Second_line:
	CLR	RS
	MOV	A,#0C0H
	CALL	Write_2_Nibbles	
	CALL	Wait_LCD
	CALL	Write
	RET     

;****************************************
; Data Bytes
;****************************************
DTimeDB:	DB '00-00-2000  00:00:00',0H
Blank:		DB '                    ',0H
Version:	DB ' -=*NPH-PROJECTS*=- ',0H
WCome:		DB 'Life is beautiful...',0H
NPH:		DB 'NPH Electronics and Informatics',0H

	END




⌨️ 快捷键说明

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