📄 24cxx.lst
字号:
219
220
221 ;========================================================================================
222 ;========================================================================================
223 ; 以下是用户接口子程序
224 ;
225
226 ;无子地址器件写字节数据
227 ;入口参数: 数据为ACC、器件从地址SLA
228 ;占用: A、R0、CY
01EA C0E0 229 IWRBYTE: PUSH ACC
01EC 120141 230 IWBLOOP: LCALL START ;起动总线
01EF E550 231 MOV A,SLA
01F1 12019C 232 LCALL WRBYTE ;发送器件从地址
01F4 120187 233 LCALL CACK
01F7 30100C 234 JNB ACK,RETWRB ;无应答则跳转
01FA D0E0 235 POP ACC ;写数据
01FC 12019C 236 LCALL WRBYTE
01FF 120187 237 LCALL CACK
0202 120156 238 LCALL STOP
0205 22 239 RET
0206 D0E0 240 RETWRB: POP ACC
0208 120156 241 LCALL STOP
020B 22 242 RET
243
244 ;无子地址器件读字节数据
245 ;入口参数: 器件从地址SLA
246 ;出口参数: 数据为ACC
247 ;占用: A 、R0、R2 、CY
020C 120141 248 IRDBYTE: LCALL START
020F E550 249 MOV A,SLA ;发送器件从地址
0211 04 250 INC A
0212 12019C 251 LCALL WRBYTE
0215 120187 252 LCALL CACK
0218 301006 253 JNB ACK,RETRDB
A51 MACRO ASSEMBLER 24CXX 09/16/2006 15:07:00 PAGE 5
021B 1201C3 254 LCALL RDBYTE ;进行读字节操作
021E 120177 255 LCALL MNACK ;发送非应信号
0221 120156 256 RETRDB: LCALL STOP ;结束总线
0224 22 257 RET
258
259 ;向器件指定子地址写N字节数据
260 ;入口参数: 器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE
261 ; 占用: A 、R0 、R1 、R3 、CY
0225 E552 262 IWRNBYTE: MOV A,NUMBYTE
0227 FB 263 MOV R3,A
0228 120141 264 LCALL START ;起动总线
022B E550 265 MOV A,SLA
022D 12019C 266 LCALL WRBYTE ;发送器件从地址
0230 120187 267 LCALL CACK
0233 301017 268 JNB ACK,RETWRN ;无应答则退出
0236 E551 269 MOV A,SUBA ;指定子地址
0238 12019C 270 LCALL WRBYTE
023B 120187 271 LCALL CACK
023E 7940 272 MOV R1,#MTD
0240 E7 273 WRDA: MOV A,@R1
0241 12019C 274 LCALL WRBYTE ;开始写入数据
0244 120187 275 LCALL CACK
0247 3010DB 276 JNB ACK,IWRNBYTE
024A 09 277 INC R1
024B DBF3 278 DJNZ R3,WRDA ;判断写完没有
024D 120156 279 RETWRN: LCALL STOP
0250 22 280 RET
281
282 ;向器件指定子地址读取N字节数据
283 ;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
284 ;出口参数: 接收数据缓冲区MTD
285 ;占用:A、 R0、 R1、 R2、 R3、 CY
0251 AB52 286 IRDNBYTE: MOV R3,NUMBYTE
0253 120141 287 LCALL START
0256 E550 288 MOV A,SLA
0258 12019C 289 LCALL WRBYTE ;发送器件从地址
025B 120187 290 LCALL CACK
025E 301022 291 JNB ACK,RETRDN
0261 E551 292 MOV A,SUBA ;指定子地址
0263 12019C 293 LCALL WRBYTE
0266 120187 294 LCALL CACK
0269 120141 295 LCALL START ;重新起动总线
026C E550 296 MOV A,SLA
026E 04 297 INC A ;准备进行读操作
026F 12019C 298 LCALL WRBYTE
0272 120187 299 LCALL CACK
0275 3010D9 300 JNB ACK,IRDNBYTE
0278 7949 301 MOV R1,#MRD
027A 1201C3 302 RDN1: LCALL RDBYTE ;读操作开始
027D F7 303 MOV @R1,A
304 ;NOP ;+1
305 ;NOP ;+1
027E DB07 306 DJNZ R3,SACK
0280 120177 307 LCALL MNACK ;最后一字节发非应答位
0283 120156 308 RETRDN: LCALL STOP ;并结束总线
0286 22 309 RET
0287 120167 310 SACK: LCALL MACK
028A 09 311 INC R1
028B 80ED 312 SJMP RDN1
313
314
315 ;无子地址器件写N字节数据
316 ;入口参数: 器件从地址SLA、发送数据缓冲区MTD、发送字节数NUMBYTE
317 ; 占用: A 、R0 、R1 、R3 、CY
318 ;不发送子地址SUBA,直接发送多个数据.
028D 319 IWRNBYTEEXT:
A51 MACRO ASSEMBLER 24CXX 09/16/2006 15:07:00 PAGE 6
028D E552 320 MOV A,NUMBYTE
028F FB 321 MOV R3,A
0290 120141 322 LCALL START ;起动总线
0293 E550 323 MOV A,SLA
0295 12019C 324 LCALL WRBYTE ;发送器件从地址
0298 120187 325 LCALL CACK
029B 30100F 326 JNB ACK,RETWRNE ;无应答则退出
029E 7940 327 MOV R1,#MTD
02A0 E7 328 WRDAE: MOV A,@R1
02A1 12019C 329 LCALL WRBYTE ;开始写入数据
02A4 120187 330 LCALL CACK
02A7 301003 331 JNB ACK,RETWRNE
02AA 09 332 INC R1
02AB DBF3 333 DJNZ R3,WRDAE ;判断写完没有
02AD 120156 334 RETWRNE: LCALL STOP
02B0 22 335 RET
336
337
338 ;无子地址器件读取N字节数据
339 ;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
340 ;出口参数: 接收数据缓冲区MTD
341 ;占用:A、 R0、 R1、 R2、 R3、 CY
342 ;说明:此函数不发送子址,也不重新启动总线,而是直接读取多个数据.
02B1 343 IRDNBYTEEXT:
02B1 AB52 344 MOV R3,NUMBYTE
02B3 120141 345 LCALL START
02B6 E550 346 MOV A,SLA
02B8 04 347 INC A
02B9 12019C 348 LCALL WRBYTE ;发送器件从地址
02BC 120187 349 LCALL CACK
02BF 30100B 350 JNB ACK,RETRDNE
02C2 7949 351 MOV R1,#MRD
02C4 1201C3 352 RDNE1: LCALL RDBYTE ;读操作开始
02C7 F7 353 MOV @R1,A
02C8 DB07 354 DJNZ R3,SACKE
02CA 120177 355 LCALL MNACK ;最后一字节发非应答位
02CD 120156 356 RETRDNE: LCALL STOP ;并结束总线
02D0 22 357 RET
02D1 120167 358 SACKE: LCALL MACK
02D4 09 359 INC R1
02D5 80ED 360 SJMP RDNE1
361
362
363
364 ;******************************************************************************************
***
365 ; 请注意
366 ;
367 ; 占用内部资源: R0,R1,R2,R3,ACC,Cy。
368 ; 在你的程序里要做以下定义:
369 ; 1、定义变量: SLA 器件从地址 SUBA器件子地址 NUMBYTE读/写的字节数 ,位变量ACK
370 ; 2、定义常量: SDA SCL 总线位 MTD 发送数据缓冲区首址 MRD 接收数据缓冲区首址
371 ;
372 ; (ACK为调试/测试位,ACK为0时表示无器件应答或总线出错)
373 ;
374 ; 在使用本软件包时,请在你的程序的未尾加入$INCLUDE (VI2C_ASM.INC)即可。VI2C_ASM.INC文件
375 ;复制到IDE包含文件所要求的目录(如:工作目录或INC目录)
376 ;
377 ; 用户可以对"用户接口子程序"进行裁减,即把自已不使用的接口子程序删掉,以节省程序空间。
378 ;******************************************************************************************
****
379
380 END
A51 MACRO ASSEMBLER 24CXX 09/16/2006 15:07:00 PAGE 7
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ACK. . . . . . . . B ADDR 0022H.0 A
CACK . . . . . . . C ADDR 0187H A
CEND . . . . . . . C ADDR 0197H A
CSI24WC02. . . . . N NUMB 00A0H A
DELAY. . . . . . . C ADDR 012CH A
DELAY1 . . . . . . C ADDR 013CH A
IRDBYTE. . . . . . C ADDR 020CH A
IRDNBYTE . . . . . C ADDR 0251H A
IRDNBYTEEXT. . . . C ADDR 02B1H A
IWBLOOP. . . . . . C ADDR 01ECH A
IWRBYTE. . . . . . C ADDR 01EAH A
IWRNBYTE . . . . . C ADDR 0225H A
IWRNBYTEEXT. . . . C ADDR 028DH A
MACK . . . . . . . C ADDR 0167H A
MAIN . . . . . . . C ADDR 0100H A
MIN. . . . . . . . C ADDR 012EH A
MNACK. . . . . . . C ADDR 0177H A
MRD. . . . . . . . N NUMB 0049H A
MTD. . . . . . . . N NUMB 0040H A
NUMBYTE. . . . . . D ADDR 0052H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
RDBYTE . . . . . . C ADDR 01C3H A
RDN1 . . . . . . . C ADDR 027AH A
RDNE1. . . . . . . C ADDR 02C4H A
RETRDB . . . . . . C ADDR 0221H A
RETRDN . . . . . . C ADDR 0283H A
RETRDNE. . . . . . C ADDR 02CDH A
RETWRB . . . . . . C ADDR 0206H A
RETWRN . . . . . . C ADDR 024DH A
RETWRNE. . . . . . C ADDR 02ADH A
RLP. . . . . . . . C ADDR 01C5H A
SACK . . . . . . . C ADDR 0287H A
SACKE. . . . . . . C ADDR 02D1H A
SCL. . . . . . . . B ADDR 00B0H.7 A
SDA. . . . . . . . B ADDR 0090H.4 A
SLA. . . . . . . . D ADDR 0050H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0141H A
STOP . . . . . . . C ADDR 0156H A
SUBA . . . . . . . D ADDR 0051H A
WLP. . . . . . . . C ADDR 019EH A
WLP1 . . . . . . . C ADDR 01A3H A
WR0. . . . . . . . C ADDR 01B5H A
WR1. . . . . . . . C ADDR 01A7H A
WRBYTE . . . . . . C ADDR 019CH A
WRDA . . . . . . . C ADDR 0240H A
WRDAE. . . . . . . C ADDR 02A0H A
YS500. . . . . . . C ADDR 0131H A
YS500US. . . . . . C ADDR 0137H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -