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

📄 i2cmstr.lst

📁 于ADuC812的智能无功补偿控制器的研制 一种眼科B型超声诊断议 SL11R单片机外部存储器扩展 单片机复位电路...支持键盘双击事件的C程序设计! 一些源程序 FrankLin C51 库函数的一
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     187    ;____________________________________________________________________
                     188                                                               ; STARTBIT
                     189    ; Sends the start bit to initiate an I2C communication
                     190    
00EF                 191    STARTBIT:
00EF D2EE            192            SETB    MDE             ; enable SDATA pin as an output
00F1 C200            193            CLR     NOACK
00F3 C2EF            194            CLR     MDO             ; low O/P on SDATA 
00F5 C2ED            195            CLR     MCO             ; start bit
00F7 22              196            RET
                     197    ;____________________________________________________________________
                     198                                                                ; STOPBIT
                     199    ; Sends the stop bit to end an I2C transmission
                     200    
00F8                 201    STOPBIT:
00F8 D2EE            202            SETB    MDE             ; to enable SDATA pin as an output
00FA C2EF            203            CLR     MDO             ; get SDATA ready for stop
00FC D2ED            204            SETB    MCO             ; set clock for stop
00FE D2EF            205            SETB    MDO             ; this is the stop bit
0100 22              206            RET
                     207    ;____________________________________________________________________
                     208                                                               ; SENDBYTE
                     209    ; Send 8-bits in ACC to the slave
0101                 210    SENDBYTE:
0101 753008          211            MOV     BITCNT,#8       ; 8 bits in a byte
0104 D2EE            212            SETB    MDE             ; to enable SDATA pin as an output
0106 C2ED            213            CLR     MCO             ; make sure that the clock line is low
0108                 214    SENDBIT:
0108 33              215            RLC     A               ; put data bit to be sent into carry
0109 92EF            216            MOV     MDO,C           ; put data bit on SDATA line
010B D2ED            217            SETB    MCO             ; clock to send bit
010D C2ED            218            CLR     MCO             ; clear clock 
010F D530F6          219            DJNZ    BITCNT,SENDBIT  ; jump back and send all eight bits
                     220    
0112 C2EE            221            CLR     MDE             ; release data line for acknowledge
0114 D2ED            222            SETB    MCO             ; send clock for acknowledge
0116 30EC02          223            JNB     MDI,NEXT        ; this is a check for acknowledge
0119 D200            224            SETB    NOACK           ; no acknowledge, set flag
011B C2ED            225    NEXT:   CLR     MCO             ; clear clock 
011D 22              226            RET
                     227    ;____________________________________________________________________
                     228                                                                ; RCVBYTE
                     229    ; receives one byte of data from an I2C slave device. Returns it in A
                     230    
011E                 231    RCVBYTE:
011E 753008          232            MOV     BITCNT,#8       ; Set bit count.
I2CMSTR                                                                                                       PAGE 5

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

                     291    ; least significant nibble
                     292    
0152                 293    HEX2ASCII:      
0152 540F            294            ANL     A,#00Fh
0154 B40A00          295            CJNE    A,#00Ah,$+3
0157 4002            296            JC      IO0030
0159 2407            297            ADD     A,#007h
015B 2430            298    IO0030: ADD     A,#'0'
015D 22              299            RET
                     300    ;____________________________________________________________________
                     301                                                                ; SENDVAL
                     302    ; converts the hex value of A into two ASCII chars, and then spits 
                     303    ; these two characters up the UART. does not change the value of A.
                     304    
015E                 305    SENDVAL: 
015E C0E0            306            PUSH    ACC
0160 C4              307            SWAP    A
0161 3152            308            CALL    HEX2ASCII
0163 314A            309            CALL    SENDCHAR        ; send high nibble
0165 D0E0            310            POP     ACC
0167 C0E0            311            PUSH    ACC
0169 3152            312            CALL    HEX2ASCII
016B 314A            313            CALL    SENDCHAR        ; send low nibble
016D D0E0            314            POP     ACC
016F 22              315            RET
                     316    ;____________________________________________________________________
                     317    
                     318    END

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

ACC. . . . . . . . . . . . . . .  D ADDR  00E0H  PREDEFINED  
BITCNT . . . . . . . . . . . . .  D ADDR  0030H  
CFG814 . . . . . . . . . . . . .  D ADDR  009CH  PREDEFINED  
DELAY. . . . . . . . . . . . . .  C ADDR  0138H  
DLY0 . . . . . . . . . . . . . .  C ADDR  0139H  
DLY1 . . . . . . . . . . . . . .  C ADDR  013BH  
EA . . . . . . . . . . . . . . .  B ADDR  00AFH  PREDEFINED  
ERR. . . . . . . . . . . . . . .  B ADDR  0000H  
ERROR. . . . . . . . . . . . . .  C ADDR  0144H  
EX0. . . . . . . . . . . . . . .  B ADDR  00A8H  PREDEFINED  
HEX2ASCII. . . . . . . . . . . .  C ADDR  0152H  
I2CCON . . . . . . . . . . . . .  D ADDR  00E8H  PREDEFINED  
INPUT. . . . . . . . . . . . . .  D ADDR  0032H  
IO0030 . . . . . . . . . . . . .  C ADDR  015BH  
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  011BH  
NOACK. . . . . . . . . . . . . .  B ADDR  0000H  
OUTPUT . . . . . . . . . . . . .  D ADDR  0033H  
P3 . . . . . . . . . . . . . . .  D ADDR  00B0H  PREDEFINED  
RCAP2H . . . . . . . . . . . . .  D ADDR  00CBH  PREDEFINED  
RCAP2L . . . . . . . . . . . . .  D ADDR  00CAH  PREDEFINED  
RCVBIT . . . . . . . . . . . . .  C ADDR  0125H  
RCVBYTE. . . . . . . . . . . . .  C ADDR  011EH  
RCVDATA. . . . . . . . . . . . .  C ADDR  00D2H  
RCVRET . . . . . . . . . . . . .  C ADDR  00EEH  
RI . . . . . . . . . . . . . . .  B ADDR  0098H  PREDEFINED  
RXTXLOOP . . . . . . . . . . . .  C ADDR  0088H  
SBUF . . . . . . . . . . . . . .  D ADDR  0099H  PREDEFINED  
SCON . . . . . . . . . . . . . .  D ADDR  0098H  PREDEFINED  
SENDBIT. . . . . . . . . . . . .  C ADDR  0108H  
SENDBYTE . . . . . . . . . . . .  C ADDR  0101H  
SENDCHAR . . . . . . . . . . . .  C ADDR  014AH  
SENDDATA . . . . . . . . . . . .  C ADDR  00B9H  
SENDERR. . . . . . . . . . . . .  C ADDR  0099H  
SENDRET. . . . . . . . . . . . .  C ADDR  00D1H  
SENDVAL. . . . . . . . . . . . .  C ADDR  015EH  
SKIP . . . . . . . . . . . . . .  C ADDR  009EH  
SLAVEADD . . . . . . . . . . . .  D ADDR  0031H  
STARTBIT . . . . . . . . . . . .  C ADDR  00EFH  
STOPBIT. . . . . . . . . . . . .  C ADDR  00F8H  
STOPRCV. . . . . . . . . . . . .  C ADDR  00E6H  
STOPSEND . . . . . . . . . . . .  C ADDR  00C9H  
T2CON. . . . . . . . . . . . . .  D ADDR  00C8H  PREDEFINED  
TH2. . . . . . . . . . . . . . .  D ADDR  00CDH  PREDEFINED  
TI . . . . . . . . . . . . . . .  B ADDR  0099H  PREDEFINED  
TL2. . . . . . . . . . . . . . .  D ADDR  00CCH  PREDEFINED  

⌨️ 快捷键说明

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