<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現在位置:范文先生網>理工論文>電子通信論文>C8051FXXX單片機FLASH程序的自動升級

            C8051FXXX單片機FLASH程序的自動升級

            時間:2023-02-20 23:03:59 電子通信論文 我要投稿
            • 相關推薦

            C8051FXXX單片機FLASH程序的自動升級

            作者Email:  wolfman6353@sina.com

            引言:

              C8051FXXX系列高速SOC單片機是由美國Cygnal公司開發的完全集成的混合信號系統級芯片,具有與8051兼容的微處理器內核,內部集成FLASH程序存儲器,具有在系統重新編程能力,以C8051F020為例,內部集成64K的FLASH程序存儲器。在系統控制軟件的開發調試階段,可用集成開發環境來下載及測試系統,但當將C8051F020目標系統集成到產品后,則由于操作系統及軟硬件接口不一樣等等原因,不能在最終產品中用集成開發環境來下載FLASH程序,故產品到了用戶處之后,如要再進行FLASH程序的更新,則必須更換相應的集成電路印刷板,造成很多麻煩及不可靠因素。筆者通過實驗,在用戶操作界面的PC機及C8051F020的單片機控制系統之間,通過串行口進行C8051F020單片機控制程序的自動升級及程序加密,從而使用戶只要從互聯網上下載控制程序,即可實現單片機程序的自動升級。以下以64KBFLASH RAM為例簡要介紹單片機目標程序的準備及自動升級的制作過程。

            1)系統簡介及自動升級的實現方法

            PC機(80486/DX2以上)  具有1.44吋軟驅及串行口。單片機控制系統(具有串行口及內置的FLASH程序區)。PC與C8051FXXX之間通過九針串行接口線相連。設置傳送速率為115200BIT/S。

            C8051F020單片機的FLASH RAM分為用戶程序區(0000H~0FDFDH),廠家保留及加密區(0FDFEH~0FFFFH)兩部分,F將用戶程序區(0000H~0FDFDH)的0000H~0DFFFH部分用于裝載用戶程序,而0E000H~0FDFDH部分作為引導程序區,引導程序區在升級時不能改變,它用于與用戶操作界面的PC機部分進行程序接收及裝載等工作。

            在控制程序區0000H~0DFFFH中,做一握手程序塊,在上電時,用于和用戶操作界面PC機部分進行握手,當接收到PC機部分要進行軟件升級的命令時,程序跳至引導程序區,執行如下流程:

            ->發送準備升級字節到PC機

            ->刪除FLASH程序區

            ->發送開始下載命令到PC機

            ->接收且放到相應地址

            ->加密

            為了達到自動升級的目的,需要在用戶界面的PC機引導時,自動檢測PC機外設,軟盤控制器,一旦檢索到軟盤中有升級文件及其索引文件,且其版本比現有的單片機控制程序的版本高,則開始執行PC機中的下載程序。 

            2)刪除0000H~ODFFFH的FLASH程序區
            C8051FXXX系列單片機將FLASH程序區按512字節為一頁(PAGE)來組織,在刪除控制程序區0000H~ODFFFH時,首先屏蔽掉所有中斷,使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL.0)MOVX指令指向FALSH程序區。應用MOVX指令在每一頁的任意一地址寫0FFH,則將該頁的所有字節都置為0FFH,從而實現了該頁的刪除。依此操作可刪除所有的程序頁。刪除部分程序如下:


            //刪除0000H’ODFFFH的FLASH程序區
            DEL_NEXT_PAGE:    
              CLR EA 
              MOV A,FLSCL
              ANL A,#0FEH
              ORL A,#01H
              MOV FLSCL,A
            MOV A,PSCTL
            ANL A,#0FCH
            ORL A,#03H
              MOV PSCTL,A;#03H  //使能頁刪除及頁寫操作
              MOV A,#0FFH
              MOVX @DPTR,A    //將該頁全填充為0FFH
            INC DPH
              INC DPH     //調節頁指針
            MOV A,PSCTL
            ANL A,#0FDH
            MOV PSCTL,A;#03H
            MOV A,DPH
              CJNE A,#0E0H,DEL01_NEXT_PAGE
            DEL01_NEXT_PAGE:
              JC DEL_NEXT_PAGE

            3)從PC中接收FLASH字節
            以下程序用于從PC機中接收程序并放到相應的FLASH地址。在此僅使能PSWE(PSCTL.0)位,使MOVX指令指向FALSH程序區。
            MOV DPTR,#0000H
            MOV FLSCL,#01H
               MOV PSCTL,#01H;
            RECEIVE_NEXT_DOWNLOAD_CHAR: 
               MOV FLSCL,#01H
               MOV PSCTL,#01H;
               JNB RI,$
               CLR RI
             MOV A,SBUF0
               MOVX @DPTR,A
               INC DPTR
               MOV A,DPH
               CJNE A,#0E0H,RECEIVE_NEXT_DOWNLOAD_CHAR
               MOV FLSCL,#01H //FLASH 寫使能
               MOV PSCTL,#01H
               MOV DPTR,#0FDFEH
               CLR A
               MOVX @DPTR,A
               MOV DPTR,#0FDFFH
               MOVX @DPTR,A
               MOV PSCTL,#00H
               MOV FLSCL,#00H
               CYCLE_FOREVER:SJMP CYCLE_FOREVER;死循環
               RET


            4)FLASH程序的準備

            為了更快地得到—下載到C8051F020的FLASH程序,先在CYGNAL IDE開發環境中,將做好的控制程序編澤,鏈按,然后用廠家提供的串行適配器將PC與目標板連接起來,傳送FLASH程序到目標系統中去。接下來用“UPLOAD MEMORY T0 PILE…”(如圖示)功能將0000H~OEOOOH的FLASH代碼程序上載到硬盤存儲器中,再將此ASCII文件轉化為16進制的HE文件,注意將其十的0DH,0AH等回車換行字節取消,最后生成的HEX文件即可被直接下載到FLASH的0000H~0DFFFH的相應地址中。此HEX文件即可發送至用戶處,用于升級用戶的單片機FLASH程序。

            5)C程序的準備
            //發送FLASH程序文件到單片機中去
            BOOL SendFileToFlash()
            {
             unsigned  char ch;
             FILE *fp;
             long int flen,wi=0;
             int i,j;

             if ((fp = fopen("flashwl","rb"))==NULL)
             {
              return FALSE;
             }
             //初使化串口,且與單片機系統握手
             InitialCommuClass();

             //發送數據
             for (wi=0,j=0;wi<flen;wi++)
             {
              if (feof(fp)!=0)//到達文件結束
               break;

              fread(&ch,sizeof(unsigned char),1,fp);
                    for (;;)
               if (SendAByte(ch)==TRUE)
                break;
                 
              Printf("%ld bytes is transmitted!\n",wi); }
             fclose(fp);
             for (;;)
             {
              Printf("All bytes is transmitted!\n");
             }

            }

            //轉換上載文件為可下載的HEX目標文件
            BOOL ConvertFileToFlash()
            {
             unsigned  char ch,ru;
             FILE *fp,*fpw;
             long int flen,wi=0;
             int i,j;

             if ((fp = fopen("SOURCEC","rb"))==NULL)
             {
              return FALSE;
             }
             if ((fpw = fopen("HEXOBJECT","wb"))==NULL)
             {
              return FALSE;
             }

             for (wi=0,j=0;;wi++)
             {
              if (feof(fp)!=0)
               break;
              ru=0;
              fread(&ch,sizeof(unsigned char),1,fp);
              if ((ch>=0x30) && (ch<=0x39))
               ru+=(ch-0x30)*16;
              else if ((ch>=0x61) && (ch<=0x66))
               ru+=((ch-0x61)+0x0a)*16;
                    fread(&ch,sizeof(unsigned char),1,fp);
              if ((ch>=0x30) && (ch<=0x39))
               ru+=ch-0x30;
              else if ((ch>=0x61) && (ch<=0x66))
               ru+=(ch-0x61)+0x0a;
              fwrite(&ru,sizeof(unsigned char),1,fpw);
              fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
              fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
              fread(&ch,sizeof(unsigned char),1,fp);/*0x0a*/
              j++;
              if (j==255)
              {
               j=0;
               fread(&ch,sizeof(unsigned char),1,fp);
                        fread(&ch,sizeof(unsigned char),1,fp);
               fread(&ch,sizeof(unsigned char),1,fp);
               fread(&ch,sizeof(unsigned char),1,fp);
                        fread(&ch,sizeof(unsigned char),1,fp);
               continue;
              }
             }
             fclose(fp);fclose(fpw);
            }
            結束語

            以上所介紹的FLASH自動升級程序的PC部分在VC6.0及TC2.0中開發,并與805lFXXX系列的單片機聯機成功,并最后用于在用戶處的單片機FLASH程序升級。



            【C8051FXXX單片機FLASH程序的自動升級】相關文章:

            串行FLASH SSF1101在單片機08-06

            ATMEGA128單片機的軟件遠程升級08-06

            利用Flash實現DSP對多個程序有選擇的加載08-06

            化工自動化控制系統升級與發展08-18

            用PComm開發PC機與單片機的通信程序08-06

            教案:flash入門08-16

            升級了作文12-26

            FLASH5簡介08-16

            基于單片機的選頻表自動變步長的設計實現08-06

            主站蜘蛛池模板: 四虎永久在线精品国产馆v视影院 99偷拍视频精品一区二区 | 国产在线乱子伦一区二区| 一区二区三区四区五区自拍| 久久精品国产99麻豆蜜月| 国产av不卡一区二区| 99在线精品免费视频| 欧美最大胆的西西人体44| 你懂的视频在线一区二区| 国产成人av免费观看| 欧洲亚洲国内老熟女超碰| 成人免费乱码大片a毛片| 国产精品午夜性视频| 精品中文字幕日本久久久| 成人午夜在线观看日韩| 白嫩人妻精品一二三四区| 日韩精品有码中文字幕| 亚洲成在人线av无码| 无码av中文字幕久久专区| 亚洲熟女乱色一区二区三区| 人妻久久久一区二区三区| 非会员区试看120秒6次 | 国产伦精品一区二区三区| 日本无产久久99精品久久| 久久精品av国产一区二区 | 欧美喷潮最猛视频| 国产精品七七在线播放| 自拍日韩亚洲一区在线| 中文日产幕无线码一区中文| 亚洲 欧洲 无码 在线观看| 亚洲av影院一区二区三区四区| 国产91麻豆视频免费看| 亚洲精品麻豆一区二区| 中文人妻AV大区中文不卡 | 精品国产中文字幕av| 久久伊人精品影院一本到综合| 18禁男女爽爽爽午夜网站免费| 中文激情一区二区三区四区| 国产一级小视频| 少妇伦子伦精品无吗| 国产一区二区三区不卡在线看| 国产精品高清一区二区三区|