📄 ex10-3.sdi
字号:
,,,;*********************************************************************/
,,,
000B,,,T_RST Bit P1.5 ;实时时钟复位线引脚
000B,,,T_CLK Bit P1.6 ;实时时钟时钟线引脚
000B,,,T_IO Bit P1.7 ;实时时钟数据线引脚
,,,
,,,SECOND EQU 30H
,,,MINUTE EQU 31H
,,,HOUR EQU 32H
,,,DAY EQU 33H
,,,MONTH EQU 34H
,,,WEEK EQU 35H
,,,YEARL EQU 36H
,,,
,,,;*********************************************************************/
,,, ORG 0000H
0000,02 00 60,START,START: LJMP MAIN
,,, ORG 0060H
0060,75 81 60,MAIN,MAIN: MOV SP,#60H ;修改堆栈
,,,;*********************************************************************
0063,75 30 55,, MOV SECOND,#55H ;初始时间设为23:59:55
0066,75 31 59,, MOV MINUTE,#59H
0069,75 32 23,, MOV HOUR,#23H
006C,75 33 31,, MOV DAY,#31H ;初始日期设为07年12月31日第一周
006F,75 34 12,, MOV MONTH,#12H
0072,75 35 01,, MOV WEEK,#01H
0075,75 36 07,, MOV YEARL,#07H
0078,12 01 5F,, LCALL SETDS1302
007B,12 01 FF,, LCALL LCD_INIT ;调用液晶模块初始化子程序
007E,7B 14,, MOV R3,#20
0080,75 89 01,, MOV TMOD,#01H
0083,75 8C 3C,, MOV TH0,#3CH ;置定时器初值(定时50ms)
0086,75 8A B0,, MOV TL0,#0B0H
0089,D2 8C,, SETB TR0 ;启动定时器0
008B,10 8D 02,LP1,LP1: JBC TF0,LP2 ;查询计数溢出
008E,80 FB,, SJMP LP1 ;未到50 ms继续计数
0090,75 8C 3C,LP2,LP2: MOV TH0,#3CH ;重新置定时器初值
0093,75 8A B0,, MOV TL0,#0B0H
0096,7A 81,, MOV R2,#81H ;从第1行第2位开始,设置DDRAM地址
0098,12 02 34,, LCALL WRTC
009B,90 00 BF,, MOV DPTR,#ZIFU1 ;指向显示字符代码首地址
009E,7C 06,, MOV R4,#06H
00A0,12 02 44,, LCALL WP1 ;第1行字符代码写入DDRAM
00A3,12 01 15,, LCALL DISPYMD ;显示年月日
00A6,7A C1,, MOV R2,#0C1H ;设置第2行DDRAM地址
00A8,12 02 34,, LCALL WRTC
00AB,90 00 C5,, MOV DPTR,#ZIFU2 ;指向显示字符代码首地址
00AE,7C 06,, MOV R4,#06H
00B0,12 02 44,, LCALL WP1 ;第1行字符代码写入DDRAM
00B3,12 00 CB,, LCALL DISPHMS ;显示时分秒
00B6,DB D3,, DJNZ R3,LP1 ;未到1s继续循环
00B8,12 01 BA,, LCALL GET1302 ;每到1s从DS1302读取一次时间
00BB,7B 14,, mov r3,#20
00BD,80 CC,, SJMP lp1
00BF,44 61 74 65,ZIFU1,ZIFU1: DB "Date: "
00C5,54 69 6D 65,ZIFU2,ZIFU2: DB "Time: "
,,,
,,,;*******************************************
00CB,E5 32,DISPHMS,DISPHMS:MOV A,HOUR ;时分秒显示子程序
00CD,C4,, SWAP A
00CE,54 03,, ANL A,#03H
00D0,24 30,, ADD A,#30H
00D2,FA,, MOV R2,A
00D3,12 02 3C,, LCALL WRTD
00D6,E5 32,, MOV A,HOUR
00D8,54 0F,, ANL A,#0FH
00DA,24 30,, ADD A,#30H
00DC,FA,, MOV R2,A
00DD,12 02 3C,, LCALL WRTD
00E0,7A 2D,, MOV R2,#2DH
00E2,12 02 3C,, LCALL WRTD
00E5,E5 31,, MOV A,MINUTE ;显示分
00E7,C4,, SWAP A
00E8,54 07,, ANL A,#07H
00EA,24 30,, ADD A,#30H
00EC,FA,, MOV R2,A
00ED,12 02 3C,, LCALL WRTD
00F0,E5 31,, MOV A,MINUTE
00F2,54 0F,, ANL A,#0FH
00F4,24 30,, ADD A,#30H
00F6,FA,, MOV R2,A
00F7,12 02 3C,, LCALL WRTD
00FA,7A 2D,, MOV R2,#2DH
00FC,12 02 3C,, LCALL WRTD
00FF,E5 30,, MOV A,SECOND ;显示秒
0101,C4,, SWAP A
0102,54 07,, ANL A,#07H
0104,24 30,, ADD A,#30H
0106,FA,, MOV R2,A
0107,12 02 3C,, LCALL WRTD
010A,E5 30,, MOV A,SECOND
010C,54 0F,, ANL A,#0FH
010E,24 30,, ADD A,#30H
0110,FA,, MOV R2,A
0111,12 02 3C,, LCALL WRTD
0114,22,, RET
,,,;*****************************************
0115,E5 36,DISPYMD,DISPYMD:MOV A,YEARL ;年月日显示子程序
0117,C4,, SWAP A
0118,54 03,, ANL A,#03H
011A,24 30,, ADD A,#30H
011C,FA,, MOV R2,A
011D,12 02 3C,, LCALL WRTD
0120,E5 36,, MOV A,YEARL
0122,54 0F,, ANL A,#0FH
0124,24 30,, ADD A,#30H
0126,FA,, MOV R2,A
0127,12 02 3C,, LCALL WRTD
012A,7A 2D,, MOV R2,#2DH
012C,12 02 3C,, LCALL WRTD
,,,
012F,E5 34,, MOV A,MONTH ;显示月
0131,C4,, SWAP A
0132,54 07,, ANL A,#07H
0134,24 30,, ADD A,#30H
0136,FA,, MOV R2,A
0137,12 02 3C,, LCALL WRTD
013A,E5 34,, MOV A,MONTH
013C,54 0F,, ANL A,#0FH
013E,24 30,, ADD A,#30H
0140,FA,, MOV R2,A
0141,12 02 3C,, LCALL WRTD
0144,7A 2D,, MOV R2,#2DH
0146,12 02 3C,, LCALL WRTD
0149,E5 33,, MOV A,DAY ;显示日
014B,C4,, SWAP A
014C,54 07,, ANL A,#07H
014E,24 30,, ADD A,#30H
0150,FA,, MOV R2,A
0151,12 02 3C,, LCALL WRTD
0154,E5 33,, MOV A,DAY
0156,54 0F,, ANL A,#0FH
0158,24 30,, ADD A,#30H
015A,FA,, MOV R2,A
015B,12 02 3C,, LCALL WRTD
015E,22,, RET
,,,;*****************************************************************
015F,C2 95,SETDS1302,SETDS1302: CLR T_RST ;设置DS1302初始时间,并启动计时
0161,00,, nop
0162,C2 96,, CLR T_CLK
0164,00,, nop
0165,D2 95,, SETB T_RST
0167,00,, nop
0168,75 F0 8E,, MOV B,#8EH ;写控制命令字
016B,12 01 DE,, LCALL INPUTBYTE
016E,75 F0 00,, MOV B,#00H ;写保护关闭
0171,12 01 DE,, LCALL INPUTBYTE
0174,D2 96,, SETB T_CLK
0176,00,, nop
0177,C2 95,, CLR T_RST
0179,78 30,, MOV R0,#SECOND ;内存中的时间首地址
017B,79 80,, MOV R1,#80H ;DS1302中的时间首地址
017D,7F 07,, MOV R7,#7 ;字节数
017F,C2 95,SETLOOP,SETLOOP:CLR T_RST
0181,00,, nop
0182,C2 96,, CLR T_CLK
0184,00,, nop
0185,D2 95,, SETB T_RST
0187,00,, nop
0188,89 F0,, MOV B,R1 ;写命令字
018A,12 01 DE,, LCALL INPUTBYTE
018D,E6,, MOV A,@R0 ;设置时间
018E,F5 F0,, MOV B,A
0190,12 01 DE,, LCALL INPUTBYTE
0193,08,, INC R0
0194,09,, INC R1
0195,09,, INC R1
0196,D2 96,, SETB T_CLK
0198,00,, nop
0199,C2 95,, CLR T_RST
019B,00,, nop
019C,DF E1,, DJNZ R7,SETLOOP
019E,C2 95,, CLR T_RST
01A0,00,, nop
01A1,C2 96,, CLR T_CLK
01A3,00,, nop
01A4,D2 95,, SETB T_RST
01A6,00,, nop
01A7,75 F0 8E,, MOV B,#8EH
01AA,12 01 DE,, LCALL INPUTBYTE
01AD,75 F0 80,, MOV B,#80H ;开写保护
01B0,12 01 DE,, LCALL INPUTBYTE
01B3,D2 96,, SETB T_CLK
01B5,00,, nop
01B6,C2 95,, CLR T_RST
01B8,00,, nop
01B9,22,, RET
,,,;*****************************************************************
01BA,,GET1302,GET1302: ;从DS1302读取时间
01BA,78 30,, MOV R0,#SECOND
01BC,79 81,, MOV R1,#81H ;DS1302中读时间的首地址
01BE,7F 07,, MOV R7,#7
01C0,C2 95,GETLOOP,GETLOOP:CLR T_RST
01C2,00,, nop
01C3,C2 96,, CLR T_CLK
01C5,00,, nop
01C6,D2 95,, SETB T_RST
01C8,00,, nop
01C9,89 F0,, MOV B,R1
01CB,12 01 DE,, LCALL INPUTBYTE ;写命令字
01CE,12 01 EF,, LCALL OUTPUTBYTE ;读时间
01D1,F6,, MOV @R0,A ;将从DS1302中读取的时间从内存中保存
01D2,08,, INC R0 ;修改地址指针
01D3,09,, INC R1
01D4,09,, INC R1
01D5,D2 96,, SETB T_CLK
01D7,00,, nop
01D8,C2 95,, CLR T_RST
01DA,00,, nop
01DB,DF E3,, DJNZ R7,GETLOOP
01DD,22,, RET
,,,
,,,;*****************************************************************
01DE,7C 08,INPUTBYTE,INPUTBYTE:MOV R4,#8 ;向DS1302写一个字节
01E0,E5 F0,INPUTLOOP,INPUTLOOP:MOV A,B
01E2,13,, RRC A
01E3,F5 F0,, MOV B,A
01E5,92 97,, MOV T_IO,C
01E7,D2 96,, SETB T_CLK
01E9,00,, NOP
01EA,C2 96,, CLR T_CLK
01EC,DC F2,, DJNZ R4,INPUTLOOP
01EE,22,, RET
,,,;*****************************************************************
,,,
01EF,E4,OUTPUTBYTE,OUTPUTBYTE:clr a ;从DS1302读一个字节
01F0,C3,, clr c
01F1,7C 08,, MOV R4,#8
01F3,00,OUTPUTLOOP,OUTPUTLOOP:NOP
01F4,A2 97,, MOV C,T_IO
01F6,13,, RRC A
01F7,D2 96,, SETB T_CLK
01F9,00,, NOP
01FA,C2 96,, CLR T_CLK
01FC,DC F5,, DJNZ R4,OUTPUTLOOP
01FE,22,, RET
,,,
,,,;*****************************************************************
01FF,12 02 4E,LCD_INIT,LCD_INIT: LCALL TIM1 ;LCD初始化子程序
0202,7A 38,, MOV R2,#38H ;功能设置命令,设定8位字长,2行,5*7点阵
0204,12 02 34,, LCALL WRTC ;写入
0207,12 02 5E,, LCALL TIM3 ;延时100us
020A,7A 38,, MOV R2,#38H
020C,12 02 34,, LCALL WRTC ;写入
020F,12 02 5E,, LCALL TIM3 ;延时100us
0212,7A 38,, MOV R2,#38H
0214,12 02 34,, LCALL WRTC ;写入
0217,12 02 5E,, LCALL TIM3 ;延时100us
021A,7A 01,, MOV R2,#01H ;清屏命令
021C,12 02 34,, LCALL WRTC ;写入
021F,7A 06,, MOV R2,#06H ;输入方式命令
0221,12 02 34,, LCALL WRTC ;写入
0224,7A 0E,, MOV R2,#0EH ;开显示、光标不闪命令
0226,12 02 34,, LCALL WRTC ;写入
0229,22,, RET
,,,;*****************************************************************
022A,75 A0 7F,WAIT,WAIT: MOV P2,#7FH ;忙标志判断子程序
022D,78 F1,, MOV R0,#0F1H ;读忙标志地址
022F,E2,, MOVX A,@R0
0230,20 E7 F7,, JB ACC.7,WAIT
0233,22,, RET
,,,
,,,;*****************************************************************
0234,12 02 2A,WRTC,WRTC: LCALL WAIT ;写指令代码子程序
0237,EA,, MOV A,R2
0238,78 F0,, MOV R0,#0F0H ;写指令地址
023A,F2,, MOVX @R0,A
023B,22,, RET
,,,
,,,;*****************************************************************
023C,12 02 2A,WRTD,WRTD: LCALL WAIT ;写数据子程序
023F,78 F2,, MOV R0,#0F2H ;写数据地址
0241,EA,, MOV A,R2
0242,F2,, MOVX @R0,A
0243,22,, RET
,,,;*****************************************************************
0244,E4,WP1,WP1: CLR A
0245,93,, MOVC A,@A+DPTR
0246,FA,, MOV R2,A
0247,12 02 3C,, LCALL WRTD ;写入1字节字模数据
024A,A3,, INC DPTR
024B,DC F7,, DJNZ R4,WP1
024D,22,, RET
,,,
,,,;*****************************************************************
024E,7D 03,TIM1,TIM1: MOV R5,#03H ;延时15ms子程序
0250,12 02 56,TT1,TT1: LCALL TIM2
0253,DD FB,, DJNZ R5,TT1
0255,22,, RET
,,,;*****************************************************************
0256,7C 32,TIM2,TIM2: MOV R4,#50 ;延时5ms子程序
0258,12 02 5E,TT2,TT2: LCALL TIM3
025B,DC FB,, DJNZ R4,TT2
025D,22,, RET
,,,;*****************************************************************
025E,7B 32,TIM3,TIM3: MOV R3,#50 ;延时100us子程序
0260,DB FE,TT3,TT3: DJNZ R3,TT3
0262,22,, RET
,,,
000E,,,end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -