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

📄 ex.lst

📁 这是购买周立功的试验箱时候松的源代码。很经典的代码。希望学习单片机的朋友好好研究。短小精悍。有意思。这是第三部分。后面还有好多。不知道管理员能否让我通过?
💻 LST
📖 第 1 页 / 共 2 页
字号:
                +1   235     
8201 D8DC       +1   236             DJNZ  R0,RLP                            ;未够8位,再来一次
8203 22         +1   237             RET
                +1   238     
                +1   239     
                +1   240     
                +1   241     ;========================================================================================
                +1   242     ;========================================================================================
                +1   243     ;       以下是用户接口子程序
                +1   244     ;
                +1   245     
                +1   246     ;无子地址器件写字节数据
                +1   247     ;入口参数: 数据为ACC、器件从地址SLA              
                +1   248     ;占用:  A、R0、CY
8204 C0E0       +1   249     IWRBYTE: PUSH   ACC
8206 12815B     +1   250     IWBLOOP: LCALL  START                           ;起动总线
8209 E550       +1   251              MOV    A,SLA  
820B 1281B6     +1   252              LCALL  WRBYTE                          ;发送器件从地址 
820E 1281A1     +1   253              LCALL  CACK
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     5

8211 30100C     +1   254              JNB    ACK,RETWRB                      ;无应答则跳转
8214 D0E0       +1   255              POP    ACC                             ;写数据
8216 1281B6     +1   256              LCALL  WRBYTE
8219 1281A1     +1   257              LCALL  CACK
821C 128170     +1   258              LCALL  STOP
821F 22         +1   259              RET
8220 D0E0       +1   260     RETWRB:  POP    ACC
8222 128170     +1   261              LCALL  STOP
8225 22         +1   262              RET
                +1   263     
                +1   264     ;无子地址器件读字节数据
                +1   265     ;入口参数: 器件从地址SLA
                +1   266     ;出口参数: 数据为ACC    
                +1   267     ;占用: A 、R0、R2 、CY
8226 12815B     +1   268     IRDBYTE: LCALL  START
8229 E550       +1   269              MOV    A,SLA                           ;发送器件从地址
822B 04         +1   270              INC    A
822C 1281B6     +1   271              LCALL  WRBYTE
822F 1281A1     +1   272              LCALL  CACK
8232 301006     +1   273              JNB    ACK,RETRDB             
8235 1281DD     +1   274              LCALL  RDBYTE                          ;进行读字节操作
8238 128191     +1   275              LCALL  MNACK                           ;发送非应信号
823B 128170     +1   276     RETRDB:  LCALL  STOP                            ;结束总线
823E 22         +1   277              RET
                +1   278     
                +1   279     ;向器件指定子地址写N字节数据
                +1   280     ;入口参数:  器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE
                +1   281     ; 占用:  A 、R0 、R1 、R3 、CY 
823F E552       +1   282     IWRNBYTE: MOV    A,NUMBYTE
8241 FB         +1   283               MOV    R3,A
8242 12815B     +1   284               LCALL  START                          ;起动总线
8245 E550       +1   285               MOV    A,SLA
8247 1281B6     +1   286               LCALL  WRBYTE                         ;发送器件从地址      
824A 1281A1     +1   287               LCALL  CACK
824D 301017     +1   288               JNB    ACK,RETWRN                     ;无应答则退出
8250 E551       +1   289               MOV    A,SUBA                         ;指定子地址 
8252 1281B6     +1   290               LCALL  WRBYTE
8255 1281A1     +1   291               LCALL  CACK
8258 7940       +1   292               MOV    R1,#MTD
825A E7         +1   293     WRDA:     MOV    A,@R1
825B 1281B6     +1   294               LCALL  WRBYTE                         ;开始写入数据
825E 1281A1     +1   295               LCALL  CACK
8261 3010DB     +1   296               JNB    ACK,IWRNBYTE
8264 09         +1   297               INC    R1
8265 DBF3       +1   298               DJNZ   R3,WRDA                        ;判断写完没有
8267 128170     +1   299     RETWRN:   LCALL  STOP
826A 22         +1   300               RET
                +1   301     
                +1   302     ;向器件指定子地址读取N字节数据
                +1   303     ;入口参数:  器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
                +1   304     ;出口参数:  接收数据缓冲区MTD
                +1   305     ;占用:A、 R0、 R1、 R2、 R3、 CY               
826B AB52       +1   306     IRDNBYTE:  MOV    R3,NUMBYTE
826D 12815B     +1   307                LCALL  START
8270 E550       +1   308                MOV    A,SLA
8272 1281B6     +1   309                LCALL  WRBYTE                        ;发送器件从地址
8275 1281A1     +1   310                LCALL  CACK
8278 301022     +1   311                JNB    ACK,RETRDN
827B E551       +1   312                MOV    A,SUBA                        ;指定子地址    
827D 1281B6     +1   313                LCALL  WRBYTE
8280 1281A1     +1   314                LCALL  CACK  
8283 12815B     +1   315                LCALL  START                         ;重新起动总线
8286 E550       +1   316                MOV    A,SLA
8288 04         +1   317                INC    A                             ;准备进行读操作 
8289 1281B6     +1   318                LCALL  WRBYTE
828C 1281A1     +1   319                LCALL  CACK
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     6

828F 3010D9     +1   320                JNB    ACK,IRDNBYTE           
8292 7949       +1   321                MOV    R1,#MRD
8294 1281DD     +1   322     RDN1:      LCALL  RDBYTE                        ;读操作开始
8297 F7         +1   323                MOV    @R1,A
                +1   324                ;NOP                                 ;+1
                +1   325                ;NOP                                 ;+1     
8298 DB07       +1   326                DJNZ   R3,SACK
829A 128191     +1   327                LCALL  MNACK                         ;最后一字节发非应答位               
829D 128170     +1   328     RETRDN:    LCALL  STOP                          ;并结束总线
82A0 22         +1   329                RET
82A1 128181     +1   330     SACK:      LCALL  MACK
82A4 09         +1   331                INC    R1
82A5 80ED       +1   332                SJMP   RDN1
                +1   333     
                +1   334     
                +1   335     ;无子地址器件写N字节数据
                +1   336     ;入口参数:  器件从地址SLA、发送数据缓冲区MTD、发送字节数NUMBYTE
                +1   337     ; 占用:  A 、R0 、R1 、R3 、CY 
                +1   338     ;不发送子地址SUBA,直接发送多个数据.
82A7            +1   339     IWRNBYTEEXT:
82A7 E552       +1   340               MOV    A,NUMBYTE
82A9 FB         +1   341               MOV    R3,A
82AA 12815B     +1   342               LCALL  START                          ;起动总线
82AD E550       +1   343               MOV    A,SLA
82AF 1281B6     +1   344               LCALL  WRBYTE                         ;发送器件从地址      
82B2 1281A1     +1   345               LCALL  CACK
82B5 30100F     +1   346               JNB    ACK,RETWRNE                    ;无应答则退出
82B8 7940       +1   347               MOV    R1,#MTD
82BA E7         +1   348     WRDAE:    MOV    A,@R1
82BB 1281B6     +1   349               LCALL  WRBYTE                         ;开始写入数据
82BE 1281A1     +1   350               LCALL  CACK
82C1 301003     +1   351               JNB    ACK,RETWRNE
82C4 09         +1   352               INC    R1
82C5 DBF3       +1   353               DJNZ   R3,WRDAE                       ;判断写完没有
82C7 128170     +1   354     RETWRNE:  LCALL  STOP
82CA 22         +1   355               RET
                +1   356     
                +1   357     
                +1   358     ;无子地址器件读取N字节数据
                +1   359     ;入口参数:  器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE
                +1   360     ;出口参数:  接收数据缓冲区MTD
                +1   361     ;占用:A、 R0、 R1、 R2、 R3、 CY  
                +1   362     ;说明:此函数不发送子址,也不重新启动总线,而是直接读取多个数据.
82CB            +1   363     IRDNBYTEEXT:
82CB AB52       +1   364                MOV    R3,NUMBYTE
82CD 12815B     +1   365                LCALL  START
82D0 E550       +1   366                MOV    A,SLA
82D2 04         +1   367                INC    A  
82D3 1281B6     +1   368                LCALL  WRBYTE                        ;发送器件从地址
82D6 1281A1     +1   369                LCALL  CACK
82D9 30100B     +1   370                JNB    ACK,RETRDNE
82DC 7949       +1   371                MOV    R1,#MRD
82DE 1281DD     +1   372     RDNE1:     LCALL  RDBYTE                        ;读操作开始
82E1 F7         +1   373                MOV    @R1,A
82E2 DB07       +1   374                DJNZ   R3,SACKE
82E4 128191     +1   375                LCALL  MNACK                         ;最后一字节发非应答位               
82E7 128170     +1   376     RETRDNE:   LCALL  STOP                          ;并结束总线
82EA 22         +1   377                RET
82EB 128181     +1   378     SACKE:     LCALL  MACK
82EE 09         +1   379                INC    R1
82EF 80ED       +1   380                SJMP   RDNE1
                +1   381     
                +1   382     
                +1   383     
                +1   384     ;******************************************************************************************
                             ***
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     7

                +1   385     ;                               请注意
                +1   386     ;
                +1   387     ;    占用内部资源:         R0,R1,R2,R3,ACC,Cy。
                +1   388     ;    在你的程序里要做以下定义:
                +1   389     ;    1、定义变量:  SLA 器件从地址  SUBA器件子地址  NUMBYTE读/写的字节数 ,位变量ACK 
                +1   390     ;    2、定义常量:  SDA SCL 总线位  MTD 发送数据缓冲区首址    MRD 接收数据缓冲区首址
                +1   391     ;
                +1   392     ;   (ACK为调试/测试位,ACK为0时表示无器件应答或总线出错)
                +1   393     ;
                +1   394     ;    在使用本软件包时,请在你的程序的未尾加入$INCLUDE (VI2C_ASM.INC)即可。VI2C_ASM.INC文件
                +1   395     ;复制到IDE包含文件所要求的目录(如:工作目录或INC目录)
                +1   396     ;
                +1   397     ;    用户可以对"用户接口子程序"进行裁减,即把自已不使用的接口子程序删掉,以节省程序空间。
                +1   398     ;******************************************************************************************
                             ****
                +1   399     
                +1   400     
                +1   401     
                +1   402     
                +1   403     
                +1   404     
                     405             END
                             
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 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   81A1H   A   
CEND . . . . . . .  C ADDR   81B1H   A   
DELAY. . . . . . .  C ADDR   8146H   A   
DELAY1 . . . . . .  C ADDR   8156H   A   
HANDLELOOP . . . .  C ADDR   8125H   A   
IRDBYTE. . . . . .  C ADDR   8226H   A   
IRDNBYTE . . . . .  C ADDR   826BH   A   
IRDNBYTEEXT. . . .  C ADDR   82CBH   A   
IWBLOOP. . . . . .  C ADDR   8206H   A   
IWRBYTE. . . . . .  C ADDR   8204H   A   
IWRNBYTE . . . . .  C ADDR   823FH   A   
IWRNBYTEEXT. . . .  C ADDR   82A7H   A   
KEY_HANDLE . . . .  C ADDR   8112H   A   
KEY_INT. . . . . .  B ADDR   00B0H.2 A   
MACK . . . . . . .  C ADDR   8181H   A   
MAIN . . . . . . .  C ADDR   8100H   A   
MAINLOOP . . . . .  C ADDR   810DH   A   
MIN. . . . . . . .  C ADDR   8148H   A   
MNACK. . . . . . .  C ADDR   8191H   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   81DDH   A   
RDN1 . . . . . . .  C ADDR   8294H   A   
RDNE1. . . . . . .  C ADDR   82DEH   A   
RETRDB . . . . . .  C ADDR   823BH   A   
RETRDN . . . . . .  C ADDR   829DH   A   
RETRDNE. . . . . .  C ADDR   82E7H   A   
RETWRB . . . . . .  C ADDR   8220H   A   
RETWRN . . . . . .  C ADDR   8267H   A   
RETWRNE. . . . . .  C ADDR   82C7H   A   
RLP. . . . . . . .  C ADDR   81DFH   A   
RST. . . . . . . .  B ADDR   0090H.0 A   
SACK . . . . . . .  C ADDR   82A1H   A   
SACKE. . . . . . .  C ADDR   82EBH   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   815BH   A   
STOP . . . . . . .  C ADDR   8170H   A   
SUBA . . . . . . .  D ADDR   0051H   A   
WLP. . . . . . . .  C ADDR   81B8H   A   
WLP1 . . . . . . .  C ADDR   81BDH   A   
WR0. . . . . . . .  C ADDR   81CFH   A   
WR1. . . . . . . .  C ADDR   81C1H   A   
WRBYTE . . . . . .  C ADDR   81B6H   A   
WRDA . . . . . . .  C ADDR   825AH   A   
WRDAE. . . . . . .  C ADDR   82BAH   A   
YS500. . . . . . .  C ADDR   814BH   A   
YS500US. . . . . .  C ADDR   8151H   A   
ZLG7290. . . . . .  N NUMB   0070H   A   


REGISTER BANK(S) USED: 0 2 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -