CCS PCM C Compiler, Version 4.106, 47914               04-II-14 15:49

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

               ROM used: 421 words (5%)
                         Largest free fragment is 2048
               RAM used: 31 (8%) at main() level
                         37 (10%) worst case
               Stack:    3 worst case (1 in main + 2 for interrupts)

*
0000:  MOVLW  01
0001:  MOVWF  0A
0002:  GOTO   111
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.3
001A:  GOTO   01D
001B:  BTFSC  0C.3
001C:  GOTO   02E
001D:  MOVF   22,W
001E:  MOVWF  04
001F:  MOVF   23,W
0020:  MOVWF  77
0021:  MOVF   24,W
0022:  MOVWF  78
0023:  MOVF   25,W
0024:  MOVWF  79
0025:  MOVF   26,W
0026:  MOVWF  7A
0027:  MOVF   20,W
0028:  MOVWF  0A
0029:  SWAPF  21,W
002A:  MOVWF  03
002B:  SWAPF  7F,F
002C:  SWAPF  7F,W
002D:  RETFIE
002E:  BCF    0A.3
002F:  BCF    0A.4
0030:  GOTO   03E
.................... #define ID "$Id: main.c 2916 2013-04-14 17:42:03Z kaklik $" 
.................... #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) 
*
00D8:  MOVLW  3A
00D9:  MOVWF  04
00DA:  BCF    03.7
00DB:  MOVF   00,W
00DC:  BTFSC  03.2
00DD:  GOTO   0EB
00DE:  MOVLW  06
00DF:  MOVWF  78
00E0:  CLRF   77
00E1:  DECFSZ 77,F
00E2:  GOTO   0E1
00E3:  DECFSZ 78,F
00E4:  GOTO   0E0
00E5:  MOVLW  7B
00E6:  MOVWF  77
00E7:  DECFSZ 77,F
00E8:  GOTO   0E7
00E9:  DECFSZ 00,F
00EA:  GOTO   0DE
00EB:  BCF    0A.3
00EC:  BCF    0A.4
00ED:  GOTO   179 (RETURN)
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors) 
....................  
....................  
....................  
.................... #use i2c(SLAVE, Fast, sda=PIN_C4, scl=PIN_C3, force_hw, address=0xA2)  
*
0031:  MOVF   13,W
0032:  MOVF   3F,W
0033:  MOVWF  13
0034:  BSF    14.4
0035:  BCF    0C.3
0036:  BSF    03.5
0037:  BTFSC  14.0
0038:  GOTO   037
0039:  CLRF   78
003A:  BCF    03.5
003B:  BTFSC  14.4
003C:  INCF   78,F
003D:  RETURN
....................  
.................... //#include <string.h> 
....................  
.................... #define LED PIN_E1   
.................... #define CE  PIN_E2 
....................  
.................... #define SEL0   PIN_E0   // external counter division ratio 
.................... #define SEL1   PIN_E1   // external counter division ratio 
.................... #define MR     PIN_E2   // external counter master reset 
.................... #define CLKI   PIN_C0   // internal counter input 
.................... #define BEEP   PIN_C3   // buzzer 
....................  
.................... unsigned int32 count; 
....................  
.................... const int8 buf_len=8; 
.................... int8 buffer[buf_len];   // I2C buffer      
.................... int8 address=0; 
....................  
.................... unsigned int16 of=0; // count of overflow 
....................  
.................... 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(); 
003E:  BSF    03.5
003F:  BTFSC  14.5
0040:  GOTO   049
0041:  BCF    03.5
0042:  CLRF   38
0043:  BSF    03.5
0044:  BTFSS  14.2
0045:  GOTO   049
0046:  BCF    03.5
0047:  BSF    38.7
0048:  BSF    03.5
0049:  BCF    03.5
004A:  MOVF   38,W
004B:  INCF   38,F
004C:  MOVWF  3D
....................    if(state < 0x80)                     //Master is sending data 
004D:  MOVF   3D,W
004E:  SUBLW  7F
004F:  BTFSS  03.0
0050:  GOTO   069
....................    { 
....................       incoming = i2c_read(); 
0051:  BCF    14.6
0052:  BTFSS  0C.3
0053:  GOTO   052
0054:  MOVF   13,W
0055:  BSF    14.4
0056:  MOVWF  3C
....................       if(state == 1)                     //First received byte is address 
0057:  DECFSZ 3D,W
0058:  GOTO   05F
....................       { 
....................          address = incoming; 
0059:  MOVF   3C,W
005A:  MOVWF  35
....................          if (incoming == 2) 
005B:  MOVF   3C,W
005C:  SUBLW  02
005D:  BTFSS  03.2
005E:  GOTO   05F
....................          { 
.................... /*            buffer[0]=make8(anemo,0); 
....................             buffer[1]=make8(anemo,1); 
....................             buffer[2]=make8(rain,0); 
....................             buffer[3]=make8(rain,1); 
.................... */         } 
....................       } 
....................       if(state == 2)                     //Second received byte is data 
005F:  MOVF   3D,W
0060:  SUBLW  02
0061:  BTFSS  03.2
0062:  GOTO   069
....................          buffer[address] = incoming; 
0063:  MOVLW  2D
0064:  ADDWF  35,W
0065:  MOVWF  04
0066:  BCF    03.7
0067:  MOVF   3C,W
0068:  MOVWF  00
....................    } 
....................    if(state == 0x80)                     //Master is requesting data 
0069:  MOVF   3D,W
006A:  SUBLW  80
006B:  BTFSS  03.2
006C:  GOTO   085
....................    { 
....................       if(address <= buf_len) i2c_write(buffer[address]); 
006D:  MOVF   35,W
006E:  SUBLW  08
006F:  BTFSS  03.0
0070:  GOTO   07A
0071:  MOVLW  2D
0072:  ADDWF  35,W
0073:  MOVWF  04
0074:  BCF    03.7
0075:  MOVF   00,W
0076:  MOVWF  3E
0077:  MOVWF  3F
0078:  CALL   031
....................       else i2c_write(ID[address - buf_len]); 
0079:  GOTO   085
007A:  MOVLW  08
007B:  SUBWF  35,W
007C:  ADDWF  00,W
007D:  MOVWF  04
007E:  BCF    03.7
007F:  BTFSC  56.0
0080:  BSF    03.7
0081:  MOVF   00,W
0082:  MOVWF  3E
0083:  MOVWF  3F
0084:  CALL   031
....................    } 
.................... } 
....................  
....................  
....................  
.................... /*#int_EXT  // Interrupt from 1PPS 
.................... void  EXT_isr(void)  
.................... { 
....................    unsigned int16 countH; 
....................    unsigned int8  countL; 
....................    char countS[10], a[4], b[4], c[4];  // strings for printing results 
....................     
....................    countL=0; 
....................    countH=get_timer1();    // read internal counter 
....................    output_low(SEL0); 
....................    output_low(SEL1); 
....................    countL=input(CLKI);     // read bit 0 of external counter 
....................    output_high(SEL0); 
....................    output_low(SEL1); 
....................    countL|=input(CLKI)<<1; // read bit 1 of external counter 
....................    output_low(SEL0); 
....................    output_high(SEL1); 
....................    countL|=input(CLKI)<<2; // read bit 2 of external counter 
....................    output_high(SEL0); 
....................    output_high(SEL1); 
....................    countL|=input(CLKI)<<3; // read bit 3 of external counter 
....................  
....................    output_low(MR);   // External counter Master Reset 
....................    output_high(MR); 
....................     
....................    set_timer1(0);    // Internal counter reset 
....................     
....................    count=((unsigned int32)of<<20)+((unsigned int32)countH<<4)+(unsigned int32)countL; // concatenate  
....................  
....................    sprintf(countS,"%09Lu", count);  // engeneering values conversion 
....................    strncpy(a, countS, 3); a[3]='\0'; 
....................    strncpy(b, &countS[3], 3); b[3]='\0'; 
....................    strncpy(c, &countS[6], 3); c[3]='\0'; 
....................     
....................    printf("%s\r\n", countS);                    // output to RS232 
....................  
....................    output_toggle(BEEP); // cvak... 
....................  
....................    of=0; // reset overflow counter 
.................... } 
....................  
.................... #int_TIMER1  // Interrupf from overflow 
.................... void  TIMER1_isr(void)  
.................... { 
....................    of++; 
.................... } 
....................  
....................  
.................... /*#int_TIMER2 // every 10 ms 
.................... void  TIMER2_isr(void)  
.................... { 
....................    output_low(CE); 
....................    count=get_timer1(); 
....................    set_timer1(0); 
....................    output_high(CE); 
.................... }*/ 
....................  
....................   
0085:  BCF    0C.3
0086:  BCF    0A.3
0087:  BCF    0A.4
0088:  GOTO   01D
.................... void main() 
.................... { 
*
0111:  CLRF   04
0112:  BCF    03.7
0113:  MOVLW  1F
0114:  ANDWF  03,F
0115:  BSF    03.5
0116:  BSF    03.6
0117:  BSF    07.3
0118:  MOVLW  08
0119:  BCF    03.6
011A:  MOVWF  19
011B:  MOVLW  02
011C:  MOVWF  1A
011D:  MOVLW  A6
011E:  MOVWF  18
011F:  MOVLW  90
0120:  BCF    03.5
0121:  MOVWF  18
0122:  BSF    28.3
0123:  MOVF   28,W
0124:  BSF    03.5
0125:  MOVWF  07
0126:  BCF    03.5
0127:  BSF    28.4
0128:  MOVF   28,W
0129:  BSF    03.5
012A:  MOVWF  07
012B:  MOVLW  A2
012C:  MOVWF  13
012D:  MOVLW  36
012E:  BCF    03.5
012F:  MOVWF  14
0130:  CLRF   35
0131:  CLRF   37
0132:  CLRF   36
0133:  BSF    03.5
0134:  BSF    03.6
0135:  MOVF   09,W
0136:  ANDLW  C0
0137:  MOVWF  09
0138:  BCF    03.6
0139:  BCF    1F.4
013A:  BCF    1F.5
013B:  MOVLW  00
013C:  BSF    03.6
013D:  MOVWF  08
013E:  BCF    03.5
013F:  CLRF   07
0140:  CLRF   08
0141:  CLRF   09
.................... /*   setup_adc_ports(NO_ANALOGS|VSS_VDD); 
....................    setup_adc(ADC_OFF); 
.................... //   setup_spi(SPI_SS_DISABLED); 
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 
.................... //   setup_wdt(WDT_144MS); 
....................    setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); 
....................    setup_timer_2(T2_DIV_BY_16,196,16); 
....................    setup_ccp1(CCP_OFF); 
....................    setup_comparator(NC_NC_NC_NC); 
....................    setup_vref(FALSE); 
....................  
.................... */ 
....................  
....................    setup_adc_ports(NO_ANALOGS|VSS_VDD); 
*
0148:  BSF    03.5
0149:  BSF    03.6
014A:  MOVF   09,W
014B:  ANDLW  C0
014C:  MOVWF  09
014D:  BCF    03.6
014E:  BCF    1F.4
014F:  BCF    1F.5
0150:  MOVLW  00
0151:  BSF    03.6
0152:  MOVWF  08
.................... //   setup_adc(ADC_CLOCK_DIV_2); 
....................    setup_adc(ADC_OFF); 
0153:  BCF    03.5
0154:  BCF    03.6
0155:  BCF    1F.0
.................... //   setup_spi(SPI_SS_DISABLED);  //must not be set if I2C are in use!  
....................    setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); 
0156:  BSF    03.5
0157:  MOVF   01,W
0158:  ANDLW  C7
0159:  IORLW  28
015A:  MOVWF  01
.................... //   setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS); 
....................    setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT); 
015B:  MOVLW  0F
015C:  BCF    03.5
015D:  MOVWF  10
.................... //   setup_timer_2(T2_DISABLED,0,1); 
....................    setup_comparator(NC_NC_NC_NC); 
015E:  BSF    03.6
015F:  CLRF   07
0160:  CLRF   08
0161:  CLRF   09
....................    setup_vref(FALSE); 
0162:  BSF    03.5
0163:  BCF    03.6
0164:  CLRF   17
.................... //   setup_oscillator(OSC_8MHZ|OSC_INTRC); 
....................  
.................... //   ext_int_edge( L_TO_H );       // set 1PPS active edge 
.................... //   enable_interrupts(INT_TIMER1); 
.................... //   enable_interrupts(INT_EXT); 
....................    enable_interrupts(INT_SSP);  
0165:  BSF    0C.3
.................... //   enable_interrupts(INT_TIMER2); 
....................    enable_interrupts(GLOBAL);     
0166:  MOVLW  C0
0167:  BCF    03.5
0168:  IORWF  0B,F
....................  
....................  
.................... /*   delay_ms(1000); 
....................    int n; 
....................    for (n=0;n<40;n++) putc(cmd[n]); // setup GPS 
....................  
.................... */ 
....................  
....................    printf("cvak...\r\n"); 
0169:  MOVLW  89
016A:  BSF    03.6
016B:  MOVWF  0D
016C:  MOVLW  00
016D:  MOVWF  0F
016E:  BCF    03.6
016F:  GOTO   08E
....................     
....................  
.................... buffer[2]=0; 
0170:  CLRF   2F
.................... buffer[3]=0; 
0171:  CLRF   30
.................... buffer[4]=0; 
0172:  CLRF   31
.................... buffer[5]=0; 
0173:  CLRF   32
....................  
....................    while(true) 
....................    {       
.................... //     output_high(LED); 
....................      delay_ms(1000); 
0174:  MOVLW  04
0175:  MOVWF  39
0176:  MOVLW  FA
0177:  MOVWF  3A
0178:  GOTO   0D8
0179:  DECFSZ 39,F
017A:  GOTO   176
.................... //     output_low(LED); 
.................... //     delay_ms(999); 
....................      printf("%X %X %X %X\r\n", buffer[0],buffer[1],buffer[2],buffer[3]); 
017B:  MOVF   2D,W
017C:  MOVWF  39
017D:  MOVLW  37
017E:  MOVWF  3A
017F:  CALL   0EE
0180:  MOVLW  20
0181:  BTFSS  0C.4
0182:  GOTO   181
0183:  MOVWF  19
0184:  MOVF   2E,W
0185:  MOVWF  39
0186:  MOVLW  37
0187:  MOVWF  3A
0188:  CALL   0EE
0189:  MOVLW  20
018A:  BTFSS  0C.4
018B:  GOTO   18A
018C:  MOVWF  19
018D:  MOVF   2F,W
018E:  MOVWF  39
018F:  MOVLW  37
0190:  MOVWF  3A
0191:  CALL   0EE
0192:  MOVLW  20
0193:  BTFSS  0C.4
0194:  GOTO   193
0195:  MOVWF  19
0196:  MOVF   30,W
0197:  MOVWF  39
0198:  MOVLW  37
0199:  MOVWF  3A
019A:  CALL   0EE
019B:  MOVLW  0D
019C:  BTFSS  0C.4
019D:  GOTO   19C
019E:  MOVWF  19
019F:  MOVLW  0A
01A0:  BTFSS  0C.4
01A1:  GOTO   1A0
01A2:  MOVWF  19
....................  
....................    } 
01A3:  GOTO   174
.................... } 
01A4:  SLEEP

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