📄 alarm.asm
字号:
MOV SENDDATA,#10100101B
LCALL SEND_BYTE
RET
Write_multiplebyte:
MOV COMMAND,#0BEH
MOV BYTECNT,#8
MOV R0,#SENDDATA
MOV SENDDATA, #00H ;秒 0
MOV SENDDATA+1,#31H ;分 30
MOV SENDDATA+2,#15H ;时 12
MOV SENDDATA+3,#18H ;日 18
MOV SENDDATA+4,#12H ;月份 12
MOV SENDDATA+5,#01H ;星期 1
MOV SENDDATA+6,#06H ;年 06
MOV SENDDATA+7,#07H ;
LCALL SEND_BYTE
RET
OSC_enable:
MOV COMMAND,#80H
MOV BYTECNT,#1
MOV R0,#SENDDATA
MOV SENDDATA,#00H
LCALL SEND_BYTE
RET
Write_enable:
MOV COMMAND,#8EH
MOV BYTECNT,#1
MOV R0,#SENDDATA
MOV SENDDATA,#00H
LCALL SEND_BYTE
RET
Write_disable:
MOV COMMAND,#8EH
MOV R0,#SENDDATA
MOV SENDDATA,#80H
MOV BYTECNT,#1
MOV A,COMMAND
LCALL SEND_BYTE
RET
;------------------------------------------发送命令--------------------------------------------
SEND_BYTE:
CLR RST
NOP
CLR SCLK
NOP
SETB RST
NOP
MOV A,COMMAND
MOV BITCNT,#08H
S_B0: RRC A
MOV IODATA,C
NOP
SETB SCLK
NOP
CLR SCLK
DJNZ BITCNT,S_B0
NOP
S_B1: MOV A,@R0
MOV BITCNT,#08H
S_B2: RRC A
MOV IODATA,C
NOP
SETB SCLK
NOP
CLR SCLK
DJNZ BITCNT,S_B2
INC R0
DJNZ BYTECNT,S_B1
NOP
CLR RST
RET
;-------------------------------多字节连续传送-----------------------------------------
Read_multiplebyte:
MOV COMMAND,#0BFH
MOV BYTECNT,#8H
MOV R1,#RCVDATA
LCALL RECIVE_BYTE
RET
;----------------------------------------RECIVE_BYTE from da1302------------------------------
RECIVE_BYTE:
CLR RST
NOP
CLR SCLK
NOP
SETB RST
NOP
MOV A,COMMAND
MOV BITCNT,#8H
RE_B0:RRC A
MOV IODATA,C
SETB SCLK
NOP
CLR SCLK
DJNZ BITCNT,RE_B0
NOP
RE_B1:CLR A
CLR C
MOV BITCNT,#8H
RE_B2:NOP
MOV C,IODATA
RRC A
SETB SCLK
NOP
CLR SCLK
DJNZ BITCNT,RE_B2
MOV @R1,A
INC R1
DJNZ BYTECNT,RE_B1
NOP
CLR RST
RET
;----------------把秒,分,时等分成两个存储空间---------------------
EXCHANGE:
MOV A,70H
MOV B,#10H
DIV AB
MOV 61H,A
MOV 60H,B
MOV A,71H
MOV B,#10H
DIV AB
MOV 63H,A
MOV 62H,B
MOV A,72H
MOV B,#10H
DIV AB
MOV 65H,A
MOV 64H,B
MOV A,73H
MOV B,#10H
DIV AB
MOV 67H,A
MOV 66H,B
MOV A,74H
MOV B,#10H
DIV AB
MOV 69H,A
MOV 68H,B
MOV 6AH,75H
MOV A,76H
MOV B,#10H
DIV AB
MOV 6CH,A
MOV 6BH,B
RET
;-----------------------------------16进制转换成 ASCII码值---------------------------
ADD_ASCII:
MOV A,60H
ADD A,#48
MOV 60H,A
MOV A,61H
ADD A,#48
MOV 61H,A
MOV A,62H
ADD A,#48
MOV 62H,A
MOV A,63H
ADD A,#48
MOV 63H,A
MOV A,64H
ADD A,#48
MOV 64H,A
MOV A,65H
ADD A,#48
MOV 65H,A
MOV A,66H
ADD A,#48
MOV 66H,A
MOV A,67H
ADD A,#48
MOV 67H,A
MOV A,68H
ADD A,#48
MOV 68H,A
MOV A,69H
ADD A,#48
MOV 69H,A
MOV A,6AH
ADD A,#48
MOV 6AH,A
MOV A,6BH
ADD A,#48
MOV 6BH,A
MOV A,6CH
ADD A,#48
MOV 6CH,A
RET
;--------------------------------LCD 对应的XPOS,YPOS 输出---------------------------------
DISBUF:
MOV XPOS,#0
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#1
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#2
MOV YPOS,#0
MOV A,#'2'
LCALL LCDWRITE
MOV XPOS,#3
MOV YPOS,#0
MOV A,#'0'
LCALL LCDWRITE
MOV XPOS,#4
MOV YPOS,#0
MOV A,6CH
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#0
MOV A,6BH
LCALL LCDWRITE
MOV XPOS,#6
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#7
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#0
MOV A,69H
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#0
MOV A,68H
LCALL LCDWRITE
MOV XPOS,#10
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#11
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#12
MOV YPOS,#0
MOV A,67H
LCALL LCDWRITE
MOV XPOS,#13
MOV YPOS,#0
MOV A,66H
LCALL LCDWRITE
MOV XPOS,#14
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#15
MOV YPOS,#0
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#0
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#1
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#2
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#3
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#4
MOV YPOS,#1
MOV A,65H
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#1
MOV A,64H
LCALL LCDWRITE
MOV XPOS,#6
MOV YPOS,#1
MOV A,#':'
LCALL LCDWRITE
MOV XPOS,#7
MOV YPOS,#1
MOV A,63H
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#1
MOV A,62H
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#1
MOV A,#':'
LCALL LCDWRITE
MOV XPOS,#10
MOV YPOS,#1
MOV A,61H
LCALL LCDWRITE
MOV XPOS,#11
MOV YPOS,#1
MOV A,60H
LCALL LCDWRITE
MOV XPOS,#12
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#13
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#14
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
MOV XPOS,#15
MOV YPOS,#1
MOV A,#'*'
LCALL LCDWRITE
RET
;-------------------------------LCD 写满屏幕地址和字符数据指令--------------------------------
LCDFILL:
LCALL LCDWRITE
INC XPOS
MOV A,XPOS
CJNE A,#16,RETURN
INC YPOS
MOV A,YPOS
CJNE A,#2,RETURN
RETURN: RET
;-----------------------------------LCD 写一个地址和字符数据指令-----------------------------------
LCDWRITE:
LCALL LCDPOS ;lcd 写地址指令
LCALL LCDWD ;LCD 写字符指令
RET
;------------------------------LCD 写地址指令--------------------------------------------------------
LCDPOS:PUSH ACC
ANL XPOS,#0FH
ANL YPOS,#01H
MOV A,YPOS
CJNE A,#00,LPS_LAY
MOV A,XPOS
LJMP LPS_LAX
LPS_LAY:MOV A,XPOS
ADD A,#40H
LPS_LAX:ORL A,#80H
LCALL LCDWC
POP ACC
RET
;------------------------------------LCD RESET--------------------------------------------------------------------
LCDRESET:
LCALL DELAY5MS
LCALL DELAY5MS
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
LCALL DELAY5MS
MOV A,#38H
LCALL LCDWCN
MOV A,#38H
LCALL LCDWC
MOV A,#08H
LCALL LCDWC
MOV A,#01H
LCALL LCDWC
MOV A,#06H
LCALL LCDWC
MOV A,#0CH
LCALL LCDWC
RET
LCDWC:LCALL WAITIDLE
;----------------------------------LCD write not check,写指令------------------------
LCDWCN:CLR RS
CLR RW
MOV P1,A
SETB E
NOP
CLR E
RET
;--------------------------LCD busy check,wait till not busy(读状态,判断是否忙)-----------------------------------
WAITIDLE:
PUSH ACC
MOV P1,#0FFH
CLR RS
SETB RW
SETB E
WTD_PA: NOP
JB P1.7,WTD_PA
CLR E
POP ACC
RET
;--------------------------LCD WRITE TATA(写数据)----------------------------------------
LCDWD: LCALL WAITIDLE
MOV P1,A
CLR RW
SETB RS
SETB E
NOP
CLR E
RET
;----------------------------------------------------IIC 程序----------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;归一化EEPROM存入程序(12M时钟),存入数在00H起单元
IICWRITE:
MOV MTD,#00H
MOV SLA,#SLAW
MOV NUMBYT,#3
LCALL WRNBYT
RET
;;;;;;;;;;;;;;;;;;;;
;;VIICREAD ;;
;;;;;;;;;;;;;;;;;;;;
; 归一化EEPROM读出程序(12M时钟),读出数放入60H-67H单元
IICREAD: MOV MTD,#00H ;
MOV SLA,#SLAW
MOV NUMBYT,#01H
LCALL WRNBYT
MOV SLA,#SLAR
MOV NUMBYT,#02H
LCALL RDNBYT
ACALL RMOV8
RET
RMOV8: MOV 3AH,MRD
MOV 3BH,MRD+1
RET
;
;;;;;;;;;;;;;;;;;;;;
;;VIIC PROGRAM ;;
;;;;;;;;;;;;;;;;;;;;
; I2C串行归一化存储子程序
STA: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
STOP: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
CLR SDA
CLR SCL
RET
MACK: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
SETB SDA
RET
MNACK: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
CLR SDA
RET
CACK: SETB SDA
SETB SCL
CLR F0
MOV C,SDA
JNC CEND
SETB F0
CEND: CLR SCL
RET
WRBYT: MOV R0,#08H
WLP: RLC A
JC WR1
AJMP WR0
WLP1: DJNZ R0,WLP
RET
WR1: SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
CLR SDA
AJMP WLP1
WR0: CLR SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
AJMP WLP1
RDBYT: MOV R0,#08H
RLP: SETB SDA
SETB SCL
MOV C,SDA
MOV A,R2
RLC A
MOV R2,A
CLR SCL
DJNZ R0,RLP
RET
WRNBYT: MOV R3,NUMBYT
LCALL STA
MOV A,SLA
LCALL WRBYT
LCALL CACK
JB F0,WRNBYT
MOV R1,#MTD
WRDA: MOV A,@R1
LCALL WRBYT
LCALL CACK
JB F0,WRNBYT
INC R1
DJNZ R3,WRDA
LCALL STOP
RET
RDNBYT: MOV R3,NUMBYT
LCALL STA
MOV A,SLA
LCALL WRBYT
LCALL CACK
JB F0,RDNBYT
RDN: MOV R1,#MRD
RDN1: LCALL RDBYT
MOV @R1,A
DJNZ R3,ACK
LCALL MNACK
LCALL STOP
RET
ACK: LCALL MACK
INC R1
SJMP RDN1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;----------------------------DELAY---------------------------------
DELAY5MS:MOV R5,#5
DL2: MOV R6,#250
DL1: NOP
NOP
DJNZ R6,DL1
DJNZ R5,DL2
RET
DELAY400MS:
MOV R5,#20 ;延时子程序(400MS)
DL4_PA: MOV R6,#100
DL4_PB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL4_PB
DJNZ R5,DL4_PA
RET
;------------------------------------------INTT0-------------------------
INTT0: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R4,RETT0
MOV R4,#10
CPL 20H.0
RETT0: RETI
TAB: DB 'S','e','t',' ','t','i','m','e',' ','t','o',' ','R','i','n','g'
DB '*','*','*','*','*','0','0',':','0','0','*','*','*','*','*','*'
; 70H(秒)| 71h分) 72h时) 73h日 | 74h月 | 75h周| 76h 年
;61H,60H | 63h,62h | 65h,64h | 67h,66h | 69h,68h | 6Ah | 6CH,6BH
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -