📄 vs1307.lst
字号:
A51 MACRO ASSEMBLER VS1307 11/14/2005 19:19:02 PAGE 1
MACRO ASSEMBLER A51 V7.00a
OBJECT MODULE PLACED IN VS1307.OBJ
ASSEMBLER INVOKED BY: D:\MCU\Keil51\C51\BIN\A51.EXE VS1307.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 NAME READBYT
2 PUBLIC WriteTim
3 PUBLIC ReadTim
4
00B6 5 SCL BIT P3.6
00B7 6 SDA BIT P3.7
7
00D0 8 DS1307W EQU 0D0H
00D1 9 DS1307R EQU 0D1H
10
11
12 VS1307 SEGMENT CODE
---- 13 RSEG VS1307
14 ;-------------------------------------------------------------------------
15 ; THESE SUB SENDS THE START & STOP CONDITIONS
16 ;-------------------------------------------------------------------------
0000 17 SEND_START:
0000 D2B7 18 SETB SDA
0002 120000 F 19 LCALL SCL_HIGH ; SDA
0005 C2B7 20 CLR SDA
0007 120000 F 21 LCALL DELAY ; SCL ^START CONDITION
000A C2B6 22 CLR SCL
000C 22 23 RET
000D 24 SEND_STOP:
000D C2B7 25 CLR SDA ; SDA
000F 120000 F 26 LCALL SCL_HIGH ;
0012 D2B7 27 SETB SDA ; SCL ^STOP CONDITION
0014 22 28 RET
29 ;-------------------------------------------------------------------------
30 ; THIS SUB SENDS ONE BYTE OF DATA TO THE DS1307
31 ;-------------------------------------------------------------------------
0015 32 SEND_BYTE:
0015 C0F0 33 PUSH B
0017 75F008 34 MOV B,#08H ; SET COUNTER FOR 8 BITS
001A 35 SB_LOOP:
001A 33 36 RLC A ; CHECK TO SEE IF BIT 7 OF ACC IS A 1
001B 92B7 37 MOV SDA,C
001D 120000 F 38 LCALL SCL_HIGH ; TRANSITION SCL LOW蠺O蠬IGH
0020 C2B6 39 CLR SCL ; TRANSITION SCL HIGH蠺O蠰OW
0022 D5F0F5 40 DJNZ B,SB_LOOP ; LOOP FOR 8 BITS
0025 D2B7 41 SETB SDA ; SET SDA HIGH TO LOOK FOR ACKNOWLEDGE PULSE
0027 120000 F 42 LCALL SCL_HIGH ; TRASITION SCL LOW TO HIGH
43
002A A2B7 44 MOV C,SDA
002C 120000 F 45 LCALL DELAY ; DELAY FOR AN OPERATION
002F C2B6 46 CLR SCL ; TRANSITION SCL HIGH O蠰OW
0031 120000 F 47 LCALL DELAY ; DELAY FOR AN OPERATION
0034 D0F0 48 POP B
0036 22 49 RET
50 ;-------------------------------------------------------------------------
51 ; THIS SUB READS ONE BYTE OF DATA FROM THE DS1307
52 ;-------------------------------------------------------------------------
0037 53 READ_BYTE:
0037 C0F0 54 PUSH B
0039 75F008 55 MOV B,#08H ; SET COUNTER FOR 8 BITS OF DATA
003C 7400 56 MOV A,#00H
003E D2B7 57 SETB SDA ; SET SDA HIGH TO ENSURE LINE FREE
0040 58 READ_BITS:
A51 MACRO ASSEMBLER VS1307 11/14/2005 19:19:02 PAGE 2
0040 120000 F 59 LCALL SCL_HIGH ; TRANSITION SCL LOW蠺O蠬IGH
0043 A2B7 60 MOV C,SDA ; MOVE DATA BIT INTO CARRY BIT
0045 33 61 RLC A ; ROTATE CARRY BIT INTO ACC.0
0046 C2B6 62 CLR SCL ; TRANSITION SCL HIGH蠺O蠰OW
0048 D5F0F5 63 DJNZ B,READ_BITS ; LOOP FOR 8 BITS
004B C2B7 64 CLR SDA ; ACKNOWLEDGE BIT
004D 120000 F 65 LCALL SCL_HIGH ; PULSE SCL TO TRANSIMIT ACKNOWLEDGE
0050 C2B6 66 CLR SCL ; OR NOT ACKNOWLEDGE BIT
0052 D0F0 67 POP B
0054 22 68 RET
69
0055 70 READ_LAST:
0055 C0F0 71 PUSH B
0057 75F008 72 MOV B,#08H ; SET COUNTER FOR 8 BITS OF DATA
005A 7400 73 MOV A,#00H
005C D2B7 74 SETB SDA ; SET SDA HIGH TO ENSURE LINE FREE
005E 75 R8_BITS:
005E 120000 F 76 LCALL SCL_HIGH ; TRANSITION SCL LOW蠺O蠬IGH
0061 A2B7 77 MOV C,SDA ; MOVE DATA BIT INTO CARRY BIT
0063 33 78 RLC A ; ROTATE CARRY BIT INTO ACC.0
0064 C2B6 79 CLR SCL ; TRANSITION SCL HIGH蠺O蠰OW
0066 D5F0F5 80 DJNZ B,R8_BITS ; LOOP FOR 8 BITS
0069 D2B7 81 SETB SDA
006B 120000 F 82 LCALL SCL_HIGH ; PULSE SCL TO TRANSIMIT ACKNOWLEDGE
006E C2B6 83 CLR SCL ; OR NOT ACKNOWLEDGE BIT
0070 D0F0 84 POP B
0072 22 85 RET
86 ;-------------------------------------------------------------------------
87 ; THIS SUB SETS THE CLOCK LINE HIGH
88 ;-------------------------------------------------------------------------
0073 89 SCL_HIGH:
0073 D2B6 90 SETB SCL ; SET SCL HIGH
0075 30B6FD 91 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
0078 22 92 RET
93 ;-------------------------------------------------------------------------
94 ; DELAY & DELAY_4 to lower THE BUS
95 ;-------------------------------------------------------------------------
0079 00 96 DELAY: NOP ; DELAY FOR BUS TIMING
007A 22 97 RET
007B 98 DELAY_4:
007B 00 99 NOP ; DELAY FOR BUS TIMING
007C 00 100 NOP
007D 00 101 NOP
007E 00 102 NOP
007F 22 103 RET
104 ;-------------------------------------------------------------------------
105 ; THIS SUB READS THE CLOCK AND WRITES IT TO THE SCRATCH PAD MEMORY ;
106 ;-------------------------------------------------------------------------
0080 107 ReadTim:
0080 120000 F 108 LCALL SEND_START ; SEND START CONDITION
0083 74D0 109 MOV A,#DS1307W ; SET POINTER TO REG 00H ON DS1307
0085 120000 F 110 LCALL SEND_BYTE
0088 7400 111 MOV A,#00H
008A 120000 F 112 LCALL SEND_BYTE
008D 120000 F 113 LCALL SEND_STOP ; SEND STOP CONDITION
114
0090 120000 F 115 LCALL SEND_START ; SEND START CONDITION
0093 74D1 116 MOV A,#DS1307R ; SEND READ COMMAND TO DS1307
0095 120000 F 117 LCALL SEND_BYTE
118
0098 7820 119 MOV R0,#20H
009A 75F007 120 MOV B,#07h
009D 121 READ0_6:
009D 120000 F 122 LCALL READ_BYTE ; READ A BYTE OF DATA
00A0 F6 123 MOV @R0,A ; MOVE DATA IN SCRATCHPAD MEMORY
00A1 08 124 INC R0
A51 MACRO ASSEMBLER VS1307 11/14/2005 19:19:02 PAGE 3
00A2 D5F0F8 125 DJNZ B,READ0_6
00A5 126 READ7:
00A5 120000 F 127 LCALL READ_LAST
00A8 F6 128 MOV @R0,A ; MOVE DATA IN SCRATCHPAD MEMORY
00A9 08 129 INC R0
130 ;-------------------------------------------------------------------------
131 ; THIS SUB SETS THE CLOCK (MANUAL)
132 ;-------------------------------------------------------------------------
00AA 133 WriteTim:
00AA 7820 134 MOV R0,#20H ; POINT TO BEGINNING OF CLOCK DATA IN SCRATCHPAD MEMORY
00AC 120000 F 135 LCALL SEND_START ; SEND 2WIRE START CONDITION
00AF 74D0 136 MOV A,#DS1307W ; SEND DS1307 WRITE COMMAND
00B1 120000 F 137 LCALL SEND_BYTE
00B4 7400 138 MOV A,#00H ; SET DATA POINTER TO REGISTER 00H ON
00B6 120000 F 139 LCALL SEND_BYTE ; THE DS1307
00B9 75F008 140 MOV B,#08h
00BC 141 SEND_LOOP:
00BC E6 142 MOV A,@R0 ; MOVE THE FIRST BYTE OF DATA TO ACC
00BD 120000 F 143 LCALL SEND_BYTE ; SEND DATA ON 2WIRE BUT
00C0 08 144 INC R0
00C1 D5F0F8 145 DJNZ B,SEND_LOOP ; LOOP UNTIL CLOCK DATA SENT TO DS1307
00C4 120000 F 146 LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION
00C7 22 147 RET
148 END
A51 MACRO ASSEMBLER VS1307 11/14/2005 19:19:02 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
DELAY. . . . . . . C ADDR 0079H R SEG=VS1307
DELAY_4. . . . . . C ADDR 007BH R SEG=VS1307
DS1307R. . . . . . N NUMB 00D1H A
DS1307W. . . . . . N NUMB 00D0H A
P3 . . . . . . . . D ADDR 00B0H A
R8_BITS. . . . . . C ADDR 005EH R SEG=VS1307
READ0_6. . . . . . C ADDR 009DH R SEG=VS1307
READ7. . . . . . . C ADDR 00A5H R SEG=VS1307
READBYT. . . . . . N NUMB -----
READTIM. . . . . . C ADDR 0080H R SEG=VS1307
READ_BITS. . . . . C ADDR 0040H R SEG=VS1307
READ_BYTE. . . . . C ADDR 0037H R SEG=VS1307
READ_LAST. . . . . C ADDR 0055H R SEG=VS1307
SB_LOOP. . . . . . C ADDR 001AH R SEG=VS1307
SCL. . . . . . . . B ADDR 00B0H.6 A
SCL_HIGH . . . . . C ADDR 0073H R SEG=VS1307
SDA. . . . . . . . B ADDR 00B0H.7 A
SEND_BYTE. . . . . C ADDR 0015H R SEG=VS1307
SEND_LOOP. . . . . C ADDR 00BCH R SEG=VS1307
SEND_START . . . . C ADDR 0000H R SEG=VS1307
SEND_STOP. . . . . C ADDR 000DH R SEG=VS1307
VS1307 . . . . . . C SEG 00C8H REL=UNIT
WRITETIM . . . . . C ADDR 00AAH R SEG=VS1307
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -