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

📄 slave.lst

📁 aduc812精典源代码下载,适合初学者
💻 LST
字号:
SLAVE                                                                                                         PAGE 1

                       1    ;======================================================================
                       2    ;
                       3    ; Author        : ADI - Apps              www.analog.com/MicroConverter
                       4    ;
                       5    ; Date          : 30 April 1999
                       6    ;
                       7    ; File          : slave.asm
                       8    ;
                       9    ; Hardware      : ADuC812
                      10    ;
                      11    ; Description   : Code for a slave in an I2C system.
                      12    ;
                      13    ; Reference     : Tech Note, uC001: "Using the ADuC812 I2C Interface"
                      14    ;                 find it at www.analog.com/microconverter
                      15    ;
                      16    ;======================================================================
                      17    
                      18    $MOD812                         ; use ADuC812 & 8052 predefined symbols
                      19    
  0030                20    BYTECNT         DATA    030h    ; byte counter for I2C routines
                      21    
  0028                22    FLAGS           DATA    28h
  0040                23    GO              BIT     FLAGS.0 ; flag for all the interrupts
  0041                24    RC              BIT     FLAGS.1 ; flag for Write mode interrupt
  0042                25    TR              BIT     FLAGS.2 ; flag for Read mode interrupt
                      26    
                      27    ;======================================================================
                      28    
----                  29    CSEG
                      30    
0000                  31    ORG 0000H
                      32    
0000 0200AB           33            JMP START
                      34    
                      35    ;======================================================================
                      36    
003B                  37    ORG 003Bh                       ; I2C slave interrupt
                      38    
003B 20413D           39            JB      RC,RECEIVE      ; depending on flags there
003E 204241           40            JB      TR,TRANSMIT     ; are two different interrupts
                      41    
                      42    ;======================================================================
                      43    
007B                  44    ORG 007BH                       ; Subroutines
                      45    
                      46    ;----------------------------------------------------------------------
                      47    ; RECEIVE: receive interrupt routine
                      48    ;----------------------------------------------------------------------
                      49    
007B                  50    RECEIVE:
007B D240             51            SETB    GO
007D A79A             52            MOV     @R1,I2CDAT      ; move data on internal RAM
007F C2E8             53            CLR     I2CI            ; clear interrupt bit
0081 32               54            RETI
                      55    
                      56    ;----------------------------------------------------------------------
                      57    ; TRANSMIT: transmit interrupt routine
                      58    ;----------------------------------------------------------------------
SLAVE                                                                                                         PAGE 2

                      59    
0082                  60    TRANSMIT:
0082 D240             61            SETB    GO
0084 889A             62            MOV     I2CDAT,R0
0086 C2E8             63            CLR     I2CI            ; clear interrupt bit
0088 32               64            RETI
                      65    
                      66    ;----------------------------------------------------------------------
                      67    ; RCVBYTE2: receive byte routine for read mode
                      68    ;----------------------------------------------------------------------
                      69    
0089                  70    RCVBYTE2:
                      71    
0089 00               72            NOP
008A 22               73            RET
                      74    
                      75    ;----------------------------------------------------------------------
                      76    ; RCVBYTE: receive byte routine
                      77    ;----------------------------------------------------------------------
                      78    
008B                  79    RCVBYTE:
                      80    
008B 3040FD           81            JNB     GO,$            ; wait for the interrupt
008E 09               82            INC     R1              ; next storage will be on 41h then 42h
008F C240             83            CLR     GO              ; flag cleared for the next interrupt
0091 22               84            RET
                      85    
                      86    ;----------------------------------------------------------------------
                      87    ; RCVDATA: receive bytes routine
                      88    ;----------------------------------------------------------------------
                      89    
0092                  90    RCVDATA:
                      91    
0092 753004           92            MOV     BYTECNT,#4      ; 4 bytes : address + 3 datas
0095 118B             93    LOOP2:  ACALL   RCVBYTE
0097 D530FB           94            DJNZ    BYTECNT,LOOP2
009A 22               95            RET
                      96    
                      97    ;----------------------------------------------------------------------
                      98    ; SENDBYTE: byte transmit routine
                      99    ;----------------------------------------------------------------------
                     100    
009B                 101    SENDBYTE:
                     102    
009B 3040FD          103            JNB     GO,$            ; wait for the interrupt
009E 08              104            INC     R0              ; 2nd data is 34h and 3rd data is 35h
009F C240            105            CLR     GO
00A1 22              106            RET
                     107    
                     108    ;----------------------------------------------------------------------
                     109    ;SENDATA:bytes transmit routine
                     110    ;----------------------------------------------------------------------
                     111    
00A2                 112    SENDATA:
                     113    
00A2 753003          114            MOV     BYTECNT,#3      ; 3 data will be send by the slave
00A5 119B            115    LOOP:   ACALL   SENDBYTE
00A7 D530FB          116            DJNZ    BYTECNT,LOOP
SLAVE                                                                                                         PAGE 3

00AA 22              117            RET
                     118    
                     119    ;======================================================================
                     120    ;Main program
                     121    ;======================================================================
                     122    
00AB                 123    START:
                     124    
00AB C240            125            CLR     GO              ; clear flag used in the interrupt
00AD 759B44          126            MOV     I2CADD,#044h    ; slave address
00B0 758120          127            MOV     SP,#020h
00B3 75A880          128            MOV     IE,#80h         ; enable all the interrupts
00B6 75A901          129            MOV     IE2,#01h        ; enable I2C interrupt
00B9 75E800          130            MOV     I2CCON,#000h    ; slave mode
                     131    
                     132    ; code for write mode ( master-transmitter to slave-receiver )
                     133    
                     134    ;       SETB    RC              ; specific flag for interrupt routine
                     135    ;       MOV     R1,#040h        ; first data to be stored in RAM at 40h 
                     136    ;       ACALL   RCVDATA         ; slave receives his address + 3 datas
                     137    
                     138    ; code for read mode ( master reads slave immediately after 1st byte )
                     139    
00BC D241            140            SETB    RC              ; specific flag for interrupt routine
00BE 7833            141            MOV     R0,#033h        ; first data send is 33h
00C0 1189            142            ACALL   RCVBYTE2        ; slave receives address send by master
00C2 C241            143            CLR     RC
00C4 D242            144            SETB    TR
00C6 11A2            145            ACALL   SENDATA         ; slave sends 3 datas
                     146    
00C8 D2B4            147            SETB     P3.4            ; led is off, everything is OK
                     148    
                     149    END

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
SLAVE                                                                                                         PAGE 4

BYTECNT. . . . . . . . . . . . .  D ADDR  0030H  
FLAGS. . . . . . . . . . . . . .  D ADDR  0028H  
GO . . . . . . . . . . . . . . .  B ADDR  0040H  
I2CADD . . . . . . . . . . . . .  D ADDR  009BH  PREDEFINED  
I2CCON . . . . . . . . . . . . .  D ADDR  00E8H  PREDEFINED  
I2CDAT . . . . . . . . . . . . .  D ADDR  009AH  PREDEFINED  
I2CI . . . . . . . . . . . . . .  B ADDR  00E8H  PREDEFINED  
IE . . . . . . . . . . . . . . .  D ADDR  00A8H  PREDEFINED  
IE2. . . . . . . . . . . . . . .  D ADDR  00A9H  PREDEFINED  
LOOP . . . . . . . . . . . . . .  C ADDR  00A5H  
LOOP2. . . . . . . . . . . . . .  C ADDR  0095H  
P3 . . . . . . . . . . . . . . .  D ADDR  00B0H  PREDEFINED  
RC . . . . . . . . . . . . . . .  B ADDR  0041H  
RCVBYTE. . . . . . . . . . . . .  C ADDR  008BH  
RCVBYTE2 . . . . . . . . . . . .  C ADDR  0089H  
RCVDATA. . . . . . . . . . . . .  C ADDR  0092H  NOT USED  
RECEIVE. . . . . . . . . . . . .  C ADDR  007BH  
SENDATA. . . . . . . . . . . . .  C ADDR  00A2H  
SENDBYTE . . . . . . . . . . . .  C ADDR  009BH  
SP . . . . . . . . . . . . . . .  D ADDR  0081H  PREDEFINED  
START. . . . . . . . . . . . . .  C ADDR  00ABH  
TR . . . . . . . . . . . . . . .  B ADDR  0042H  
TRANSMIT . . . . . . . . . . . .  C ADDR  0082H  

⌨️ 快捷键说明

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