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