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

📄 i2cmstr.lst

📁 aduc812精典源代码下载,适合初学者
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     210    ;____________________________________________________________________
                     211                                                                ; STOPBIT
                     212    ; Sends the stop bit to end an I2C transmission
                     213    
00F8                 214    STOPBIT:
                     215    
00F8 D2EE            216            SETB    MDE             ; to enable SDATA pin as an output
00FA C2EF            217            CLR     MDO             ; get SDATA ready for stop
00FC D2ED            218            SETB    MCO             ; set clock for stop
00FE 120141          219            CALL    DELAY5
0101 D2EF            220            SETB    MDO             ; this is the stop bit
0103 22              221            RET
                     222    
                     223    
                     224    
                     225    ;____________________________________________________________________
                     226                                                               ; SENDBYTE
                     227    ; Send 8-bits in ACC to the slave
                     228    
0104                 229    SENDBYTE:
                     230    
0104 753008          231            MOV     BITCNT,#8       ; 8 bits in a byte
0107 D2EE            232            SETB    MDE             ; to enable SDATA pin as an output      
I2CMSTR                                                                                                       PAGE 5

0109 C2ED            233            CLR     MCO             ; make sure that the clock line is low
010B                 234    SENDBIT:
010B 33              235            RLC     A               ; put data bit to be sent into carry
010C 92EF            236            MOV     MDO,C           ; put data bit on SDATA line
010E D2ED            237            SETB    MCO             ; clock to send bit
0110 C2ED            238            CLR     MCO             ; clear clock 
0112 D530F6          239            DJNZ    BITCNT,SENDBIT  ; jump back and send all eight bits
                     240    
0115 C2EE            241            CLR     MDE             ; release data line for acknowledge
0117 D2ED            242            SETB    MCO             ; send clock for acknowledge
0119 120141          243            CALL    DELAY5
011C 30EC02          244            JNB     MDI,NEXT        ; this is a check for acknowledge
011F D200            245            SETB    NOACK           ; no acknowledge, set flag              
0121 C2ED            246    NEXT:   CLR     MCO             ; clear clock 
0123 22              247            RET
                     248    
                     249    
                     250    
                     251    ;____________________________________________________________________
                     252                                                                ; RCVBYTE
                     253    ; receives one byte of data from an I2C slave device.
                     254    
0124                 255    RCVBYTE:
0124 753008          256            MOV     BITCNT,#8       ; Set bit count.
0127 C2EE            257            CLR     MDE             ; to enable SDATA pin as an input       
0129 C2ED            258            CLR     MCO             ; make sure the clock line is low
012B                 259    RCVBIT:  
012B D2ED            260            SETB    MCO             ; clock to recieve bit
012D C2ED            261            CLR     MCO             ; clear clock
012F A2EC            262            MOV     C,MDI           ; read data bit into carry.
0131 33              263            RLC     A               ; Rotate bit into result byte.
                     264    
0132 D530F6          265            DJNZ    BITCNT,RCVBIT   ; Repeat until all bits received.
                     266                                    ; recieved byte is in the accumulator
                     267    
0135 D2EE            268            SETB    MDE             ; Data pin of the master must be an..
                     269                                    ; ..output for the acknowledge  
0137 D2EF            270            SETB    MDO             ; Send no acknowledge, last byte.
                     271           
0139 D2ED            272            SETB    MCO             ; Send no-acknowledge clock.
013B 120141          273            CALL    DELAY5
013E C2ED            274            CLR     MCO             ; clear clock
0140 22              275            RET
                     276    
                     277    
                     278    ;____________________________________________________________________
                     279                                                                 ; DELAY5
                     280    ; Short delay (5 machine cycles incl CALL time) for the main signals
                     281    ; (SCLOCK , SDATA)
                     282    
0141                 283    DELAY5:
0141 00              284            NOP
0142 22              285            RET
                     286    
                     287    ;____________________________________________________________________
                     288                                                                  ; DELAY
                     289    ; DELAY ROUTINE FOR THE ADuC812/ADuC816/ADuC824
0143                 290    DELAY:                    ; Delays by 100ms * A
I2CMSTR                                                                                                       PAGE 6

                     291    
                     292    ; ADuC812 100ms based on 11.0592MHz Core Clock
                     293    ; ADuC824 100ms based on 1.573MHz Core Clock 
                     294    
0143 FA              295              MOV   R2,A       ; Acc holds delay variable
0144 7BC8            296    DLY0:     MOV   R3,#200    ; Set up delay loop0
0146 7CE5            297    DLY1:     MOV   R4,#229    ; Set up delay loop1
                     298    ;DLY0:    MOV   R3,#50     ; Set up delay loop0
                     299    ;DLY1:    MOV   R4,#131    ; Set up delay loop1
0148 DCFE            300              DJNZ  R4,$       ; Dec R4 & Jump here until R4 is 0
                     301                               ; wait here for 131*15.3us=2ms
014A DBFA            302              DJNZ  R3,DLY1    ; Dec R3 & Jump DLY1 until R3 is 0
                     303                               ; Wait for 50*2ms
014C DAF6            304              DJNZ  R2,DLY0    ; Dec R2 & Jump DLY0 until R2 is 0
                     305                               ; wait for ACC*100ms
014E 22              306              RET              ; Return from subroutine
                     307    
                     308    ;____________________________________________________________________
                     309                                                                  ; ERROR
                     310    ; this subroutine is run if a NACK is recieved from the slave
                     311    
014F                 312    ERROR:
                     313    
014F 7445            314            MOV     A,#45h  
0151 3154            315            ACALL   SENDCHAR        ; send the letter E out the UART
0153 22              316            RET
                     317    
                     318    ;____________________________________________________________________
                     319                                                               ; SENDCHAR
                     320    ; sends ASCII value contained in A to UART
                     321    
0154                 322    SENDCHAR:       
                     323    
0154 3099FD          324            JNB     TI,$            ; wait til present char gone
0157 C299            325            CLR     TI              ; must clear TI
0159 F599            326            MOV     SBUF,A
015B 22              327            RET
                     328    
                     329    
                     330    ;____________________________________________________________________
                     331                                                              ; HEX2ASCII
                     332    ; converts A into the hex character representing the value of A's 
                     333    ; least significant nibble
                     334    
015C                 335    HEX2ASCII:      
                     336    
015C 540F            337            ANL     A,#00Fh
015E B40A00          338            CJNE    A,#00Ah,$+3
0161 4002            339            JC      IO0030
0163 2407            340            ADD     A,#007h
0165 2430            341    IO0030: ADD     A,#'0'
0167 22              342            RET
                     343    
                     344            
                     345    ;____________________________________________________________________
                     346                                                                ; SENDVAL
                     347    ; converts the hex value of A into two ASCII chars, and then spits 
                     348    ; these two characters up the UART. does not change the value of A.
I2CMSTR                                                                                                       PAGE 7

                     349    
0168                 350    SENDVAL: 
0168 C0E0            351            PUSH    ACC
016A C4              352            SWAP    A
016B 315C            353            CALL    HEX2ASCII
016D 3154            354            CALL    SENDCHAR        ; send high nibble
016F D0E0            355            POP     ACC
0171 C0E0            356            PUSH    ACC
0173 315C            357            CALL    HEX2ASCII
0175 3154            358            CALL    SENDCHAR        ; send low nibble
0177 D0E0            359            POP     ACC
                     360    
0179 22              361            RET
                     362    
                     363    END
                     364    

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
I2CMSTR                                                                                                       PAGE 8

ACC. . . . . . . . . . . . . . .  D ADDR  00E0H  PREDEFINED  
BITCNT . . . . . . . . . . . . .  D ADDR  0030H  
DELAY. . . . . . . . . . . . . .  C ADDR  0143H  
DELAY5 . . . . . . . . . . . . .  C ADDR  0141H  
DLY0 . . . . . . . . . . . . . .  C ADDR  0144H  
DLY1 . . . . . . . . . . . . . .  C ADDR  0146H  
EA . . . . . . . . . . . . . . .  B ADDR  00AFH  PREDEFINED  
ERR. . . . . . . . . . . . . . .  B ADDR  0000H  
ERROR. . . . . . . . . . . . . .  C ADDR  014FH  
EX0. . . . . . . . . . . . . . .  B ADDR  00A8H  PREDEFINED  
HEX2ASCII. . . . . . . . . . . .  C ADDR  015CH  
I2CCON . . . . . . . . . . . . .  D ADDR  00E8H  PREDEFINED  
I2CRS. . . . . . . . . . . . . .  B ADDR  00EAH  PREDEFINED  
INPUT. . . . . . . . . . . . . .  D ADDR  0032H  
IO0030 . . . . . . . . . . . . .  C ADDR  0165H  
IT0. . . . . . . . . . . . . . .  B ADDR  0088H  PREDEFINED  
LED. . . . . . . . . . . . . . .    NUMB  00B4H  
MAIN . . . . . . . . . . . . . .  C ADDR  0060H  
MCO. . . . . . . . . . . . . . .  B ADDR  00EDH  PREDEFINED  
MDE. . . . . . . . . . . . . . .  B ADDR  00EEH  PREDEFINED  
MDI. . . . . . . . . . . . . . .  B ADDR  00ECH  PREDEFINED  
MDO. . . . . . . . . . . . . . .  B ADDR  00EFH  PREDEFINED  
NEXT . . . . . . . . . . . . . .  C ADDR  0121H  
NOACK. . . . . . . . . . . . . .  B ADDR  0000H  
OUTPUT . . . . . . . . . . . . .  D ADDR  0033H  
P3 . . . . . . . . . . . . . . .  D ADDR  00B0H  PREDEFINED  
RCVBIT . . . . . . . . . . . . .  C ADDR  012BH  
RCVBYTE. . . . . . . . . . . . .  C ADDR  0124H  
RCVDATA. . . . . . . . . . . . .  C ADDR  00CAH  
RCVRET . . . . . . . . . . . . .  C ADDR  00EBH  
RI . . . . . . . . . . . . . . .  B ADDR  0098H  PREDEFINED  
RXTXLOOP . . . . . . . . . . . .  C ADDR  007EH  
SBUF . . . . . . . . . . . . . .  D ADDR  0099H  PREDEFINED  
SCON . . . . . . . . . . . . . .  D ADDR  0098H  PREDEFINED  
SENDBIT. . . . . . . . . . . . .  C ADDR  010BH  
SENDBYTE . . . . . . . . . . . .  C ADDR  0104H  
SENDCHAR . . . . . . . . . . . .  C ADDR  0154H  
SENDDATA . . . . . . . . . . . .  C ADDR  00AFH  
SENDERR. . . . . . . . . . . . .  C ADDR  008FH  
SENDRET. . . . . . . . . . . . .  C ADDR  00C9H  
SENDVAL. . . . . . . . . . . . .  C ADDR  0168H  
SKIP . . . . . . . . . . . . . .  C ADDR  0094H  
SLAVEADD . . . . . . . . . . . .  D ADDR  0031H  
STARTBIT . . . . . . . . . . . .  C ADDR  00ECH  
STOPBIT. . . . . . . . . . . . .  C ADDR  00F8H  
STOPRCV. . . . . . . . . . . . .  C ADDR  00E1H  
STOPSEND . . . . . . . . . . . .  C ADDR  00BFH  
TH1. . . . . . . . . . . . . . .  D ADDR  008DH  PREDEFINED  
TI . . . . . . . . . . . . . . .  B ADDR  0099H  PREDEFINED  
TMOD . . . . . . . . . . . . . .  D ADDR  0089H  PREDEFINED  
TR1. . . . . . . . . . . . . . .  B ADDR  008EH  PREDEFINED  

⌨️ 快捷键说明

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