📄 ex.lst
字号:
+1 225
+1 226 ;========================================================================================
+1 227 ;========================================================================================
+1 228 ; 以下是用户接口子程序
+1 229 ;
+1 230
+1 231 ;无子地址器件写字节数据
+1 232 ;入口参数: 数据为ACC、器件从地址SLA
+1 233 ;占用: A、R0、CY
81F3 C0E0 +1 234 IWRBYTE: PUSH ACC
81F5 12814A +1 235 IWBLOOP: LCALL START ;起动总线
81F8 E550 +1 236 MOV A,SLA
81FA 1281A5 +1 237 LCALL WRBYTE ;发送器件从地址
81FD 128190 +1 238 LCALL CACK
8200 30100C +1 239 JNB ACK,RETWRB ;无应答则跳转
8203 D0E0 +1 240 POP ACC ;写数据
8205 1281A5 +1 241 LCALL WRBYTE
8208 128190 +1 242 LCALL CACK
820B 12815F +1 243 LCALL STOP
820E 22 +1 244 RET
820F D0E0 +1 245 RETWRB: POP ACC
8211 12815F +1 246 LCALL STOP
8214 22 +1 247 RET
+1 248
+1 249 ;无子地址器件读字节数据
+1 250 ;入口参数: 器件从地址SLA
+1 251 ;出口参数: 数据为ACC
+1 252 ;占用: A 、R0、R2 、CY
8215 12814A +1 253 IRDBYTE: LCALL START
A51 MACRO ASSEMBLER EX 03/21/2004 15:04:34 PAGE 5
8218 E550 +1 254 MOV A,SLA ;发送器件从地址
821A 04 +1 255 INC A
821B 1281A5 +1 256 LCALL WRBYTE
821E 128190 +1 257 LCALL CACK
8221 301006 +1 258 JNB ACK,RETRDB
8224 1281CC +1 259 LCALL RDBYTE ;进行读字节操作
8227 128180 +1 260 LCALL MNACK ;发送非应信号
822A 12815F +1 261 RETRDB: LCALL STOP ;结束总线
822D 22 +1 262 RET
+1 263
+1 264 ;向器件指定子地址写N字节数据
+1 265 ;入口参数: 器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE
+1 266 ; 占用: A 、R0 、R1 、R3 、CY
822E E552 +1 267 IWRNBYTE: MOV A,NUMBYTE
8230 FB +1 268 MOV R3,A
8231 12814A +1 269 LCALL START ;起动总线
8234 E550 +1 270 MOV A,SLA
8236 1281A5 +1 271 LCALL WRBYTE ;发送器件从地址
8239 128190 +1 272 LCALL CACK
823C 301017 +1 273 JNB ACK,RETWRN ;无应答则退出
823F E551 +1 274 MOV A,SUBA ;指定子地址
8241 1281A5 +1 275 LCALL WRBYTE
8244 128190 +1 276 LCALL CACK
8247 7940 +1 277 MOV R1,#MTD
8249 E7 +1 278 WRDA: MOV A,@R1
824A 1281A5 +1 279 LCALL WRBYTE ;开始写入数据
824D 128190 +1 280 LCALL CACK
8250 3010DB +1 281 JNB ACK,IWRNBYTE
8253 09 +1 282 INC R1
8254 DBF3 +1 283 DJNZ R3,WRDA ;判断写完没有
8256 12815F +1 284 RETWRN: LCALL STOP
8259 22 +1 285 RET
+1 286
+1 287 ;向器件指定子地址读取N字节数据
+1 288 ;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
+1 289 ;出口参数: 接收数据缓冲区MTD
+1 290 ;占用:A、 R0、 R1、 R2、 R3、 CY
825A AB52 +1 291 IRDNBYTE: MOV R3,NUMBYTE
825C 12814A +1 292 LCALL START
825F E550 +1 293 MOV A,SLA
8261 1281A5 +1 294 LCALL WRBYTE ;发送器件从地址
8264 128190 +1 295 LCALL CACK
8267 301022 +1 296 JNB ACK,RETRDN
826A E551 +1 297 MOV A,SUBA ;指定子地址
826C 1281A5 +1 298 LCALL WRBYTE
826F 128190 +1 299 LCALL CACK
8272 12814A +1 300 LCALL START ;重新起动总线
8275 E550 +1 301 MOV A,SLA
8277 04 +1 302 INC A ;准备进行读操作
8278 1281A5 +1 303 LCALL WRBYTE
827B 128190 +1 304 LCALL CACK
827E 3010D9 +1 305 JNB ACK,IRDNBYTE
8281 7949 +1 306 MOV R1,#MRD
8283 1281CC +1 307 RDN1: LCALL RDBYTE ;读操作开始
8286 F7 +1 308 MOV @R1,A
+1 309 ;NOP ;+1
+1 310 ;NOP ;+1
8287 DB07 +1 311 DJNZ R3,SACK
8289 128180 +1 312 LCALL MNACK ;最后一字节发非应答位
828C 12815F +1 313 RETRDN: LCALL STOP ;并结束总线
828F 22 +1 314 RET
8290 128170 +1 315 SACK: LCALL MACK
8293 09 +1 316 INC R1
8294 80ED +1 317 SJMP RDN1
+1 318
+1 319
A51 MACRO ASSEMBLER EX 03/21/2004 15:04:34 PAGE 6
+1 320 ;无子地址器件写N字节数据
+1 321 ;入口参数: 器件从地址SLA、发送数据缓冲区MTD、发送字节数NUMBYTE
+1 322 ; 占用: A 、R0 、R1 、R3 、CY
+1 323 ;不发送子地址SUBA,直接发送多个数据.
8296 +1 324 IWRNBYTEEXT:
8296 E552 +1 325 MOV A,NUMBYTE
8298 FB +1 326 MOV R3,A
8299 12814A +1 327 LCALL START ;起动总线
829C E550 +1 328 MOV A,SLA
829E 1281A5 +1 329 LCALL WRBYTE ;发送器件从地址
82A1 128190 +1 330 LCALL CACK
82A4 30100F +1 331 JNB ACK,RETWRNE ;无应答则退出
82A7 7940 +1 332 MOV R1,#MTD
82A9 E7 +1 333 WRDAE: MOV A,@R1
82AA 1281A5 +1 334 LCALL WRBYTE ;开始写入数据
82AD 128190 +1 335 LCALL CACK
82B0 301003 +1 336 JNB ACK,RETWRNE
82B3 09 +1 337 INC R1
82B4 DBF3 +1 338 DJNZ R3,WRDAE ;判断写完没有
82B6 12815F +1 339 RETWRNE: LCALL STOP
82B9 22 +1 340 RET
+1 341
+1 342
+1 343 ;无子地址器件读取N字节数据
+1 344 ;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
+1 345 ;出口参数: 接收数据缓冲区MTD
+1 346 ;占用:A、 R0、 R1、 R2、 R3、 CY
+1 347 ;说明:此函数不发送子址,也不重新启动总线,而是直接读取多个数据.
82BA +1 348 IRDNBYTEEXT:
82BA AB52 +1 349 MOV R3,NUMBYTE
82BC 12814A +1 350 LCALL START
82BF E550 +1 351 MOV A,SLA
82C1 04 +1 352 INC A
82C2 1281A5 +1 353 LCALL WRBYTE ;发送器件从地址
82C5 128190 +1 354 LCALL CACK
82C8 30100B +1 355 JNB ACK,RETRDNE
82CB 7949 +1 356 MOV R1,#MRD
82CD 1281CC +1 357 RDNE1: LCALL RDBYTE ;读操作开始
82D0 F7 +1 358 MOV @R1,A
82D1 DB07 +1 359 DJNZ R3,SACKE
82D3 128180 +1 360 LCALL MNACK ;最后一字节发非应答位
82D6 12815F +1 361 RETRDNE: LCALL STOP ;并结束总线
82D9 22 +1 362 RET
82DA 128170 +1 363 SACKE: LCALL MACK
82DD 09 +1 364 INC R1
82DE 80ED +1 365 SJMP RDNE1
+1 366
+1 367
+1 368
+1 369 ;******************************************************************************************
***
+1 370 ; 请注意
+1 371 ;
+1 372 ; 占用内部资源: R0,R1,R2,R3,ACC,Cy。
+1 373 ; 在你的程序里要做以下定义:
+1 374 ; 1、定义变量: SLA 器件从地址 SUBA器件子地址 NUMBYTE读/写的字节数 ,位变量ACK
+1 375 ; 2、定义常量: SDA SCL 总线位 MTD 发送数据缓冲区首址 MRD 接收数据缓冲区首址
+1 376 ;
+1 377 ; (ACK为调试/测试位,ACK为0时表示无器件应答或总线出错)
+1 378 ;
+1 379 ; 在使用本软件包时,请在你的程序的未尾加入$INCLUDE (VI2C_ASM.INC)即可。VI2C_ASM.INC文件
+1 380 ;复制到IDE包含文件所要求的目录(如:工作目录或INC目录)
+1 381 ;
+1 382 ; 用户可以对"用户接口子程序"进行裁减,即把自已不使用的接口子程序删掉,以节省程序空间。
+1 383 ;******************************************************************************************
****
A51 MACRO ASSEMBLER EX 03/21/2004 15:04:34 PAGE 7
+1 384
+1 385
+1 386
+1 387
+1 388
+1 389
390 END
A51 MACRO ASSEMBLER EX 03/21/2004 15:04:34 PAGE 8
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 8190H A
CEND . . . . . . . C ADDR 81A0H A
DELAY. . . . . . . C ADDR 8135H A
DELAY1 . . . . . . C ADDR 8145H A
IRDBYTE. . . . . . C ADDR 8215H A
IRDNBYTE . . . . . C ADDR 825AH A
IRDNBYTEEXT. . . . C ADDR 82BAH A
IWBLOOP. . . . . . C ADDR 81F5H A
IWRBYTE. . . . . . C ADDR 81F3H A
IWRNBYTE . . . . . C ADDR 822EH A
IWRNBYTEEXT. . . . C ADDR 8296H A
MACK . . . . . . . C ADDR 8170H A
MAIN . . . . . . . C ADDR 8100H A
MAINLOOP . . . . . C ADDR 8124H A
MIN. . . . . . . . C ADDR 8137H A
MNACK. . . . . . . C ADDR 8180H A
MRD. . . . . . . . N NUMB 0049H A
MTD. . . . . . . . N NUMB 0040H A
NUMBYTE. . . . . . D ADDR 0052H A
P1 . . . . . . . . D ADDR 0090H A
PCF8563. . . . . . N NUMB 00A2H A
RDBYTE . . . . . . C ADDR 81CCH A
RDN1 . . . . . . . C ADDR 8283H A
RDNE1. . . . . . . C ADDR 82CDH A
RETRDB . . . . . . C ADDR 822AH A
RETRDN . . . . . . C ADDR 828CH A
RETRDNE. . . . . . C ADDR 82D6H A
RETWRB . . . . . . C ADDR 820FH A
RETWRN . . . . . . C ADDR 8256H A
RETWRNE. . . . . . C ADDR 82B6H A
RLP. . . . . . . . C ADDR 81CEH A
SACK . . . . . . . C ADDR 8290H A
SACKE. . . . . . . C ADDR 82DAH A
SCL. . . . . . . . B ADDR 0090H.6 A
SDA. . . . . . . . B ADDR 0090H.7 A
SLA. . . . . . . . D ADDR 0050H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 814AH A
STOP . . . . . . . C ADDR 815FH A
SUBA . . . . . . . D ADDR 0051H A
WLP. . . . . . . . C ADDR 81A7H A
WLP1 . . . . . . . C ADDR 81ACH A
WR0. . . . . . . . C ADDR 81BEH A
WR1. . . . . . . . C ADDR 81B0H A
WRBYTE . . . . . . C ADDR 81A5H A
WRDA . . . . . . . C ADDR 8249H A
WRDAE. . . . . . . C ADDR 82A9H A
YS500. . . . . . . C ADDR 813AH A
YS500US. . . . . . C ADDR 8140H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -