📄 i2c.lst
字号:
A51 MACRO ASSEMBLER I2C 11/23/2007 00:57:18 PAGE 1
MACRO ASSEMBLER A51 V8.00d
OBJECT MODULE PLACED IN .\Object\I2C.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE SourceFile\I2C.asm SET(LARGE) DEBUG PRINT(.\List\I2C.lst) OBJECT(.\Object\
I2C.obj) EP
LOC OBJ LINE SOURCE
1 ;---------------------------------------------------------------------------
2 ; Terawins Inc. Company Confidential Strictly Private
3 ;
4 ; $Archive: $
5 ; $Revision: 0.9 $
6 ; $Author: Bruce $
7 ; $Date: 2007/02/084 22:34:39 $
8 ;
9 ; --------------------------------------------------------------------------
10 ; >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
11 ; --------------------------------------------------------------------------
12 ; Copyright 2007 (c) Terawins Inc.
13 ;
14 ; Functions:
15 ; void StartCondition(void)
16 ; void StopCondition(void)
17 ; uCHAR Send_Byte(uCHAR cData)
18 ; uCHAR Read_Byte(uCHAR cNum)
19 ; void twdWr_Burst_D(uCHAR cData)
20 ;
21
22 $nomod51
23
24 NAME I2C
25
00E7 26 bSDA_MSB BIT 0E0H.7
0080 27 P0 DATA 080H
0090 28 P1 DATA 090H
00A0 29 P2 DATA 0A0H
00B0 30 P3 DATA 0B0H
00D6 31 AC BIT 0D0H.6
00B4 32 T0 BIT 0B0H.4
00B5 33 T1 BIT 0B0H.5
00AF 34 EA BIT 0A8H.7
00A8 35 IE DATA 0A8H
00B7 36 RD BIT 0B0H.7
00AC 37 ES BIT 0A8H.4
00B8 38 IP DATA 0B8H
0098 39 RI BIT 098H.0
00D7 40 CY BIT 0D0H.7
00B2 41 INT0 BIT 0B0H.2
00B3 42 INT1 BIT 0B0H.3
0099 43 TI BIT 098H.1
00BC 44 PS BIT 0B8H.4
0081 45 SP DATA 081H
00D2 46 OV BIT 0D0H.2
00B6 47 WR BIT 0B0H.6
0099 48 SBUF DATA 099H
0087 49 PCON DATA 087H
0098 50 SCON DATA 098H
0089 51 TMOD DATA 089H
0089 52 IE0 BIT 088H.1
008B 53 IE1 BIT 088H.3
00F0 54 B DATA 0F0H
00E0 55 ACC DATA 0E0H
00A9 56 ET0 BIT 0A8H.1
00AB 57 ET1 BIT 0A8H.3
A51 MACRO ASSEMBLER I2C 11/23/2007 00:57:18 PAGE 2
008D 58 TF0 BIT 088H.5
008F 59 TF1 BIT 088H.7
009A 60 RB8 BIT 098H.2
008C 61 TH0 DATA 08CH
00A8 62 EX0 BIT 0A8H.0
0088 63 IT0 BIT 088H.0
008D 64 TH1 DATA 08DH
00AA 65 EX1 BIT 0A8H.2
009B 66 TB8 BIT 098H.3
008A 67 IT1 BIT 088H.2
00D0 68 P BIT 0D0H.0
009F 69 SM0 BIT 098H.7
008A 70 TL0 DATA 08AH
009E 71 SM1 BIT 098H.6
008B 72 TL1 DATA 08BH
009D 73 SM2 BIT 098H.5
00B9 74 PT0 BIT 0B8H.1
00D3 75 RS0 BIT 0D0H.3
00BB 76 PT1 BIT 0B8H.3
00D4 77 RS1 BIT 0D0H.4
008C 78 TR0 BIT 088H.4
008E 79 TR1 BIT 088H.6
80
0096 81 SDA BIT 090H.6
82
00B8 83 PX0 BIT 0B8H.0
00BA 84 PX1 BIT 0B8H.2
0083 85 DPH DATA 083H
0082 86 DPL DATA 082H
87
0095 88 SCL BIT 090H.5
89
009C 90 REN BIT 098H.4
00B0 91 RXD BIT 0B0H.0
00B1 92 TXD BIT 0B0H.1
93
00D7 94 F0 BIT 0D0H.7
95
00D0 96 PSW DATA 0D0H
97 ?PR?StartCondition?I2C SEGMENT CODE
98 ?PR?StopCondition?I2C SEGMENT CODE
99 ?PR?_Send_Byte?I2C SEGMENT CODE
100 ?PR?_Read_Byte?I2C SEGMENT CODE
101 ?PR?_twdWr_Burst_D?I2C SEGMENT CODE
102 PUBLIC _twdWr_Burst_D
103 PUBLIC _Read_Byte
104 PUBLIC _Send_Byte
105 PUBLIC StopCondition
106 PUBLIC StartCondition
107 ; #pragma SRC
108 ; #include "reg51.h"
109 ; #include "i2c.h"
110 ;
111 ;
112 ; //----------------------------------------
113 ; // Start_Condition for TWD protocol
114 ; //----------------------------------------
115 ;
116 ; void StartCondition(void)
117
---- 118 RSEG ?PR?StartCondition?I2C
0000 119 StartCondition:
120 USING 0
121 ; uCHAR cTWtrytime=0;
0000 E4 122 CLR A
0001 FF 123 MOV R7,A
A51 MACRO ASSEMBLER I2C 11/23/2007 00:57:18 PAGE 3
124 ; EA=0;
0002 C2AF 125 CLR EA
0004 126 ?C0001:
127 ; while(++cTWtrytime) {
0004 0F 128 INC R7
0005 EF 129 MOV A,R7
0006 6012 130 JZ ?C0004
0008 D296 131 SETB SDA
000A D296 132 SETB SDA
000C D295 133 SETB SCL
000E D295 134 SETB SCL
0010 C296 135 CLR SDA
0012 C296 136 CLR SDA
0014 3095ED 137 JNB SCL,?C0001
0017 2096EA 138 JB SDA,?C0001
139 ; }
001A 140 ?C0004:
001A 22 141 RET
142 ; END OF StartCondition
143
144 ;
145 ; //----------------------------------------
146 ; // Stop_Condition for TWD protocol
147 ; //----------------------------------------
148 ; void StopCondition(void)
149
---- 150 RSEG ?PR?StopCondition?I2C
0000 151 StopCondition:
152 USING 0
153 ; uCHAR cTWtrytime=0;
0000 E4 154 CLR A
0001 FF 155 MOV R7,A
156 ; Set_SDA_Low;
0002 C296 157 CLR SDA
0004 C296 158 CLR SDA
159 ; Set_SCL_High;
0006 D295 160 SETB SCL
0008 D295 161 SETB SCL
000A 162 ?C0005:
163 ; while(SCL_Low && ++cTWtrytime) {};
000A 209504 164 JB SCL,?C0006
000D 0F 165 INC R7
000E EF 166 MOV A,R7
000F 70F9 167 JNZ ?C0005
0011 168 ?C0006:
169 ; Set_SDA_High;
0011 D296 170 SETB SDA
0013 D296 171 SETB SDA
172 ; EA=1;
0015 D2AF 173 SETB EA
0017 22 174 RET
175 ; END OF StopCondition
176
177 ;
178 ; //--------------------------------------------------
179 ; // Send_Byte
180 ; // Send a byte to master with a acknowledge bit
181 ; //--------------------------------------------------
182 ; uCHAR Send_Byte(uCHAR cData)
183
---- 184 RSEG ?PR?_Send_Byte?I2C
0000 185 _Send_Byte:
186 USING 0
187 ; cAcknowledge = 0;
188 ; CLR A
0000 7E00 189 MOV R6,#0
A51 MACRO ASSEMBLER I2C 11/23/2007 00:57:18 PAGE 4
190 ; ACC=cData;
0002 EF 191 MOV A,R7
192 ; for(ix = 0; ix < 8; ix++)
0003 7F00 193 MOV R7,#0
0005 194 ?C0008:
195 ; {
196 ; Set_SCL_Low;
0005 C295 197 CLR SCL
0007 C295 198 CLR SCL
199 ; Setting SDA
0009 33 200 RLC A
000A 9296 201 MOV SDA,C
000C 9296 202 MOV SDA,C
203 ; Set_SCL_High;
000E D295 204 SETB SCL
0010 D295 205 SETB SCL
206 ; }
207 ; SOURCE LINE # 75
0012 0F 208 INC R7
0013 BF08EF 209 CJNE R7,#08H,?C0008
0016 210 ?C0009:
211 ; Set_SCL_Low;
0016 C295 212 CLR SCL
0018 C295 213 CLR SCL
214 ; Set_SDA_High; /* release data line for acknowledge */
001A D296 215 SETB SDA
001C D296 216 SETB SDA
217 ; Set_SCL_High; /* Send a clock for Acknowledge */
001E D295 218 SETB SCL
0020 D295 219 SETB SCL
0022 220 ?C0011:
221 ; while(SCL_Low) { };
0022 3095FD 222 JNB SCL,?C0011
0025 223 ?C0012:
224 ;
225 ; if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
0025 309602 226 JNB SDA,?C0013
0028 7E01 227 MOV R6,#01H
002A 228 ?C0013:
229 ; Set_SCL_Low; /* Finish Acknoledge */
002A C295 230 CLR SCL
002C C295 231 CLR SCL
232 ; return(cAcknowledge);
002E AF06 233 MOV R7,AR6
234 ; }
0030 235 ?C0014:
0030 22 236 RET
237 ; END OF _Send_Byte
238
239 ;
240 ;
241 ;
242 ; //--------------------------------------------------
243 ; // Read_Byte
244 ; // Read a byte from master with a acknowledge bit
245 ; //--------------------------------------------------
246 ; uCHAR Read_Byte(uCHAR cNum)
247
---- 248 RSEG ?PR?_Read_Byte?I2C
0000 249 _Read_Byte:
250 USING 0
251 ; cNum -> 'R1'
0000 A907 252 MOV R1,AR7
253 ; {
254 ; uCHAR ix; 'R4'
255 ; uCHAR cRetval=0; 'R5'
A51 MACRO ASSEMBLER I2C 11/23/2007 00:57:18 PAGE 5
0002 E4 256 CLR A
0003 FD 257 MOV R5,A
258 ;
259 ; for(ix=0;ix<8;ix++){
0004 FC 260 MOV R4,A
0005 261 ?C0015:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -