<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開(kāi)發(fā)網(wǎng)

      電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī) >> 正文

      C51語(yǔ)言應(yīng)用編程的若干問(wèn)題

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2013-3-4

      研制單片機(jī)應(yīng)用系統(tǒng)時(shí),匯編語(yǔ)言是一種常用的軟件工具。它能直接操作硬件,指令的執(zhí)行速度快。但其指令系統(tǒng)的固有格式受硬件結(jié)構(gòu)的限制很大,且難于編寫(xiě)與調(diào)試,可移植性也差。隨著單片機(jī)硬件性能的提高,其工作速度越來(lái)越快,因此在編寫(xiě)單片機(jī)應(yīng)用系統(tǒng)程序時(shí),更著重于程序本身的編寫(xiě)效率。而Franklin C51交叉編譯器是專(zhuān)為80C51系列單片機(jī)設(shè)計(jì)的一種高效的C語(yǔ)言編譯器,使用它可以縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)成本,而且開(kāi)發(fā)出的系統(tǒng)易于維護(hù),可靠性高,可移植性好,即使在代碼的使用效率上,也完全可以和匯編語(yǔ)言相比,因此目前它已成為開(kāi)發(fā)80C51系列單片機(jī)的流行工具。
      1 C51語(yǔ)言程序設(shè)計(jì)的基本技巧
        C語(yǔ)言是一種高級(jí)程序設(shè)計(jì)語(yǔ)言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用C51語(yǔ)言設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)程序時(shí),首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計(jì)方法,這樣可使整個(gè)應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護(hù)。對(duì)于一個(gè)較大的程序,可將整個(gè)程序按功能分成若干個(gè)模塊,不同的模塊完成不同的功能。對(duì)于不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會(huì)引起整個(gè)程序管理的混亂,還可增強(qiáng)可讀性,移植性也好。
        在程序設(shè)計(jì)過(guò)程中,要充分利用C51語(yǔ)言的預(yù)處理命令。對(duì)于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來(lái)放在一個(gè)頭文件中進(jìn)行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當(dāng)需要修改某個(gè)參量時(shí),只須修改相應(yīng)的包含文件或宏定義,而不必對(duì)使用它們的每個(gè)程序文件都作修改,從而有利于文件的維護(hù)和更新。現(xiàn)舉例說(shuō)明如下:
        例1 對(duì)于不同的單片機(jī)晶振,程序取不同的延時(shí)時(shí)間,而且可根據(jù)外界條件的變化修改延時(shí)時(shí)間的長(zhǎng)短。對(duì)于這樣的程序,可利用宏定義和條件編譯來(lái)實(shí)現(xiàn)。程序如下:
      #define   flag 1
      #ifdef   flag==1
        #define fosc 6M
        delay=10;
      #elif   flag = = 0
      #define  fosc  8M
        delay=12;
      #else
      #define  fosc  12M
        delay=20;
      #endif
      main()
      {
      for(I=0;I

      2 C51語(yǔ)言與匯編語(yǔ)言程序的混合編程
        C51編譯器能對(duì)C語(yǔ)言源程序進(jìn)行高效率的編譯,生成高效簡(jiǎn)潔的代碼,在絕大多數(shù)場(chǎng)合采用C語(yǔ)言編程即可完成預(yù)期的目的。但有時(shí)為了編程直觀(guān)或某些特殊地址的處理,還須采用一定的匯編語(yǔ)言編程。而在另一些場(chǎng)合,出于某種目的,匯編語(yǔ)言也可調(diào)用C語(yǔ)言。在這種混合編程中,關(guān)鍵是參數(shù)的傳遞和函數(shù)的返回值。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯(cuò)。下面就以力源公司的10位串行A/D轉(zhuǎn)換器TLC1549 為例說(shuō)明C語(yǔ)言程序與匯編語(yǔ)言程序的調(diào)用。 
      圖1 TLC1549管腳圖
        1549的管腳圖和時(shí)序圖分別如圖1和圖2所示,假定DATA OUT接P1.0,

      接P1.1,CLOCK接P1.2。
      1549的具體特性請(qǐng)查閱有關(guān)資料。

      例2 C語(yǔ)言程序與匯編語(yǔ)言程序的調(diào)用,其子程序如下:
      PUBLIC AD   ;入口地址
      SEG_AD SEGMENT CODE ;程序段 
      RSEG SEG_AD
      USING 0
        AD: MOV R6,#00
      MOV R7,#00
      SETB P1.1
      ACALL DELAY
      CLR P1.1
      ACALL DELAY
      MOV R0,#10
        RR0: SETB P1.2
      NOP
      CLR P1.2
      DJNZ R0,RR0
      ACALL DELAY
      MOV 30H,R6   ;A/D轉(zhuǎn)換的高
              ;兩位保存在R6中
      ACALL CIR
      MOV R6,30H
      SETB P1.2
      NOP
      CLR P1.2
      MOV 30H,R6
      ACALL CIR
      MOV R6,30H
      MOV R0,#8   ;A/D轉(zhuǎn)換的低
             ;8位保存在R7中
        RR2: SETB P1.2
      NOP
      CLR P1.2
      MOV 30H,R7
      ACALL CIR
      MOV R7,30H
      DJNZ R0,RR2
      RET
        CIR: CLR C
      MOV C,P1.0
      MOV A,30H
      RLC A
      MOV 30H,A
      RET
      END
        在以上程序中,函數(shù)的返回值為一無(wú)符號(hào)整型數(shù),根據(jù)調(diào)用規(guī)則,返回值的高位必須在R6中,低位在R7中,這樣才可保證數(shù)據(jù)的傳遞不出錯(cuò)。另外,在調(diào)用過(guò)程中,必須注意寄存器的入棧。這樣在以后用到A/D轉(zhuǎn)換時(shí),在C語(yǔ)言中調(diào)用匯編語(yǔ)言子程序AD()即可。 
      3 C51中斷處理過(guò)程
        C51編譯器支持在C源程序中直接開(kāi)發(fā)中斷過(guò)程,因此減輕了使用匯編語(yǔ)言的繁瑣工作,提高了開(kāi)發(fā)效率。中斷服務(wù)函數(shù)的完整語(yǔ)法如下:
        void 函數(shù)名(void)[模式]
        [再入]interrupt n [using r]
        其中n(0~31)代表中斷號(hào)。C51編譯器允許32個(gè)中斷,具體使用哪個(gè)中斷由80C51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時(shí),要求中斷過(guò)程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說(shuō)明中斷處理函數(shù)有無(wú)"再入"能力。C51編譯器及其對(duì)C語(yǔ)言的擴(kuò)充允許編程者對(duì)中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務(wù)程序,用戶(hù)只須在C語(yǔ)言下關(guān)心中斷和必要的寄存器組切換操作。
        例3 設(shè)單片機(jī)的fosc=12MHz,要求用T0的方式1編程,在P1.0腳輸出周期為2ms的方波。
        用C語(yǔ)言編寫(xiě)的中斷服務(wù)程序如下:
      #include
      sbit P1_0=P1^0;
      void timer0(void)interrupt 1 using 1 {
         /*T0中斷服務(wù)程序入口*/
      P1_0=!P1_0;
      TH0=-(1000/256);   /*計(jì)數(shù)初值重裝*/
      TL0=-(1000%256);
      }
      void main(void)
      {
      TMOD=0x01;   /*T0工作在定時(shí)器方式1*/
      P1_0=0;
      TH0=-(1000/256);   /*預(yù)置計(jì)數(shù)初值*/

      TL0=-(1000%256);
      EA=1;      /*CPU開(kāi)中斷*/
      ET0=1;      /*T0開(kāi)中斷*/
      TR0=1;      /*啟動(dòng)T0*/
      do{}while(1);
      }
       在編寫(xiě)中斷服務(wù)程序時(shí)必須注意不能進(jìn)行參數(shù)傳遞,不能有返回值。
      4 結(jié)論
        C51編譯器不但可以縮短單片機(jī)控制系統(tǒng)的開(kāi)發(fā)周期,而且易于調(diào)試和維護(hù)。此外,C51語(yǔ)言還有許多強(qiáng)大的功能,如提供豐富的庫(kù)函數(shù)供用戶(hù)直接調(diào)用,完整的編譯控制指令為程序調(diào)試提供必要的符號(hào)信息等等。總之,C51語(yǔ)言是廣大單片機(jī)開(kāi)發(fā)人員的強(qiáng)有力的工具。

      Tags:C51語(yǔ)言,編程,問(wèn)題  
      責(zé)任編輯:admin
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱(chēng):
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線(xiàn)幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢(xún)
      主站蜘蛛池模板: 亚洲国产精品综合一区在线| 一本久道久久综合多人| 国产成人亚洲综合无码| 六月丁香激情综合成人 | 国产精品免费综合一区视频| 国产精品亚洲综合一区在线观看| 亚洲伊人成无码综合网| 99久久综合狠狠综合久久aⅴ | 亚洲AV成人潮喷综合网| 91精品国产色综合久久不卡蜜| 亚洲av日韩综合一区二区三区| 亚洲综合区小说区激情区| 国内精品综合久久久40p| 国产成人精品综合| 一本一道久久综合久久| 五月天激激婷婷大综合丁香| 一本久道久久综合狠狠躁AV| 色婷五月综激情亚洲综合| 久久国产综合精品五月天| 卡通动漫第一页综合专区| 一本一道久久精品综合| 一本久久a久久精品综合夜夜| 中文字幕亚洲综合久久男男| 狠狠综合亚洲综合亚洲色 | 91精品国产综合久久精品| 狠狠做深爱婷婷久久综合一区| 丁香婷婷亚洲六月综合色| 97色婷婷成人综合在线观看| 伊人久久综合影院| 激情综合婷婷丁香五月| 中文字幕亚洲综合久久男男| 久久综合久久综合久久| 狠狠色伊人亚洲综合成人| 久久99精品久久久久久综合| 伊人久久大香线蕉综合影院首页| 狠狠色综合久久久久尤物| 亚洲av伊人久久综合密臀性色| 色欲色香天天天综合网站| 六月婷婷缴清综合在线| 色五月五月丁香亚洲综合网| 狠狠色丁香婷婷久久综合不卡|