⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex.lst

📁 这是购买周立功的试验箱时候松的源代码。很经典的代码。希望学习单片机的朋友好好研究。短小精悍。有意思。这是第三部分。后面还有好多。不知道管理员能否让我通过?
💻 LST
📖 第 1 页 / 共 2 页
字号:
                +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 + -