o: ActiveSupport::Cache::Entry :@compressedF: @value"Ū"¾ª
Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.c
1
#define VERSION "0.1"
2
#define ID "$Id: main.c 2916 2013-04-14 17:42:03Z kaklik $"
3

  
1 4
#include "main.h"
2
#use i2c(Slave,Fast,sda=PIN_C4,scl=PIN_C3,force_hw,address=0xA2) // Motor 2
5
#use i2c(SLAVE,Fast,sda=PIN_C4,scl=PIN_C3,force_hw,address=0xA2) // Motor 2
3 6

  
4
#define H1 PIN_A1
5
#define L1 PIN_A2
6
#define H2 PIN_A3
7
#define L2 PIN_A4
7
#include <time.h>       //standard C time library
8
#include <rtctimer.c>   //library for time.h that uses timer2 as time base
8 9

  
9
signed int8 command;  // rozsah +-127
10
#include <stdlib.h>
11
#include <input.c>      //needed for the rs232 input routines
10 12

  
13

  
14
int16 count=0xA5A5;
15
const int8 buf_len=8;
16

  
17
int8 buffer[buf_len];   // I2C buffer     
18

  
19
int8 address=0;
20

  
21
#include "..\common\dbloader.h"
22

  
23
unsigned int16 timer0_overflow_count;
24
float anemo=0;
25
unsigned int8 rain;
26

  
27
//we are using the rtctimer.c library, in which a counter is incremented
28
//every time the timer2 interrupt occurs (timer2 overflow).  the time math
29
//needs to know what rate the timer2 interrupt occurs.  this definition
30
//must match the rate the timer2 is configured for.
31
#define CLOCKS_PER_SECOND  1000
32

  
11 33
#INT_SSP
12 34
void ssp_interupt ()
13 35
{
14
   BYTE incoming, state;
36
BYTE incoming, state;
15 37

  
16
   output_a(0);         // vypnuti vsech budicu
17

  
18 38
   state = i2c_isr_state();
19

  
20 39
   if(state < 0x80)                     //Master is sending data
21 40
   {
22
      command = i2c_read();
41
      incoming = i2c_read();
42
      if(state == 1)                     //First received byte is address
43
      {
44
         address = incoming;
45
         if (incoming == 2)
46
         {
47
            buffer[0]=make8(count,0);
48
            buffer[1]=make8(count,1);
49
         }
50
      }
51
      if(state == 2)                     //Second received byte is data
52
         buffer[address] = incoming;
23 53
   }
24

  
25 54
   if(state == 0x80)                     //Master is requesting data
26 55
   {
27
      i2c_write(command);
56
      if(address <= buf_len) i2c_write(buffer[address]);
57
      else i2c_write(ID[address - buf_len]);
28 58
   }
29 59
}
30 60

  
61
#int_TIMER1
62
void  TIMER1_isr(void) 
63
{
64
// 32.768 kHz krystal pro timer1 oscil?tor
65
  anemo = ((timer0_overflow_count * 0xFF) + get_timer0())/(0xFFFF/32768.0); // pocet pulzu za 1s
31 66

  
67
  timer0_overflow_count=0; //nulovani
68
  set_timer0(0);
69
  set_timer1(0);
70
  output_toggle(PIN_E0);
71
}
72

  
73
#int_TIMER0 //pro preteceni \u010d?ta\u010de p\u016flz\u016f od anemometru (RA4)
74
void  TIMER0_isr(void) 
75
{
76
  timer0_overflow_count++;
77
}
78

  
79
#INT_EXT
80
void EXT_isr()  //interrup from rain sensor clip. 
81
{
82
  rain++;
83
//  if (input(PIN_B0)) ext_int_edge( H_TO_L );     osetreni pro pripad, ze by bylo treba cist obe hrany impulzu
84
//  if (!input(PIN_B0)) ext_int_edge( L_TO_H );
85
}
86

  
87

  
88
void welcome(void)    // uvodni zprava
89
{
90
   printf("\r\n\r\n# Meteorologicka stanice %s (C) 2013 www.mlab.cz \r\n",VERSION); 
91
   printf("\r\n %s \r\n",ID);// Welcome message
92
   printf("# ver poradi ");
93
   printf("check\r\n\r\n");
94
}
95

  
96
void InitTime(void)
97
{
98
   struct_tm t;
99
   
100
   //tm_year is years since 1900.
101
   printf("\r\nYear (0-99): ");
102
   t.tm_year = (int16)get_int() + (int16)100;   //add 100 to put is into 2000
103
   
104
   printf("\r\nMonth (1-12): ");
105
   t.tm_mon = get_int() - 1;
106
   
107
   printf("\r\nDay (1-31): ");
108
   t.tm_mday = get_int() - 1;
109
   
110
   printf("\r\nHour (0-23): ");
111
   t.tm_hour = get_int();
112
   
113
   printf("\r\nMinute (0-59): ");
114
   t.tm_min = get_int();
115
   
116
   SetTime(&t);
117
   
118
   printf("\r\n\n");
119
}
120

  
121

  
32 122
void main()
33 123
{
34
   int8 speed;
35 124

  
125
   char tString[32];
126
   unsigned int32 t;
127
   time_t tTime = 0;
128

  
129

  
36 130
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
131
//   setup_adc(ADC_CLOCK_DIV_2);
37 132
   setup_adc(ADC_OFF);
38
   setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS);
39
   setup_timer_1(T1_DISABLED);
40
   setup_timer_2(T2_DISABLED,0,1);
133
//   setup_spi(SPI_SS_DISABLED);  //must not be set if I2C are in use! 
134
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
135
//   setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS);
136
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT);
137
//   setup_timer_2(T2_DISABLED,0,1);
41 138
   setup_comparator(NC_NC_NC_NC);
42 139
   setup_vref(FALSE);
43
   setup_oscillator(OSC_8MHZ|OSC_INTRC);
140
//   setup_oscillator(OSC_8MHZ|OSC_INTRC);
44 141

  
142

  
143
   InitTime();
144

  
145
   /* Setup timer 2
146
    * On a 4 Mhz clock, this will trigger a timer2 interrupt every 1.0 ms
147
    * For time.h to work properly, Timer2 must overflow every millisecond
148
    * OverflowTime = 4 * (1/OscFrequency) * Prescale * Period * Postscale 
149
    * For 4 Mhz: .001 seconds  = 4 * (1/4000000 seconds) * 4 * 250 * 1
150
    */
151
  #if getenv("CLOCK")==4000000)
152
   setup_timer_2(T2_DIV_BY_1,250,4);
153
  #elif getenv("CLOCK")==20000000)
154
   setup_timer_2(T2_DIV_BY_4,250,5);
155
  #else
156
   #error Configure TIMER2 so it interrupts at a rate defined by CLOCKS_PER_SECOND
157
  #endif
158
   
159
   /* Enable the timer 2 interrupt, or it will not fire */
160
   enable_interrupts(INT_TIMER2);
161
   /* Enable interrupts globally too, otherwise no interrupt will fire */
162

  
163

  
164

  
165
   enable_interrupts(INT_SSP); 
166
//   enable_interrupts(INT_TIMER2);
167
   enable_interrupts(INT_TIMER1);    
168
   enable_interrupts(INT_TIMER0);
169
   enable_interrupts(INT_EXT);
45 170
   enable_interrupts(GLOBAL);
46
   enable_interrupts(INT_SSP);
47 171

  
48
   command=-128;  // zastaveni po resetu
49 172

  
173
   set_timer0(0);
174
   set_timer1(0);
175
   timer0_overflow_count=0;
176
   rain=0;
177

  
178
buffer[2]=0;
179
buffer[3]=0;
180
buffer[4]=0;
181
buffer[5]=0;
182

  
183

  
184
   welcome();
185

  
186
   set_timer1(0);
187

  
50 188
   while(true)
51 189
   {
190
      
191
      set_timer1(0);
192
      delay_ms(999);
193
      delay_us(966);
194
//      count=get_timer1();
195
// Get the time
196
      tTime = time(NULL);
197
// Get the string representation of the time */
52 198

  
53
      if (command==-128) // prikaz na odpojeni mustku nebo chybna hodnota
54
      {
55
         output_a(0);   // volnobeh
56
         continue;
57
      };
199
      ctime(&tTime, tString);
58 200

  
59
      speed=command+127;   // posunuti 0 pro zaporna cisla
201
      
202
      /* Print the time to RS-232 */
203
      printf("Time: %s\n\r",  tString);   
60 204

  
61
      output_a(0b10010);   // vpred
62
      delay_us(speed);
63
      output_a(0);         // vypnuti vsech budicu
64
      delay_us(1);
65
      restart_wdt();
66
      output_a(0b01100);   // vzad
67
      delay_us(254-speed);
68
      output_a(0);         // vypnuti vsech budicu
69
      delay_us(1);
205
      printf("count: %Lu %X %X %X %X\r\n",count, buffer[0],buffer[1],buffer[2],buffer[3]);
206
      printf("%6.1f %u \n\r", anemo, rain); 
207
 
208
     delay_ms(1000);
209

  
70 210
   }
71 211
}
72 212

  
Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.h
5 5

  
6 6
//#FUSES WDT                      // Watch Dog Timer
7 7
#FUSES NOWDT                    //No Watch Dog Timer
8
#FUSES INTRC                    //Internal RC Osc
8
#FUSES HS                    //external crystal oscillator
9 9
#FUSES NOPUT                    //No Power Up Timer
10 10
#FUSES MCLR                     //Master Clear pin enabled
11 11
#FUSES NOPROTECT                //Code not protected from reading
......
18 18
#FUSES NOWRT                    //Program memory not write protected
19 19
#FUSES BORV40                   //Brownout reset at 4.0V
20 20

  
21
#use delay(clock=8000000)
21
#use delay(clock=20000000)
22 22

  
23 23
//set I2C
24 24
//#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)
25 25

  
26 26
//set RS232
27
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
27
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/README.cs.txt
1 1
I2C snimac vycitajici rychlost větru a srážky.
2 2

  
3 3

  
4

  
5

  
6

  
7 4
===== Měření srážek =====
8 5

  
9
V MCU je čítač použitý pro počítání překlopení člunku ve srážkoměru. Je ošetřeno jeho přetečení tak, aby mohl čítat z hlediska srážek až do velkých čísel. Tento čítač se nenuluje, ale nechává se přetéct. K němu paralelně běží RTC hodiny v MCU. A MCU se chová jako I²C SLAVE a hodnotu čítače tak lze vyčíst přes I2C. 
10
MCU pak ve zbytku výpočetního času kontroluje hodnotu čítače a do dalšího registu zapisuje čas jeho poslední změny ve formátu Unix time stamp. 
11

  
12
RTC hodiny MCU mohou být nastavovány buď přes GPS. (Zprávou NMEA) A nebo zápisem do registru obsahujícího aktuální čas. Tento registr může být použit jako zdroj korekce v případě komplikací s nastavením aktuálního času. 
6
V MCU je čítač použitý pro počítání překlopení člunku ve srážkoměru. Je ošetřeno jeho přetečení tak, aby mohl čítat z hlediska srážek až do velkých čísel. Tento čítač se nenuluje, ale nechává se přetéct. K němu paralelně běží uptimo hodiny v MCU. A MCU se chová jako I²C SLAVE a hodnotu čítače tak lze vyčíst přes I2C. 
7
MCU pak ve zbytku výpočetního času kontroluje hodnotu čítače a do dalšího registu zapisuje čas jeho poslední změny. (podobne jako dmesg, ale zaokrouhleno na cele sekundy) 
8
Uptime bude zaznamenavan do registru, ktere je mozne precist pres I2C.  Tento registr může být použit jako zdroj korekce v případě komplikací s nastavením aktuálního času. 
Designs/Measuring_instruments/RMDS01C/SW/PIC16F887/main.esym
1
D G "__PCM__" 0 0 ""4.106""
2
D G "__DEVICE__" 0 0 ""
3
D G "__DATE__" 0 0 ""01-II-14""
4
D G "__TIME__" 0 0 ""20:13:30"" "Standard Header file for the PIC16F887 device ////////////////"
5
d G "PIN_A0" 2 20 "40"
6
d G "PIN_A1" 2 21 "41"
7
d G "PIN_A2" 2 22 "42"
8
d G "PIN_A3" 2 23 "43"
9
d G "PIN_A4" 2 24 "44"
10
d G "PIN_A5" 2 25 "45"
11
d G "PIN_A6" 2 26 "46"
12
d G "PIN_A7" 2 27 "47"
13
d G "PIN_B0" 2 29 "48"
14
d G "PIN_B1" 2 30 "49"
15
d G "PIN_B2" 2 31 "50"
16
d G "PIN_B3" 2 32 "51"
17
d G "PIN_B4" 2 33 "52"
18
d G "PIN_B5" 2 34 "53"
19
d G "PIN_B6" 2 35 "54"
20
d G "PIN_B7" 2 36 "55"
21
d G "PIN_C0" 2 38 "56"
22
d G "PIN_C1" 2 39 "57"
23
d G "PIN_C2" 2 40 "58"
24
d G "PIN_C3" 2 41 "59"
25
d G "PIN_C4" 2 42 "60"
26
d G "PIN_C5" 2 43 "61"
27
d G "PIN_C6" 2 44 "62"
28
d G "PIN_C7" 2 45 "63"
29
d G "PIN_D0" 2 47 "64"
30
d G "PIN_D1" 2 48 "65"
31
d G "PIN_D2" 2 49 "66"
32
d G "PIN_D3" 2 50 "67"
33
d G "PIN_D4" 2 51 "68"
34
d G "PIN_D5" 2 52 "69"
35
d G "PIN_D6" 2 53 "70"
36
d G "PIN_D7" 2 54 "71"
37
d G "PIN_E0" 2 56 "72"
38
d G "PIN_E1" 2 57 "73"
39
d G "PIN_E2" 2 58 "74"
40
d G "PIN_E3" 2 59 "75"
41
d G "FALSE" 2 62 "0"
42
d G "TRUE" 2 63 "1"
43
d G "BYTE" 2 65 "int8"
44
d G "BOOLEAN" 2 66 "int1"
45
d G "getc" 2 68 "getch"
46
d G "fgetc" 2 69 "getch"
47
d G "getchar" 2 70 "getch"
48
d G "putc" 2 71 "putchar"
49
d G "fputc" 2 72 "putchar"
50
d G "fgets" 2 73 "gets"
51
d G "fputs" 2 74 "puts"
52
d G "WDT_FROM_SLEEP" 2 79 "3"
53
d G "WDT_TIMEOUT" 2 80 "11"
54
d G "MCLR_FROM_SLEEP" 2 81 "19"
55
d G "MCLR_FROM_RUN" 2 82 "27"
56
d G "NORMAL_POWER_UP" 2 83 "25"
57
d G "BROWNOUT_RESTART" 2 84 "26"
58
d G "T0_INTERNAL" 2 91 "0"
59
d G "T0_EXT_L_TO_H" 2 92 "32"
60
d G "T0_EXT_H_TO_L" 2 93 "48"
61
d G "T0_DIV_1" 2 95 "8"
62
d G "T0_DIV_2" 2 96 "0"
63
d G "T0_DIV_4" 2 97 "1"
64
d G "T0_DIV_8" 2 98 "2"
65
d G "T0_DIV_16" 2 99 "3"
66
d G "T0_DIV_32" 2 100 "4"
67
d G "T0_DIV_64" 2 101 "5"
68
d G "T0_DIV_128" 2 102 "6"
69
d G "T0_DIV_256" 2 103 "7"
70
d G "T0_8_BIT" 2 106 "0"
71
d G "RTCC_INTERNAL" 2 108 "0" "The following are provided for compatibility"
72
d G "RTCC_EXT_L_TO_H" 2 109 "32" "with older compiler versions"
73
d G "RTCC_EXT_H_TO_L" 2 110 "48"
74
d G "RTCC_DIV_1" 2 111 "8"
75
d G "RTCC_DIV_2" 2 112 "0"
76
d G "RTCC_DIV_4" 2 113 "1"
77
d G "RTCC_DIV_8" 2 114 "2"
78
d G "RTCC_DIV_16" 2 115 "3"
79
d G "RTCC_DIV_32" 2 116 "4"
80
d G "RTCC_DIV_64" 2 117 "5"
81
d G "RTCC_DIV_128" 2 118 "6"
82
d G "RTCC_DIV_256" 2 119 "7"
83
d G "RTCC_8_BIT" 2 120 "0"
84
d G "WDT_18MS" 2 132 "8"
85
d G "WDT_36MS" 2 133 "9"
86
d G "WDT_72MS" 2 134 "10"
87
d G "WDT_144MS" 2 135 "11"
88
d G "WDT_288MS" 2 136 "12"
89
d G "WDT_576MS" 2 137 "13"
90
d G "WDT_1152MS" 2 138 "14"
91
d G "WDT_2304MS" 2 139 "15"
92
d G "WDT_ON" 2 143 "0x4100"
93
d G "WDT_OFF" 2 144 "0"
94
d G "WDT_DIV_16" 2 145 "0x100"
95
d G "WDT_DIV_8" 2 146 "0x300"
96
d G "WDT_DIV_4" 2 147 "0x500"
97
d G "WDT_DIV_2" 2 148 "0x700"
98
d G "WDT_TIMES_1" 2 149 "0x900" "Default"
99
d G "WDT_TIMES_2" 2 150 "0xB00"
100
d G "WDT_TIMES_4" 2 151 "0xD00"
101
d G "WDT_TIMES_8" 2 152 "0xF00"
102
d G "WDT_TIMES_16" 2 153 "0x1100"
103
d G "WDT_TIMES_32" 2 154 "0x1300"
104
d G "WDT_TIMES_64" 2 155 "0x1500"
105
d G "WDT_TIMES_128" 2 156 "0x1700"
106
d G "T1_DISABLED" 2 162 "0"
107
d G "T1_INTERNAL" 2 163 "5"
108
d G "T1_EXTERNAL" 2 164 "7"
109
d G "T1_EXTERNAL_SYNC" 2 165 "3"
110
d G "T1_CLK_OUT" 2 167 "8"
111
d G "T1_DIV_BY_1" 2 169 "0"
112
d G "T1_DIV_BY_2" 2 170 "0x10"
113
d G "T1_DIV_BY_4" 2 171 "0x20"
114
d G "T1_DIV_BY_8" 2 172 "0x30"
115
d G "T1_GATE" 2 174 "0x40"
116
d G "T1_GATE_INVERTED" 2 175 "0xC0"
117
d G "T2_DISABLED" 2 180 "0"
118
d G "T2_DIV_BY_1" 2 181 "4"
119
d G "T2_DIV_BY_4" 2 182 "5"
120
d G "T2_DIV_BY_16" 2 183 "6"
121
d G "CCP_OFF" 2 189 "0"
122
d G "CCP_CAPTURE_FE" 2 190 "4"
123
d G "CCP_CAPTURE_RE" 2 191 "5"
124
d G "CCP_CAPTURE_DIV_4" 2 192 "6"
125
d G "CCP_CAPTURE_DIV_16" 2 193 "7"
126
d G "CCP_COMPARE_SET_ON_MATCH" 2 194 "8"
127
d G "CCP_COMPARE_CLR_ON_MATCH" 2 195 "9"
128
d G "CCP_COMPARE_INT" 2 196 "0xA"
129
d G "CCP_COMPARE_RESET_TIMER" 2 197 "0xB"
130
d G "CCP_PWM" 2 198 "0xC"
131
d G "CCP_PWM_PLUS_1" 2 199 "0x1c"
132
d G "CCP_PWM_PLUS_2" 2 200 "0x2c"
133
d G "CCP_PWM_PLUS_3" 2 201 "0x3c"
134
d G "CCP_PWM_H_H" 2 206 "0x0c"
135
d G "CCP_PWM_H_L" 2 207 "0x0d"
136
d G "CCP_PWM_L_H" 2 208 "0x0e"
137
d G "CCP_PWM_L_L" 2 209 "0x0f"
138
d G "CCP_PWM_FULL_BRIDGE" 2 211 "0x40"
139
d G "CCP_PWM_FULL_BRIDGE_REV" 2 212 "0xC0"
140
d G "CCP_PWM_HALF_BRIDGE" 2 213 "0x80"
141
d G "CCP_SHUTDOWN_ON_COMP1" 2 215 "0x100000"
142
d G "CCP_SHUTDOWN_ON_COMP2" 2 216 "0x200000"
143
d G "CCP_SHUTDOWN_ON_COMP" 2 217 "0x300000"
144
d G "CCP_SHUTDOWN_ON_INT0" 2 218 "0x400000"
145
d G "CCP_SHUTDOWN_ON_COMP1_INT0" 2 219 "0x500000"
146
d G "CCP_SHUTDOWN_ON_COMP2_INT0" 2 220 "0x600000"
147
d G "CCP_SHUTDOWN_ON_COMP_INT0" 2 221 "0x700000"
148
d G "CCP_SHUTDOWN_AC_L" 2 223 "0x000000"
149
d G "CCP_SHUTDOWN_AC_H" 2 224 "0x040000"
150
d G "CCP_SHUTDOWN_AC_F" 2 225 "0x080000"
151
d G "CCP_SHUTDOWN_BD_L" 2 227 "0x000000"
152
d G "CCP_SHUTDOWN_BD_H" 2 228 "0x010000"
153
d G "CCP_SHUTDOWN_BD_F" 2 229 "0x020000"
154
d G "CCP_SHUTDOWN_RESTART" 2 231 "0x80000000"
155
d G "CCP_PULSE_STEERING_A" 2 233 "0x01000000"
156
d G "CCP_PULSE_STEERING_B" 2 234 "0x02000000"
157
d G "CCP_PULSE_STEERING_C" 2 235 "0x04000000"
158
d G "CCP_PULSE_STEERING_D" 2 236 "0x08000000"
159
d G "CCP_PULSE_STEERING_SYNC" 2 237 "0x10000000"
160
d G "SPI_MASTER" 2 245 "0x20"
161
d G "SPI_SLAVE" 2 246 "0x24"
162
d G "SPI_L_TO_H" 2 247 "0"
163
d G "SPI_H_TO_L" 2 248 "0x10"
164
d G "SPI_CLK_DIV_4" 2 249 "0"
165
d G "SPI_CLK_DIV_16" 2 250 "1"
166
d G "SPI_CLK_DIV_64" 2 251 "2"
167
d G "SPI_CLK_T2" 2 252 "3"
168
d G "SPI_SS_DISABLED" 2 253 "1"
169
d G "SPI_SAMPLE_AT_END" 2 255 "0x8000"
170
d G "SPI_XMIT_L_TO_H" 2 256 "0x4000"
171
d G "UART_ADDRESS" 2 262 "2"
172
d G "UART_DATA" 2 263 "4"
173
d G "UART_AUTODETECT" 2 264 "8"
174
d G "UART_AUTODETECT_NOWAIT" 2 265 "9"
175
d G "UART_WAKEUP_ON_RDA" 2 266 "10"
176
d G "UART_SEND_BREAK" 2 267 "13"
177
d G "NC_NC_NC_NC" 2 273 "0x00"
178
d G "NC_NC" 2 274 "0x00"
179
d G "CP1_A0_A3" 2 277 "0x00090080"
180
d G "CP1_A1_A3" 2 278 "0x000A0081"
181
d G "CP1_B3_A3" 2 279 "0x00880082"
182
d G "CP1_B1_A3" 2 280 "0x00280083"
183
d G "CP1_A0_VREF" 2 281 "0x00010084"
184
d G "CP1_A1_VREF" 2 282 "0x00020085"
185
d G "CP1_B3_VREF" 2 283 "0x00800086"
186
d G "CP1_B1_VREF" 2 284 "0x00200087"
187
d G "CP1_OUT_ON_A4" 2 286 "0x00000020"
188
d G "CP1_INVERT" 2 287 "0x00000010"
189
d G "CP1_ABSOLUTE_VREF" 2 288 "0x20000000"
190
d G "CP2_A0_A2" 2 291 "0x00058000"
191
d G "CP2_A1_A2" 2 292 "0x00068100"
192
d G "CP2_B3_A2" 2 293 "0x00848200"
193
d G "CP2_B1_A2" 2 294 "0x00248300"
194
d G "CP2_A0_VREF" 2 295 "0x00018400"
195
d G "CP2_A1_VREF" 2 296 "0x00028500"
196
d G "CP2_B3_VREF" 2 297 "0x00808600"
197
d G "CP2_B1_VREF" 2 298 "0x00208700"
198
d G "CP2_OUT_ON_A5" 2 300 "0x00002000"
199
d G "CP2_INVERT" 2 301 "0x00001000"
200
d G "CP2_ABSOLUTE_VREF" 2 302 "0x10000000"
201
d G "CP2_T1_SYNC" 2 305 "0x01000000"
202
d G "CP2_T1_GATE" 2 306 "0x02000000"
203
d G "VREF_LOW" 2 315 "0xa0"
204
d G "VREF_HIGH" 2 316 "0x80"
205
d G "OSC_31KHZ" 2 322 "1"
206
d G "OSC_125KHZ" 2 323 "0x11"
207
d G "OSC_250KHZ" 2 324 "0x21"
208
d G "OSC_500KHZ" 2 325 "0x31"
209
d G "OSC_1MHZ" 2 326 "0x41"
210
d G "OSC_2MHZ" 2 327 "0x51"
211
d G "OSC_4MHZ" 2 328 "0x61"
212
d G "OSC_8MHZ" 2 329 "0x71"
213
d G "OSC_INTRC" 2 330 "1"
214
d G "OSC_NORMAL" 2 331 "0"
215
d G "OSC_STATE_STABLE" 2 333 "4"
216
d G "OSC_31KHZ_STABLE" 2 334 "2"
217
d G "ADC_OFF" 2 342 "0" "ADC Off"
218
d G "ADC_CLOCK_DIV_2" 2 343 "0x100"
219
d G "ADC_CLOCK_DIV_8" 2 344 "0x40"
220
d G "ADC_CLOCK_DIV_32" 2 345 "0x80"
221
d G "ADC_CLOCK_INTERNAL" 2 346 "0xc0" "Internal 2-6us"
222
d G "sAN0" 2 350 "1" "| A0"
223
d G "sAN1" 2 351 "2" "| A1"
224
d G "sAN2" 2 352 "4" "| A2"
225
d G "sAN3" 2 353 "8" "| A3"
226
d G "sAN4" 2 354 "16" "| A5"
227
d G "sAN5" 2 355 "32" "| E0"
228
d G "sAN6" 2 356 "64" "| E1"
229
d G "sAN7" 2 357 "128" "| E2"
230
d G "sAN8" 2 358 "0x10000" "| B2"
231
d G "sAN9" 2 359 "0x20000" "| B3"
232
d G "sAN10" 2 360 "0x40000" "| B1"
233
d G "sAN11" 2 361 "0x80000" "| B4"
234
d G "sAN12" 2 362 "0x100000" "| B0"
235
d G "sAN13" 2 363 "0x200000" "| B5"
236
d G "NO_ANALOGS" 2 364 "0" "None"
237
d G "ALL_ANALOG" 2 365 "0x1F00FF" "A0 A1 A2 A3 A5 E0 E1 E2 B0 B1 B2 B3 B4 B5"
238
d G "VSS_VDD" 2 368 "0x0000" "| Range 0-Vdd"
239
d G "VSS_VREF" 2 369 "0x1000" "| Range 0-Vref"
240
d G "VREF_VREF" 2 370 "0x3000" "| Range Vref-Vref"
241
d G "VREF_VDD" 2 371 "0x2000" "| Range Vref-Vdd"
242
d G "ADC_START_AND_READ" 2 375 "7" "This is the default if nothing is specified"
243
d G "ADC_START_ONLY" 2 376 "1"
244
d G "ADC_READ_ONLY" 2 377 "6"
245
d G "L_TO_H" 2 389 "0x40"
246
d G "H_TO_L" 2 390 "0"
247
d G "GLOBAL" 2 392 "0x0BC0"
248
d G "INT_RTCC" 2 393 "0x000B20"
249
d G "INT_RB" 2 394 "0x01FF0B08"
250
d G "INT_EXT_L2H" 2 395 "0x50000B10"
251
d G "INT_EXT_H2L" 2 396 "0x60000B10"
252
d G "INT_EXT" 2 397 "0x000B10"
253
d G "INT_AD" 2 398 "0x008C40"
254
d G "INT_TBE" 2 399 "0x008C10"
255
d G "INT_RDA" 2 400 "0x008C20"
256
d G "INT_TIMER1" 2 401 "0x008C01"
257
d G "INT_TIMER2" 2 402 "0x008C02"
258
d G "INT_CCP1" 2 403 "0x008C04"
259
d G "INT_CCP2" 2 404 "0x008D01"
260
d G "INT_SSP" 2 405 "0x008C08"
261
d G "INT_BUSCOL" 2 406 "0x008D08"
262
d G "INT_EEPROM" 2 407 "0x008D10"
263
d G "INT_TIMER0" 2 408 "0x000B20"
264
d G "INT_OSC_FAIL" 2 409 "0x008D80"
265
d G "INT_COMP" 2 410 "0x008D20"
266
d G "INT_COMP2" 2 411 "0x008D40"
267
d G "INT_ULPWU" 2 412 "0x008D04"
268
d G "INT_RB0" 2 413 "0x0010B08"
269
d G "INT_RB1" 2 414 "0x0020B08"
270
d G "INT_RB2" 2 415 "0x0040B08"
271
d G "INT_RB3" 2 416 "0x0080B08"
272
d G "INT_RB4" 2 417 "0x0100B08"
273
d G "INT_RB5" 2 418 "0x0200B08"
274
d G "INT_RB6" 2 419 "0x0400B08"
275
d G "INT_RB7" 2 420 "0x0800B08"
276
D G "LED" 0 4 "PIN_E1"
277
D G "CE" 0 5 "PIN_E2"
278
V G "count" 0 7 "int16"
279
V G "rcv_buf" 0 9 "int8[16]" "I2C receive buffer"
280
V G "snd_buf" 0 10 "int8[16]" "I2C send buffer"
281
V G "buffer" 0 12 "int8[16]" "I2C buffer"
282
V G "address" 0 13 "int8"
283
V G "cmd" 0 15 "int8[40]"
284
F G "ssp_interupt" 0 18 "void()"
285
V L "incoming" 0 20 "int8"
286
V L "state" 0 20 "int8"
287
C L "ssp_interupt" 0 24 1 "FUNCTION"
288
C L "ssp_interupt" 0 24 1 "FUNCTION"
289
C L "ssp_interupt" 0 24 1 "FUNCTION"
290
C L "ssp_interupt" 0 24 1 "FUNCTION"
291
F G "TIMER2_isr" 0 49 "void()"
292
F G "MAIN" 0 58 "void()"
293
C L "MAIN" 0 24 1 "FUNCTION"
294
C L "MAIN" 0 24 1 "FUNCTION"
295
V L "n" 0 72 "int8"
296
C L "MAIN" 0 24 1 "FUNCTION"
297
F B "reset_cpu" 0 0
298
F B "abs" 1 0
299
F B "sleep_ulpwu" 1 0
300
F B "sleep" 0 0
301
F B "delay_cycles" 1 0
302
F B "read_bank" 2 0
303
F B "write_bank" 3 0
304
F B "shift_left" 2 2
305
F B "shift_right" 2 2
306
F B "rotate_left" 2 0
307
F B "rotate_right" 2 0
308
F B "_mul" 2 0
309
F B "memset" 3 0
310
F B "isamoung" 2 0
311
F B "isamong" 2 0
312
F B "bit_set" 2 0
313
F B "bit_clear" 2 0
314
F B "bit_test" 2 0
315
F B "toupper" 1 0
316
F B "tolower" 1 0
317
F B "swap" 1 0
318
F B "printf" 1 255
319
F B "fprintf" 1 255
320
F B "sprintf" 1 255
321
F B "make8" 2 0
322
F B "make16" 2 0
323
F B "make32" 1 255
324
F B "label_address" 1 1
325
F B "goto_address" 1 0
326
F B "_va_arg" 1 0
327
F B "offsetofbit" 2 2
328
F B "enable_interrupts" 1 0
329
F B "disable_interrupts" 1 0
330
F B "interrupt_active" 1 0
331
F B "clear_interrupt" 1 0
332
F B "jump_to_isr" 1 0
333
F B "ext_int_edge" 1 2
334
F B "read_eeprom" 1 0
335
F B "write_eeprom" 2 0
336
F B "read_program_eeprom" 1 0
337
F B "write_program_eeprom" 2 0
338
F B "write_program_memory" 4 0
339
F B "write_program_memory8" 4 0
340
F B "read_program_memory" 4 0
341
F B "read_program_memory8" 4 0
342
F B "erase_program_eeprom" 1 0
343
F B "strcpy" 2 0
344
F B "memcpy" 3 0
345
F B "strstr100" 2 0
346
F B "output_high" 1 0
347
F B "output_low" 1 0
348
F B "input" 1 0
349
F B "input_state" 1 0
350
F B "output_float" 1 0
351
F B "output_drive" 1 0
352
F B "output_bit" 1 1
353
F B "output_toggle" 1 0
354
F B "output_a" 1 0
355
F B "output_b" 1 0
356
F B "output_c" 1 0
357
F B "output_d" 1 0
358
F B "output_e" 1 0
359
F B "input_a" 0 0
360
F B "input_b" 0 0
361
F B "input_c" 0 0
362
F B "input_d" 0 0
363
F B "input_e" 0 0
364
F B "set_tris_a" 1 0
365
F B "set_tris_b" 1 0
366
F B "set_tris_c" 1 0
367
F B "set_tris_d" 1 0
368
F B "set_tris_e" 1 0
369
F B "get_tris_a" 0 0
370
F B "get_tris_b" 0 0
371
F B "get_tris_c" 0 0
372
F B "get_tris_d" 0 0
373
F B "get_tris_e" 0 0
374
F B "input_change_a" 0 0
375
F B "input_change_b" 0 0
376
F B "input_change_c" 0 0
377
F B "input_change_d" 0 0
378
F B "input_change_e" 0 0
379
F B "port_b_pullups" 1 0
380
F B "setup_counters" 2 0
381
F B "setup_wdt" 1 0
382
F B "restart_cause" 0 0
383
F B "restart_wdt" 0 0
384
F B "get_rtcc" 0 0
385
F B "set_rtcc" 1 0
386
F B "get_timer0" 0 0
387
F B "set_timer0" 1 0
388
F B "setup_comparator" 1 0
389
F B "setup_port_a" 1 0
390
F B "setup_adc_ports" 1 0
391
F B "setup_adc" 1 0
392
F B "set_adc_channel" 1 0
393
F B "read_adc" 0 1
394
F B "adc_done" 0 0
395
F B "setup_timer_0" 1 0
396
F B "setup_vref" 1 0
397
F B "setup_timer_1" 1 0
398
F B "get_timer1" 0 0
399
F B "set_timer1" 1 0
400
F B "setup_timer_2" 3 0
401
F B "get_timer2" 0 0
402
F B "set_timer2" 1 0
403
F B "setup_ccp1" 1 2
404
F B "set_pwm1_duty" 1 0
405
F B "setup_ccp2" 1 0
406
F B "set_pwm2_duty" 1 0
407
F B "setup_oscillator" 1 2
408
F B "setup_spi" 1 0
409
F B "spi_read" 0 1
410
F B "spi_write" 1 0
411
F B "spi_data_is_in" 0 0
412
F B "setup_spi2" 1 0
413
F B "spi_read2" 0 1
414
F B "spi_write2" 1 0
415
F B "spi_data_is_in2" 0 0
416
F B "brownout_enable" 1 0
417
F B "delay_ms" 1 0
418
F B "delay_us" 1 0
419
F B "putchar" 1 2
420
F B "puts" 1 2
421
F B "getch" 0 1
422
F B "gets" 1 3
423
F B "kbhit" 0 1
424
F B "set_uart_speed" 1 3
425
F B "setup_uart" 1 3
426
F B "i2c_read" 0 2
427
F B "i2c_write" 1 2
428
F B "i2c_start" 0 2
429
F B "i2c_stop" 0 1
430
F B "i2c_isr_state" 0 1
431
F B "i2c_slaveaddr" 1 2
432
F B "i2c_poll" 0 1
Designs/Measuring_instruments/RMDS01C/SW/PIC16F887/main.c
1
#include "main.h"
2

  
3

  
4
#define LED PIN_E1  
5
#define CE  PIN_E2
6

  
7
int16 count;
8

  
9
int8 rcv_buf[0x10];   // I2C receive buffer   
10
int8 snd_buf[0x10];   // I2C send buffer     
11

  
12
int8 buffer[0x10];   // I2C buffer     
13
int8 address;
14

  
15
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};
16

  
17
#INT_SSP
18
void ssp_interupt ()
19
{
20
   BYTE incoming, state;
21

  
22
   state = i2c_isr_state();
23
   
24
   if(state < 0x80)                     //Master is sending data
25
   {
26
      incoming = i2c_read();
27
      if(state == 1)                     //First received byte is address
28
      {
29
         address = incoming;
30
         if (incoming == 2)
31
         {
32
            buffer[0]=make8(count,0);
33
            buffer[1]=make8(count,1);
34
         }
35
      }
36
      if(state == 2)                     //Second received byte is data
37
         buffer[address] = incoming;
38
         
39
      
40
   }
41
   if(state == 0x80)                     //Master is requesting data
42
   {
43
      i2c_write(buffer[address]);
44
   }
45
}
46

  
47

  
48
#int_TIMER2 // every 10 ms
49
void  TIMER2_isr(void) 
50
{
51
   output_low(CE);
52
   count=get_timer1();
53
   set_timer1(0);
54
   output_high(CE);
55
}
56

  
57
 
58
void main()
59
{
60
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
61
   setup_adc(ADC_OFF);
62
//   setup_spi(SPI_SS_DISABLED);
63
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
64
//   setup_wdt(WDT_144MS);
65
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
66
   setup_timer_2(T2_DIV_BY_16,196,16);
67
   setup_ccp1(CCP_OFF);
68
   setup_comparator(NC_NC_NC_NC);
69
   setup_vref(FALSE);
70
   
71
   delay_ms(1000);
72
   int n;
73
   for (n=0;n<40;n++)
74
   {
75
      putc(cmd[n]);
76
   }
77

  
78
   printf("cvak...\r\n");
79
//   snd_buf[2]=0x55;
80
//   snd_buf[3]=0xAA;
81
   
82
   set_timer1(0);
83
   enable_interrupts(INT_SSP); 
84
//   enable_interrupts(INT_TIMER2);
85
   enable_interrupts(GLOBAL);    
86

  
87
   while(true)
88
   {
89
      
90
output_high(LED);
91
output_low(LED);
92
      set_timer1(0);
93
      output_high(CE);
94
      delay_ms(999);
95
      delay_us(966);
96
      output_low(CE);
97
   count=get_timer1();
98
   
99
      printf("count: %Lu %X %X %X %X\r\n",count, buffer[0],buffer[1],buffer[2],buffer[3]);
100
   }
101
}
Designs/Measuring_instruments/RMDS01C/SW/PIC16F887/main.lst
1
CCS PCM C Compiler, Version 4.106, 47914               01-II-14 20:13
2

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

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

  
11
*
12
0000:  MOVLW  02
13
0001:  MOVWF  0A
14
0002:  GOTO   21C
15
0003:  NOP
16
0004:  MOVWF  7F
17
0005:  SWAPF  03,W
18
0006:  CLRF   03
19
0007:  MOVWF  21
20
0008:  MOVF   0A,W
21
0009:  MOVWF  20
22
000A:  CLRF   0A
23
000B:  MOVF   04,W
24
000C:  MOVWF  22
25
000D:  MOVF   77,W
26
000E:  MOVWF  23
27
000F:  MOVF   78,W
28
0010:  MOVWF  24
29
0011:  MOVF   79,W
30
0012:  MOVWF  25
31
0013:  MOVF   7A,W
32
0014:  MOVWF  26
33
0015:  BCF    03.7
34
0016:  BCF    03.5
35
0017:  MOVLW  8C
36
0018:  MOVWF  04
37
0019:  BTFSS  00.1
38
001A:  GOTO   01D
39
001B:  BTFSC  0C.1
40
001C:  GOTO   034
41
001D:  MOVLW  8C
42
001E:  MOVWF  04
43
001F:  BTFSS  00.3
44
0020:  GOTO   023
45
0021:  BTFSC  0C.3
46
0022:  GOTO   037
47
0023:  MOVF   22,W
48
0024:  MOVWF  04
49
0025:  MOVF   23,W
50
0026:  MOVWF  77
51
0027:  MOVF   24,W
52
0028:  MOVWF  78
53
0029:  MOVF   25,W
54
002A:  MOVWF  79
55
002B:  MOVF   26,W
56
002C:  MOVWF  7A
57
002D:  MOVF   20,W
58
002E:  MOVWF  0A
59
002F:  SWAPF  21,W
60
0030:  MOVWF  03
61
0031:  SWAPF  7F,F
62
0032:  SWAPF  7F,W
63
0033:  RETFIE
64
0034:  BCF    0A.3
65
0035:  BCF    0A.4
66
0036:  GOTO   0B0
67
0037:  BCF    0A.3
68
0038:  BCF    0A.4
69
0039:  GOTO   066
70
.................... #include "main.h" 
71
.................... #include <16F887.h> 
72
.................... //////// Standard Header file for the PIC16F887 device //////////////// 
73
.................... #device PIC16F887 
74
.................... #list 
75
....................  
76
.................... #device adc=8 
77
....................  
78
.................... #FUSES NOWDT                    //No Watch Dog Timer 
79
.................... #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) 
80
.................... #FUSES NOPUT                    //No Power Up Timer 
81
.................... #FUSES MCLR                     //Master Clear pin enabled 
82
.................... #FUSES NOPROTECT                //Code not protected from reading 
83
.................... #FUSES NOCPD                    //No EE protection 
84
.................... #FUSES NOBROWNOUT               //No brownout reset 
85
.................... #FUSES IESO                     //Internal External Switch Over mode enabled 
86
.................... #FUSES FCMEN                    //Fail-safe clock monitor enabled 
87
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
88
.................... #FUSES NODEBUG                  //No Debug mode for ICD 
89
.................... #FUSES NOWRT                    //Program memory not write protected 
90
.................... #FUSES BORV40                   //Brownout reset at 4.0V 
91
....................  
92
.................... #use delay(clock=20000000) 
93
*
94
00DC:  MOVLW  5F
95
00DD:  MOVWF  04
96
00DE:  BCF    03.7
97
00DF:  MOVF   00,W
98
00E0:  BTFSC  03.2
99
00E1:  GOTO   0EF
100
00E2:  MOVLW  06
101
00E3:  MOVWF  78
102
00E4:  CLRF   77
103
00E5:  DECFSZ 77,F
104
00E6:  GOTO   0E5
105
00E7:  DECFSZ 78,F
106
00E8:  GOTO   0E4
107
00E9:  MOVLW  7B
108
00EA:  MOVWF  77
109
00EB:  DECFSZ 77,F
110
00EC:  GOTO   0EB
111
00ED:  DECFSZ 00,F
112
00EE:  GOTO   0E2
113
00EF:  RETURN
114
*
115
013A:  MOVLW  03
116
013B:  SUBWF  5F,F
117
013C:  BTFSS  03.0
118
013D:  GOTO   148
119
013E:  MOVLW  5F
120
013F:  MOVWF  04
121
0140:  BCF    03.7
122
0141:  MOVF   00,W
123
0142:  BTFSC  03.2
124
0143:  GOTO   148
125
0144:  GOTO   146
126
0145:  GOTO   146
127
0146:  DECFSZ 00,F
128
0147:  GOTO   145
129
0148:  BCF    0A.3
130
0149:  BCF    0A.4
131
014A:  GOTO   2C1 (RETURN)
132
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors) 
133
....................  
134
.................... //NOTE: Must declare MASTER before SLAVE, i2c_isr_state() returns 0  
135
.................... //      when MASTER is the most recent #use i2c  
136
.................... //#use i2c(MASTER, sda=PIN_C1, scl=PIN_C0, stream=I2CM)  
137
.................... #use i2c(SLAVE, Fast, sda=PIN_C4, scl=PIN_C3, force_hw, address=0xA0)  
138
*
139
00A1:  MOVF   6A,W
140
00A2:  MOVWF  13
141
00A3:  BSF    14.4
142
00A4:  BCF    0C.3
143
00A5:  BSF    03.5
144
00A6:  BTFSC  14.0
145
00A7:  GOTO   0A6
146
00A8:  CLRF   78
147
00A9:  BCF    03.5
148
00AA:  BTFSC  14.4
149
00AB:  INCF   78,F
150
....................  
151
....................  
152
....................  
153
....................  
154
.................... #define LED PIN_E1   
155
.................... #define CE  PIN_E2 
156
....................  
157
.................... int16 count; 
158
....................  
159
.................... int8 rcv_buf[0x10];   // I2C receive buffer    
160
.................... int8 snd_buf[0x10];   // I2C send buffer      
161
....................  
162
.................... int8 buffer[0x10];   // I2C buffer      
163
.................... int8 address; 
164
....................  
165
.................... 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}; 
166
....................  
167
.................... #INT_SSP 
168
.................... void ssp_interupt () 
169
.................... { 
170
....................    BYTE incoming, state; 
171
....................  
172
....................    state = i2c_isr_state(); 
173
*
174
0066:  BSF    03.5
175
0067:  BTFSC  14.5
176
0068:  GOTO   071
177
0069:  BCF    03.5
178
006A:  CLRF   5C
179
006B:  BSF    03.5
180
006C:  BTFSS  14.2
181
006D:  GOTO   071
182
006E:  BCF    03.5
183
006F:  BSF    5C.7
184
0070:  BSF    03.5
185
0071:  BCF    03.5
186
0072:  MOVF   5C,W
187
0073:  INCF   5C,F
188
0074:  MOVWF  68
189
....................     
190
....................    if(state < 0x80)                     //Master is sending data 
191
0075:  MOVF   68,W
192
0076:  SUBLW  7F
193
0077:  BTFSS  03.0
194
0078:  GOTO   095
195
....................    { 
196
....................       incoming = i2c_read(); 
197
0079:  BCF    14.6
198
007A:  BTFSS  0C.3
199
007B:  GOTO   07A
200
007C:  MOVF   13,W
201
007D:  BSF    14.4
202
007E:  MOVWF  67
203
....................       if(state == 1)                     //First received byte is address 
204
007F:  DECFSZ 68,W
205
0080:  GOTO   08B
206
....................       { 
207
....................          address = incoming; 
208
0081:  MOVF   67,W
209
0082:  MOVWF  5B
210
....................          if (incoming == 2) 
211
0083:  MOVF   67,W
212
0084:  SUBLW  02
213
0085:  BTFSS  03.2
214
0086:  GOTO   08B
215
....................          { 
216
....................             buffer[0]=make8(count,0); 
217
0087:  MOVF   29,W
218
0088:  MOVWF  4B
219
....................             buffer[1]=make8(count,1); 
220
0089:  MOVF   2A,W
221
008A:  MOVWF  4C
222
....................          } 
223
....................       } 
224
....................       if(state == 2)                     //Second received byte is data 
225
008B:  MOVF   68,W
226
008C:  SUBLW  02
227
008D:  BTFSS  03.2
228
008E:  GOTO   095
229
....................          buffer[address] = incoming; 
230
008F:  MOVLW  4B
231
0090:  ADDWF  5B,W
232
0091:  MOVWF  04
233
0092:  BCF    03.7
234
0093:  MOVF   67,W
235
0094:  MOVWF  00
236
....................           
237
....................        
238
....................    } 
239
....................    if(state == 0x80)                     //Master is requesting data 
240
0095:  MOVF   68,W
241
0096:  SUBLW  80
242
0097:  BTFSS  03.2
243
0098:  GOTO   0AC
244
....................    { 
245
....................       i2c_write(buffer[address]); 
246
0099:  MOVLW  4B
247
009A:  ADDWF  5B,W
248
009B:  MOVWF  04
249
009C:  BCF    03.7
250
009D:  MOVF   00,W
251
009E:  MOVWF  69
252
009F:  MOVF   69,W
253
00A0:  MOVWF  6A
254
....................    } 
255
.................... } 
256
....................  
257
....................  
258
*
259
00AC:  BCF    0C.3
260
00AD:  BCF    0A.3
261
00AE:  BCF    0A.4
262
00AF:  GOTO   023
263
.................... #int_TIMER2 // every 10 ms 
264
.................... void  TIMER2_isr(void)  
265
.................... { 
266
....................    output_low(CE); 
267
00B0:  BSF    03.5
268
00B1:  BCF    09.2
269
00B2:  BCF    03.5
270
00B3:  BCF    09.2
271
....................    count=get_timer1(); 
272
00B4:  MOVF   0F,W
273
00B5:  MOVWF  7A
274
00B6:  MOVF   0E,W
275
00B7:  MOVWF  77
276
00B8:  MOVF   0F,W
277
00B9:  SUBWF  7A,W
278
00BA:  BTFSS  03.2
279
00BB:  GOTO   0B4
280
00BC:  MOVF   77,W
281
00BD:  MOVWF  29
282
00BE:  MOVF   7A,W
283
00BF:  MOVWF  2A
284
....................    set_timer1(0); 
285
00C0:  CLRF   0F
286
00C1:  CLRF   0E
287
....................    output_high(CE); 
288
00C2:  BSF    03.5
289
00C3:  BCF    09.2
290
00C4:  BCF    03.5
291
00C5:  BSF    09.2
292
.................... } 
293
....................  
294
....................   
295
00C6:  BCF    0C.1
296
00C7:  BCF    0A.3
297
00C8:  BCF    0A.4
298
00C9:  GOTO   023
299
.................... void main() 
300
.................... { 
301
*
302
021C:  CLRF   04
303
021D:  BCF    03.7
304
021E:  MOVLW  1F
305
021F:  ANDWF  03,F
306
0220:  BSF    03.5
307
0221:  BSF    03.6
308
0222:  BSF    07.3
309
0223:  MOVLW  08
310
0224:  BCF    03.6
311
0225:  MOVWF  19
312
0226:  MOVLW  02
313
0227:  MOVWF  1A
314
0228:  MOVLW  A6
315
0229:  MOVWF  18
316
022A:  MOVLW  90
317
022B:  BCF    03.5
318
022C:  MOVWF  18
319
022D:  BSF    28.3
320
022E:  MOVF   28,W
321
022F:  BSF    03.5
322
0230:  MOVWF  07
323
0231:  BCF    03.5
324
0232:  BSF    28.4
325
0233:  MOVF   28,W
326
0234:  BSF    03.5
327
0235:  MOVWF  07
328
0236:  MOVLW  A0
329
0237:  MOVWF  13
330
0238:  MOVLW  36
331
0239:  BCF    03.5
332
023A:  MOVWF  14
333
023B:  BSF    03.5
334
023C:  BSF    03.6
335
023D:  MOVF   09,W
336
023E:  ANDLW  C0
337
023F:  MOVWF  09
338
0240:  BCF    03.6
339
0241:  BCF    1F.4
340
0242:  BCF    1F.5
341
0243:  MOVLW  00
342
0244:  BSF    03.6
343
0245:  MOVWF  08
344
0246:  BCF    03.5
345
0247:  CLRF   07
346
0248:  CLRF   08
347
0249:  CLRF   09
348
....................    setup_adc_ports(NO_ANALOGS|VSS_VDD); 
349
*
350
0250:  BSF    03.5
351
0251:  BSF    03.6
352
0252:  MOVF   09,W
353
0253:  ANDLW  C0
354
0254:  MOVWF  09
355
0255:  BCF    03.6
356
0256:  BCF    1F.4
357
0257:  BCF    1F.5
358
0258:  MOVLW  00
359
0259:  BSF    03.6
360
025A:  MOVWF  08
361
....................    setup_adc(ADC_OFF); 
362
025B:  BCF    03.5
363
025C:  BCF    03.6
364
025D:  BCF    1F.0
365
.................... //   setup_spi(SPI_SS_DISABLED); 
366
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 
367
025E:  BSF    03.5
368
025F:  MOVF   01,W
369
0260:  ANDLW  C7
370
0261:  IORLW  08
371
0262:  MOVWF  01
372
.................... //   setup_wdt(WDT_144MS); 
373
....................    setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); 
374
0263:  MOVLW  07
375
0264:  BCF    03.5
376
0265:  MOVWF  10
377
....................    setup_timer_2(T2_DIV_BY_16,196,16); 
378
0266:  MOVLW  78
379
0267:  MOVWF  78
380
0268:  IORLW  06
381
0269:  MOVWF  12
382
026A:  MOVLW  C4
383
026B:  BSF    03.5
384
026C:  MOVWF  12
385
....................    setup_ccp1(CCP_OFF); 
386
026D:  BCF    03.5
387
026E:  BSF    28.2
388
026F:  MOVF   28,W
389
0270:  BSF    03.5
390
0271:  MOVWF  07
391
0272:  BCF    03.5
392
0273:  CLRF   17
393
0274:  BSF    03.5
394
0275:  CLRF   1B
395
0276:  CLRF   1C
396
0277:  MOVLW  01
397
0278:  MOVWF  1D
398
....................    setup_comparator(NC_NC_NC_NC); 
399
0279:  BCF    03.5
400
027A:  BSF    03.6
401
027B:  CLRF   07
402
027C:  CLRF   08
403
027D:  CLRF   09
404
....................    setup_vref(FALSE); 
405
027E:  BSF    03.5
406
027F:  BCF    03.6
407
0280:  CLRF   17
408
....................     
409
....................    delay_ms(1000); 
410
0281:  MOVLW  04
411
0282:  BCF    03.5
412
0283:  MOVWF  5E
413
0284:  MOVLW  FA
414
0285:  MOVWF  5F
415
0286:  CALL   0DC
416
0287:  DECFSZ 5E,F
417
0288:  GOTO   284
418
....................    int n; 
419
....................    for (n=0;n<40;n++) 
420
0289:  CLRF   5D
421
028A:  MOVF   5D,W
422
028B:  SUBLW  27
423
028C:  BTFSS  03.0
424
028D:  GOTO   295
425
....................    { 
426
....................       putc(cmd[n]); 
427
028E:  MOVF   5D,W
428
028F:  CALL   03A
429
0290:  BTFSS  0C.4
430
0291:  GOTO   290
431
0292:  MOVWF  19
432
....................    } 
433
0293:  INCF   5D,F
434
0294:  GOTO   28A
435
....................  
436
....................    printf("cvak...\r\n"); 
437
0295:  MOVLW  CA
438
0296:  BSF    03.6
439
0297:  MOVWF  0D
440
0298:  MOVLW  00
441
0299:  MOVWF  0F
442
029A:  BCF    03.6
443
029B:  GOTO   0F0
444
....................    snd_buf[2]=0x55; 
445
029C:  MOVLW  55
446
029D:  MOVWF  3D
447
....................    snd_buf[3]=0xAA; 
448
029E:  MOVLW  AA
449
029F:  MOVWF  3E
450
....................     
451
....................    set_timer1(0); 
452
02A0:  CLRF   0F
453
02A1:  CLRF   0E
454
....................    enable_interrupts(INT_SSP);  
455
02A2:  BSF    03.5
456
02A3:  BSF    0C.3
457
.................... //   enable_interrupts(INT_TIMER2); 
458
....................    enable_interrupts(GLOBAL);     
459
02A4:  MOVLW  C0
460
02A5:  BCF    03.5
461
02A6:  IORWF  0B,F
462
....................  
463
....................    while(true) 
464
....................    { 
465
....................        
466
.................... output_high(LED); 
467
02A7:  BSF    03.5
468
02A8:  BCF    09.1
469
02A9:  BCF    03.5
470
02AA:  BSF    09.1
471
.................... output_low(LED); 
472
02AB:  BSF    03.5
473
02AC:  BCF    09.1
474
02AD:  BCF    03.5
475
02AE:  BCF    09.1
476
....................       set_timer1(0); 
477
02AF:  CLRF   0F
478
02B0:  CLRF   0E
479
....................       output_high(CE); 
480
02B1:  BSF    03.5
481
02B2:  BCF    09.2
482
02B3:  BCF    03.5
483
02B4:  BSF    09.2
484
....................       delay_ms(999); 
485
02B5:  MOVLW  09
486
02B6:  MOVWF  5E
487
02B7:  MOVLW  6F
488
02B8:  MOVWF  5F
489
02B9:  CALL   0DC
490
02BA:  DECFSZ 5E,F
491
02BB:  GOTO   2B7
492
....................       delay_us(966); 
493
02BC:  MOVLW  06
494
02BD:  MOVWF  5E
495
02BE:  MOVLW  A0
496
02BF:  MOVWF  5F
497
02C0:  GOTO   13A
498
02C1:  DECFSZ 5E,F
499
02C2:  GOTO   2BE
500
....................       output_low(CE); 
501
02C3:  BSF    03.5
502
02C4:  BCF    09.2
503
02C5:  BCF    03.5
504
02C6:  BCF    09.2
505
....................    count=get_timer1(); 
506
02C7:  MOVF   0F,W
507
02C8:  MOVWF  7A
508
02C9:  MOVF   0E,W
509
02CA:  MOVWF  77
510
02CB:  MOVF   0F,W
511
02CC:  SUBWF  7A,W
512
02CD:  BTFSS  03.2
513
02CE:  GOTO   2C7
514
02CF:  MOVF   77,W
515
02D0:  MOVWF  29
516
02D1:  MOVF   7A,W
517
02D2:  MOVWF  2A
518
....................     
519
....................       printf("count: %Lu %X %X %X %X\r\n",count, buffer[0],buffer[1],buffer[2],buffer[3]); 
520
02D3:  MOVLW  CF
521
02D4:  BSF    03.6
522
02D5:  MOVWF  0D
523
02D6:  MOVLW  00
524
02D7:  MOVWF  0F
525
02D8:  BCF    03.0
526
02D9:  MOVLW  07
527
02DA:  BCF    03.6
528
02DB:  MOVWF  5E
529
02DC:  GOTO   14B
530
02DD:  MOVLW  10
531
02DE:  MOVWF  04
532
02DF:  MOVF   2A,W
533
02E0:  MOVWF  5F
534
02E1:  MOVF   29,W
535
02E2:  MOVWF  5E
536
02E3:  GOTO   19E
537
02E4:  MOVLW  20
538
02E5:  BTFSS  0C.4
539
02E6:  GOTO   2E5
540
02E7:  MOVWF  19
541
02E8:  MOVF   4B,W
542
02E9:  MOVWF  5E
543
02EA:  MOVLW  37
544
02EB:  MOVWF  5F
545
02EC:  CALL   1F9
546
02ED:  MOVLW  20
547
02EE:  BTFSS  0C.4
548
02EF:  GOTO   2EE
549
02F0:  MOVWF  19
550
02F1:  MOVF   4C,W
551
02F2:  MOVWF  5E
552
02F3:  MOVLW  37
553
02F4:  MOVWF  5F
554
02F5:  CALL   1F9
555
02F6:  MOVLW  20
556
02F7:  BTFSS  0C.4
557
02F8:  GOTO   2F7
558
02F9:  MOVWF  19
559
02FA:  MOVF   4D,W
560
02FB:  MOVWF  5E
561
02FC:  MOVLW  37
562
02FD:  MOVWF  5F
563
02FE:  CALL   1F9
564
02FF:  MOVLW  20
565
0300:  BTFSS  0C.4
566
0301:  GOTO   300
567
0302:  MOVWF  19
568
0303:  MOVF   4E,W
569
0304:  MOVWF  5E
570
0305:  MOVLW  37
571
0306:  MOVWF  5F
572
0307:  CALL   1F9
573
0308:  MOVLW  0D
574
0309:  BTFSS  0C.4
575
030A:  GOTO   309
576
030B:  MOVWF  19
577
030C:  MOVLW  0A
578
030D:  BTFSS  0C.4
579
030E:  GOTO   30D
580
030F:  MOVWF  19
581
....................    } 
582
0310:  GOTO   2A7
583
.................... } 
584
0311:  SLEEP
585

  
586
Configuration Fuses:
587
   Word  1: 2CF2   HS NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUG
588
   Word  2: 3FFF   NOWRT BORV40
Designs/Measuring_instruments/RMDS01C/SW/PIC16F887/main.hex
1
:1000000002308A001C2A0000FF00030E8301A100B9
2
:100010000A08A0008A010408A2007708A300780853
3
:10002000A4007908A5007A08A600831383128C30F7
4
:100030008400801C1D288C1834288C308400801D7E
5
:1000400023288C193728220884002308F700240865
6
:10005000F8002508F9002608FA0020088A00210E79
7
:100060008300FF0E7F0E09008A110A12B0288A1140
8
:100070000A1266280A108A100A118207B5346234FF
9
:100080000634313420340034003400340034003479
10
:100090003234003400340034803484341E3400346C
11
:1000A000E034C83410340034403442340F34003467
12
:1000B000A034863401340034003400340034003479
13
:1000C000F734003400340034123403348316941AA5
14
:1000D00071288312DC018316141D71288312DC172A
15
:1000E000831683125C08DC0AE80068087F3C031C66
16
:1000F000952814138C1D7A2813081416E700680B32
17
:100100008B286708DB006708023C031D8B28290841
18
:10011000CB002A08CC006808023C031D95284B3010
19
:100120005B0784008313670880006808803C031D18
20
:10013000AC284B305B07840083130008E900690892
21
:10014000EA006A08930014168C1183161418A62866
22
:10015000F8018312141AF80A8C118A110A12232842
23
:1001600083160911831209110F08FA000E08F7000F
24
:100170000F087A02031DB4287708A9007A08AA009C
25
:100180008F018E0183160911831209158C108A11B3
26
:100190000A122328633BE1352E17AE060A00E33727
27
:1001A0007537741DA012CC3AA0125810252CA0123D
28
:1001B0005810252C0D0500005F30840083130008C3
29
:1001C0000319EF280630F800F701F70BE528F80BC4
30
:1001D000E4287B30F700F70BEB28800BE2280800BF
31
:1001E000831603178C170C140000000083120C08F0
32
:1001F0007F39031936290313DE0003170D08031393
33
:10020000DF0003170F080313E0005E080C1E062929
34
:1002100099005F0803178D000313600803178F0010
35
:1002200083168C170C140000000083120C0D0E0DA9
36
:100230007F39031936290313DE0003170D08031352
37
:10024000DF0003170F080313E0005E080C1E2629C9
38
:1002500099005F0803178D000313600803178F00D0
39
:100260008D0A03198F0A0313F028031703138A1149
40
:100270000A129C2A0330DF02031C48295F308400E5
41
:10028000831300080319482946294629800B45296C
42
:100290008A110A12C12A831603178C170C14000046
43
:1002A000000003187B2983120C087F390313DF0039
44
:1002B00003170D080313E00003170F080313E100F1
45
:1002C0005F080C1E61299900600803178D00031355
46
:1002D000610803178F0083168C170C1400000000B0
47
:1002E00083120313DE0B75297829831603177B29E4
48
:1002F0009B298316031783120C0D0E0D7F390313F0
49
:10030000DF0003170D080313E00003170F080313A2
50
:10031000E1005F080C1E8A299900600803178D0010
51
:100320000313610803178F008D0A03198F0A031046
52
:100330000313DE0B4B298A110A12DD2AE601040899
53
:10034000E5006610831B66145F0EF038E100E107DC
54
:10035000E23EE200323EE4005F080F39E207E207C6
55
:10036000E407E93EE300E307E3075E0E0F39E30726
56
:10037000E407E30DE40DE409E40D5E080F39E4073A
57
:10038000E10D0730E0000A30E407E303031CC42951
58
:10039000E307E203031CC829E207E103031CCC299D
59
:1003A000E107E003031CD029603084008313073089
60
:1003B0006505651384076430040203196517000896
61
:1003C000F700031DEB29651BEB29651AF329E519D5
62
:1003D000EB292030EE29E51565123030F707770854
... This diff was truncated because it exceeds the maximum size that can be displayed. :@created_atf1420051052.3806369\[:@expires_in0