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

📄 ex.lst

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