欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

c51語言程序設(shè)計(jì)的若干問題

時(shí)間:2025-04-29 14:28:02 C語言 我要投稿
  • 相關(guān)推薦

c51語言程序設(shè)計(jì)的若干問題

  c51語言程序設(shè)計(jì)的若干問題

  1 c51語言程序設(shè)計(jì)的基本技巧

  c語言是一種高級程序設(shè)計(jì)語言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用c51語言設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)程序時(shí),首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計(jì)方法,這樣可使整個(gè)應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護(hù)。對于一個(gè)較大的程序,可將整個(gè)程序按功能分成若干個(gè)模塊,不同的模塊完成不同的功能。對于不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會引起整個(gè)程序管理的混亂,還可增強(qiáng)可讀性,移植性也好。

  在程序設(shè)計(jì)過程中,要充分利用c51語言的預(yù)處理命令。對于一些常用的常數(shù),如true,false,pi以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來放在一個(gè)頭文件中進(jìn)行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當(dāng)需要修改某個(gè)參量時(shí),只須修改相應(yīng)的.包含文件或宏定義,而不必對使用它們的每個(gè)程序文件都作修改,從而有利于文件的維護(hù)和更新,F(xiàn)舉例說明如下:

  例1 對于不同的單片機(jī)晶振,程序取不同的延時(shí)時(shí)間,而且可根據(jù)外界條件的變化修改延時(shí)時(shí)間的長短。對于這樣的程序,可利用宏定義和條件編譯來實(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;#endifmain(){for(i=0;i<delay;i++);}

  這樣源程序不作任何修改就可適用于不同時(shí)鐘頻率的單片機(jī)系統(tǒng),并可根據(jù)情況的不同取不同的delay值,完成不同的目的。

  2 c51語言與匯編語言程序的混合編程

  c51編譯器能對c語言源程序進(jìn)行高效率的編譯,生成高效簡潔的代碼,在絕大多數(shù)場合采用c語言編程即可完成預(yù)期的目的。但有時(shí)為了編程直觀或某些特殊地址的處理,還須采用一定的匯編語言編程。而在另一些場合,出于某種目的,匯編語言也可調(diào)用c語言。在這種混合編程中,關(guān)鍵是參數(shù)的傳遞和函數(shù)的返回值。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯(cuò)。下面就以力源公司的10位串行a/d轉(zhuǎn)換器tlc1549 為例說明c語言程序與匯編語言程序的調(diào)用。

  圖1 tlc1549管腳圖

  1549的管腳圖和時(shí)序圖分別如圖1和圖2所示,假定data out接p1.0, 接p1.1,clock接p1.2。

  1549的具體特性請查閱有關(guān)資料。

  圖2 tlc1549時(shí)序圖

  例2 c語言程序與匯編語言程序的調(diào)用,其子程序如下:

  public ad ;入口地址seg_ad segment code ;程序段 rseg seg_adusing 0 ad:mov r6,#00mov r7,#00setb p1.1acall delayclr p1.1acall delaymov r0,#10 rr0:setb p1.2nopclr p1.2djnz r0,rr0acall delaymov 30h,r6 ;a/d轉(zhuǎn)換的高 ;兩位保存在r6中acall cirmov r6,30hsetb p1.2nopclr p1.2mov 30h,r6acall cirmov r6,30hmov r0,#8 ;a/d轉(zhuǎn)換的低 ;8位保存在r7中 rr2:setb p1.2nopclr p1.2mov 30h,r7acall cirmov r7,30hdjnz r0,rr2ret cir:clr cmov c,p1.0mov a,30hrlc amov 30h,aretend

  在以上程序中,函數(shù)的返回值為一無符號整型數(shù),根據(jù)調(diào)用規(guī)則,返回值的高位必須在r6中,低位在r7中,這樣才可保證數(shù)據(jù)的傳遞不出錯(cuò)。另外,在調(diào)用過程中,必須注意寄存器的入棧。這樣在以后用到a/d轉(zhuǎn)換時(shí),在c語言中調(diào)用匯編語言子程序ad()即可。

  3 c51中斷處理過程

  c51編譯器支持在c源程序中直接開發(fā)中斷過程,因此減輕了使用匯編語言的繁瑣工作,提高了開發(fā)效率。中斷服務(wù)函數(shù)的完整語法如下:

  void 函數(shù)名(void)[模式]

 。墼偃耄輎nterrupt n [using r]

  其中n(0~31)代表中斷號。c51編譯器允許32個(gè)中斷,具體使用哪個(gè)中斷由80c51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時(shí),要求中斷過程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說明中斷處理函數(shù)有無"再入"能力。c51編譯器及其對c語言的擴(kuò)充允許編程者對中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務(wù)程序,用戶只須在c語言下關(guān)心中斷和必要的寄存器組切換操作。

  例3 設(shè)單片機(jī)的fosc=12mhz,要求用t0的方式1編程,在p1.0腳輸出周期為2ms的方波。

  用c語言編寫的中斷服務(wù)程序如下:

 。ncludesbit 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開中斷*/et0=1; /*t0開中斷*/tr0=1; /*啟動(dòng)t0*/do{}while(1);}

  在編寫中斷服務(wù)程序時(shí)必須注意不能進(jìn)行參數(shù)傳遞,不能有返回值。

  4 結(jié)論

  c51編譯器不但可以縮短單片機(jī)控制系統(tǒng)的開發(fā)周期,而且易于調(diào)試和維護(hù)。此外,c51語言還有許多強(qiáng)大的功能,如提供豐富的庫函數(shù)供用戶直接調(diào)用,完整的編譯控制指令為程序調(diào)試提供必要的符號信息等等?傊,c51語言是廣大單片機(jī)開發(fā)人員的強(qiáng)有力的工具。

【c51語言程序設(shè)計(jì)的若干問題】相關(guān)文章:

單片機(jī)c語言教程:C51循環(huán)語句06-12

C語言程序設(shè)計(jì)試題08-31

C語言程序設(shè)計(jì)題09-09

C語言程序設(shè)計(jì)50例06-14

C語言程序設(shè)計(jì)有哪些08-03

C語言程序設(shè)計(jì)是什么07-08

經(jīng)典的C語言程序設(shè)計(jì)有哪些09-25

Java語言程序設(shè)計(jì)基礎(chǔ)篇10-23

C語言程序設(shè)計(jì)的教學(xué)設(shè)計(jì)07-11