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

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

?? atemga128iap.c

?? atmega128在線升級程序
?? C
字號:
/***************************************************** 
采用串行接口實現Boot_load應用的實例 
華東師大電子系 馬 潮 2004.07 
Compiler:    ICC-AVR 6.31 
Target:    Mega128 
Crystal:    16Mhz 
Used:        T/C0,USART0 
*****************************************************/ 
#include <iom128v.h> 
#define SPM_PAGESIZE 256              
//M128/的一個Flash頁為256字節(128字) 
#define BAUD 38400                
//波特率采用38400bps 
#define CRYSTAL 16000000            
//系統時鐘16MHz 
//計算和定義M128的波特率設置參數 
#define BAUD_SETTING (unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1) 
#define BAUD_H (unsigned char)(BAUD_SETTING>>8) 
#define BAUD_L (unsigned char)BAUD_SETTING 

#define DATA_BUFFER_SIZE SPM_PAGESIZE        
//定義接收緩沖區長度 
//定義Xmoden控制字符 
#define XMODEM_NUL 0x00 
#define XMODEM_SOH 0x01 
#define XMODEM_STX 0x02 
#define XMODEM_EOT 0x04 
#define XMODEM_ACK 0x06 
#define XMODEM_NAK 0x15 
#define XMODEM_CAN 0x18 
#define XMODEM_EOF 0x1A 
#define XMODEM_RECIEVING_WAIT_CHAR 'C' 
//定義全局變量 
const char startupString[]="Type 'd' download, Others run app.\n\r\0"; 
char data[DATA_BUFFER_SIZE]; 
long address = 0; 
//擦除(code=0x03)和寫入(code=0x05)一個Flash頁 
void boot_page_ew(long p_address,char code) 
{ 
    asm("mov r30,r16\n" 
        "mov r31,r17\n" 
        "out 0x3b,r18\n");            //將頁地址放入Z寄存器和RAMPZ的Bit0中 
    SPMCSR = code;                //寄存器SPMCSR中為操作碼 
    asm("spm\n");                    //對指定Flash頁進行操作 
}         
//填充Flash緩沖頁中的一個字 
void boot_page_fill(unsigned int address,int data) 
{ 
    asm("mov r30,r16\n" 
        "mov r31,r17\n"             //Z/寄存器中為填沖頁內地址 
        "mov r0,r18\n" 
        "mov r1,r19\n");            //R0R1/中為一個指令字 
    SPMCSR = 0x01; 
    asm("spm\n"); 
} 
//等待一個Flash頁的寫完成 
void wait_page_rw_ok(void) 
{ 
      while(SPMCSR & 0x40) 
     { 
         while(SPMCSR & 0x01); 
         SPMCSR = 0x11; 
         asm("spm\n"); 
     } 
} 
//更新一個Flash頁的完整處理 
void write_one_page(void) 
{ 
    int i; 
    boot_page_ew(address,0x03);                    //擦除一個Flash頁 
    wait_page_rw_ok();                            //等待擦除完成 
    for(i=0;i<SPM_PAGESIZE;i+=2)                //將數據填入Flash緩沖頁中 
    { 
        boot_page_fill(i, data[i]+(data[i+1]<<8)); 
    } 
    boot_page_ew(address,0x05);                    //將緩沖頁數據寫入一個Flash頁 
    wait_page_rw_ok();                            //等待寫入完成 
}         
//從RS232發送一個字節 
void uart_putchar(char c) 
{ 
    while(!(UCSR0A & 0x20)); 
    UDR0 = c; 
} 
//從RS232接收一個字節 
int uart_getchar(void) 
{ 
    unsigned char status,res; 
    if(!(UCSR0A & 0x80)) return -1;        //no/ data to be received 
    status = UCSR0A; 
    res = UDR0; 
    if (status & 0x1c) return -1;        // If error, return -1 
    return res; 
} 
//等待從RS232接收一個有效的字節 
char uart_waitchar(void) 
{ 
    int c; 
    while((c=uart_getchar())==-1); 
    return (char)c; 
} 
//計算CRC 
int calcrc(char *ptr, int count) 
{ 
    int crc = 0; 
    char i; 
     
    while (--count >= 0) 
    { 
        crc = crc ^ (int) *ptr++ << 8; 
        i = 8; 
        do 
        { 
        if (crc & 0x8000) 
            crc = crc << 1 ^ 0x1021; 
        else 
            crc = crc << 1; 
        } while(--i); 
    } 
    return (crc); 
} 
//退出Bootloader程序,從0x0000處執行應用程序 
void quit(void) 
{ 
      uart_putchar('O');uart_putchar('K'); 
uart_putchar(0x0d);uart_putchar(0x0a); 
     while(!(UCSR0A & 0x20));            //等待結束提示信息回送完成 
  MCUCR = 0x01; 
     MCUCR = 0x00;                    //將中斷向量表遷移到應用程序區頭部 
     RAMPZ = 0x00;                    //RAMPZ/清零初始化 
     asm("jmp 0x0000\n");                //跳轉到Flash的0x0000處,執行用戶的應用程序 
} 
//主程序 
void main(void) 
{ 
    int i = 0; 
    unsigned char timercount = 0; 
    unsigned char packNO = 1; 
    int bufferPoint = 0; 
    unsigned int crc; 
//初始化M128的USART0 
    UBRR0H = BAUD_H;     
    UBRR0L = BAUD_L;            //Set/ baud rate 
    UCSR0B = 0x18;            //Enable/ Receiver and Transmitter 
    UCSR0C = 0x0E;            //Set/ frame format: 8data, 2stop bit 
//初始化M128的T/C0,15ms自動重載 
  OCR0 = 0xEA; 
  TCCR0 = 0x0F;     
//向PC機發送開始提示信息 
    while(startupString[i]!='\0') 
    { 
        uart_putchar(startupString[i]); 
        i++; 
    } 
//3/秒種等待PC下發"d",否則退出Bootloader程序,從0x0000處執行應用程序 
    while(1) 
    { 
        if(uart_getchar()== 'd') break; 
        if (TIFR & 0x02)                        //timer0/ over flow 
        { 
               if (++timercount > 200) quit();        //200*15ms/ = 3s 
            TIFR = TIFR|0x02; 
        } 
    } 
    //每秒向PC機發送一個控制字符"C",等待控制字〈soh〉 
    while(uart_getchar()!=XMODEM_SOH)        //receive/ the start of Xmodem 
    { 
         if(TIFR & 0x02)                    //timer0/ over flow 
        { 
            if(++timercount > 67)                        //wait/ about 1 second 
            { 
                uart_putchar(XMODEM_RECIEVING_WAIT_CHAR);    //send/ a "C" 
                timercount=0; 
            } 
            TIFR=TIFR | 0x02; 
        } 
    } 
    //開始接收數據塊 
    do 
    { 
        if ((packNO == uart_waitchar()) && (packNO ==(~uart_waitchar()))) 
        {    //核對數據塊編號正確 
            for(i=0;i<128;i++)                //接收128個字節數據 
            { 
                data[bufferPoint]= uart_waitchar(); 
                bufferPoint++;     
            } 
            crc = (uart_waitchar()<<8); 
            crc += uart_waitchar();            //接收2個字節的CRC效驗字 
            if(calcrc(&data[bufferPoint-128],128)==crc)    //CRC/校驗驗證 
            {    //正確接收128個字節數據 
                while(bufferPoint >= SPM_PAGESIZE) 
                {    //正確接受256個字節的數據 
                    write_one_page();            //收到256字節寫入一頁Flash中 
                    address += SPM_PAGESIZE;    //Flash/頁加1 
                    bufferPoint = 0; 
                }     
                uart_putchar(XMODEM_ACK);        //正確收到一個數據塊 
                packNO++;                        //數據塊編號加1 
            } 
            else 
            { 
                uart_putchar(XMODEM_NAK);        //要求重發數據塊 
            } 
        } 
        else 
        { 
            uart_putchar(XMODEM_NAK);                //要求重發數據塊 
        } 
    }while(uart_waitchar()!=XMODEM_EOT);                //循環接收,直到全部發完 
    uart_putchar(XMODEM_ACK);                        //通知PC機全部收到 
     
    if(bufferPoint) write_one_page();                //把剩余的數據寫入Flash中 
    quit();                //退出Bootloader程序,從0x0000處執行應用程序 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区视频| 日本不卡高清视频| 国产午夜一区二区三区| 欧美久久一二三四区| 欧美日韩激情一区二区| 日本精品免费观看高清观看| 高清不卡一二三区| 成年人国产精品| 91在线观看一区二区| 成人av在线网站| 91美女视频网站| 欧美日韩午夜精品| 欧美成人精精品一区二区频| 精品国产免费一区二区三区四区| 欧美成人一区二区三区| 欧美电影免费观看高清完整版在线 | 丁香亚洲综合激情啪啪综合| 国产精品66部| 91老司机福利 在线| 在线看不卡av| 日韩一区二区电影在线| 日本一区二区三区四区| 亚洲黄网站在线观看| 日韩电影一区二区三区四区| 久久国产精品第一页| 国产精品白丝av| 欧亚一区二区三区| 欧美一区二区三区在线观看视频| 精品日韩欧美一区二区| 欧美国产禁国产网站cc| 亚洲影院理伦片| 国产精品一区二区在线观看网站| 成人小视频在线观看| 欧美亚洲一区二区在线观看| 日韩免费电影一区| 国产精品网站在线观看| 青青青伊人色综合久久| 成人动漫在线一区| 日韩欧美国产系列| 亚洲欧洲精品天堂一级| 蜜臀av在线播放一区二区三区| 波多野结衣中文字幕一区| 欧美一级理论片| 一区二区三区在线不卡| 狠狠狠色丁香婷婷综合激情| 91久久人澡人人添人人爽欧美| 欧美va日韩va| 亚洲丶国产丶欧美一区二区三区| 国产麻豆成人精品| 欧美精品第一页| 亚洲伦理在线免费看| 福利视频网站一区二区三区| 91精品国产综合久久久久| 亚洲精品免费在线| 国产精品18久久久| 精品久久一二三区| 日本美女一区二区三区视频| 色88888久久久久久影院野外| 精品国产91亚洲一区二区三区婷婷 | 国内精品视频666| 欧美日产国产精品| 亚洲免费观看高清完整版在线观看熊| 激情图区综合网| 欧美一区二区日韩一区二区| 亚洲一区二区三区影院| av在线一区二区| 国产精品无码永久免费888| 国产激情视频一区二区在线观看| 日韩一级二级三级精品视频| 视频一区免费在线观看| 欧美日韩综合不卡| 亚洲国产欧美一区二区三区丁香婷| 成人黄色片在线观看| 国产精品青草久久| 丰满白嫩尤物一区二区| 国产欧美一区二区精品性色超碰| 国产一区二区三区精品欧美日韩一区二区三区| 91精品久久久久久久91蜜桃 | 久久精品国产99| 日韩免费观看高清完整版 | 欧美精品一区二区在线播放 | 亚洲另类中文字| 99久久99精品久久久久久 | 欧美一级高清片| 狠狠色狠狠色综合系列| 国产三级精品三级在线专区| 国产黄色成人av| 综合精品久久久| 欧美性色黄大片| 麻豆精品一区二区av白丝在线| 日韩视频永久免费| 福利电影一区二区三区| 亚洲欧洲综合另类在线| 欧美日韩色一区| 激情久久五月天| 中文字幕永久在线不卡| 欧美伊人久久久久久久久影院 | 久久久久国产精品免费免费搜索| 国产一区二区在线视频| 中文字幕日韩欧美一区二区三区| 在线精品视频一区二区| 蜜乳av一区二区| 国产精品美女www爽爽爽| 色成年激情久久综合| 久久精品国产精品亚洲红杏| 国产精品大尺度| 91精品午夜视频| 国产91精品久久久久久久网曝门| 亚洲精品中文字幕乱码三区| 日韩欧美国产系列| 91在线一区二区三区| 久久精品国内一区二区三区| 中文字幕一区二区三区乱码在线| 欧美无砖专区一中文字| 国产精品亚洲一区二区三区在线| 一区二区在线电影| 久久蜜桃av一区精品变态类天堂 | 麻豆91在线播放| 最近中文字幕一区二区三区| 欧美一区二区美女| 91国产丝袜在线播放| 国产成人午夜精品影院观看视频| 偷窥少妇高潮呻吟av久久免费| 久久精品一区二区三区不卡牛牛| 欧美日韩三级在线| 91丝袜美腿高跟国产极品老师| 1区2区3区精品视频| 日韩欧美亚洲一区二区| 日本韩国视频一区二区| 国产一区福利在线| 日韩**一区毛片| 夜夜揉揉日日人人青青一国产精品 | 欧美伊人久久久久久午夜久久久久| 国产尤物一区二区| 亚洲国产sm捆绑调教视频| 国产精品久久久久久久午夜片 | 99r国产精品| 色综合天天狠狠| 蜜桃一区二区三区四区| 亚洲精品成人a在线观看| 成人性生交大片免费看中文网站| 亚洲欧美在线视频| 欧美亚洲动漫制服丝袜| 日韩电影网1区2区| 欧美少妇bbb| 不卡免费追剧大全电视剧网站| 亚洲第一成人在线| 国产精品色在线| 91麻豆国产香蕉久久精品| 午夜精品在线看| 椎名由奈av一区二区三区| 色94色欧美sute亚洲线路一ni| 亚洲v中文字幕| 国产精品电影院| 亚洲va欧美va国产va天堂影院| 欧美大片国产精品| 日韩欧美亚洲一区二区| 2021中文字幕一区亚洲| 欧美国产激情一区二区三区蜜月| 国产精品欧美极品| 亚洲va欧美va人人爽| 蜜臀av一区二区在线观看| 成人免费看黄yyy456| 91美女蜜桃在线| 久久精品亚洲精品国产欧美kt∨| 亚洲欧美日韩系列| 午夜视频一区二区三区| 国产剧情一区二区| 欧美中文一区二区三区| 国产精品福利一区二区三区| 欧美日韩一本到| 中文字幕亚洲电影| 首页亚洲欧美制服丝腿| 国产在线视频精品一区| 国产精品99久久久久久似苏梦涵| 国精产品一区一区三区mba视频| 一区二区三区国产| 日韩av不卡在线观看| 极品美女销魂一区二区三区| 99久久精品久久久久久清纯| 99精品视频中文字幕| 日韩亚洲欧美高清| 午夜久久久久久| 2023国产精品| 91在线porny国产在线看| 视频一区二区三区中文字幕| 日韩欧美一区在线| 久久精品国产精品亚洲综合| 91毛片在线观看| 国产精品国产精品国产专区不蜜| 99精品欧美一区二区三区小说| 精品少妇一区二区三区日产乱码 | 91免费看`日韩一区二区| 肉肉av福利一精品导航| 精品国产污污免费网站入口| 99riav久久精品riav| 制服.丝袜.亚洲.另类.中文| 日韩精品一二三| 亚洲综合一二区| 最好看的中文字幕久久|