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

📄 pic12i2c.lst

📁 该应用软件可以实现大多数单片机的仿真实验
💻 LST
📖 第 1 页 / 共 2 页
字号:
                      00145 
                      00146 
                      00147 ;******* Set up output data (control, address, or data) and counter ********
                      00148 ;***************************************************************************
002B                  00149 PREP_TRANSFER_BYTE
002B   003D           00150         MOVWF   EEBYTE        ; Byte to transfer to EEPROM already in W
002C   0C08           00151         MOVLW   .8            ; Counter to transfer 8 bits
002D   003E           00152         MOVWF   COUNTER
                      00153 #ifdef  EMULATED
                      00154         movlw   0x00            ; make sure both are outputs
                      00155         tris    I2C_PORT
                      00156 #endif
                      00157 
                      00158 
                      00159 ;************  Clock out data (control, address, or data) byte  ************
                      00160 ;***************************************************************************
002E                  00161 OUTPUT_BYTE
002E   04E6           00162         BCF     I2C_PORT,SCL  ; Set clock low during data set-up
002F   037D           00163         RLF     EEBYTE, F     ; Rotate left, high order bit into carry bit
0030   04C6           00164         BCF     I2C_PORT,SDA  ; Set data low, if rotated carry bit is
0031   0603           00165         SKPNC                 ;   a '1', then:
0032   05C6           00166         BSF     I2C_PORT,SDA  ; reset data pin to a one, otherwise leave low
0033   0000           00167         NOP
0034   05E6           00168         BSF     I2C_PORT,SCL  ; clock data into EEPROM
0035   02FE           00169         DECFSZ  COUNTER, F    ; Repeat until entire byte is sent
0036   0A2E           00170         GOTO    OUTPUT_BYTE
0037   0000           00171         NOP
                      00172 
                      00173 ;**************************  Acknowledge Check *****************************
                      00174 ;***************************************************************************
0038   04E6           00175         BCF     I2C_PORT,SCL  ; Set SCL low, 0.5us < ack valid < 3us
0039   0000           00176         NOP
003A   05C6           00177         BSF     I2C_PORT,SDA
                      00178 #ifdef  EMULATED
                      00179         movlw   (0x01 << SDA)   ; make SDA an input
                      00180         tris    I2C_PORT
                      00181 #endif
003B   0A3C           00182         GOTO    $+1             ; May be necessary for SCL Tlow  at low voltage,
003C   05E6           00183         BSF     I2C_PORT,SCL  ; Raise SCL, EEPROM acknowledge still valid
003D   06C6           00184         BTFSC   I2C_PORT,SDA  ; Check SDA for acknowledge (low)
003E   04FA           00185         BCF     PC_OFFSET,EE_OK ; If SDA not low (no ack), set error flag
003F   04E6           00186         BCF     I2C_PORT,SCL    ; Lower SCL, EEPROM release bus
0040   07FA           00187         BTFSS   PC_OFFSET,EE_OK ; If no error continue, else stop bit
0041   0A69           00188         GOTO    STOP_BIT
                      00189 #ifdef  EMULATED
                      00190         movlw   0x00            ; SDA back to an output
                      00191         tris    I2C_PORT
                      00192 #endif
                      00193 
                      00194 
MPASM 03.00 Released         PIC12I2C.ASM   4-19-2002  17:00:20         PAGE  6
PIC with Flash EE data memory Interface

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00195 ;*****  Set up program counter offset, based on EEPROM operating mode  *****
                      00196 ;***************************************************************************
0042   021A           00197         MOVF    PC_OFFSET,W
0043   0E0F           00198         ANDLW   B'00001111'
0044   01E2           00199         ADDWF   PCL, F
0045   0A4C           00200         GOTO    INIT_ADDRESS      ;PC offset=0, write control done, send address
0046   0A4F           00201         GOTO    INIT_WRITE_DATA   ;PC offset=1, write address done, send data
0047   0A69           00202         GOTO    STOP_BIT          ;PC offset=2, write done, send stop bit
0048   0A4C           00203         GOTO    INIT_ADDRESS      ;PC offset=3, write control done, send address
0049   0A52           00204         GOTO    INIT_READ_CONTROL ;PC offset=4, send read control
004A   0A58           00205         GOTO    READ_BIT_COUNTER  ;PC offset=5, set counter and read byte
004B   0A69           00206         GOTO    STOP_BIT          ;PC offset=6, random read done, send stop
                      00207 
                      00208 
                      00209 ;**********  Initalize EEPROM data (address, data, or control) bytes  ******
                      00210 ;***************************************************************************
004C                  00211 INIT_ADDRESS
004C   02BA           00212         INCF    PC_OFFSET, F ; Increment PC offset to 2 (write) or to 4 (read)
004D   021B           00213         MOVF    EEADDR,W     ; Put EEPROM address in W, ready to send to EEPROM
004E   0A2B           00214         GOTO    PREP_TRANSFER_BYTE
                      00215 
                      00216 
004F                  00217 INIT_WRITE_DATA
004F   02BA           00218         INCF    PC_OFFSET, F ; Increment PC offset to go to STOP_BIT next
0050   021C           00219         MOVF    EEDATA,W     ; Put EEPROM data in W, ready to send to EEPROM
0051   0A2B           00220         GOTO    PREP_TRANSFER_BYTE
                      00221 
0052                  00222 INIT_READ_CONTROL
0052   05E6           00223         BSF     I2C_PORT,SCL ; Raise SCL
0053   0000           00224         nop
0054   05C6           00225         BSF     I2C_PORT,SDA ; raise SDA
0055   02BA           00226         INCF    PC_OFFSET, F ; Increment PC offset to go to READ_BIT_COUNTER next
0056   0CA1           00227         MOVLW   B'10100001'  ; Set up read control byte, ready to send to EEPROM
0057   0A2A           00228         GOTO    START_BIT    ;   bit 0 = '1' for read operation
                      00229 
                      00230 
                      00231 ;**************************  Read EEPROM data  *****************************
                      00232 ;***************************************************************************
0058                  00233 READ_BIT_COUNTER
0058   05C6           00234         BSF     I2C_PORT,SDA
0059   0000           00235         NOP
005A   05E6           00236         BSF     I2C_PORT,SCL ; set data bit to 1 so we're not pulling bus down.
005B   0C08           00237         MOVLW   .8           ; Set counter so 8 bits will be read into EEDATA
005C   003E           00238         MOVWF   COUNTER
                      00239 #ifdef  EMULATED
                      00240         movlw   (0x01 << SDA)
                      00241         tris    I2C_PORT
                      00242 #endif
                      00243 
005D                  00244 READ_BYTE
005D   05E6           00245         BSF     I2C_PORT,SCL ; Raise SCL, SDA valid.  SDA still input from ack
005E   0503           00246         SETC                 ; Assume bit to be read = 1
005F   07C6           00247         BTFSS   I2C_PORT,SDA ; Check if SDA = 1
MPASM 03.00 Released         PIC12I2C.ASM   4-19-2002  17:00:20         PAGE  7
PIC with Flash EE data memory Interface

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0060   0403           00248         CLRC                 ; if SDA not = 1 then clear carry bit
0061   037C           00249         RLF     EEDATA, F    ; rotate carry bit (=SDA) into EEDATA;
0062   04E6           00250         BCF     I2C_PORT,SCL ; Lower SCL
0063   05C6           00251         BSF     I2C_PORT,SDA ; reset SDA
0064   02FE           00252         DECFSZ  COUNTER, F   ; Decrement counter
0065   0A5D           00253         GOTO    READ_BYTE    ; Read next bit if not finished reading byte
                      00254 
0066   05E6           00255         BSF     I2C_PORT,SCL
0067   0000           00256         NOP
0068   04E6           00257         BCF     I2C_PORT,SCL
                      00258 ;******************  Generate a STOP bit and RETURN  ***********************
                      00259 ;***************************************************************************
0069                  00260 STOP_BIT
                      00261 #ifdef  EMULATED
                      00262         movlw   0x00    ; set SDA as output
                      00263         tris    I2C_PORT
                      00264 #endif
0069   04C6           00265         BCF     I2C_PORT,SDA ; SDA=0, on TRIS, to prepare for transition to '1' 
006A   05E6           00266         BSF     I2C_PORT,SCL ; SCL = 1 to prepare for STOP bit
006B   0A6C           00267         GOTO    $+1          ; 4 NOPs neccessary for I2C spec Tsu:sto = 4.7us                  
006C   0A6D           00268         GOTO    $+1
006D   05C6           00269         BSF     I2C_PORT,SDA ; Stop bit, SDA transition to '1' while SCL high
                      00270     
006E   07FA           00271         BTFSS   PC_OFFSET,EE_OK ; Check for error
006F   0800           00272         RETLW   NO              ; if error, send back NO 
0070   0801           00273         RETLW   OK              ; if no error, send back OK
                      00274 
                      00275 ;Note: SDA and SCL still being driven by master, both set to outputs.
                      00276 ;****************************************************************************
                      00277 ;************************  End EEPROM Subroutines  **************************
                      00278 
                      00068         
                      00069         END
MPASM 03.00 Released         PIC12I2C.ASM   4-19-2002  17:00:20         PAGE  8
PIC with Flash EE data memory Interface

SYMBOL TABLE
  LABEL                             VALUE 

C                                 00000000
COUNTER                           0000001E
DC                                00000001
EEADDR                            0000001B
EEBYTE                            0000001D
EEDATA                            0000001C
EE_OK                             00000007
F                                 00000001
FSR                               00000004
GPIO                              00000006
GPWUF                             00000007
I2C_PORT                          00000006
INDF                              00000000
INIT_ADDRESS                      0000004C
INIT_READ_CONTROL                 00000052
INIT_WRITE_CONTROL                00000028
INIT_WRITE_DATA                   0000004F
NO                                00000000
NOT_GPPU                          00000006
NOT_GPWU                          00000007
NOT_PD                            00000003
NOT_TO                            00000004
OK                                00000001
OSCCAL                            00000005
OUTPUT_BYTE                       0000002E
PA0                               00000005
PCL                               00000002
PC_OFFSET                         0000001A
PREP_TRANSFER_BYTE                0000002B
PS0                               00000000
PS1                               00000001
PS2                               00000002
PSA                               00000003
READ_BIT_COUNTER                  00000058
READ_BYTE                         0000005D
READ_CURRENT                      00000022
READ_RANDOM                       00000027
SCL                               00000007
SDA                               00000006
START_BIT                         0000002A
STATUS                            00000003
STOP_BIT                          00000069
T0CS                              00000005
T0SE                              00000004
TMR0                              00000001
W                                 00000000
WRITE_BYTE                        00000025
Z                                 00000002
_CP_OFF                           00000FFF
_CP_ON                            00000FF7
_ExtRC_OSC                        00000FFF
_IntRC_OSC                        00000FFE
_LP_OSC                           00000FFC
MPASM 03.00 Released         PIC12I2C.ASM   4-19-2002  17:00:20         PAGE  9
PIC with Flash EE data memory Interface

SYMBOL TABLE
  LABEL                             VALUE 

_MCLRE_OFF                        00000FEF
_MCLRE_ON                         00000FFF
_WDT_OFF                          00000FFB
_WDT_ON                           00000FFF
_XT_OSC                           00000FFD
__12CE518                         00000001
count                             00000011
loop                              00000005
loop1                             00000018
result                            00000010
serout                            00000016
start                             00000001
wait1                             0000000A
wait2                             00000012


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X---------------

All other memory blocks unused.

Program Memory Words Used:   113
Program Memory Words Free:   399


Errors   :     0
Warnings :     1 reported,     0 suppressed
Messages :     0 reported,     0 suppressed



⌨️ 快捷键说明

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