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

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

?? main.c.bak

?? AVR的BOOT原代碼 AVR的BOOT原代碼
?? BAK
字號:
/******************************************************************************
Atmega系列單片機 BootLoad程序  
日  期:2005年4月
馮建輝:www.mcu8.cn  mcu8@tom.com

(說明:本程序是基于www.527dz.com站的程序修改而成,程序框架保持原來風格,只是在
  通信協議及程序編程機制上作了一定的修改,以滿足于上位機軟件的配合)
/*****************************************************************************/
#include <macros.h>
#include "assembly.h"
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××
#define  fosc  8000000   //晶振頻率
#define  baud1 38400     //波特率
//請根據目標板選擇芯片型號
//#define  ChipType     Atmega8       
//#define  ChipType     Atmega16       
//#define  ChipType     Atmega32       
//#define  ChipType     Atmega64       
#define  ChipType     Atmega128
//#define  ChipType     Atmega8515       
//#define  ChipType     Atmega8535       
//*********************************************************
//選擇BOOT區大小
//#define  BootSize     'a'    //128   
//#define  BootSize     'b'    //256
//#define  BootSize       'c'    //512
#define  BootSize     'd'    //1024
//#define  BootSize     'e'    //2048(不知道是否有2048字BOOT空間的芯片)
//選擇BootLoad版本號
#define  BootVer        'f'    //1.0版本
//#define  BootVer      'g'    //1.1版本
//#define  BootVer      'h'    //1.2版本
//#define  BootVer      'i'    //1.3版本
//#define  BootVer      'j'    //1.4版本
//#define  BootVer      'k'    //1.5版本
//#define  BootVer      'l'    //1.6版本
//#define  BootVer      'm'    //1.7版本
//#define  BootVer      'n'    //1.8版本
//#define  BootVer      'o'    //1.9版本
//#define  BootVer      'p'    //2.0版本(應該是最終版本了)
//**********************************************************
#define  Atmega8        0x30
#define  Atmega16       0x31
#define  Atmega32       0x32
#define  Atmega64       0x33
#define  Atmega128      0x34
#define  Atmega8515     0x35
#define  Atmega8535     0x36
//*****************************************************************************
#define  InteClk                 //是否使用內部時鐘
#define  OscAddress     0x1fff   //時鐘校準值存儲地址
//#define  OscAddress     0x3fff   //時鐘校準值存儲地址
//*****************************************************************************
//8時鐘下的波特率設置
//#define  BAU  103    //4800
//#define  BAU  51       //9600
//#define  BAU  34     //14400
#define  BAU  25     //19200
//*****************************************************************************
#if (ChipType == Atmega8)
  #include  "iom8v.h"
  #define   PageByte 	 	 64 
  #define   AddressShift	 6
  #define	INTVECREG	 	 GICR  
#endif

#if (ChipType == Atmega16)
  #include  "iom16v.h"
  #define   PageByte 	 	 128    
  #define   AddressShift 	 7
  #define	INTVECREG	 	 GICR
#endif

#if (ChipType == Atmega32)
  #include  "iom32v.h"
  #define   PageByte 	 	 128    
  #define   AddressShift 	 7
  #define	INTVECREG	 	 GICR
#endif

#if (ChipType == Atmega64)
  #include  "iom64v.h"
  #define   PageByte 	 	 256    
  #define   AddressShift 	 8
  #define	INTVECREG	 	 MCUCR
#endif

#if (ChipType == Atmega128)
  #include  "iom128v.h"
  #define   PageByte 	 	 256    
  #define   AddressShift 	 8
  #define	INTVECREG	 	 MCUCR
  #define   RAMPZ_FLAG
#endif

#if (ChipType == Atmega8515)
  #include  "iom8515v.h"
  #define   PageByte 	 	 64    
  #define   AddressShift 	 6
  #define	INTVECREG	 	 GICR
#endif

void          FlashLoad        (void);
void          GetPageNumber    (void);
void          ExecCode         (void);
char          GetPage          (void);
void          WriteFlash       (void);
char          CheckFlash       (void);
unsigned char IsChar           (void);
void          SendChar         (unsigned char c);
void          delay            (void);                 //1ms延時函數
unsigned char RecChar          (void);

unsigned char PageBuffer[PageByte];
unsigned int  RealPageAddress;
unsigned int  PageAddress;

/*****************************************************************************/
//Flash編程								                     
/*****************************************************************************/
void FlashLoad(void)
  {
    //SendChar('!');
    while (1)
    {
	 GetPageNumber();

	 if (RealPageAddress == 0xffff) 
	   return;
        
	 if (GetPage())
	  {
		WriteFlash();
	    if (CheckFlash()) 
		  SendChar('!');
	    else 
		  SendChar('@');
	  }
	 else 
	   SendChar('@');
    }
  }

/*****************************************************************************/
void GetPageNumber(void)
  {
    unsigned char PageAddressH;
    unsigned char PageAddressL;

    PageAddressH = RecChar();

    PageAddressL = RecChar();

    RealPageAddress=(int)((PageAddressH << 8) + PageAddressL);
	PageAddress=RealPageAddress<<AddressShift;
#ifdef RAMPZ_FLAG
    if (PageAddressH) 
	   RAMPZ = 1; 
    else 
	   RAMPZ = 0;
#endif	
	//SendChar(RealPageAddress>>8);
	//SendChar(RealPageAddress);
	//SendChar(PageAddress>>8);
	//SendChar(PageAddress);
  }

/*****************************************************************************/
char GetPage(void)
  {
    unsigned char i;
    unsigned char LocalCheckSum = 0;
    unsigned char CheckSum = 0;

    for (i=0;i<PageByte/2;i++)
	{
	 while(!IsChar());
	 PageBuffer[i]=RecChar();
	 LocalCheckSum ^= PageBuffer[i];
   	}
	for (i=0;i<PageByte/2;i++)
	{
	 while(!IsChar());
	 PageBuffer[i+PageByte/2]=RecChar();
	 LocalCheckSum ^= PageBuffer[i+PageByte/2];
   	}	   
    CheckSum = RecChar(); 
	
    if (LocalCheckSum == CheckSum) 
	  return 1;
    else 
	  return 0;
  }

/*****************************************************************************/
void WriteFlash(void)
  {
    unsigned int i;
    unsigned int TempInt;
    for (i=0;i<PageByte;i+=2)
      {
   	   TempInt=PageBuffer[i]+(PageBuffer[i+1]<<8);
   	   fill_temp_buffer(TempInt,i);    //call asm routine.
      } 
    write_page(PageAddress,0x03);       //擦除頁
    write_page(PageAddress,0x05);       //寫頁數據
   
    enableRWW();
  }

/*****************************************************************************/

char CheckFlash(void)
  {
    unsigned char i;							
    unsigned int TempInt;
    unsigned int TempInt2;

    for (i=0;i<PageByte;i+=2)
      {
	   TempInt = read_program_memory(PageAddress + i,0x00);
	   TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
	   if (TempInt != TempInt2)
	     return 0;
      } 
    return 1;
  }
/*****************************************************************************/
/* Serial Port Code										                     */
/*****************************************************************************/
unsigned char IsChar(void)
{
#if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)
   if(UCSRA & 0x80)
#endif
#if (ChipType == Atmega64)||(ChipType == Atmega128)
   if(UCSR1A & 0x80)
#endif    
     return 1;
   else 
     return 0;	 
}
/*****************************************************************************/
/*  		字符輸入函數 		 */	
unsigned char RecChar(void)
  {
#if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)  
     while(!(UCSRA & 0x80));
     return UDR;
#endif
#if (ChipType == Atmega64)||(ChipType == Atmega128)	
     while(!(UCSR1A & 0x80));
     return UDR1;
#endif 
  }		
/*****************************************************************************/
void SendChar(unsigned char c)
  {
#if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)  	 
    while (!(UCSRA&(1<<UDRE)));
    UDR=c;
#endif
#if (ChipType == Atmega64)||(ChipType == Atmega128)
    while (!(UCSR1A&(1<<UDRE1)));
    UDR1=c;
#endif	
  }
void delay(void)  
  {
    unsigned int i;
    for (i=0;i<65530;i++);
  }

/*****************************************************************************/
void ExecCode(void)
  {
#ifdef RAMPZ_FLAG 
    RAMPZ = 0;
#endif
    INTVECREG=0x01;           //中斷向量表移位允許
    INTVECREG=0x00;           //中斷向量指向應用程序區
    asm("jmp 0x0000");              
  }
		
void main(void)
  {
    unsigned char BootFlag;
    
#ifdef InteClk                //如果使用內部時鐘,讀取時鐘校準值
       OSCCAL=read_flash(OscAddress);
#endif

#if (ChipType == Atmega8)||(ChipType == Atmega16)||(ChipType == Atmega32)    
    UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位數據+1位停止
    UCSRB = (1<<RXEN)|(1<<TXEN);       //允許串口發送和接收
    UBRR = BAU;
#endif	

#if (ChipType == Atmega64)||(ChipType == Atmega128)
//------------------使用串口1為Boot口-----------------    
    //UCSR1C=(1<<URSEL1)|(1<<UCSZ11)|(1<<UCSZ10); //8位數據+1位停止
	UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//|(1<<USBS1);
    UCSR1B = (1<<RXEN1)|(1<<TXEN1);       //允許串口發送和接收
	UBRR1L=((fosc/16/baud1)-1)%256;
    UBRR1H=((fosc/16/baud1)-1)/256;
#endif   
    SendChar('>');              //通知PC機,BOOT下載準備就緒
    delay();                    //延時等待PC機響應
	delay();
	delay();
	delay();
	delay();
	delay();
	delay();
	delay();
    BootFlag=UDR1;
    if (BootFlag == '<') 
      {
	   SendChar(ChipType);
	   while (RecChar()!='N');
         SendChar(BootSize);
	   while (RecChar()!='N');	 
         SendChar(BootVer);
       while (1)
	   {
	     switch (RecChar())
	       {
	         case 'W': FlashLoad(); break;
	         case 'E': { 
	         	     SendChar('E');  //通知PC機,進入運用程序區
					 while (RecChar()!='N');
	         	     ExecCode();  
	         	   } break;
	         default : break;
	       }
	   }
      }
    SendChar('E');  //通知PC機,進入運用程序區
	//while (RecChar()!='N');
    delay();
	delay();
	delay();
	delay();
    ExecCode();
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品夜夜夜夜久久| 4438x成人网最大色成网站| 成人午夜av电影| 99久久久久免费精品国产 | 精品欧美黑人一区二区三区| 欧美变态tickle挠乳网站| 欧美激情中文不卡| 亚洲小说春色综合另类电影| 蜜臂av日日欢夜夜爽一区| 成人午夜精品在线| 欧美日韩高清一区| 久久精品在这里| 亚洲成人av在线电影| 国产精品一区二区在线看| 色悠悠亚洲一区二区| 精品卡一卡二卡三卡四在线| 日韩理论片一区二区| 久久机这里只有精品| 色综合天天综合| 久久综合av免费| 午夜天堂影视香蕉久久| 国产999精品久久| 欧美一区二区三区四区久久| 国产精品国产自产拍高清av | 欧美日本韩国一区二区三区视频| 久久久久久久久久久黄色| 亚洲成人资源在线| 国产成人精品影视| 欧美一区二区私人影院日本| 成人欧美一区二区三区小说 | 国产日韩三级在线| 欧美综合一区二区| 欧美精品久久一区| 亚洲日本va午夜在线电影| 久久99日本精品| 欧美美女一区二区| 亚洲人成在线播放网站岛国 | 国产精品网站在线播放| 日本va欧美va精品发布| 色吊一区二区三区| 欧美国产精品一区二区| 美女在线一区二区| 欧美婷婷六月丁香综合色| 国产精品丝袜一区| 国产精一区二区三区| 91精品国产手机| 亚洲第一主播视频| 99精品桃花视频在线观看| 久久久不卡网国产精品一区| 日韩精品一级中文字幕精品视频免费观看 | 91色综合久久久久婷婷| 久久综合九色综合欧美亚洲| 日韩精品午夜视频| 欧美性生活大片视频| |精品福利一区二区三区| 国产精品中文字幕欧美| 2023国产精品视频| 毛片av一区二区| 7777精品伊人久久久大香线蕉完整版 | 韩国精品主播一区二区在线观看| 欧美日韩一区成人| 亚洲激情五月婷婷| 91丨porny丨国产入口| 中文欧美字幕免费| 国产精品久99| 欧美久久一二区| 久久精工是国产品牌吗| 中文字幕不卡在线| 色哟哟一区二区在线观看| 亚洲成人av一区| 精品国产污网站| 91丨porny丨在线| 免费久久99精品国产| 久久久三级国产网站| 91国偷自产一区二区三区观看 | 欧美一级在线视频| 午夜私人影院久久久久| 欧美私模裸体表演在线观看| 亚洲国产综合色| 欧美日韩精品一区二区三区蜜桃| 三级在线观看一区二区| 3d动漫精品啪啪1区2区免费| 青青草伊人久久| 精品久久久久久亚洲综合网| 国内久久婷婷综合| 国产嫩草影院久久久久| 成人激情图片网| 亚洲女人的天堂| 欧美午夜免费电影| 热久久一区二区| 久久人人爽爽爽人久久久| 国产91精品久久久久久久网曝门| 国产精品国产自产拍高清av| 欧美中文字幕亚洲一区二区va在线 | 国产精品亚洲专一区二区三区| 国产日韩视频一区二区三区| 不卡av电影在线播放| 一区二区三区日韩欧美精品| 欧美日韩一区高清| 免费在线一区观看| 国产精品污www在线观看| 在线欧美小视频| 男女男精品网站| 欧美激情在线看| 欧美亚洲精品一区| 免费高清成人在线| 国产偷国产偷精品高清尤物| 一本色道亚洲精品aⅴ| 视频一区二区中文字幕| 26uuu国产电影一区二区| www.爱久久.com| 偷拍自拍另类欧美| 国产欧美日韩综合精品一区二区| 91美女片黄在线观看91美女| 日韩电影在线免费| 国产拍欧美日韩视频二区| 在线观看免费一区| 精品无人码麻豆乱码1区2区| 中文字幕日韩一区| 4438x成人网最大色成网站| 成人免费视频国产在线观看| 亚洲妇女屁股眼交7| 久久久精品黄色| 欧美日韩一区二区电影| 国产v综合v亚洲欧| 婷婷开心久久网| 国产精品色噜噜| 日韩一区二区精品葵司在线| 99免费精品视频| 久久99国产精品久久99果冻传媒| 亚洲三级视频在线观看| 欧美tickle裸体挠脚心vk| 一本色道久久综合亚洲aⅴ蜜桃 | 国产亚洲欧美一级| 欧美日韩五月天| 暴力调教一区二区三区| 激情综合网av| 亚洲高清免费视频| 亚洲欧洲三级电影| 欧美精品一区二区在线播放| 欧美在线免费视屏| 成人av免费在线观看| 久久国产欧美日韩精品| 亚洲国产美国国产综合一区二区| 国产欧美一区视频| 日韩欧美一二三四区| 日本韩国欧美在线| 从欧美一区二区三区| 久久国产生活片100| 亚洲成人福利片| 亚洲欧美韩国综合色| 国产亚洲精久久久久久| 日韩一区二区三区高清免费看看| 91福利小视频| 99久久99久久精品国产片果冻| 国产精品中文欧美| 蜜桃视频在线观看一区| 亚洲成人激情自拍| 亚洲影视在线播放| 亚洲欧美激情视频在线观看一区二区三区 | 日av在线不卡| 日韩福利视频网| 亚洲大片精品永久免费| 亚洲激情在线播放| 亚洲视频在线观看三级| 国产色一区二区| 精品99久久久久久| 日韩免费高清视频| 日韩欧美综合在线| 欧美一区在线视频| 欧美一区二区视频在线观看2022 | 久久超级碰视频| 日本午夜精品视频在线观看| 亚洲午夜激情网页| 亚洲综合在线电影| 一区二区三区精品视频| 国产精品国产三级国产三级人妇 | 欧美性做爰猛烈叫床潮| 91美女福利视频| 色综合色狠狠天天综合色| 91在线看国产| 色av一区二区| 在线观看亚洲精品视频| 欧美性色黄大片| 欧美乱妇23p| 7777精品伊人久久久大香线蕉经典版下载 | 26uuu国产电影一区二区| 精品国产亚洲在线| 久久久综合网站| 国产日韩欧美麻豆| 中文字幕精品三区| 中文字幕亚洲精品在线观看| 日韩伦理av电影| 夜夜夜精品看看| 丝袜亚洲另类丝袜在线| 免费一级欧美片在线观看| 久久国产剧场电影| 国产成人aaaa| 一本色道a无线码一区v| 欧美亚洲综合色|