CCS PCM C Compiler, Version 4.106, 47914               01-II-14 20:13

               Filename: Z:\home\kaklik\svn\svnMLAB\Designs\Measuring_instruments\RMDS01C\SW\PIC887\main.lst

               ROM used: 786 words (10%)
                         Largest free fragment is 2048
               RAM used: 67 (18%) at main() level
                         80 (22%) worst case
               Stack:    2 worst case (1 in main + 1 for interrupts)

*
0000:  MOVLW  02
0001:  MOVWF  0A
0002:  GOTO   21C
0003:  NOP
0004:  MOVWF  7F
0005:  SWAPF  03,W
0006:  CLRF   03
0007:  MOVWF  21
0008:  MOVF   0A,W
0009:  MOVWF  20
000A:  CLRF   0A
000B:  MOVF   04,W
000C:  MOVWF  22
000D:  MOVF   77,W
000E:  MOVWF  23
000F:  MOVF   78,W
0010:  MOVWF  24
0011:  MOVF   79,W
0012:  MOVWF  25
0013:  MOVF   7A,W
0014:  MOVWF  26
0015:  BCF    03.7
0016:  BCF    03.5
0017:  MOVLW  8C
0018:  MOVWF  04
0019:  BTFSS  00.1
001A:  GOTO   01D
001B:  BTFSC  0C.1
001C:  GOTO   034
001D:  MOVLW  8C
001E:  MOVWF  04
001F:  BTFSS  00.3
0020:  GOTO   023
0021:  BTFSC  0C.3
0022:  GOTO   037
0023:  MOVF   22,W
0024:  MOVWF  04
0025:  MOVF   23,W
0026:  MOVWF  77
0027:  MOVF   24,W
0028:  MOVWF  78
0029:  MOVF   25,W
002A:  MOVWF  79
002B:  MOVF   26,W
002C:  MOVWF  7A
002D:  MOVF   20,W
002E:  MOVWF  0A
002F:  SWAPF  21,W
0030:  MOVWF  03
0031:  SWAPF  7F,F
0032:  SWAPF  7F,W
0033:  RETFIE
0034:  BCF    0A.3
0035:  BCF    0A.4
0036:  GOTO   0B0
0037:  BCF    0A.3
0038:  BCF    0A.4
0039:  GOTO   066
.................... #include "main.h" 
.................... #include <16F887.h> 
.................... //////// Standard Header file for the PIC16F887 device //////////////// 
.................... #device PIC16F887 
.................... #list 
....................  
.................... #device adc=8 
....................  
.................... #FUSES NOWDT                    //No Watch Dog Timer 
.................... #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) 
.................... #FUSES NOPUT                    //No Power Up Timer 
.................... #FUSES MCLR                     //Master Clear pin enabled 
.................... #FUSES NOPROTECT                //Code not protected from reading 
.................... #FUSES NOCPD                    //No EE protection 
.................... #FUSES NOBROWNOUT               //No brownout reset 
.................... #FUSES IESO                     //Internal External Switch Over mode enabled 
.................... #FUSES FCMEN                    //Fail-safe clock monitor enabled 
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
.................... #FUSES NODEBUG                  //No Debug mode for ICD 
.................... #FUSES NOWRT                    //Program memory not write protected 
.................... #FUSES BORV40                   //Brownout reset at 4.0V 
....................  
.................... #use delay(clock=20000000) 
*
00DC:  MOVLW  5F
00DD:  MOVWF  04
00DE:  BCF    03.7
00DF:  MOVF   00,W
00E0:  BTFSC  03.2
00E1:  GOTO   0EF
00E2:  MOVLW  06
00E3:  MOVWF  78
00E4:  CLRF   77
00E5:  DECFSZ 77,F
00E6:  GOTO   0E5
00E7:  DECFSZ 78,F
00E8:  GOTO   0E4
00E9:  MOVLW  7B
00EA:  MOVWF  77
00EB:  DECFSZ 77,F
00EC:  GOTO   0EB
00ED:  DECFSZ 00,F
00EE:  GOTO   0E2
00EF:  RETURN
*
013A:  MOVLW  03
013B:  SUBWF  5F,F
013C:  BTFSS  03.0
013D:  GOTO   148
013E:  MOVLW  5F
013F:  MOVWF  04
0140:  BCF    03.7
0141:  MOVF   00,W
0142:  BTFSC  03.2
0143:  GOTO   148
0144:  GOTO   146
0145:  GOTO   146
0146:  DECFSZ 00,F
0147:  GOTO   145
0148:  BCF    0A.3
0149:  BCF    0A.4
014A:  GOTO   2C1 (RETURN)
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors) 
....................  
.................... //NOTE: Must declare MASTER before SLAVE, i2c_isr_state() returns 0  
.................... //      when MASTER is the most recent #use i2c  
.................... //#use i2c(MASTER, sda=PIN_C1, scl=PIN_C0, stream=I2CM)  
.................... #use i2c(SLAVE, Fast, sda=PIN_C4, scl=PIN_C3, force_hw, address=0xA0)  
*
00A1:  MOVF   6A,W
00A2:  MOVWF  13
00A3:  BSF    14.4
00A4:  BCF    0C.3
00A5:  BSF    03.5
00A6:  BTFSC  14.0
00A7:  GOTO   0A6
00A8:  CLRF   78
00A9:  BCF    03.5
00AA:  BTFSC  14.4
00AB:  INCF   78,F
....................  
....................  
....................  
....................  
.................... #define LED PIN_E1   
.................... #define CE  PIN_E2 
....................  
.................... int16 count; 
....................  
.................... int8 rcv_buf[0x10];   // I2C receive buffer    
.................... int8 snd_buf[0x10];   // I2C send buffer      
....................  
.................... int8 buffer[0x10];   // I2C buffer      
.................... int8 address; 
....................  
.................... const char cmd[40]={0xB5, 0x62, 0x06, 0x31, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x80, 0x84, 0x1E, 0x00, 0xE0, 0xC8, 0x10, 0x00, 0x40, 0x42, 0x0F, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x12, 0x03}; 
....................  
.................... #INT_SSP 
.................... void ssp_interupt () 
.................... { 
....................    BYTE incoming, state; 
....................  
....................    state = i2c_isr_state(); 
*
0066:  BSF    03.5
0067:  BTFSC  14.5
0068:  GOTO   071
0069:  BCF    03.5
006A:  CLRF   5C
006B:  BSF    03.5
006C:  BTFSS  14.2
006D:  GOTO   071
006E:  BCF    03.5
006F:  BSF    5C.7
0070:  BSF    03.5
0071:  BCF    03.5
0072:  MOVF   5C,W
0073:  INCF   5C,F
0074:  MOVWF  68
....................     
....................    if(state < 0x80)                     //Master is sending data 
0075:  MOVF   68,W
0076:  SUBLW  7F
0077:  BTFSS  03.0
0078:  GOTO   095
....................    { 
....................       incoming = i2c_read(); 
0079:  BCF    14.6
007A:  BTFSS  0C.3
007B:  GOTO   07A
007C:  MOVF   13,W
007D:  BSF    14.4
007E:  MOVWF  67
....................       if(state == 1)                     //First received byte is address 
007F:  DECFSZ 68,W
0080:  GOTO   08B
....................       { 
....................          address = incoming; 
0081:  MOVF   67,W
0082:  MOVWF  5B
....................          if (incoming == 2) 
0083:  MOVF   67,W
0084:  SUBLW  02
0085:  BTFSS  03.2
0086:  GOTO   08B
....................          { 
....................             buffer[0]=make8(count,0); 
0087:  MOVF   29,W
0088:  MOVWF  4B
....................             buffer[1]=make8(count,1); 
0089:  MOVF   2A,W
008A:  MOVWF  4C
....................          } 
....................       } 
....................       if(state == 2)                     //Second received byte is data 
008B:  MOVF   68,W
008C:  SUBLW  02
008D:  BTFSS  03.2
008E:  GOTO   095
....................          buffer[address] = incoming; 
008F:  MOVLW  4B
0090:  ADDWF  5B,W
0091:  MOVWF  04
0092:  BCF    03.7
0093:  MOVF   67,W
0094:  MOVWF  00
....................           
....................        
....................    } 
....................    if(state == 0x80)                     //Master is requesting data 
0095:  MOVF   68,W
0096:  SUBLW  80
0097:  BTFSS  03.2
0098:  GOTO   0AC
....................    { 
....................       i2c_write(buffer[address]); 
0099:  MOVLW  4B
009A:  ADDWF  5B,W
009B:  MOVWF  04
009C:  BCF    03.7
009D:  MOVF   00,W
009E:  MOVWF  69
009F:  MOVF   69,W
00A0:  MOVWF  6A
....................    } 
.................... } 
....................  
....................  
*
00AC:  BCF    0C.3
00AD:  BCF    0A.3
00AE:  BCF    0A.4
00AF:  GOTO   023
.................... #int_TIMER2 // every 10 ms 
.................... void  TIMER2_isr(void)  
.................... { 
....................    output_low(CE); 
00B0:  BSF    03.5
00B1:  BCF    09.2
00B2:  BCF    03.5
00B3:  BCF    09.2
....................    count=get_timer1(); 
00B4:  MOVF   0F,W
00B5:  MOVWF  7A
00B6:  MOVF   0E,W
00B7:  MOVWF  77
00B8:  MOVF   0F,W
00B9:  SUBWF  7A,W
00BA:  BTFSS  03.2
00BB:  GOTO   0B4
00BC:  MOVF   77,W
00BD:  MOVWF  29
00BE:  MOVF   7A,W
00BF:  MOVWF  2A
....................    set_timer1(0); 
00C0:  CLRF   0F
00C1:  CLRF   0E
....................    output_high(CE); 
00C2:  BSF    03.5
00C3:  BCF    09.2
00C4:  BCF    03.5
00C5:  BSF    09.2
.................... } 
....................  
....................   
00C6:  BCF    0C.1
00C7:  BCF    0A.3
00C8:  BCF    0A.4
00C9:  GOTO   023
.................... void main() 
.................... { 
*
021C:  CLRF   04
021D:  BCF    03.7
021E:  MOVLW  1F
021F:  ANDWF  03,F
0220:  BSF    03.5
0221:  BSF    03.6
0222:  BSF    07.3
0223:  MOVLW  08
0224:  BCF    03.6
0225:  MOVWF  19
0226:  MOVLW  02
0227:  MOVWF  1A
0228:  MOVLW  A6
0229:  MOVWF  18
022A:  MOVLW  90
022B:  BCF    03.5
022C:  MOVWF  18
022D:  BSF    28.3
022E:  MOVF   28,W
022F:  BSF    03.5
0230:  MOVWF  07
0231:  BCF    03.5
0232:  BSF    28.4
0233:  MOVF   28,W
0234:  BSF    03.5
0235:  MOVWF  07
0236:  MOVLW  A0
0237:  MOVWF  13
0238:  MOVLW  36
0239:  BCF    03.5
023A:  MOVWF  14
023B:  BSF    03.5
023C:  BSF    03.6
023D:  MOVF   09,W
023E:  ANDLW  C0
023F:  MOVWF  09
0240:  BCF    03.6
0241:  BCF    1F.4
0242:  BCF    1F.5
0243:  MOVLW  00
0244:  BSF    03.6
0245:  MOVWF  08
0246:  BCF    03.5
0247:  CLRF   07
0248:  CLRF   08
0249:  CLRF   09
....................    setup_adc_ports(NO_ANALOGS|VSS_VDD); 
*
0250:  BSF    03.5
0251:  BSF    03.6
0252:  MOVF   09,W
0253:  ANDLW  C0
0254:  MOVWF  09
0255:  BCF    03.6
0256:  BCF    1F.4
0257:  BCF    1F.5
0258:  MOVLW  00
0259:  BSF    03.6
025A:  MOVWF  08
....................    setup_adc(ADC_OFF); 
025B:  BCF    03.5
025C:  BCF    03.6
025D:  BCF    1F.0
.................... //   setup_spi(SPI_SS_DISABLED); 
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 
025E:  BSF    03.5
025F:  MOVF   01,W
0260:  ANDLW  C7
0261:  IORLW  08
0262:  MOVWF  01
.................... //   setup_wdt(WDT_144MS); 
....................    setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); 
0263:  MOVLW  07
0264:  BCF    03.5
0265:  MOVWF  10
....................    setup_timer_2(T2_DIV_BY_16,196,16); 
0266:  MOVLW  78
0267:  MOVWF  78
0268:  IORLW  06
0269:  MOVWF  12
026A:  MOVLW  C4
026B:  BSF    03.5
026C:  MOVWF  12
....................    setup_ccp1(CCP_OFF); 
026D:  BCF    03.5
026E:  BSF    28.2
026F:  MOVF   28,W
0270:  BSF    03.5
0271:  MOVWF  07
0272:  BCF    03.5
0273:  CLRF   17
0274:  BSF    03.5
0275:  CLRF   1B
0276:  CLRF   1C
0277:  MOVLW  01
0278:  MOVWF  1D
....................    setup_comparator(NC_NC_NC_NC); 
0279:  BCF    03.5
027A:  BSF    03.6
027B:  CLRF   07
027C:  CLRF   08
027D:  CLRF   09
....................    setup_vref(FALSE); 
027E:  BSF    03.5
027F:  BCF    03.6
0280:  CLRF   17
....................     
....................    delay_ms(1000); 
0281:  MOVLW  04
0282:  BCF    03.5
0283:  MOVWF  5E
0284:  MOVLW  FA
0285:  MOVWF  5F
0286:  CALL   0DC
0287:  DECFSZ 5E,F
0288:  GOTO   284
....................    int n; 
....................    for (n=0;n<40;n++) 
0289:  CLRF   5D
028A:  MOVF   5D,W
028B:  SUBLW  27
028C:  BTFSS  03.0
028D:  GOTO   295
....................    { 
....................       putc(cmd[n]); 
028E:  MOVF   5D,W
028F:  CALL   03A
0290:  BTFSS  0C.4
0291:  GOTO   290
0292:  MOVWF  19
....................    } 
0293:  INCF   5D,F
0294:  GOTO   28A
....................  
....................    printf("cvak...\r\n"); 
0295:  MOVLW  CA
0296:  BSF    03.6
0297:  MOVWF  0D
0298:  MOVLW  00
0299:  MOVWF  0F
029A:  BCF    03.6
029B:  GOTO   0F0
....................    snd_buf[2]=0x55; 
029C:  MOVLW  55
029D:  MOVWF  3D
....................    snd_buf[3]=0xAA; 
029E:  MOVLW  AA
029F:  MOVWF  3E
....................     
....................    set_timer1(0); 
02A0:  CLRF   0F
02A1:  CLRF   0E
....................    enable_interrupts(INT_SSP);  
02A2:  BSF    03.5
02A3:  BSF    0C.3
.................... //   enable_interrupts(INT_TIMER2); 
....................    enable_interrupts(GLOBAL);     
02A4:  MOVLW  C0
02A5:  BCF    03.5
02A6:  IORWF  0B,F
....................  
....................    while(true) 
....................    { 
....................        
.................... output_high(LED); 
02A7:  BSF    03.5
02A8:  BCF    09.1
02A9:  BCF    03.5
02AA:  BSF    09.1
.................... output_low(LED); 
02AB:  BSF    03.5
02AC:  BCF    09.1
02AD:  BCF    03.5
02AE:  BCF    09.1
....................       set_timer1(0); 
02AF:  CLRF   0F
02B0:  CLRF   0E
....................       output_high(CE); 
02B1:  BSF    03.5
02B2:  BCF    09.2
02B3:  BCF    03.5
02B4:  BSF    09.2
....................       delay_ms(999); 
02B5:  MOVLW  09
02B6:  MOVWF  5E
02B7:  MOVLW  6F
02B8:  MOVWF  5F
02B9:  CALL   0DC
02BA:  DECFSZ 5E,F
02BB:  GOTO   2B7
....................       delay_us(966); 
02BC:  MOVLW  06
02BD:  MOVWF  5E
02BE:  MOVLW  A0
02BF:  MOVWF  5F
02C0:  GOTO   13A
02C1:  DECFSZ 5E,F
02C2:  GOTO   2BE
....................       output_low(CE); 
02C3:  BSF    03.5
02C4:  BCF    09.2
02C5:  BCF    03.5
02C6:  BCF    09.2
....................    count=get_timer1(); 
02C7:  MOVF   0F,W
02C8:  MOVWF  7A
02C9:  MOVF   0E,W
02CA:  MOVWF  77
02CB:  MOVF   0F,W
02CC:  SUBWF  7A,W
02CD:  BTFSS  03.2
02CE:  GOTO   2C7
02CF:  MOVF   77,W
02D0:  MOVWF  29
02D1:  MOVF   7A,W
02D2:  MOVWF  2A
....................     
....................       printf("count: %Lu %X %X %X %X\r\n",count, buffer[0],buffer[1],buffer[2],buffer[3]); 
02D3:  MOVLW  CF
02D4:  BSF    03.6
02D5:  MOVWF  0D
02D6:  MOVLW  00
02D7:  MOVWF  0F
02D8:  BCF    03.0
02D9:  MOVLW  07
02DA:  BCF    03.6
02DB:  MOVWF  5E
02DC:  GOTO   14B
02DD:  MOVLW  10
02DE:  MOVWF  04
02DF:  MOVF   2A,W
02E0:  MOVWF  5F
02E1:  MOVF   29,W
02E2:  MOVWF  5E
02E3:  GOTO   19E
02E4:  MOVLW  20
02E5:  BTFSS  0C.4
02E6:  GOTO   2E5
02E7:  MOVWF  19
02E8:  MOVF   4B,W
02E9:  MOVWF  5E
02EA:  MOVLW  37
02EB:  MOVWF  5F
02EC:  CALL   1F9
02ED:  MOVLW  20
02EE:  BTFSS  0C.4
02EF:  GOTO   2EE
02F0:  MOVWF  19
02F1:  MOVF   4C,W
02F2:  MOVWF  5E
02F3:  MOVLW  37
02F4:  MOVWF  5F
02F5:  CALL   1F9
02F6:  MOVLW  20
02F7:  BTFSS  0C.4
02F8:  GOTO   2F7
02F9:  MOVWF  19
02FA:  MOVF   4D,W
02FB:  MOVWF  5E
02FC:  MOVLW  37
02FD:  MOVWF  5F
02FE:  CALL   1F9
02FF:  MOVLW  20
0300:  BTFSS  0C.4
0301:  GOTO   300
0302:  MOVWF  19
0303:  MOVF   4E,W
0304:  MOVWF  5E
0305:  MOVLW  37
0306:  MOVWF  5F
0307:  CALL   1F9
0308:  MOVLW  0D
0309:  BTFSS  0C.4
030A:  GOTO   309
030B:  MOVWF  19
030C:  MOVLW  0A
030D:  BTFSS  0C.4
030E:  GOTO   30D
030F:  MOVWF  19
....................    } 
0310:  GOTO   2A7
.................... } 
0311:  SLEEP

Configuration Fuses:
   Word  1: 2CF2   HS NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUG
   Word  2: 3FFF   NOWRT BORV40