亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bootloader877a10.c

?? PIC Boot Loader for the 16F877A MCU.
?? C
字號:
/////////////////////////////////////////////////////////////////////////////
//
//       =================================================
//
//       This code is released under the GPL license. Read the attached license
//       for full information but here's the basic points:
//        - Use it freely
//        - Let others use your new/modified code freely too
//        - So, please release the source
//
//       =================================================
//
//       PIC Boot Loader for the 16F877A MCU
//       V. 1.0 Nov 22, 2006
//       By Arnan (Roger) Sipitakiat
//       http://www.gogoboard.org
//
//       This code is designed for the GoGo board
//       but it should work with any 877A PIC device.
//
//       The loader will start when pin B7 is set high during
//       power-up.
//
//       The loader occupies memory addresses between 0x1e50-0x1fff (0.4k)
//       User code must not use this memory segment.
//       in CCS, you can use the following command to reserve the memory space
//          #ORG 0x1e50, 0x1fff {}
//
//       Note that the configuration bits can't be changed. Whatever is used
//       here is what the user's program is stuck with.
//
/////////////////////////////////////////////////////////////////////////////


#include <16F877A.H>
#device ADC=10 *=16

#case

#fuses HS,NOWDT,NOPROTECT, BROWNOUT, NOLVP, PUT

#use DELAY(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

// define possible reply bytes
#define READY_FOR_NEXT  0x11
#define FINISH_FLAG     0x55
#define BOOTLOADER_OVERWRITE  0x80

#define LOADER_BEGIN      0x1E50
#define LOADER_END        0x1FFF

#define SerBufferSize 45  // serial input buffer size

#define RUN_BUTTON   PIN_B7
#define RUN_LED      PIN_B6
#define USER_LED     PIN_D0

// #org tells the compiler where to put the procedures in memory
#ORG LOADER_BEGIN, LOADER_END auto=0 default

// a slim version of atoi().
// converts ascii text to integer
// i.e. '1' = 1, 'A' = 10
unsigned int a2i(unsigned char asciiByte) {

      if (asciiByte >= 'A' && asciiByte <= 'F')
         return((asciiByte) - 'A' + 10);
      else if (asciiByte >= '0' && asciiByte <= '9')
         return( asciiByte - '0');
}


// convert two ascii text to a 8 bit integer
unsigned int read8() {
     return( (a2i(getc()) << 4) + (a2i(getc())) );
}


void main()
{
   unsigned int16 Buffer[SerBufferSize];  // serial input buffer
   int1 notDone = 1;

   unsigned int recLen;   // HEX file record length
   unsigned int16 writeAddr;  // HEX file write address
   unsigned char recType;  // HEX file record type

   unsigned char i=0,j;   // general counters
   unsigned int16 UserBootVectorAddr; // holds the address of our new boot vector

   if (input(RUN_BUTTON) ) {

      UserBootVectorAddr=label_address(UserBootVector);

      output_high(RUN_LED); output_high(USER_LED);

      while (notDone) {

         //////////////////////////////////////////
         /// Wait for ':'

         while (getc() != ':') ;

         /////////////////////////////////////////
         //  Record length

         recLen = read8();
         recLen >>= 1;  // we divided the Length by 2.
                        // Each memory location on the PIC (16 bit) is
                        // twice the unit size of the HEX file (8 bit).

         /////////////////////////////////////////
         //  Write Address

         writeAddr  = ((int16)read8() << 8) + read8();

         writeAddr >>= 1;  // divide by 2
                        // The physical address on the PIC is half the
                        // address in the HEX file.

         /////////////////////////////////////////
         //  Rec Type

         getc();  // ignore the first digit, it is always '0'
         recType = getc();

         if (recType == '1') { // End of file record
            notDone = 0;

         } else if (recType == '0') { // data record

            /// get the data
            for (i=0; i < recLen ; i++) {
                Buffer[i] = read8() + ((int16)read8() << 8);
            }

            // if data is in the EEPROM area
            if ((writeAddr >= 0x2100) && (writeAddr <= 0x21FF)) {
               write_eeprom((int) writeAddr, (int) Buffer[i]);
            }
            // else if data is in the Configuration register area
            else if ((writeAddr >= 0x2000) && (writeAddr <= 0x20FF)) {
               // Can't write configuration registers -> just skip.
            }

            // else if data overlaps the bootloader code -> halt
            else if ((writeAddr >= LOADER_BEGIN) && (writeAddr <= LOADER_END)) {

               putc(BOOTLOADER_OVERWRITE);
/*               while (1) {
                  output_high(RUN_LED);
                  delay_ms(300);
                  output_low(RUN_LED);
                  delay_ms(300);
               }
*/            }

            // else -> data is in program area
            else {
               for (i=0; i<recLen ;i++) {
                  // (*) Modifing the Boot Vector

                  // The first four commands in memory are called the boot
                  // vector. It resets the board and points to the address of
                  // the main function.

                  // Each HEX file has their own version of these commands. But
                  // since we always want the boot loader to run before the
                  // user code, we must not overwrite the loader's boot vertor.
                  // Instead, we move the user's boot vector to another location
                  // within the boot loader's program area
                  // (see label "UserBootVector" below).

                  // This 'if' command detects user's boot vector and redirects it
                  // The boot vector is at address 0x0000 - 0x0003
                  if ((writeAddr < 0x004) && (i<4) )
                     write_program_eeprom(UserBootVectorAddr + i, Buffer[i]);
                  else
                     write_program_eeprom(writeAddr + i, Buffer[i]);
               }

            }
            // Tells the PC to send the next line
            putc(READY_FOR_NEXT);


         }


      }

      // Tells the PC that we are finished
      putc(FINISH_FLAG);
      for (j=0;j<255;j++) {
         for (i=0;i<255;i++) {}; // this loop gives the chip time to finish
                                 // sending the serial byte before resetting it self.
                                 // I did not use delay_ms() because I have had
                                 // some strange problems with it.
      }

   }

// This is a reboot command written in Assembly.
// these four commands will be overwritten with the boot vector we obtain
// from the HEX file.
// See (*) above for more info.
UserBootVector:
      #asm
      MOVLW   0x00
      MOVWF   0x0A
      GOTO   0x00
      NOP
      NOP
      #endasm

}


#ORG default








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美韩国综合色| 国产精品一区在线观看乱码| 久久精品国产一区二区三区免费看| 国产精品影视网| 欧美日韩成人综合| 综合色中文字幕| 国产综合色在线| 3d成人h动漫网站入口| 亚洲欧洲日本在线| 国产一区91精品张津瑜| 欧美老肥妇做.爰bbww视频| 中文字幕免费不卡| 激情五月婷婷综合网| 777午夜精品免费视频| 亚洲激情图片qvod| 99久久er热在这里只有精品15| 久久毛片高清国产| 老司机午夜精品| 日韩午夜激情av| 免费日本视频一区| 欧美日本国产视频| 亚洲第一久久影院| 在线观看免费视频综合| 国产精品国产三级国产有无不卡| 国产成人在线视频网站| 精品国产91乱码一区二区三区| 日本美女一区二区三区| 欧美一区欧美二区| 日韩**一区毛片| 欧美α欧美αv大片| 久久丁香综合五月国产三级网站| 9191久久久久久久久久久| 亚洲国产欧美在线人成| 欧美日韩国产大片| 日本三级亚洲精品| 91精品国产综合久久精品图片| 亚洲成a人v欧美综合天堂下载| 欧美性感一类影片在线播放| 一区二区三区.www| 欧美日韩精品电影| 伦理电影国产精品| 久久久99精品久久| 北条麻妃一区二区三区| 亚洲色欲色欲www| 欧美性xxxxx极品少妇| 视频一区二区三区中文字幕| 91麻豆精品国产无毒不卡在线观看| 日韩国产欧美在线播放| 精品噜噜噜噜久久久久久久久试看| 精品亚洲porn| 国产精品福利影院| 欧美少妇性性性| 久久国产麻豆精品| 中文字幕一区在线| 欧美日韩黄视频| 国产精品一区在线| 国产精品情趣视频| 欧美日韩国产首页| 国产自产视频一区二区三区| 国产精品嫩草影院com| 欧美人动与zoxxxx乱| 加勒比av一区二区| 一区二区三区欧美| 欧美zozo另类异族| 色综合夜色一区| 麻豆91精品91久久久的内涵| 国产精品久久久久久久久果冻传媒 | 欧美精品第1页| 狠狠色丁香久久婷婷综合_中| 中文字幕第一区综合| 欧美卡1卡2卡| 成人精品国产免费网站| 午夜精品久久久久久久99水蜜桃 | 欧洲av在线精品| 极品少妇xxxx精品少妇偷拍| 亚洲品质自拍视频| 久久久青草青青国产亚洲免观| 91高清视频免费看| 精品一区二区三区免费观看| 亚洲老司机在线| 国产午夜精品理论片a级大结局 | 免费日本视频一区| 亚洲精品免费看| 中文字幕欧美区| 精品国产自在久精品国产| 色屁屁一区二区| 成人精品gif动图一区| 免费观看在线色综合| 亚洲综合在线五月| 国产精品视频线看| 久久中文娱乐网| 91麻豆精品国产无毒不卡在线观看| 91美女视频网站| 国产成人亚洲综合色影视| 免费精品视频在线| 丝袜亚洲精品中文字幕一区| 亚洲精品乱码久久久久久黑人 | 国产精品18久久久久久久久久久久| 亚洲国产欧美一区二区三区丁香婷| 国产精品丝袜在线| 国产欧美一二三区| 国产亚洲一二三区| xf在线a精品一区二区视频网站| 欧美日韩国产123区| 欧美性猛片xxxx免费看久爱| av福利精品导航| 在线看一区二区| 成人免费毛片片v| 国产成人丝袜美腿| 国产精品性做久久久久久| 国产又粗又猛又爽又黄91精品| 奇米精品一区二区三区在线观看 | 日韩欧美国产一区二区在线播放 | 亚洲男人的天堂一区二区| 国产精品色在线观看| 国产精品欧美久久久久一区二区| 国产欧美日韩综合| 中文一区二区在线观看 | 精品奇米国产一区二区三区| 欧美日韩aaaaaa| 91精品国产手机| 日韩久久精品一区| 精品国产伦一区二区三区观看体验| 精品久久久久久久久久久久久久久久久 | 国产精品毛片大码女人| 中文字幕乱码久久午夜不卡 | 91精品福利视频| 在线看国产一区| 欧美老人xxxx18| 91精品国产综合久久久久久久久久| 3atv在线一区二区三区| 精品国精品自拍自在线| 久久亚洲一级片| 自拍偷在线精品自拍偷无码专区| 一级精品视频在线观看宜春院| 手机精品视频在线观看| 九九在线精品视频| 成人性色生活片免费看爆迷你毛片| 91偷拍与自偷拍精品| 色综合久久久久| 91精品国产高清一区二区三区| 精品剧情在线观看| 亚洲丝袜美腿综合| 亚洲午夜电影网| 国产精品123区| 欧美日韩一区在线| 久久久久久免费毛片精品| 亚洲欧美自拍偷拍| 日韩精品一区第一页| 成人国产亚洲欧美成人综合网| 在线观看视频欧美| 久久久亚洲高清| 午夜久久福利影院| 成人综合婷婷国产精品久久| 欧美午夜视频网站| 中文字幕av不卡| 久久品道一品道久久精品| 亚洲免费观看高清完整| 国内精品久久久久影院薰衣草| 91一区一区三区| 337p日本欧洲亚洲大胆色噜噜| 日韩美女视频19| 狠狠色丁香久久婷婷综合丁香| 欧洲精品在线观看| 日本一区二区高清| 久久99深爱久久99精品| 欧美性大战久久| 国产精品成人网| 免费一级欧美片在线观看| 色综合天天综合| 欧美国产一区视频在线观看| 免费不卡在线视频| 在线日韩av片| 18涩涩午夜精品.www| 国产乱人伦偷精品视频不卡| 欧美精品乱人伦久久久久久| 亚洲婷婷国产精品电影人久久| 另类专区欧美蜜桃臀第一页| 欧洲av一区二区嗯嗯嗯啊| 国产精品色哟哟| 国产成人a级片| 欧美v国产在线一区二区三区| 亚洲高清一区二区三区| 91麻豆精品一区二区三区| 国产精品少妇自拍| 处破女av一区二区| 国产亚洲综合性久久久影院| 久久国产精品露脸对白| 日韩天堂在线观看| 奇米四色…亚洲| 日韩一级免费观看| 日韩高清一级片| 欧美精品在线观看播放| 午夜影视日本亚洲欧洲精品| 欧美在线看片a免费观看| 亚洲激情自拍偷拍| 欧美视频日韩视频在线观看| 亚洲制服丝袜av| 欧美性受极品xxxx喷水| 亚洲一区av在线|