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

📄 i2cmstr.lst

📁 大量ADuc831的程序员代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     180    ;____________________________________________________________________
                     181                                                               ; STARTBIT
                     182    ; Sends the start bit to initiate an I2C communication
                     183    
00E3                 184    STARTBIT:
00E3 D2EE            185            SETB    MDE             ; enable SDATA pin as an output
00E5 C200            186            CLR     NOACK
00E7 C2EF            187            CLR     MDO             ; low O/P on SDATA 
00E9 C2ED            188            CLR     MCO             ; start bit
00EB 22              189            RET
                     190    ;____________________________________________________________________
                     191                                                                ; STOPBIT
                     192    ; Sends the stop bit to end an I2C transmission
                     193    
00EC                 194    STOPBIT:
00EC D2EE            195            SETB    MDE             ; to enable SDATA pin as an output
00EE C2EF            196            CLR     MDO             ; get SDATA ready for stop
00F0 D2ED            197            SETB    MCO             ; set clock for stop
00F2 D2EF            198            SETB    MDO             ; this is the stop bit
00F4 22              199            RET
                     200    ;____________________________________________________________________
                     201                                                               ; SENDBYTE
                     202    ; Send 8-bits in ACC to the slave
00F5                 203    SENDBYTE:
00F5 753008          204            MOV     BITCNT,#8       ; 8 bits in a byte
00F8 D2EE            205            SETB    MDE             ; to enable SDATA pin as an output
00FA C2ED            206            CLR     MCO             ; make sure that the clock line is low
00FC                 207    SENDBIT:
00FC 33              208            RLC     A               ; put data bit to be sent into carry
00FD 92EF            209            MOV     MDO,C           ; put data bit on SDATA line
00FF D2ED            210            SETB    MCO             ; clock to send bit
0101 C2ED            211            CLR     MCO             ; clear clock 
0103 D530F6          212            DJNZ    BITCNT,SENDBIT  ; jump back and send all eight bits
                     213    
0106 C2EE            214            CLR     MDE             ; release data line for acknowledge
0108 D2ED            215            SETB    MCO             ; send clock for acknowledge
010A 30EC02          216            JNB     MDI,NEXT        ; this is a check for acknowledge
010D D200            217            SETB    NOACK           ; no acknowledge, set flag
010F C2ED            218    NEXT:   CLR     MCO             ; clear clock 
0111 22              219            RET
                     220    ;____________________________________________________________________
                     221                                                                ; RCVBYTE
                     222    ; receives one byte of data from an I2C slave device. Returns it in A
                     223    
0112                 224    RCVBYTE:
0112 753008          225            MOV     BITCNT,#8       ; Set bit count.
0115 C2EE            226            CLR     MDE             ; to enable SDATA pin as an input       
0117 C2ED            227            CLR     MCO             ; make sure the clock line is low
0119                 228    RCVBIT:  
0119 D2ED            229            SETB    MCO             ; clock to recieve bit
011B C2ED            230            CLR     MCO             ; clear clock
011D A2EC            231            MOV     C,MDI           ; read data bit into carry.
011F 33              232            RLC     A               ; Rotate bit into result byte.
I2CMSTR                                                                                                       PAGE 5

                     233    
0120 D530F6          234            DJNZ    BITCNT,RCVBIT   ; Repeat until all bits received.
                     235                                    ; recieved byte is in the accumulator
                     236    
0123 D2EE            237            SETB    MDE             ; Data pin =Output for NACK
0125 D2EF            238            SETB    MDO             ; Send NACK (always send NACK for
                     239                                    ; last byte in transmission)
0127 D2ED            240            SETB    MCO             ; Send NACK clock.
0129 C2ED            241            CLR     MCO
012B 22              242            RET
                     243    
                     244    ;____________________________________________________________________
                     245                                                                  ; DELAY
                     246    ; DELAY ROUTINE FOR THE ADuC812/ADuC816/ADuC824
012C                 247    DELAY:                     ; Delays by 100ms * A
                     248    
                     249    ; ADuC812 100ms based on 11.0592MHz Core Clock
                     250    ; ADuC824 100ms based on 1.573MHz Core Clock 
                     251    
012C FA              252           MOV     R2,A        ; Acc holds delay variable
012D 7BC8            253    DLY0:  MOV     R3,#200     ; Set up delay loop0
012F 7CE5            254    DLY1:  MOV     R4,#229     ; Set up delay loop1
0131 DCFE            255           DJNZ   R4,$         ; Dec R4 & Jump here until R4 is 0
                     256                               ; wait here for 131*15.3us=2ms
0133 DBFA            257           DJNZ   R3,DLY1      ; Dec R3 & Jump DLY1 until R3 is 0
                     258                               ; Wait for 50*2ms
0135 DAF6            259           DJNZ   R2,DLY0      ; Dec R2 & Jump DLY0 until R2 is 0
                     260                               ; wait for ACC*100ms
0137 22              261           RET                 ; Return from subroutine
                     262    ;____________________________________________________________________
                     263                                                                  ; ERROR
                     264    ; this subroutine is run if a NACK is received from the slave
                     265    
0138                 266    ERROR:
0138 7445            267            MOV     A,#45h  
013A 12013E          268            CALL    SENDCHAR        ; send the letter E out the UART
013D 22              269            RET
                     270    ;____________________________________________________________________
                     271                                                               ; SENDCHAR
                     272    ; sends ASCII value contained in A to UART
                     273    
013E                 274    SENDCHAR:       
013E 3099FD          275            JNB     TI,$            ; wait til present char gone
0141 C299            276            CLR     TI              ; must clear TI
0143 F599            277            MOV     SBUF,A
0145 22              278            RET
                     279    ;____________________________________________________________________
                     280                                                              ; HEX2ASCII
                     281    ; converts A into the hex character representing the value of A's 
                     282    ; least significant nibble
                     283    
0146                 284    HEX2ASCII:      
0146 540F            285            ANL     A,#00Fh
0148 B40A00          286            CJNE    A,#00Ah,$+3
014B 4002            287            JC      IO0030
014D 2407            288            ADD     A,#007h
014F 2430            289    IO0030: ADD     A,#'0'
0151 22              290            RET
I2CMSTR                                                                                                       PAGE 6

                     291    ;____________________________________________________________________
                     292                                                                ; SENDVAL
                     293    ; converts the hex value of A into two ASCII chars, and then spits 
                     294    ; these two characters up the UART. does not change the value of A.
                     295    
0152                 296    SENDVAL: 
0152 C0E0            297            PUSH    ACC
0154 C4              298            SWAP    A
0155 3146            299            CALL    HEX2ASCII
0157 313E            300            CALL    SENDCHAR        ; send high nibble
0159 D0E0            301            POP     ACC
015B C0E0            302            PUSH    ACC
015D 3146            303            CALL    HEX2ASCII
015F 313E            304            CALL    SENDCHAR        ; send low nibble
0161 D0E0            305            POP     ACC
0163 22              306            RET
                     307    ;____________________________________________________________________
                     308    
                     309    END

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

ACC. . . . . . . . . . . . . . .  D ADDR  00E0H  PREDEFINED  
BITCNT . . . . . . . . . . . . .  D ADDR  0030H  
DELAY. . . . . . . . . . . . . .  C ADDR  012CH  
DLY0 . . . . . . . . . . . . . .  C ADDR  012DH  
DLY1 . . . . . . . . . . . . . .  C ADDR  012FH  
EA . . . . . . . . . . . . . . .  B ADDR  00AFH  PREDEFINED  
ERR. . . . . . . . . . . . . . .  B ADDR  0000H  
ERROR. . . . . . . . . . . . . .  C ADDR  0138H  
EX0. . . . . . . . . . . . . . .  B ADDR  00A8H  PREDEFINED  
HEX2ASCII. . . . . . . . . . . .  C ADDR  0146H  
I2CCON . . . . . . . . . . . . .  D ADDR  00E8H  PREDEFINED  
INPUT. . . . . . . . . . . . . .  D ADDR  0032H  
IO0030 . . . . . . . . . . . . .  C ADDR  014FH  
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  010FH  
NOACK. . . . . . . . . . . . . .  B ADDR  0000H  
OUTPUT . . . . . . . . . . . . .  D ADDR  0033H  
P3 . . . . . . . . . . . . . . .  D ADDR  00B0H  PREDEFINED  
RCVBIT . . . . . . . . . . . . .  C ADDR  0119H  
RCVBYTE. . . . . . . . . . . . .  C ADDR  0112H  
RCVDATA. . . . . . . . . . . . .  C ADDR  00C6H  
RCVRET . . . . . . . . . . . . .  C ADDR  00E2H  
RI . . . . . . . . . . . . . . .  B ADDR  0098H  PREDEFINED  
RXTXLOOP . . . . . . . . . . . .  C ADDR  007CH  
SBUF . . . . . . . . . . . . . .  D ADDR  0099H  PREDEFINED  
SCON . . . . . . . . . . . . . .  D ADDR  0098H  PREDEFINED  
SENDBIT. . . . . . . . . . . . .  C ADDR  00FCH  
SENDBYTE . . . . . . . . . . . .  C ADDR  00F5H  
SENDCHAR . . . . . . . . . . . .  C ADDR  013EH  
SENDDATA . . . . . . . . . . . .  C ADDR  00ADH  
SENDERR. . . . . . . . . . . . .  C ADDR  008DH  
SENDRET. . . . . . . . . . . . .  C ADDR  00C5H  
SENDVAL. . . . . . . . . . . . .  C ADDR  0152H  
SKIP . . . . . . . . . . . . . .  C ADDR  0092H  
SLAVEADD . . . . . . . . . . . .  D ADDR  0031H  
STARTBIT . . . . . . . . . . . .  C ADDR  00E3H  
STOPBIT. . . . . . . . . . . . .  C ADDR  00ECH  
STOPRCV. . . . . . . . . . . . .  C ADDR  00DAH  
STOPSEND . . . . . . . . . . . .  C ADDR  00BDH  
T3CON. . . . . . . . . . . . . .  D ADDR  009EH  PREDEFINED  
T3FD . . . . . . . . . . . . . .  D ADDR  009DH  PREDEFINED  
TI . . . . . . . . . . . . . . .  B ADDR  0099H  PREDEFINED  

⌨️ 快捷键说明

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