CCS PCH C Compiler, Version 5.048, 26145               28-Mar-23 12:40

               Filename:   C:\Users\soac-gj2\Desktop\i2c multi master\proteus\PIC18F2525_1\Debug.lst

               ROM used:   658 bytes (1%)
                           Largest free fragment is 48494
               RAM used:   9 (0%) at main() level
                           13 (0%) worst case
               Stack used: 2 locations
               Stack size: 31

*
0000:  GOTO   01CA
.................... #import(file="main.o") 
....................  
.................... #include <main.h> 
.................... #include <18F2525.h> 
.................... //////////// Standard Header file for the PIC18F2525 device //////////////// 
.................... /////////////////////////////////////////////////////////////////////////// 
.................... ////        (C) Copyright 1996, 2014 Custom Computer Services          //// 
.................... //// This source code may only be used by licensed users of the CCS C  //// 
.................... //// compiler.  This source code may only be distributed to other      //// 
.................... //// licensed users of the CCS C compiler.  No other use, reproduction //// 
.................... //// or distribution is permitted without written permission.          //// 
.................... //// Derivative programs created using this software in object code    //// 
.................... //// form are not restricted in any way.                               //// 
.................... /////////////////////////////////////////////////////////////////////////// 
.................... #device PIC18F2525 
0004:  DATA 63,6C
0006:  DATA 65,61
0008:  DATA 72,69
000A:  DATA 6E,67
000C:  DATA 20,6D
000E:  DATA 65,6D
0010:  DATA 6F,72
0012:  DATA 79,0A
0014:  DATA 0D,00
0016:  DATA 77,72
0018:  DATA 69,74
001A:  DATA 74,65
001C:  DATA 6E,20
001E:  DATA 25,58
0020:  DATA 20,74
0022:  DATA 6F,20
0024:  DATA 25,58
0026:  DATA 0A,0D
0028:  DATA 00,00
*
0032:  TBLRD*+
0034:  MOVF   FF5,F
0036:  BZ    0052
0038:  MOVFF  FF6,08
003C:  MOVFF  FF7,09
0040:  MOVF   FF5,W
0042:  BTFSS  F9E.4
0044:  BRA    0042
0046:  MOVWF  FAD
0048:  MOVFF  08,FF6
004C:  MOVFF  09,FF7
0050:  BRA    0032
0052:  GOTO   0208 (RETURN)
*
0168:  TBLRD*+
016A:  MOVFF  FF6,0A
016E:  MOVFF  FF7,0B
0172:  MOVF   FF5,W
0174:  BTFSS  F9E.4
0176:  BRA    0174
0178:  MOVWF  FAD
017A:  MOVFF  0A,FF6
017E:  MOVFF  0B,FF7
0182:  DECFSZ 09,F
0184:  BRA    0168
0186:  RETURN 0
0188:  BTFSC  0A.7
018A:  BRA    01AC
018C:  MOVLW  0F
018E:  MOVWF  00
0190:  SWAPF  09,W
0192:  ANDWF  00,F
0194:  MOVLW  0A
0196:  SUBWF  00,W
0198:  BC    01A0
019A:  MOVLW  30
019C:  ADDWF  00,F
019E:  BRA    01A4
01A0:  MOVF   0A,W
01A2:  ADDWF  00,F
01A4:  MOVF   00,W
01A6:  BTFSS  F9E.4
01A8:  BRA    01A6
01AA:  MOVWF  FAD
01AC:  MOVLW  0F
01AE:  ANDWF  09,F
01B0:  MOVLW  0A
01B2:  SUBWF  09,W
01B4:  BC    01BA
01B6:  MOVLW  30
01B8:  BRA    01BE
01BA:  BCF    0A.7
01BC:  MOVF   0A,W
01BE:  ADDWF  09,F
01C0:  MOVF   09,W
01C2:  BTFSS  F9E.4
01C4:  BRA    01C2
01C6:  MOVWF  FAD
01C8:  RETURN 0
....................  
.................... #list 
....................  
.................... #device ADC=10 
....................  
.................... #FUSES FCMEN                 	//Fail-safe clock monitor enabled 
.................... #FUSES IESO                  	//Internal External Switch Over mode enabled 
.................... #FUSES NOPUT                 	//No Power Up Timer 
.................... #FUSES BROWNOUT              	//Reset when brownout detected 
.................... #FUSES BORV27                	//Brownout reset at 2.7V 
.................... #FUSES NOPBADEN              	//PORTB pins are configured as digital I/O on RESET 
.................... #FUSES LPT1OSC               	//Timer1 configured for low-power operation 
.................... #FUSES NOMCLR                	//Master Clear pin used for I/O 
.................... #FUSES STVREN                	//Stack full/underflow will cause reset 
.................... #FUSES NOLVP                 	//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
.................... #FUSES NOXINST               	//Extended set extension and Indexed Addressing mode disabled (Legacy mode) 
.................... #FUSES NOPROTECT             	//Code not protected from reading 
.................... #FUSES NOCPB                 	//No Boot Block code protection 
.................... #FUSES NOCPD                 	//No EE protection 
.................... #FUSES NOWRT                 	//Program memory not write protected 
.................... #FUSES NOWRTC                	//Configuration registers not write protected 
.................... #FUSES NOWRTB                	//Boot block not write protected 
.................... #FUSES NOWRTD                	//Data EEPROM not write protected 
.................... #FUSES NOEBTR                	//Memory not protected from table reads 
.................... #FUSES NOEBTRB               	//Boot block not protected from table reads 
....................  
.................... #use delay(internal=8MHz) 
*
0142:  CLRF   FEA
0144:  MOVLW  09
0146:  MOVWF  FE9
0148:  MOVF   FEF,W
014A:  BZ    0166
014C:  MOVLW  02
014E:  MOVWF  01
0150:  CLRF   00
0152:  DECFSZ 00,F
0154:  BRA    0152
0156:  DECFSZ 01,F
0158:  BRA    0150
015A:  MOVLW  97
015C:  MOVWF  00
015E:  DECFSZ 00,F
0160:  BRA    015E
0162:  DECFSZ FEF,F
0164:  BRA    014C
0166:  RETURN 0
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1,errors) 
.................... #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3) 
....................  
.................... #define LED PIN_A7 
.................... #define DELAY 500 
....................  
....................  
....................  
....................  
.................... #include <2402.C> 
.................... /////////////////////////////////////////////////////////////////////////// 
.................... ////   Library for a MicroChip 24LC02B configured for a x8 org         //// 
.................... ////                                                                   //// 
.................... ////   init_ext_eeprom();    Call before the other functions are used  //// 
.................... ////                                                                   //// 
.................... ////   write_ext_eeprom(a, d);  Write the byte d to the address a      //// 
.................... ////                                                                   //// 
.................... ////   d = read_ext_eeprom(a);  Read the byte d from the address a     //// 
.................... ////                                                                   //// 
.................... ////   b = ext_eeprom_ready();  Returns TRUE if the eeprom is ready    //// 
.................... ////                            to receive opcodes                     //// 
.................... ////                                                                   //// 
.................... ////   The main program may define EEPROM_SDA                          //// 
.................... ////   and EEPROM_SCL to override the defaults below.                  //// 
.................... ////                                                                   //// 
.................... ////                            Pin Layout                             //// 
.................... ////   -----------------------------------------------------------     //// 
.................... ////   |                                                         |     //// 
.................... ////   | 1: NC   Not Connected | 8: VCC   +5V                    |     //// 
.................... ////   |                       |                                 |     //// 
.................... ////   | 2: NC   Not Connected | 7: WP    GND                    |     //// 
.................... ////   |                       |                                 |     //// 
.................... ////   | 3: NC   Not Connected | 6: SCL   EEPROM_SCL and Pull-Up |     //// 
.................... ////   |                       |                                 |     //// 
.................... ////   | 4: VSS  GND           | 5: SDA   EEPROM_SDA and Pull-Up |     //// 
.................... ////   -----------------------------------------------------------     //// 
.................... ////                                                                   //// 
.................... /////////////////////////////////////////////////////////////////////////// 
.................... ////        (C) Copyright 1996, 2003 Custom Computer Services          //// 
.................... //// This source code may only be used by licensed users of the CCS C  //// 
.................... //// compiler.  This source code may only be distributed to other      //// 
.................... //// licensed users of the CCS C compiler.  No other use, reproduction //// 
.................... //// or distribution is permitted without written permission.          //// 
.................... //// Derivative programs created using this software in object code    //// 
.................... //// form are not restricted in any way.                               //// 
.................... /////////////////////////////////////////////////////////////////////////// 
.................... #ifndef EEPROM_SDA 
....................  
.................... #define EEPROM_SDA  PIN_C4 
.................... #define EEPROM_SCL  PIN_C3 
....................  
.................... #endif 
....................  
....................  
.................... #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL) 
*
0056:  MOVLW  08
0058:  MOVWF  01
005A:  BRA    005C
005C:  BCF    F8B.3
005E:  BCF    F94.3
0060:  BRA    0062
0062:  NOP   
0064:  RLCF   0C,F
0066:  BCF    F8B.4
0068:  BTFSC  FD8.0
006A:  BSF    F94.4
006C:  BTFSS  FD8.0
006E:  BCF    F94.4
0070:  BSF    F94.3
0072:  BTFSS  F82.3
0074:  BRA    0072
0076:  DECFSZ 01,F
0078:  BRA    005A
007A:  BRA    007C
007C:  BCF    F8B.3
007E:  BCF    F94.3
0080:  NOP   
0082:  BSF    F94.4
0084:  BRA    0086
0086:  NOP   
0088:  BRA    008A
008A:  NOP   
008C:  BSF    F94.3
008E:  BTFSS  F82.3
0090:  BRA    008E
0092:  CLRF   01
0094:  BRA    0096
0096:  NOP   
0098:  BTFSC  F82.4
009A:  BSF    01.0
009C:  BCF    F8B.3
009E:  BCF    F94.3
00A0:  BCF    F8B.4
00A2:  BCF    F94.4
00A4:  RETURN 0
....................  
.................... #define EEPROM_ADDRESS BYTE 
.................... #define EEPROM_SIZE    256 
....................  
.................... void init_ext_eeprom() { 
....................    output_float(EEPROM_SCL); 
*
002A:  BSF    F94.3
....................    output_float(EEPROM_SDA); 
002C:  BSF    F94.4
002E:  GOTO   01FA (RETURN)
.................... } 
....................  
.................... BOOLEAN ext_eeprom_ready() { 
....................    int1 ack; 
....................    i2c_start();            // If the write command is acknowledged, 
*
00A6:  BSF    F94.4
00A8:  BRA    00AA
00AA:  BSF    F94.3
00AC:  BRA    00AE
00AE:  NOP   
00B0:  BCF    F8B.4
00B2:  BCF    F94.4
00B4:  BRA    00B6
00B6:  BCF    F8B.3
00B8:  BCF    F94.3
....................    ack = i2c_write(0xa0);  // then the device is ready. 
00BA:  MOVLW  A0
00BC:  MOVWF  0C
00BE:  RCALL  0056
00C0:  MOVF   01,W
00C2:  BCF    0B.0
00C4:  BTFSC  01.0
00C6:  BSF    0B.0
....................    i2c_stop(); 
00C8:  BCF    F94.4
00CA:  NOP   
00CC:  BSF    F94.3
00CE:  BTFSS  F82.3
00D0:  BRA    00CE
00D2:  BRA    00D4
00D4:  BRA    00D6
00D6:  NOP   
00D8:  BSF    F94.4
00DA:  BRA    00DC
....................    return !ack; 
00DC:  MOVLW  00
00DE:  BTFSS  0B.0
00E0:  MOVLW  01
00E2:  MOVWF  01
00E4:  GOTO   00EA (RETURN)
.................... } 
....................  
.................... void write_ext_eeprom(BYTE address, BYTE data) { 
....................    while(!ext_eeprom_ready()); 
00E8:  BRA    00A6
00EA:  MOVF   01,F
00EC:  BZ    00E8
....................    i2c_start(); 
00EE:  BSF    F94.4
00F0:  BRA    00F2
00F2:  BSF    F94.3
00F4:  BRA    00F6
00F6:  NOP   
00F8:  BCF    F8B.4
00FA:  BCF    F94.4
00FC:  BRA    00FE
00FE:  BCF    F8B.3
0100:  BCF    F94.3
....................    i2c_write(0xa0); 
0102:  MOVLW  A0
0104:  MOVWF  0C
0106:  RCALL  0056
....................    i2c_write(address); 
0108:  MOVFF  09,0C
010C:  RCALL  0056
....................    i2c_write(data); 
010E:  MOVFF  0A,0C
0112:  RCALL  0056
....................    i2c_stop(); 
0114:  BCF    F94.4
0116:  NOP   
0118:  BSF    F94.3
011A:  BTFSS  F82.3
011C:  BRA    011A
011E:  BRA    0120
0120:  BRA    0122
0122:  NOP   
0124:  BSF    F94.4
0126:  BRA    0128
0128:  RETURN 0
.................... } 
....................  
....................  
.................... BYTE read_ext_eeprom(BYTE address) { 
....................    BYTE data; 
....................  
....................    while(!ext_eeprom_ready()); 
....................    i2c_start(); 
....................    i2c_write(0xa0); 
....................    i2c_write(address); 
....................    i2c_start(); 
....................    i2c_write(0xa1); 
....................    data=i2c_read(0); 
....................    i2c_stop(); 
....................    return(data); 
.................... } 
....................  
....................  
.................... void clear_mem (void); 
....................  
.................... unsigned int q=0; 
.................... void main() 
*
01CA:  CLRF   FF8
01CC:  BCF    FD0.7
01CE:  MOVLW  70
01D0:  MOVWF  FD3
01D2:  CLRF   F9B
01D4:  MOVF   FD3,W
01D6:  CLRF   04
01D8:  BCF    FB8.3
01DA:  MOVLW  0C
01DC:  MOVWF  FAF
01DE:  MOVLW  A2
01E0:  MOVWF  FAC
01E2:  MOVLW  90
01E4:  MOVWF  FAB
01E6:  CLRF   05
01E8:  CLRF   07
01EA:  CLRF   06
01EC:  MOVF   FC1,W
01EE:  ANDLW  C0
01F0:  IORLW  0F
01F2:  MOVWF  FC1
01F4:  MOVLW  07
01F6:  MOVWF  FB4
.................... { 
.................... 	init_ext_eeprom(); 
01F8:  BRA    002A
.................... 	output_low(pin_c0);			// ensure the other chip is waiting 
01FA:  BCF    F94.0
01FC:  BCF    F8B.0
.................... 	printf("clearing memory\n\r"); 
01FE:  MOVLW  04
0200:  MOVWF  FF6
0202:  MOVLW  00
0204:  MOVWF  FF7
0206:  BRA    0032
.................... 	clear_mem(); 
0208:  BRA    012A
.................... 	q=0; 
020A:  CLRF   05
.................... 	output_high(Pin_C0);		// let chip 2 know memory cleared 
020C:  BCF    F94.0
020E:  BSF    F8B.0
.................... 	 
.................... 	while(TRUE) 
.................... 	{ 
....................  
.................... 		//Example blinking LED program 
.................... 		output_low(LED); 
0210:  BCF    F92.7
0212:  BCF    F89.7
.................... 		delay_ms(DELAY); 
0214:  MOVLW  02
0216:  MOVWF  08
0218:  MOVLW  FA
021A:  MOVWF  09
021C:  RCALL  0142
021E:  DECFSZ 08,F
0220:  BRA    0218
.................... 		output_high(LED); 
0222:  BCF    F92.7
0224:  BSF    F89.7
.................... 		delay_ms(DELAY); 
0226:  MOVLW  02
0228:  MOVWF  08
022A:  MOVLW  FA
022C:  MOVWF  09
022E:  RCALL  0142
0230:  DECFSZ 08,F
0232:  BRA    022A
....................  
.................... 		//TODO: User Code 
....................  
.................... 		write_ext_eeprom(q,255-q); 
0234:  MOVLW  FF
0236:  BSF    FD8.0
0238:  SUBFWB 05,W
023A:  MOVWF  08
023C:  MOVFF  05,09
0240:  MOVWF  0A
0242:  RCALL  00E8
.................... 		printf("written %X to %X\n\r", 255-q, q); 
0244:  MOVLW  FF
0246:  BSF    FD8.0
0248:  SUBFWB 05,W
024A:  MOVWF  08
024C:  MOVLW  16
024E:  MOVWF  FF6
0250:  MOVLW  00
0252:  MOVWF  FF7
0254:  MOVLW  08
0256:  MOVWF  09
0258:  RCALL  0168
025A:  MOVFF  08,09
025E:  MOVLW  37
0260:  MOVWF  0A
0262:  RCALL  0188
0264:  MOVLW  20
0266:  MOVWF  FF6
0268:  MOVLW  00
026A:  MOVWF  FF7
026C:  MOVLW  04
026E:  MOVWF  09
0270:  RCALL  0168
0272:  MOVFF  05,09
0276:  MOVLW  37
0278:  MOVWF  0A
027A:  RCALL  0188
027C:  MOVLW  0A
027E:  BTFSS  F9E.4
0280:  BRA    027E
0282:  MOVWF  FAD
0284:  MOVLW  0D
0286:  BTFSS  F9E.4
0288:  BRA    0286
028A:  MOVWF  FAD
.................... 		q++; 
028C:  INCF   05,F
028E:  BRA    0210
.................... 	} 
....................  
.................... } 
....................  
0290:  SLEEP 
.................... void clear_mem (void) 
.................... 	{ 
.................... 		for (q=0;q<=250;q++) 
*
012A:  CLRF   05
012C:  MOVF   05,W
012E:  SUBLW  FA
0130:  BNC   013E
.................... 			{ 
.................... 					write_ext_eeprom(q,0xff); 
0132:  MOVFF  05,09
0136:  SETF   0A
0138:  RCALL  00E8
013A:  INCF   05,F
013C:  BRA    012C
.................... 			} 
013E:  GOTO   020A (RETURN)
.................... 	} 
....................  

Configuration Fuses:
   Word  1: C800   INTRC_IO FCMEN IESO
   Word  2: 1E17   NOPUT BROWNOUT BORV27 NOWDT WDT32768
   Word  3: 0500   CCP2C1 NOPBADEN LPT1OSC NOMCLR
   Word  4: 0081   STVREN NOLVP NOXINST NODEBUG
   Word  5: C00F   NOPROTECT NOCPB NOCPD
   Word  6: E00F   NOWRT NOWRTC NOWRTB NOWRTD
   Word  7: 400F   NOEBTR NOEBTRB
