o: ActiveSupport::Cache::Entry :@compressedF: @value"�ô"zô
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader/bloader.c
1
/**** BootLoader ****/
2
#define VERSION "1.2"
3
#define ID "$Id: bloader.c 1881 2011-02-24 17:27:37Z kakl $"
4

  
5
#CASE    // Case sensitive compiler
6

  
7
#define  FLASH_BLOCK_SIZE     32
8
#define  BLOADER_MAIN_LENGTH  139  // Rezervovane misto pro main BootLoaderu
9
#define  RESERVED_BLOCKS      24   // Pocet rezervovanych bloku Flash pro BootLoader
10
#define  LOADER_RESERVED    getenv("PROGRAM_MEMORY")-RESERVED_BLOCKS*FLASH_BLOCK_SIZE
11
#define  BUFFER_LEN_LOD       46
12
#if FLASH_BLOCK_SIZE != getenv("FLASH_ERASE_SIZE")/2
13
  #error Wrong length of the Flash Block Size. getenv("FLASH_ERASE_SIZE")/getenv("FLASH_WRITE_SIZE")
14
#endif
15

  
16
#include "bloader.h"
17
#include <string.h>
18

  
19
#bit CREN = 0x18.4      // USART registers
20
#bit SPEN = 0x18.7
21
#bit OERR = 0x18.1
22
#bit FERR = 0x18.2
23

  
24

  
25
#INT_RDA
26
void rs232_handler()
27
{
28
   putchar(getc());
29
}
30

  
31
void welcome(void)               // Welcome message
32
{
33
   char  REV[50]=ID;       // Buffer for concatenate of a version string
34
   char  VER[4]=VERSION;   // Buffer for concatenate of a version string
35

  
36
   if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
37
   printf("\r\n\r\n# BLoader %s (C) 2007 KAKL\r\n",VER);   // Welcome message
38
   printf("#%s\r\n",&REV[4]);
39
}
40

  
41

  
42
/*-------------------------------- MAIN --------------------------------------*/
43
#SEPARATE
44
void real_main()
45
{
46
   int8 i=0;
47

  
48
   welcome();
49

  
50
   printf("# Reserved: %Lu\r\n", RESERVED_BLOCKS*FLASH_BLOCK_SIZE);
51
   
52
   printf("# Boot Loader Test >>>\r\n# ");
53
   enable_interrupts(INT_RDA);
54
   enable_interrupts(GLOBAL);
55
   while(TRUE)
56
   {
57
      printf("%u|",i++);
58
      delay_ms(100);
59
   }
60
}
61

  
62

  
63
/*------------------- BOOT LOADER --------------------------------------------*/
64

  
65
#BUILD(INTERRUPT=FLASH_BLOCK_SIZE)   // Redirect Interrupt routine above first flash block
66
#ORG 4,5
67
void JumpToTheInterrupt()     // Jump to the Interrupt Handler
68
{ #asm GOTO FLASH_BLOCK_SIZE #endasm }
69
#ORG 6,FLASH_BLOCK_SIZE-1 {} // First Flash block is reserved
70

  
71

  
72
#ORG LOADER_RESERVED,LOADER_RESERVED+FLASH_BLOCK_SIZE-1 auto=0
73
#SEPARATE
74
void dummy_main() // Main on the fix position
75
{
76
   real_main();
77
}
78

  
79
#ORG LOADER_RESERVED+FLASH_BLOCK_SIZE,getenv("PROGRAM_MEMORY")-BLOADER_MAIN_LENGTH auto=0 default
80

  
81
unsigned int atoi_b16(char *s)  // Convert two hex characters to an int8
82
{
83
   unsigned int result = 0;
84
   int i;
85

  
86
   for (i=0; i<2; i++,s++)  {
87
      if (*s >= 'A')
88
         result = 16*result + (*s) - 'A' + 10;
89
      else
90
         result = 16*result + (*s) - '0';
91
   }
92

  
93
   return(result);
94
}
95

  
96
void assert(int1 Condition, int8 ErrorCode)
97
{
98
   if(Condition)
99
   {
100
      putchar('E');
101
      putchar(ErrorCode+'1');
102
      reset_cpu();
103
   }
104
}
105

  
106
void pause()
107
{
108
   int16 timeout;
109

  
110
   for(timeout=0; timeout<65535; timeout++); // Delay cca 300ms
111
}
112

  
113
#SEPARATE
114
void boot_loader()
115
{
116
   int  buffidx;
117
   char buffer[BUFFER_LEN_LOD];
118

  
119
   int8  checksum, line_type;
120
   int16 l_addr,h_addr=0;
121
   int16 addr;
122
   int32 next_addr;
123

  
124
   int8  dataidx, i;
125
   union program_data {
126
      int8  i8[16];
127
      int16 i16[8];
128
   } data;
129

  
130
   putchar('@');
131

  
132
//nesmaze obsluhu preruseni a jump na main
133
   for(addr=getenv("FLASH_ERASE_SIZE")/2;addr<=LOADER_RESERVED;addr+=getenv("FLASH_ERASE_SIZE")/2)
134
   {
135
      erase_program_eeprom(addr);
136
      putchar('.');
137
   }
138

  
139
   putchar('!');
140

  
141
   while(!kbhit()) restart_wdt();
142

  
143
   while(TRUE)
144
   {
145
//---WDT
146
      while (getc()!=':') restart_wdt(); // Only process data blocks that starts with ':'
147

  
148
      buffidx = 0;  // Read into the buffer until fill is received or buffer is full
149
      do
150
      {
151
         buffer[buffidx] = getc();
152
      } while ( (buffer[buffidx++] < 'g') && (buffidx < BUFFER_LEN_LOD) );
153
      assert(buffidx == BUFFER_LEN_LOD,1); // Error 1 - Buffer Overrun
154

  
155
//---WDT
156
      restart_wdt();
157

  
158
      checksum = 0;  // Sum the bytes to find the check sum value
159
      for (i=0; i<(buffidx-3); i+=2)
160
         checksum += atoi_b16 (&buffer[i]);
161
      checksum = 0xFF - checksum + 1;
162
      assert(checksum != atoi_b16 (&buffer[buffidx-3]),2); // Error 2 - Bad CheckSum
163

  
164
//      count = atoi_b16 (&buffer[0]);  // Get the number of bytes from the buffer
165

  
166
      // Get the lower 16 bits of address
167
      l_addr = make16(atoi_b16(&buffer[2]),atoi_b16(&buffer[4]));
168

  
169
      line_type = atoi_b16 (&buffer[6]);
170

  
171
      addr = make32(h_addr,l_addr);
172

  
173
      addr /= 2;        // PIC16 uses word addresses
174

  
175
      // If the line type is 1, then data is done being sent
176
      if (line_type == 1)
177
      {
178
         putchar('#');
179
         reset_cpu();
180
      }
181

  
182
      assert (line_type == 4,4);  // Error 4 - Line type 4
183

  
184
      {
185

  
186
         if (line_type == 0)
187
         {
188
            // Read old program memory content
189
            for (i=0,next_addr=addr;i<8;i++)
190
               data.i16[i]=read_program_eeprom(next_addr++);
191
            // Loops through all of the data and stores it in data
192
            // The last 2 bytes are the check sum, hence buffidx-3
193
            for (i=8,dataidx=0; i < buffidx-3; i += 2)
194
               data.i8[dataidx++]=atoi_b16(&buffer[i]);
195

  
196
            if (addr == 0)
197
            {
198

  
199
               // Write 8 words to the Loader location
200
               addr=LOADER_RESERVED;
201
               for (i=0;i<8;i++)
202
                 write_program_eeprom(addr++, data.i16[i]);
203
               putchar('%');
204
            }
205
            else
206
            if (addr > 7 && addr < LOADER_RESERVED)
207
            {
208
               // Write 8 words
209
               for (i=0;i<8;i++)
210
                 write_program_eeprom(addr++, data.i16[i]);
211
               putchar('*');
212
            }
213
            else putchar('.');
214
//---WDT
215
            restart_wdt();
216
            CREN=0; CREN=1;   // Reinitialise USART
217
         }
218
      }
219
   }
220
}
221

  
222
#ORG default
223

  
224
#ORG getenv("PROGRAM_MEMORY")-BLOADER_MAIN_LENGTH+1,getenv("PROGRAM_MEMORY")-1 auto=0
225
void main()
226
{
227
   int8  timeout;
228

  
229
   disable_interrupts(GLOBAL);
230
   setup_wdt(WDT_2304MS);               // Setup Watch Dog
231
   setup_adc_ports(NO_ANALOGS);
232
   setup_adc(ADC_OFF);
233
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
234
   setup_timer_1(T1_DISABLED);
235
   setup_timer_2(T2_DISABLED,0,1);
236
   setup_comparator(NC_NC_NC_NC);
237
   setup_vref(FALSE);
238
   setup_oscillator(OSC_8MHZ|OSC_INTRC);
239

  
240
   for(timeout=0; timeout<255; timeout++) //cca 50s
241
   {
242
      if (kbhit())
243
        if (getc()=='u') // "uf" as Update Firmware
244
        {
245
          if (getc()=='f')
246
          {
247
            restart_wdt();
248
            boot_loader(); // Update Firmware starter
249
          }
250
        }
251
        else break;
252
      putchar('u'); putchar('f'); putchar('?');
253
      pause();
254
      CREN=0; CREN=1;   // Reinitialise USART
255
      restart_wdt();
256
   };
257

  
258
   CREN=0; CREN=1;   // Reinitialise USART
259
   restart_wdt();
260
   goto_address(LOADER_RESERVED); // Jump to the location where is the jump to the main
261
}
262

  
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader/bloader.hex
1
:0C0000000F308A00762F00002028080036
2
:10004000FF00030E8301A1007F08A0000A08A7009B
3
:100050008A01A00E0408A2007708A3007808A40073
4
:100060007908A5007A08A600831383128C308400D7
5
:10007000801E3C288C1A4D28220884002308F70093
6
:100080002408F8002508F9002608FA0027088A0045
7
:10009000210E8300FF0E7F0E09008A114F288C1E4F
8
:1000A0004F281A080C1E522899008C128A113C28DD
9
:1000B0000D050D0523104226EF30E4327210A539EC
10
:1000C0002014C314201930183710CB204B260D05EF
11
:1000D00000002310D232F332723B65323A102526EB
12
:1000E000F5060A002310C2376F3A2026EF30E432BB
13
:1000F0007210D432733A201F3E1F0D0523100000EA
14
:100100006308E5006208E4006508FA0064088400FA
15
:1001100083137A188317800803199228E40A0319B5
16
:10012000E50A842862086402F7006508FA0063089B
17
:10013000031C630FFA027708F80008008316031700
18
:100140008C170C14000000000318CE2883120C0832
19
:100150007F390313E30003170D080313E4000317AB
20
:100160000F080313E50063080C1EB4289900640807
21
:1001700003178D000313650803178F0083168C1770
22
:100180000C140000000083120313E20BC828CB28D4
23
:1001900083160317CE28EE288316031783120C0D3F
24
:1001A0000E0D7F390313E30003170D080313E4005A
25
:1001B00003170F080313E50063080C1EDD289900E0
26
:1001C000640803178D000313650803178F008D0A59
27
:1001D00003198F0A03100313E20B9E2808008008FE
28
:1001E00003190529E3010408E2006310831B63146B
29
:1001F00000080C1EF9289900620884008313631814
30
:100200008317840A0319850AEF2808003008F801CB
31
:100210002F0203180E292F08F7001A29F7010830BA
32
:10022000B100AF0DF70D300877020318F700F80D95
33
:10023000B10B11290800AB012430AC004930AD00EE
34
:100240006430AE003A30AF002030B0006230B10010
35
:100250006C30B2006F30B3006130B4006430B50070
36
:100260006530B6007230B7002E30B8006330B90088
37
:100270002030BA003130BB003830BC00BD00313016
38
:10028000BE002030BF003230C0003030C1003130FD
39
:10029000C200C3002D30C4003030C5003230C6006B
40
:1002A0002D30C7003230C8003430C9002030CA00B9
41
:1002B0003130CB003730CC003A30CD003230CE0078
42
:1002C0003730CF003A30D0003330D1003730D20051
43
:1002D0005A30D3002030D4006B30D5006130D600C6
44
:1002E0006B30D7006C30D8002030D9002430DA00D1
45
:1002F000DB013130DE002E30DF003230E000E10182
46
:10030000E3012C30E2008020013078022C3E840092
47
:1003100083130008243C031D9729E3012C30E200DD
48
:100320008020013078022C3E8400831380015830F5
49
:1003300003178D0000308F0003100E300313E2000E
50
:100340009E205E3084008313EF20603003178D0001
51
:1003500000308F00031010300313E2009E20233082
52
:100360000C1EB0299900303084008313EF200D302B
53
:100370000C1EB82999000A300C1EBC29990069305E
54
:1003800003178D0000308F0003100C300313E200C0
55
:100390009E20103084000330AD00AC01B40104088D
56
:1003A000B3003410831B34142D0EF038AF00AF07A8
57
:1003B000E23EB000323EB2002D080F39B007B00760
58
:1003C000B207E93EB100B107B1072C0E0F39B107F2
59
:1003D000B207B10DB20DB209B20D2C080F39B20738
60
:1003E000AF0D0730AE000A30B207B103031CF42989
61
:1003F000B107B003031CF829B007AF03031CFC29A5
62
:10040000AF07AE03031C002A2E308400831307308D
63
:1004100033053313840732300402031933170008FD
64
:10042000F700031D1B2A331B1B2A331A232AB31977
65
:100430001B2A20301E2AB31533123030F7077708F5
66
:100440000C1E202A9900840A331F0B2A0D300C1E23
67
:10045000272A99000A300C1E2B2A990072300317A4
68
:100460008D0000308F0083168C170C1400000000E4
69
:1004700083120C087F390319762A0313AC00031783
70
:100480000D080313AD0003170F080313AE002C086B
71
:100490000C1E482A99002D0803178D0003132E08FF
72
:1004A00003178F0083168C170C14000000008312B2
73
:1004B0000C0D0E0D7F390319762A0313AC000317B8
74
:1004C0000D080313AD0003170F080313AE002C082B
75
:1004D0000C1E682A99002D0803178D0003132E089F
76
:1004E00003178F008D0A03198F0A332A831603130B
77
:1004F0008C16C03083128B042B08AB0AAC002C087E
78
:10050000AD001B30AE002D08AF006430B0000621F6
79
:100510007708AD0078083030031D952AAE1C9D2A5F
80
:10052000AE199D2A2E1A2030982AAE112E122E14A2
81
:10053000F80778080C1E9A2A99002D08AF000A3097
82
:10054000B00006217708AD0078083030031DAE2AD0
83
:10055000AE19B32A2E1CB32A2E1A2030F8077808B9
84
:100560000C1EB02A99003030AD072D080C1EB62A9B
85
:1005700099007C300C1EBA2A99006430AC002C30F3
86
:100580008400831300080319D22A0230F800F7010F
87
:10059000F70BC82AF80BC72A9730F700F70BCE2ABB
88
:0A05A000800BC52A7C2A8A15022D63
89
:081A00008A111B298A15080058
90
:101A40008316B1080319342D453083120C1E262D40
91
:101A50009900313083163207B30083120C1E2E2DED
92
:101A600099008A0100288316831208008316B601A4
93
:101A7000B7013708013C031C6A2D3508FA00340809
94
:101A8000840083137A1883170008403C0318572DED
95
:101A9000360EB800F030B8053408840083133518CA
96
:101AA000831700083807BF3E0A3EB600642D360E85
97
:101AB000B800F030B8053408840083133518831754
98
:101AC00000083807D03EB6003708B70AB40A031931
99
:101AD000B50A392D3608F800831208000B08840077
100
:101AE0008B13FC3003178D0583168C170C150430EF
101
:101AF000F70083120D087A020319842D83160C1443
102
:101B000000000000892D831278088C0079088E006F
103
:101B1000831655308D00AA308D008C140000000013
104
:101B20000000000083128D0AF70B7A2D83168C18A3
105
:101B3000972D0C110408831203138B040800E00195
106
:101B4000DF0140300C1EA22D9900E2012030E1009F
107
:101B500062080D3C031CE02D031DB22D6108003C02
108
:101B6000031CE02D610803178D000313620803179F
109
:101B70008F0083168C170C160C15831203130B0899
110
:101B8000F8008B138316031755308D00AA308D0093
111
:101B90008C14000000008C18CB2D0C1178088312D7
112
:101BA00003138B04831603170C122E3083120313B6
113
:101BB0000C1ED82D99002030E1070318E20AA82D49
114
:101BC00021300C1EE12D99008C1AE82D6400E42DC3
115
:101BD0008C1EE82D1A083A3C0319F02D6400E82DFC
116
:101BE000AC012D302C07840083138C1EF52D1A08B0
117
:101BF00080002C08AC0A2D3E840083130008663C4C
118
:101C0000031C062E2C082D3C0318F12D2C082E3C0D
119
:101C100003190C2E00300D2E0130E9008316B1009F
120
:101C20000130B200831220256400DB01E80103309B
121
:101C30002C0268020318302E2D306807E900EA01F3
122
:101C40000318EA0A6A088316B50083126908831626
123
:101C5000B400831236257808DB070230E807172E18
124
:101C60005B08FF3C013EDB0003302C022D3EE90007
125
:101C7000EA010318EA0A6A088316B50083126908A4
126
:101C80008316B4008312362578085B02031D4A2EA2
127
:101C900000304B2E0130E9008316B1000230B20053
128
:101CA000831220258316B5012F30B4008312362508
129
:101CB0007808E9008316B5013130B4008312362567
130
:101CC0006908DE007808DD008316B5013330B40002
131
:101CD000831236257808DC005D08E1005E08E2002A
132
:101CE0000310E20CE10C5C0B7B2E23300C1E762ED5
133
:101CF00099008A0100285C08043C0319812E0030F9
134
:101D0000822E0130E9008316B1000430B200831244
135
:101D10002025DC08031D662FE801E601E5016208C5
136
:101D2000E4006108E3006808073C031CC32E0310AD
137
:101D3000680DA03E840083136608FA006508F90068
138
:101D40006408F8006308F7000130E3070318E40AA9
139
:101D50000319E50A0319E60A7A08EE007708031763
140
:101D60008D000313780803178F0083168C170C144B
141
:101D70000000000083120C088000840A0E08800016
142
:101D80000313E80A932E0830E800E70103302C0221
143
:101D900068020318EF2E6708E70AA03EF800FA0170
144
:101DA0000318FA0A7808E9007A08EA002D30680773
145
:101DB000EB00EC010318EC0A6C088316B5008312E3
146
:101DC0006B088316B40083123625690884008313D8
147
:101DD0006A188317780880000230E807C62EE108E9
148
:101DE000031D262FE208031D262F0D30E200E1011E
149
:101DF000E8016808073C031C212F6208FA0061080B
150
:101E0000E10A0319E20AE9007A08EA000310680D02
151
:101E1000A03E84008313840A0008EC0084030008B9
152
:101E2000EB00690803178D00FA0003136A08031713
153
:101E30008F0003136B08F8006C08F9006E25E80AA0
154
:101E4000F92E25300C1E222F9900632FE208031D66
155
:101E50002D2F6108073C03185F2F62080C3C031C00
156
:101E60005F2FE8016808073C031C5A2F6208FA003C
157
:101E70006108E10A0319E20AE9007A08EA0003109E
158
:101E8000680DA03E84008313840A0008EC008403DC
159
:101E90000008EB00690803178D00FA0003136A08B5
160
:101EA00003178F0003136B08F8006C08F9006E2508
161
:101EB000E80A322F2A300C1E5B2F9900632F2E3038
162
:101EC0000C1E602F9900640018121816E82D0800E7
163
:101ED000AD01AC012C0F6F2F2D0F6F2F732FAC0A9C
164
:081EE0000319AD0A6A2F080086
165
:041EEC0084018313D7
166
:101EF0001F308305723083168F000F08333099002E
167
:101F0000A230980090308312980083161F129F12FF
168
:101F10001B0880399B0007309C008312A801A9018F
169
:101F20000B138B138B1B912F0930031785000F3078
170
:101F3000F700031381018130840083130008F03916
171
:101F40000738800064000008F739F719F039770482
172
:101F5000800083161F129F121B0880399B0083127A
173
:101F60001F1083160108C7390838810083129001B9
174
:101F70000030F800920000308316920007309C0079
175
:101F8000050885000630F700F70BC42F00001C0879
176
:101F900083120D1383169D0172308F000F08831278
177
:101FA000AB012B0FD42FF82F8C1EE62F8C1ED62FB3
178
:101FB0001A08753C031DE52F8C1EDC2F1A08663CA1
179
:101FC000031DE42F64009F25E62FF82F75300C1EAB
180
:101FD000E72F990066300C1EEB2F99003F300C1E46
181
:101FE000EF2F99006827181218166400AB0AD12F3A
182
:0E1FF0001812181664000D308A00820163007A
183
:04400E00142FFC3F30
184
:00000001FF
185
;PIC16F88
186
;CRC=7593  CREATED="24-II-13 21:22"
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader/bloader.PJT
1
[Directories]
2
Include=C:\Program Files\PICC\Devices;C:\Program Files\PICC\Drivers;
3
Library=
4
LinkerScript=
5
[defines]
6
enabled=0
7
D1=
8
V1=
9
[fileformats]
10
forcecoff=0
11
debug=4
12
error=2
13
object=0
14
list=0
15
scratch=0
16
sta=1
17
tre=1
18
allerrors=1
19
allwarnings=1
20
stayupne=3
21
stayupoe=0
22
[PROJECT]
23
Target=bloader.hex
24
Development_Mode=
25
Processor=0x688F
26
Processor_Text=PIC16F88
27
ToolSuite=CCS
28
[Target Data]
29
BuildTool=C-COMPILER
30
OptionString=+FM
31
AdditionalOptionString=
32
BuildRequired=1
33
[bloader.c]
34
Type=4
35
Path=
36
FileList=
37
BuildTool=
38
OptionString=
39
AdditionalOptionString=
40
[mru-list]
41
1=bloader.c
42
[Windows]
43
0=0000 %S 0 0 796 451 3 0
44
[Units]
45
Link=0
46
Count=1
47
1=bloader.c
48
[Opened Files]
49
1=bloader.c
50
2=bloader.h
51
3=C:\Program Files\PICC\devices\16F88.h
52
4=C:\Program Files\PICC\drivers\string.h
53
5=C:\Program Files\PICC\drivers\stddef.h
54
6=C:\Program Files\PICC\drivers\ctype.h
55
7=..\main.h
56
8=
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bltest/dbloader.h
1
/*------------------- DUMMY BOOT LOADER --------------------------------------------*/
2
#define  FLASH_BLOCK_SIZE     getenv("FLASH_ERASE_SIZE")/2 // Minimal length of Flash Block Size
3
#define  RESERVED_BLOCKS      53  // Number of reserved flash blocks for BootLoader
4
#define  LOADER_RESERVED      (getenv("PROGRAM_MEMORY")-(RESERVED_BLOCKS*FLASH_BLOCK_SIZE)) // begining of BootLoader
5

  
6
#BUILD(INTERRUPT=FLASH_BLOCK_SIZE)   // Redirect Interrupt routine above first flash block
7
#ORG 4,5
8
void JumpToTheInterrupt()     // Jump to the Interrupt Handler
9
{ #asm GOTO FLASH_BLOCK_SIZE #endasm }
10
#ORG 6,FLASH_BLOCK_SIZE-1 {} // First Flash block is reserved
11

  
12
#ORG LOADER_RESERVED,getenv("PROGRAM_MEMORY")-1 auto=0
13
#SEPARATE
14
void dummy_main() // Main on the fix position
15
{
16
   reset_cpu();
17
}
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bltest/bltest.h
1
#include <16F887.h>
2
#device adc=10
3

  
4
#FUSES WDT                    //No Watch Dog Timer
5
#FUSES INTRC                    //Internal RC Osc
6
#FUSES NOPUT                    //No Power Up Timer
7
#FUSES MCLR                     //Master Clear pin enabled
8
#FUSES NOPROTECT                //Code not protected from reading
9
#FUSES NOCPD                    //No EE protection
10
#FUSES NOBROWNOUT               //No brownout reset
11
#FUSES IESO                     //Internal External Switch Over mode enabled
12
#FUSES FCMEN                    //Fail-safe clock monitor enabled
13
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
14
#FUSES NODEBUG                  //No Debug mode for ICD
15
#FUSES NOWRT                    //Program memory not write protected
16
#FUSES BORV40                   //Brownout reset at 4.0V
17

  
18
#use delay(clock=8000000)
19
//#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B6,bits=8,ERRORS)
20
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
21

  
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bltest/bltest.c
1
/**** BootLoader Test****/
2

  
3
#CASE    // Case sensitive compiler
4

  
5
#include "bltest.h"
6

  
7
void main()     // Main of loaded program
8
{
9
   int8 i=0;
10

  
11
   while(TRUE)
12
   {
13
      printf("# Boot Loader Test >>> %u\r\n",i++);
14
      delay_ms(100);
15
//      restart_wdt();
16
   }
17
}
18

  
19
#include "dbloader.h"
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bltest/bltest.hex
1
:0C00000000308A00D628000010280800FC
2
:100020002310C2376F3A2026EF30E4327210D432F8
3
:10003000733A201F3E1FA012F5060A00831603170D
4
:100040008C170C140000000003184E2883120C08B3
5
:100050007F390313A40003170D080313A50003172A
6
:100060000F080313A60024080C1E34289900250845
7
:1000700003178D000313260803178F0083168C17B0
8
:100080000C140000000083120313A30B48284B2814
9
:10009000831603174E286E288316031783120C0D40
10
:1000A0000E0D7F390313A40003170D080313A500D9
11
:1000B00003170F080313A60024080C1E5D289900DF
12
:1000C000250803178D000313260803178F008D0AD8
13
:1000D00003198F0A03100313A30B1E288A110A1297
14
:1000E00007292608F8012502031879282508F700B2
15
:1000F0008528F7010830A700A50DF70D260877021F
16
:100100000318F700F80DA70B7C28080078082308CF
17
:10011000A5006430A60071207708A300780830306D
18
:10012000031D9928A41CA128A419A128241A203051
19
:100130009C28A41124122414F80778080C1E9E2869
20
:1001400099002308A5000A30A60071207708A300B3
21
:1001500078083030031DB228A419B728241CB7280A
22
:10016000241A2030F80778080C1EB4289900303083
23
:10017000A30723080C1EBA2899008A110A120C2919
24
:1001800022308400831300080319D3280230F800BA
25
:10019000F701F70BC928F80BC8289730F700F70BC1
26
:1001A000CF28800BC6288A110A12172984018313CD
27
:1001B0001F308305713083168F000F0803178711D6
28
:1001C0000C3003139900A2309800903083129800ED
29
:1001D000831603170908C039890003131F129F12E1
30
:1001E00000300317880083128701880189010313F7
31
:1001F000A001A1012108A10AA200103003178D005F
32
:1002000000308F00031017300313A3001E282208AC
33
:10021000A3001B30A40086280D300C1E0D29990068
34
:100220000A300C1E112999006430A200C028FA2857
35
:02023000630069
36
:063960008A0100280800A6
37
:04400E00FD2CFF3F47
38
:00000001FF
39
;PIC16F887
40
;CRC=B9BE  CREATED="09-3-13 23:48"
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader887/bloader.c
1
/**** BootLoader for PIC16F887 
2

  
3
   Ussage:
4
      ascii-xfr -s -v -l 100 ./bltest.hex > /dev/ttyUSB0
5
*/
6

  
7
#define ID "$Id$"
8

  
9
#CASE    // Case sensitive compiler
10

  
11
#define  FLASH_BLOCK_SIZE     getenv("FLASH_ERASE_SIZE")/2 // Minimal length of Flash Block Size
12
#define  RESERVED_BLOCKS      53  // Number of reserved flash blocks for BootLoader
13
#define  LOADER_RESERVED      (getenv("PROGRAM_MEMORY")-(RESERVED_BLOCKS*FLASH_BLOCK_SIZE)) // begining of BootLoader
14
#define  BUFFER_LEN_LOD       46  // Length of Working buffer for HEX
15

  
16
#define  ERR_BUFFER_OVERRUN      1  // Error 1 - Buffer Overrun
17
#define  ERR_CHECKSUM            2  // Error 2 - Bad CheckSum
18
#define  ERR_TOO_MANY_BYTES      3  // Error 3 - Too many bytes in one line 
19
#define  ERR_UNSUPORTED_LINETYPE 4  // Error 4 - Unsuported Line type 
20

  
21
#include "bloader.h"
22
#include <string.h>
23

  
24
#INT_RDA
25
void rs232_handler() // Test of interrupt
26
{
27
   putchar(getc()); // Just echo for test
28
}
29

  
30
void welcome(void)               // Welcome message
31
{
32
   char  REV[50]=ID;       // Buffer for concatenate of a version string
33

  
34
   if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
35
   printf("\r\n\r\n# BLoader 887 (C) 2013 KAKL\r\n");   // Welcome message
36
   printf("#%s\r\n",&REV[4]);
37
}
38

  
39

  
40
/*-------------------------------- MAIN --------------------------------------*/
41
#SEPARATE
42
void real_main()     // Main of loaded program
43
{
44
   int8 i=0;
45

  
46
   i=rs232_errors; // Just for compiler pleasure (supress Warning)
47
   
48
   welcome();
49

  
50
   printf("# Reserved: %Lu\r\n", RESERVED_BLOCKS*FLASH_BLOCK_SIZE);
51
   printf("# FLASH_ERASE_SIZE: %Lu\r\n",getenv("FLASH_ERASE_SIZE"));
52
   printf("# FLASH_WRITE_SIZE: %Lu\r\n",getenv("FLASH_WRITE_SIZE"));
53
   
54
   printf("# Boot Loader Test >>>\r\n# ");
55
   enable_interrupts(INT_RDA);
56
   enable_interrupts(GLOBAL);
57
   while(TRUE)
58
   {
59
      printf("%u|",i++);  // Do something
60
      delay_ms(100);
61
   }
62
}
63

  
64

  
65
/*------------------- BOOT LOADER --------------------------------------------*/
66

  
67
#BUILD(INTERRUPT=FLASH_BLOCK_SIZE)   // Redirect Interrupt routine above first flash block
68
#ORG 4,5
69
void JumpToTheInterrupt()     // Jump to the Interrupt Handler
70
{ #asm GOTO FLASH_BLOCK_SIZE #endasm }
71
#ORG 6,FLASH_BLOCK_SIZE-1 {} // First Flash block is reserved
72

  
73

  
74
#ORG LOADER_RESERVED,LOADER_RESERVED+FLASH_BLOCK_SIZE-1 auto=0
75
#SEPARATE
76
void dummy_main() // Main on the fix position. It will be overwriten by downloaded program reset vector.
77
{
78
   real_main();
79
}
80

  
81
#ORG LOADER_RESERVED+FLASH_BLOCK_SIZE,getenv("PROGRAM_MEMORY")-1 auto=0 default  //Start of BootLoader
82

  
83
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)  //RS232 control routine for BootLoader
84

  
85
#SEPARATE
86
unsigned int8 atoi_b16(char *s)  // Convert two hex characters to an int8
87
{
88
   unsigned int8 result = 0;
89
   int i;
90

  
91
   for (i=0; i<2; i++,s++)  {
92
      if (*s >= 'A')
93
         result = 16*result + (*s) - 'A' + 10;
94
      else
95
         result = 16*result + (*s) - '0';
96
   }
97

  
98
   return(result);
99
}
100

  
101
void assert(int1 Condition, int8 ErrorCode)  // Send error number to the serial line
102
{
103
   if(Condition)
104
   {
105
      putchar('E');
106
      putchar(ErrorCode+'0');
107
      reset_cpu();
108
   }
109
}
110

  
111
void pause()
112
{
113
   int16 timeout;
114

  
115
   for(timeout=0; timeout<65535; timeout++); // Delay cca 300ms
116
}
117

  
118
#SEPARATE
119
void boot_loader()  // Loads a new program
120
{
121
/*
122
:100240001F2999000A300C1E232999006430A4004C
123
10 = 16 bytes
124
0249 = address 0x0120 (0x240/2 because of words)
125
00 = data
126
...data...
127
4C = checksum
128

  
129
:00000001FF
130
00 = 0 bytes
131
0000 = address 0
132
01 = END
133
FF = checksum
134

  
135
http://cs.wikipedia.org/wiki/Intel_HEX
136
*/
137
   int  buffidx;
138
   char buffer[BUFFER_LEN_LOD];  // Buffer for HEX line
139

  
140
   int8  checksum, num_of_bytes, line_type; // Extracted values from HEX line 
141
   int16 l_addr,h_addr=0;
142
   int16 addr;             // Address of word in PIC
143
   int32 next_addr;        // Helper variable for for
144

  
145
   int8  dataidx, i;    // Buffer for program bytes and pointers
146
   union program_data {
147
      int8  i8[16];
148
      int16 i16[8];
149
   } data;
150

  
151
   disable_interrupts(GLOBAL);
152
   putchar('@');  //Start Erase
153

  
154
   //Erase program. Do not erase "jump to main" and BootLoader.
155
   {
156
      int8 i;
157
      for(i=0;i<32;i++)buffer[i]=0xFF;
158
   }
159
   for(addr=FLASH_BLOCK_SIZE;addr<LOADER_RESERVED+FLASH_BLOCK_SIZE;addr+=FLASH_BLOCK_SIZE)
160
   {
161
      write_program_memory(addr, &buffer[0], 32);
162
      putchar('.');
163
      restart_wdt();
164
   }
165

  
166
   putchar('!');  //Erase completed
167

  
168
//---WDT
169
   while(!kbhit()) restart_wdt(); //Wait for HEX
170
   putc('\r'); putc('\n');
171
   
172
   while(TRUE)
173
   {
174
//---WDT
175
      while (getc()!=':') restart_wdt(); // Only process data blocks that starts with ':'
176
      putchar(':');
177

  
178
      buffidx = 0;  // Read into the buffer until CR is received or buffer is full
179
      do
180
      {
181
         buffer[buffidx] = getc();
182
         putc(buffer[buffidx]);
183
      } while ( (buffer[buffidx++] != '\r') && (buffidx < BUFFER_LEN_LOD) );
184
      assert(buffidx == BUFFER_LEN_LOD, ERR_BUFFER_OVERRUN); // Error 1 - Buffer Overrun
185
      buffidx--;
186
      
187
//---WDT
188
      restart_wdt();
189

  
190
      checksum = 0;  // Sum the bytes to find the check sum value
191
      for (i=0; i<(buffidx); i+=2)
192
      {
193
         checksum += atoi_b16 (&buffer[i]);
194
      }
195
      assert(checksum != 0, ERR_CHECKSUM); // Error 2 - Bad CheckSum
196

  
197
      // Get the lower 16 bits of address
198
      l_addr = make16(atoi_b16(&buffer[2]),atoi_b16(&buffer[4]));
199

  
200
      line_type = atoi_b16 (&buffer[6]);
201
      
202
      num_of_bytes = atoi_b16 (&buffer[0]);
203
      assert (num_of_bytes > 16, ERR_TOO_MANY_BYTES);  // Error 3 - Too many bytes in one line 
204

  
205
      addr = make32(h_addr,l_addr);
206

  
207
      addr /= 2;        // PIC16 uses word addresses
208

  
209
      // If the line type is 1 then END
210
      if (line_type == 1)
211
      {
212
         putchar('#');
213
         reset_cpu();
214
      }
215

  
216
      assert (line_type != 0, ERR_UNSUPORTED_LINETYPE);  // Error 4 - Unsuported Line type 
217

  
218
      {
219
         // Read old program memory content
220
         for (i=0,next_addr=addr;i<8;i++)
221
            data.i16[i]=read_program_eeprom(next_addr++);
222
         // Loops through all of the data and stores it in data
223
         // The last 2 bytes are the check sum, hence buffidx-2
224
         for (i=8,dataidx=0; i < (buffidx-2); i += 2)
225
            data.i8[dataidx++]=atoi_b16(&buffer[i]);
226

  
227
         if (addr == 0)
228
         {
229
            // Write 8 words to the Loader location (jump to the main())
230
            addr=LOADER_RESERVED;
231
            write_program_memory(addr, &data.i8[0], 16);
232
            putchar('%');
233
         }
234
         else
235
         if ( (addr > 7) && (addr <= (LOADER_RESERVED-16)) ) // Do not overwrite BootLoader
236
         {
237
            // Write program
238
            write_program_memory(addr, &data.i8[0], 16);
239
            putchar('$');
240
         }
241
         else putchar('.'); // Possibly there was prevented write to the location of BootLoader
242
         putc('\r'); putc('\n');
243

  
244
//---WDT
245
         restart_wdt();
246
      }
247
   }
248
}
249

  
250

  
251
void main()
252
{
253
   int8  timeout;
254

  
255
   disable_interrupts(GLOBAL);
256
   setup_wdt(WDT_2304MS);               // Setup Watch Dog
257
   setup_adc_ports(NO_ANALOGS);
258
   setup_adc(ADC_OFF);
259
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
260
   setup_timer_1(T1_DISABLED);
261
   setup_timer_2(T2_DISABLED,0,1);
262
   setup_comparator(NC_NC_NC_NC);
263
   setup_vref(FALSE);
264
   setup_oscillator(OSC_8MHZ|OSC_INTRC);
265

  
266
   for(timeout=0; timeout<255; timeout++) //cca 50s
267
   {
268
      if (kbhit())
269
        if (getc()=='u') // Send "uf" for Update Firmware
270
        {
271
          putchar('*');
272
          if (getc()=='f')
273
          {
274
            restart_wdt();
275
            boot_loader(); // Update Firmware starter
276
          }
277
        }
278
        else break;
279
      putchar('u'); putchar('f'); putchar('?');
280
      pause();
281
      restart_wdt();
282
   };
283

  
284
   restart_wdt();
285
   goto_address(LOADER_RESERVED); // Jump to the location where is the jump to the main
286
}
287
#ORG default   // End of BootLoader
0 288

  
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader887/bloader.hex
1
:0C0000001F308A00542F00001028080058
2
:10002000FF00030E8301A1000A08A0008A01040852
3
:10003000A2007708A3007808A4007908A5007A0830
4
:10004000A600831383128C308400801E29288C1A0A
5
:100050003A28220884002308F7002408F80025081D
6
:10006000F9002608FA0020088A00210E8300FF0EFE
7
:100070007F0E09008A110A123D288C1E3D2818089F
8
:10008000A7001A08F800A71C4728181218167808A5
9
:100090008316BA0083120C1E4B2899008C128A1109
10
:1000A0000A1229280D050D0523104226EF30E432EF
11
:1000B0007210381C3710A82129103218B119A02548
12
:1000C000C125CC060A002310D232F332723B6532CE
13
:1000D0003A102526F5060A0023104626C129C82F06
14
:1000E0004529C129C52FD324DA223A102526F50641
15
:1000F0000A0023104626C129C82F5729492AC52F8F
16
:10010000D324DA223A102526F5060A002310C23736
17
:100110006F3A2026EF30E4327210D432733A201F47
18
:100120003E1F0D05231000015F08E1005E08E0009E
19
:100130006108FA006008840083137A188317800826
20
:100140000319A628E00A0319E10A98285E0860024C
21
:10015000F7006108FA005F08031C5F0FFA027708D6
22
:10016000F8000800831603178C170C140000000019
23
:1001700083120C087F390319F8280313DE000317D4
24
:100180000D080313DF0003170F080313E0005E08D8
25
:100190000C1EC82899005F0803178D000313600820
26
:1001A00003178F0083168C170C14000000008312B5
27
:1001B0000C0D0E0D7F390319F8280313DE00031709
28
:1001C0000D080313DF0003170F080313E0005E0898
29
:1001D0000C1EE82899005F0803178D0003136008C0
30
:1001E00003178F008D0A03198F0A0313B228031710
31
:1001F00003130800831603178C170C14000000006B
32
:1002000003182A2983120C087F390313AD00031742
33
:100210000D080313AE0003170F080313AF002D08DA
34
:100220000C1E102999002E0803178D0003132F08A8
35
:1002300003178F0083168C170C1400000000831224
36
:100240000313AC0B24292729831603172A294A29CB
37
:100250008316031783120C0D0E0D7F390313AD00A7
38
:1002600003170D080313AE0003170F080313AF00A5
39
:100270002D080C1E392999002E0803178D00031331
40
:100280002F0803178F008D0A03198F0A0310031319
41
:10029000AC0BFA280800B4010408B3003410831B27
42
:1002A00034142D0EF038AF00AF07E23EB000323EFE
43
:1002B000B2002D080F39B007B007B207E93EB10010
44
:1002C000B107B1072C0E0F39B107B207B10DB20D4E
45
:1002D000B209B20D2C080F39B207AF0D0730AE00CE
46
:1002E0000A30B207B103031C7129B107B003031C24
47
:1002F0007529B007AF03031C7929AF07AE03031CB0
48
:100300007D292E308400831307303305331384078F
49
:1003100032300402031933170008F700031D98292F
50
:10032000331B9829331AA029B319982920309B2907
51
:10033000B31533123030F70777080C1E9D2999004A
52
:10034000840A331F882908003008F8012F02031897
53
:10035000AC292F08F700B829F7010830B100AF0D1C
54
:10036000F70D300877020318F700F80DB10BAF292D
55
:100370000800AB012708AB002430AC004930AD00C9
56
:100380006430AE003A30AF002030B0006230B100CF
57
:100390006C30B2006F30B3006130B4006430B5002F
58
:1003A0006530B6007230B7002E30B8006330B90047
59
:1003B0002030BA003130BB003830BC00BD003130D5
60
:1003C000BE002030BF003230C0003030C1003130BC
61
:1003D000C200C3002D30C4003030C5003230C6002A
62
:1003E0002D30C7003230C8003430C9002030CA0078
63
:1003F0003130CB003730CC003A30CD003230CE0037
64
:100400003730CF003A30D0003330D1003730D2000F
65
:100410005A30D3002030D4006B30D5006130D60084
66
:100420006B30D7006C30D8002030D9002430DA008F
67
:10043000DB01DF012C30DE009420013078022C3EFD
68
:10044000840083130008243C031D302ADF012C3074
69
:10045000DE009420013078022C3E8400831380015A
70
:10046000523003178D0000308F000313B220233069
71
:100470000C1E382A99003030840083138008031939
72
:10048000542ADF010408DE005F10831B5F1400089C
73
:100490000C1E482A99005E08840083135F18831796
74
:1004A000840A0319850A3E2A0D300C1E552A99002C
75
:1004B0000A300C1E592A9900633003178D00003052
76
:1004C0008F0003100C300313AC00FA2010308400AE
77
:1004D0000330AD005030AC004B210D300C1E6E2AA5
78
:1004E00099000A300C1E722A99006C3003178D0097
79
:1004F00000308F00031014300313AC00FA201030CA
80
:100500008400AD012030AC004B210D300C1E862A3A
81
:1005100099000A300C1E8A2A9900793003178D0041
82
:1005200000308F00031014300313AC00FA20103099
83
:100530008400AD01AC004B210D300C1E9D2A9900AA
84
:100540000A300C1EA12A9900863003178D00003056
85
:100550008F000313B22083168C16C03083128B04D5
86
:100560002B08AB0AAC002C08AD001B30AE002D08E8
87
:10057000AF006430B000A4217708AD0078083030B7
88
:10058000031DC92AAE1CD12AAE19D12A2E1A203039
89
:10059000CC2AAE112E122E14F80778080C1ECE2A83
90
:1005A00099002D08AF000A30B000A4217708AD00F3
91
:1005B00078083030031DE22AAE19E72A2E1CE72AFC
92
:1005C0002E1A2030F80778080C1EE42A99003030E3
93
:1005D000AD072D080C1EEA2A99007C300C1EEE2A6D
94
:1005E00099006430AC002C30840083130008031998
95
:1005F000062B0230F800F701F70BFC2AF80BFB2A58
96
:100600009730F700F70B022B800BF92AB02A8A15D6
97
:040610000A16B32CE7
98
:0C3960000A128A11B9290A168A150800FB
99
:103980008C1EC02C1808A7001A08F800A71CCA2C07
100
:103990001812181608000B08F8008B13831603176B
101
:1039A00055308D00AA308D008C14000000008C185A
102
:1039B000D72C0C117808831203138B04080083168C
103
:1039C00003178C1783120D0803390319FC2CF90017
104
:1039D0000D08FC398D0083160C1483128D00000035
105
:1039E000000083160C1583120313CB2403178D0AD2
106
:1039F00003198F0AF90BEF2C831603133108F90012
107
:103A00000310F90C0F30831203170D05031D122D3F
108
:103A100083160C160C1583120313CB24831603177D
109
:103A20000C12831200088C00840A00088E00840A9D
110
:103A300083160C1583120313CB2403178D0A031965
111
:103A40008F0AF90B242D272D83160313022D0D0841
112
:103A5000073903193B2D043CF900FF308C008E0020
113
:103A600083160C1583120313CB2403178D0A031935
114
:103A70008F0AF90B2D2D031308008316B2080319C2
115
:103A8000512D453083120C1E432D99003030831682
116
:103A90003307B40083120C1E4B2D99008A010028B5
117
:103AA0008316831208008316B701B8013808013C59
118
:103AB000031C872D3608FA003508840083137A1812
119
:103AC00083170008403C0318742D370EB900F030FE
120
:103AD000B9053508840083133618831700083907A1
121
:103AE000BF3E0A3EB700812D370EB900F030B90550
122
:103AF0003508840083133618831700083907D03E31
123
:103B0000B7003808B80AB50A0319B60A562D37089F
124
:103B1000F80083120800E001DF010B138B138B1BED
125
:103B20008E2D40300C1E922D9900E90169081F3C32
126
:103B3000031CA22D2C30690784008313FF30800002
127
:103B4000E90A962DE2011030E10062081C3C031CDA
128
:103B5000C92D031DAF2D6108BF3C031CC92D620890
129
:103B600003178F000313610803178D002C308400A6
130
:103B70008313203083160313B1008312DF242E3009
131
:103B80000C1EC02D990064001030E1070318E20AF2
132
:103B9000A52D21300C1ECA2D99008C1AD12D640040
133
:103BA000CD2D0D300C1ED22D99000A300C1ED62DB5
134
:103BB0009900C02478083A3C0319E02D6400D92DFF
135
:103BC0003A300C1EE12D9900AB012C302B078400FC
136
:103BD0008313ED010408EC006D10831B6D14C024E9
137
:103BE0006C08840083136D188317780880002C30CC
138
:103BF0002B07840083130008EA006A080C1EFE2DC0
139
:103C000099002B08AB0A2C3E8400831300080D3C5E
140
:103C100003190E2E2B082D3C0318E52D2B082E3CE6
141
:103C20000319142E0030152E0130EA008316B2005D
142
:103C30000130B30083123D25AB036400DA01E801D3
143
:103C40002B0868020318382E2C306807EA00EB01B5
144
:103C50000318EB0A6B088316B60083126A088316F2
145
:103C6000B500831253257808DA070230E807202EC2
146
:103C7000DA08031D3D2E00303E2E0130EA00831687
147
:103C8000B2000230B30083123D258316B6012E30F8
148
:103C9000B500831253257808EA008316B601303048
149
:103CA000B500831253256A08DE007808DD0083160C
150
:103CB000B6013230B500831253257808DC00831634
151
:103CC000B6012C30B500831253257808DB005B0861
152
:103CD000103C031C6D2E00306E2E0130EA0083165E
153
:103CE000B2000330B30083123D255D08E1005E0899
154
:103CF000E2000310E20CE10C5C0B842E23300C1E5E
155
:103D00007F2E99008A010028DC08031D892E0030CF
156
:103D10008A2E0130EA008316B2000430B300831209
157
:103D20003D25E801E601E5016208E4006108E300E1
158
:103D30006808073C031CC82E0310680DA03E8400D1
159
:103D400083136608FA006508F9006408F800630840
160
:103D5000F7000130E3070318E40A0319E50A031921
161
:103D6000E60A7A08EF00770803178D000313780836
162
:103D700003178F0083168C170C14000000008312A9
163
:103D80000C088000840A0E0880000313E80A982EAD
164
:103D90000830E800E70102302B0268020318F42E15
165
:103DA0006708E70AA03EF800FA010318FA0A780843
166
:103DB000EA007A08EB002C306807EC00ED010318EC
167
:103DC000ED0A6D088316B60083126C088316B500E1
168
:103DD000831253256A08840083136B1883177808AD
169
:103DE00080000230E807CB2EE108031D132FE20804
170
:103DF000031D132F1C30E200B030E10062080317EE
171
:103E00008F000313610803178D00A0308400831313
172
:103E1000103083160313B1008312DF2425300C1EEB
173
:103E20000F2F99003D2FE208031D1A2F6108073C50
174
:103E30000318392F62081C3C031C392F031D242F43
175
:103E40006108A03C031C392F620803178F0003137D
176
:103E5000610803178D00A03084008313103083168F
177
:103E60000313B1008312DF2424300C1E352F990078
178
:103E70003D2F2E300C1E3A2F99000D300C1E3E2F78
179
:103E800099000A300C1E422F99006400D92D0800B9
180
:103E9000AC01AB012B0F4F2F2C0F4F2F532FAB0A21
181
:103EA0000319AC0A4A2F0800840183131F308305CD
182
:103EB000713083168F000F08031787110C3003131E
183
:103EC0009900A2309800903083129800831603174F
184
:103ED00087110C3003139900A230980090308312A0
185
:103EE0009800831603170908C039890003131F12AD
186
:103EF0009F1200300317880083128701880189010F
187
:103F00000313A701A801A9010B138B138B1B852F8A
188
:103F10000930031785000F30F7000313810181304A
189
:103F2000840083130008F03907388000640000081B
190
:103F3000F739F719F0397704800083160317090859
191
:103F4000C039890003131F129F1200300317880025
192
:103F5000831203131F1083160108C7390838810024
193
:103F6000831290010030F800920000308316920016
194
:103F700083120317870188018901831603139701B0
195
:103F800071308F000F088312AA012A0FC82FEC2F5F
196
:103F90008C1EDC2FC0247808753C031DDB2F2A30D3
197
:103FA0000C1ED02F9900C0247808663C031DDA2F20
198
:103FB00064008B25DC2FEC2F75300C1EDD2F990053
199
:103FC00066300C1EE12F99003F300C1EE52F990042
200
:103FD00048276400AA0AC52F64001C308A00B0304C
201
:043FE00082006300F8
202
:04400E00FD2CFF3F47
203
:00000001FF
204
;PIC16F887
205
;CRC=C67D  CREATED="09-3-13 23:39"
0 206

  
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader887/bloader.h
1
#include <16F887.h>
2
#device adc=10
3

  
4
#FUSES WDT                      // Watch Dog Timer
5
#FUSES INTRC                    //Internal RC Osc
6
#FUSES NOPUT                    //No Power Up Timer
7
#FUSES MCLR                     //Master Clear pin enabled
8
#FUSES NOPROTECT                //Code not protected from reading
9
#FUSES NOCPD                    //No EE protection
10
#FUSES NOBROWNOUT               //No brownout reset
11
#FUSES IESO                     //Internal External Switch Over mode enabled
12
#FUSES FCMEN                    //Fail-safe clock monitor enabled
13
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
14
#FUSES NODEBUG                  //No Debug mode for ICD
15
#FUSES NOWRT                    //Program memory not write protected
16
#FUSES BORV40                   //Brownout reset at 4.0V
17

  
18
#use delay(clock=8000000)
19
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
20

  
0 21

  
Designs/Measuring_instruments/AWS01A/SW/PIC16F887/bootloader887/bloader.PJT
1
[Directories]
2
Include=C:\Program Files (x86)\PICC\Devices;C:\Program Files (x86)\PICC\Drivers;
3
Library=
4
LinkerScript=
5
[defines]
6
enabled=0
7
D1=
8
V1=
9
[fileformats]
10
forcecoff=0
11
debug=4
12
error=2
13
object=0
14
list=0
15
scratch=0
16
sta=1
17
tre=1
18
allerrors=1
19
allwarnings=1
20
stayupne=3
21
stayupoe=0
22
[PROJECT]
23
Target=bloader.hex
24
Development_Mode=
25
Processor=0x887F
26
Processor_Text=PIC16F887
27
ToolSuite=CCS
28
[Target Data]
29
BuildTool=C-COMPILER
30
OptionString=+FM
31
AdditionalOptionString=
32
BuildRequired=1
33
[bloader.c]
34
Type=4
35
Path=
36
FileList=
37
BuildTool=
38
OptionString=
39
AdditionalOptionString=
40
[mru-list]
41
1=bloader.c
42
[Windows]
43
0=0000 %S 0 0 796 451 3 0
44
[Units]
45
Link=0
46
Count=1
47
1=bloader.c
48
[Opened Files]
49
1=bloader.c
50
2=bloader.h
51
3=..\..\..\..\..\..\Program Files (x86)\PICC\drivers\string.h
52
4=..\..\..\..\..\..\Program Files (x86)\PICC\drivers\stddef.h
53
5=..\..\..\..\..\..\Program Files (x86)\PICC\drivers\ctype.h
54
6=..\..\..\..\..\..\Program Files (x86)\PICC\Devices\16F887.h
55
7=
56
8=
57
9=bloader.lst
58
10=
0 59

  
:@created_atf1418217013.691139;Ÿ:@expires_in0