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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? updater_f02x.c

?? F020.rar
?? C
字號:
/*
可用于用戶程序的空間共為122個扇區(qū)共62464個字節(jié)(0x0000-0xF3FF)
引導(dǎo)程序占用四個扇區(qū)(0xF400-0xFBFF) 2048字節(jié) 
*/
#include <c8051f020.h>                 // SFR declarations
#include "crc.h"

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define TRUE         1
#define FALSE        0

#define SYSCLK       22118400          // SYSCLK frequency in Hz
#define BAUDRATE     115200            // Baud rate of UART in bps

#define BINCELL_LEN  518               //數(shù)據(jù)段大小

sbit Run = P3^7;                       // LED='1' means ON

unsigned char xdata Rec_Buf[600];
unsigned char xdata Send_Buf[512];
unsigned int P_RecBuf=0;
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------

void main (void);

// Initialization Subroutines
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);


//-----------------------------------------------------------------------------
// Global VARIABLES
//-----------------------------------------------------------------------------

void (*f)();                           // function pointer declaration

bit code_erased = FALSE;               // flag used to indicate that the FLASH
                                       // erase operation is complete
bit f_valid = FALSE;                   // flag to indicate that the FLASH 
                                       // programming operation is complete
bit Need_Update=0;

unsigned char Update_Step=0;
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------

void DealRec();
void SendData(unsigned char *SendBuf,unsigned char SendLen);
void Erase_Flash(unsigned char Erase_Page);
void Write_Flash(unsigned char *Write_Buf,unsigned char Write_Page);
unsigned char Read_Flash(unsigned int Read_Address );

//延時1ms
void DelayMs(unsigned int TimeNum)
{
	unsigned int i,j;
	for(i=0;i<TimeNum;i++)
	{
		for(j=0;j<185;j++);
	}
}

void JumpToRun()
{
	 IE=0;
	 CKCON=0;
	 PCON=0;
	 TMOD=0;
	 SCON0=0;
	 TH1=0;
	 TL1=0;
	 TR1=0;
	 ((void(code *)(void))0xF400)();

}

void main (void) 
{
   unsigned int Update_OverTime=0;   

   WDTCN = 0xde;                       // disable watchdog timer
   WDTCN = 0xad;

   EA = 0;                             // disable interrupts (this statement
                                       // is needed because the device is not
                                       // neccesarily in a reset state prior 
                                       // to executing this code) 
   OSCXCN=0;


   PORT_Init ();                       // initialize crossbar and GPIO
   SYSCLK_Init ();                     // initialize oscillator
   UART0_Init ();                      // initialize UART0
   
   Run=0;
   
   DelayMs(100);
   Update_Step=1;
   Send_Buf[0]=0x55;
   Send_Buf[1]=0xAA;
   Send_Buf[2]=0xA1;
   SendData(Send_Buf,3);

   /*while(RI0==0)
   {
      if(Update_OverTime>60000) //如果升級超時,則進入正常程序
	  {
		  JumpToRun();

	  }
	  else
	  {
	     Update_OverTime++; 
	  }
   }
   Rec_Buf[P_RecBuf++]=SBUF0;
   RI0=0;
   Update_OverTime=0;*/

       
   while (1)
   {
	   while(RI0==0)
	   {
	      if(Need_Update==0)
	     {
             if(Update_OverTime>60000) //如果升級超時,則進入正常程序
	        {
		        JumpToRun();

	        }
	         else
	        {
	           Update_OverTime++; 
	        }
	     }
	   }

	   Rec_Buf[P_RecBuf++]=SBUF0;
	   RI0=0;
	   Update_OverTime=0;
	   DealRec();
   } // end while

} // end main

void SendData(unsigned char *SendBuf,unsigned char SendLen)
{
      unsigned char i;
	  for(i=0;i<SendLen;i++)
	  {
	      SBUF0=SendBuf[i];
		  while(TI0==0);
		  TI0=0;
	  }
}

void DealRec()
{
     unsigned int i;
	 unsigned int CRC;
	 unsigned char CRC_H;
	 unsigned char CRC_L;
	 unsigned int Cell_No;
	 bit Write_Error=0;
	 if(P_RecBuf>=3) //至少收到三個字節(jié)。
	 {
	     if(Rec_Buf[0]==0x55&&Rec_Buf[1]==0xAA)	//數(shù)據(jù)幀頭有效
		 {
		     switch(Rec_Buf[2])
			 {
			      case 0xB1:		   //收到上位機應(yīng)答升級請求的命令
				            if(Update_Step==1)
							{
							   Update_Step=2;
							   Need_Update=1;
							}
							P_RecBuf=0;
				            break;
				  case 0xC1:		   //收到上位機要求升級的指令
				            if(Update_Step==2)
							{
							  Update_Step=3;
							  Send_Buf[0]=0x55;
							  Send_Buf[1]=0xAA;
							  Send_Buf[2]=0xD1;
							  SendData(Send_Buf,3); //返回可以接收數(shù)據(jù)
				            }
							P_RecBuf=0;
							break;
				  case 0xE1:		   //收到上位機發(fā)送的數(shù)據(jù)幀
				            if(P_RecBuf<BINCELL_LEN) return;  //幀未收全則返回
				            if(Update_Step!=3) {P_RecBuf=0;return;}
							
							CRC=cal_crc(Rec_Buf+4,512);
							CRC_H=CRC>>8;
							CRC_L=CRC;
							if(Rec_Buf[516]==CRC_H&&Rec_Buf[517]==CRC_L)	//通過CRC校驗,則寫入數(shù)據(jù)
							{
							     Cell_No=Rec_Buf[3];     //取出當前是第幾個數(shù)據(jù)塊
								 if(Cell_No==0)			 //如果當前是第一條數(shù)據(jù),進行處理
								 {
							         for(i=1;i<123;i++)
							        {
							            Erase_Flash(i);
							        }

								     //Erase_Flash(122);
									 Write_Flash(Rec_Buf+4,122);
									 Rec_Buf[5]=Read_Flash(1);
									 Rec_Buf[6]=Read_Flash(2);
									 Erase_Flash(0);
									 Write_Flash(Rec_Buf+4,0);
								 }
								 else if(Cell_No<=121)	 //收到的數(shù)據(jù)沒有超出可寫范圍則寫入
								 {
								     //Erase_Flash(Cell_No);
									 Write_Flash(Rec_Buf+4,Cell_No);
								 }
								 for(i=0;i<512;i++)
								{
								   if(Rec_Buf[4+i]!=Read_Flash(Cell_No*512+i))Write_Error=1;
								}
								 if(!Write_Error)
								 {
								    Send_Buf[0]=0x55;
							        Send_Buf[1]=0xAA;
							        Send_Buf[2]=0xD2;
							        SendData(Send_Buf,3); //返回可以接收下一條數(shù)據(jù)
								 }
								 else
								 {
							        Send_Buf[0]=0x55;
								    Send_Buf[1]=0xAA;
								    Send_Buf[2]=0xD4;
								    SendData(Send_Buf,3); //返回升級失敗
								    
								 }
							}
							else
							{
							     Send_Buf[0]=0x55;
								 Send_Buf[1]=0xAA;
								 Send_Buf[2]=0xD4;
								 SendData(Send_Buf,3); //返回升級失敗
							}
							P_RecBuf=0;
							break;
				   case 0xE2:		   //上位機給出升級成功指令,則開始運行正常程序
						    if(Update_Step!=3) {P_RecBuf=0;return;}
							P_RecBuf=0;
				            JumpToRun();
							break;
				   default :
				            P_RecBuf=0;
				            break;
			 }
		 }
		 else
		 {
		     P_RecBuf=0;   //幀頭無效則清除接收緩存
		 }

	 }
}
//-----------------------------------------------------------------------------
// erase_flash
//-----------------------------------------------------------------------------
//
// This routine erases the first 8 pages of FLASH (0x0000 to 0x0FFF).
//
void Erase_Flash(unsigned char Erase_Page)
{
   char xdata* data pagePointer = 0;// a pointer to xdata located in data space
                                    // points to the first FLASH page that 
                                    // will be erased
      
   bit EA_state;                    // holds interrupt state

   EA_state = EA;                   // save interrupt state

   EA = 0;                          // disable interrupts
   FLSCL |= 0x01;                   // enable FLASH write/erase
   PSCTL  = 0x03;                   // MOVX erases FLASH
   
   // Erase the first 8 FLASH pages
   pagePointer=Erase_Page*512;
      *pagePointer = 0;             // initiate the erase
      
   PSCTL = 0x00;                    // MOVX writes target XRAM
   FLSCL &= ~0x01;                  // disable FLASH write/erase
   
   EA =  EA_state;                  // restore interrupt state

   f_valid = FALSE;                 // indicate that code is no longer valid
   code_erased = TRUE;              // indicate that FLASH has been erased
}

void Write_Flash(unsigned char *Write_Buf,unsigned char Write_Page)
{
	  char xdata* data pwrite;
	  unsigned int i;

      EA = 0;                             // disable interrupts (precautionary)   
      FLSCL |= 0x01;                      // enable FLASH write/erase
      PSCTL  = 0x01;                      // MOVX writes FLASH

      pwrite = Write_Page*512;      // initialize the write pointer
    
      // write the record into flash
      for( i = 0; i < 512; i++)
	  {
         *pwrite=Write_Buf[i];
		 pwrite++;
      }
      
      PSCTL = 0x00;                       // MOVX writes target XRAM
      FLSCL &= ~0x01;                     // disable FLASH write/erase
}

unsigned char Read_Flash(unsigned int Read_Address )
{
      char code* data pread; 
	  unsigned char ReadTemp;
	  pread =  (char code*)Read_Address;
	  ReadTemp=*pread;
	  return(ReadTemp);
}

//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use an 22.1184MHz crystal
// as its clock source.
//
void SYSCLK_Init (void)
{
   int i;                              // delay counter

   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal

   for (i=0; i < 256; i++) ;           // wait for osc to start

   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}

//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports
//
void PORT_Init (void)
{
   XBR0    = 0x17;                     // Enable UART0,SPI,I2C,CEX0,CEX1
   XBR1    = 0x16;					   //使能兩外部中斷,TO輸入口
   P0MDOUT=0x15;
   P1MDOUT=0x01;
   P2MDOUT=0xC0;
   P3MDOUT  = 0xC0;                    
   P74OUT   = 0x00;                    //P4~P7設(shè)為開漏輸出
   EMI0CF   = 0x2B;                    //XRAM的訪問方式為帶塊選擇分片方式。輸入輸出端口使用P4~P7,地址復(fù)用方式;
   XBR2    = 0x44;                     // Enable crossbar and weak pull-ups	 ,UART1

}

//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
//
void UART0_Init (void)
{
   SCON0   = 0x50;                     // SCON0: mode 1, 8-bit UART, enable RX
   TMOD    = 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
   TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
   TR1    = 1;                         // start Timer1
   CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
   PCON  |= 0x80;                      // SMOD00 = 1
   ES0=0;
   TI0= 0;                       
   RI0=0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜美腿亚洲一区| 一区二区三区四区不卡在线| 色综合中文综合网| 成人免费毛片aaaaa**| 亚洲在线观看免费视频| 欧美精品一区二区久久久| 91色九色蝌蚪| 韩国三级电影一区二区| 亚洲激情校园春色| 国产色91在线| 欧美一区二区三区在线观看视频| 成人午夜电影网站| 蜜臀久久久99精品久久久久久| 中日韩免费视频中文字幕| 日韩你懂的在线播放| 色狠狠av一区二区三区| 粉嫩aⅴ一区二区三区四区五区| 午夜一区二区三区视频| 中文字幕一区av| 久久久青草青青国产亚洲免观| 欧美日本一道本在线视频| bt7086福利一区国产| 国产精品影视天天线| 蜜桃一区二区三区在线| 性欧美疯狂xxxxbbbb| 亚洲精品免费在线播放| 国产精品久久久久久久久免费相片 | 黄一区二区三区| 亚洲va天堂va国产va久| 亚洲精品videosex极品| 一色屋精品亚洲香蕉网站| 国产亚洲短视频| 久久久精品影视| 久久只精品国产| 26uuu亚洲综合色| 日韩写真欧美这视频| 欧美午夜影院一区| 在线欧美一区二区| 日本道免费精品一区二区三区| aa级大片欧美| 一本一道综合狠狠老| 99久久er热在这里只有精品15| 99久久国产综合精品女不卡| 91麻豆免费在线观看| 91美女视频网站| 欧美专区亚洲专区| 欧美精选午夜久久久乱码6080| 欧美在线观看一区| 欧美日韩国产综合久久| 欧美久久高跟鞋激| 日韩小视频在线观看专区| 26uuu色噜噜精品一区二区| 久久中文字幕电影| 国产精品伦理在线| 国产精品的网站| 亚洲天堂久久久久久久| 亚洲国产综合视频在线观看| 亚洲国产三级在线| 日韩黄色片在线观看| 日韩电影一区二区三区四区| 视频一区二区欧美| 国模一区二区三区白浆| 夫妻av一区二区| 91美女视频网站| 欧美一区日本一区韩国一区| 26uuu国产一区二区三区| 国产欧美日韩不卡| 亚洲麻豆国产自偷在线| 五月天久久比比资源色| 极品少妇xxxx精品少妇偷拍| 国产成人精品亚洲午夜麻豆| 91免费看`日韩一区二区| 欧美亚洲国产一区二区三区va| 777色狠狠一区二区三区| 久久午夜老司机| 亚洲欧美日韩人成在线播放| 日韩电影一区二区三区四区| 国产成人av一区二区| 欧美日免费三级在线| 欧美成人aa大片| 亚洲丝袜另类动漫二区| 日韩高清在线不卡| 国产成人99久久亚洲综合精品| 91麻豆蜜桃一区二区三区| 欧美刺激脚交jootjob| 亚洲少妇中出一区| 麻豆视频观看网址久久| 99riav久久精品riav| 欧美一区中文字幕| 一区二区在线看| 国内外精品视频| 欧美天堂一区二区三区| 久久精品免视看| 日韩主播视频在线| 大白屁股一区二区视频| 日韩欧美一区二区三区在线| 亚洲久本草在线中文字幕| 国产在线播放一区二区三区| 在线免费观看日韩欧美| 国产精品视频看| 美日韩一区二区三区| 91国在线观看| 国产性色一区二区| 日本网站在线观看一区二区三区| av午夜精品一区二区三区| 日韩欧美亚洲一区二区| 亚洲大片精品永久免费| 国产91丝袜在线观看| 日韩欧美久久久| 亚洲国产精品一区二区www在线| 高清成人免费视频| 日韩美女主播在线视频一区二区三区 | 精品在线亚洲视频| 欧美日韩国产小视频| 亚洲欧美日韩久久精品| 成人黄页毛片网站| 日韩精品一区二区在线观看| 亚洲欧洲色图综合| 国产黄色精品视频| 久久久五月婷婷| 奇米一区二区三区| 欧美人狂配大交3d怪物一区| 亚洲精品免费一二三区| 91丨九色丨尤物| 国产精品美女久久久久久久 | 亚洲电影欧美电影有声小说| 99精品视频在线播放观看| 久久精品夜夜夜夜久久| 久久成人综合网| 69精品人人人人| 性感美女久久精品| 在线国产电影不卡| 亚洲制服丝袜一区| 欧美三级日韩在线| 亚洲国产精品麻豆| 欧美午夜精品一区| 亚洲成av人片在www色猫咪| 欧美日韩一区二区三区在线| 亚洲乱码中文字幕| 日本高清不卡一区| 亚洲一区二区四区蜜桃| 欧美日韩一区二区不卡| 亚洲高清中文字幕| 在线成人午夜影院| 免费不卡在线观看| 久久久国产一区二区三区四区小说 | 亚洲成av人片在线观看| 欧美巨大另类极品videosbest | 成人爽a毛片一区二区免费| 国产日产欧美一区二区视频| 丰满亚洲少妇av| 亚洲日本在线天堂| 欧美视频在线一区二区三区| 日韩精品一区第一页| 日韩精品中文字幕在线一区| 国产成人精品免费一区二区| 日韩一区在线看| 欧美在线免费视屏| 蜜桃精品视频在线| 欧美极品另类videosde| 99久久免费精品| 天天色综合成人网| 精品88久久久久88久久久| 国产成人精品亚洲日本在线桃色| 亚洲桃色在线一区| 欧美精品丝袜久久久中文字幕| 精品一区二区三区免费视频| 欧美极品少妇xxxxⅹ高跟鞋 | 免费在线观看精品| 久久久99久久| 欧美在线播放高清精品| 蜜桃精品视频在线| 成人欧美一区二区三区视频网页| 欧美视频一二三区| 国模套图日韩精品一区二区 | 欧美一级xxx| 国产aⅴ综合色| 亚洲狠狠爱一区二区三区| 久久色在线观看| 91久久久免费一区二区| 美女被吸乳得到大胸91| 国产欧美精品在线观看| 欧美日韩精品二区第二页| 国产1区2区3区精品美女| 夜夜嗨av一区二区三区网页| 精品少妇一区二区| 91亚洲精品久久久蜜桃| 久久精品免费观看| 亚洲精品写真福利| 日本一区二区视频在线观看| 欧美精品xxxxbbbb| 91网站在线观看视频| 激情另类小说区图片区视频区| 亚洲免费在线看| 国产区在线观看成人精品| 7777精品伊人久久久大香线蕉 | 欧美成人r级一区二区三区| 91久久奴性调教| 成人黄色777网| 九一九一国产精品|