第1章單片機C語言概述_第1頁
第1章單片機C語言概述_第2頁
第1章單片機C語言概述_第3頁
第1章單片機C語言概述_第4頁
第1章單片機C語言概述_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 單片機技術(shù)應用入門單片機技術(shù)應用入門 -C51-C51程序設計程序設計(32學時)學時)電氣與電子工程學院電氣與電子工程學院姜志海姜志海課程簡介描述:課程簡介描述: 以標準以標準C C語言和語言和5151單片機為基礎,全面單片機為基礎,全面介紹單片機介紹單片機C C語言程序設計與應用基礎。語言程序設計與應用基礎。包括單片機包括單片機C C語言概述、語言概述、KEILKEIL和和PROTEUSPROTEUS應用概述、應用概述、5151功能部件編程基礎、接口功能部件編程基礎、接口編程基礎。編程基礎。首先:首先: 1.1.為什么開這門課?為什么開這門課? 2.2.學好這門課需要的基礎知識?學好這門

2、課需要的基礎知識? 3.3.怎樣掌握這門課?怎樣掌握這門課? 4.4.課程內(nèi)容。課程內(nèi)容。 5.5.要求。要求。1.1.為什么開這門課?為什么開這門課? 需要需要 大規(guī)模生產(chǎn)大規(guī)模生產(chǎn)自動化生產(chǎn)線的需要。自動化生產(chǎn)線的需要。 不需要人的干預自動工作、儀表的智不需要人的干預自動工作、儀表的智能化能化 自動化產(chǎn)品、儀器儀表自動化產(chǎn)品、儀器儀表2.2.需要的基礎知識?需要的基礎知識? 單片機硬件基礎、單片機硬件基礎、C C語言基礎語言基礎3.3.怎樣掌握這門課?怎樣掌握這門課? 程序設計程序設計= =算法算法+ +語言語言 (1)(1)重點:算法重點:算法-框圖框圖 (2)(2)興趣興趣4.4.課程

3、內(nèi)容課程內(nèi)容 (1 1)概述)概述 (2 2)軟件工具)軟件工具 (3 3)C C語言基礎語言基礎 (4 4)中斷、定時器)中斷、定時器/ /計數(shù)器、串行口的計數(shù)器、串行口的C C語言編程基礎語言編程基礎 (5 5)鍵盤)鍵盤/ /顯示、模擬量的顯示、模擬量的C C語言編程語言編程基礎基礎5.5.要求要求 自覺學習、快樂學習、認真學習自覺學習、快樂學習、認真學習 參考教材:參考教材: 普通高等教育普通高等教育“十一五十一五”國家級規(guī)劃教材國家級規(guī)劃教材 單片機的單片機的C C語言程序設計與應用語言程序設計與應用 -基于基于PROTEUSPROTEUS仿真(第仿真(第2 2版)版) 姜志海姜志海

4、 電子工業(yè)出版社電子工業(yè)出版社補充:補充:5151單片機硬件基本基礎單片機硬件基本基礎一一、單片機概述、單片機概述二二、MCS-51MCS-51單片機的總體結(jié)構(gòu)單片機的總體結(jié)構(gòu)三、三、MCS-51MCS-51單片機的存儲器結(jié)構(gòu)單片機的存儲器結(jié)構(gòu)四、四、MCS-51MCS-51單片機并行的單片機并行的I/OI/O口口五五、MCS-51MCS-51單片機的輔助電路及時單片機的輔助電路及時序序一一、單片機概述、單片機概述 1 1、定義:、定義: 采用一定的采用一定的工藝手段工藝手段將將CPUCPU、存儲器、存儲器、I/OI/O口口集成集成在一個芯片上。在一個芯片上。 2 2、特點:、特點: 抗干擾性

5、強,工作溫度范圍寬抗干擾性強,工作溫度范圍寬 ; 可靠性高;可靠性高; 控制功能很強,數(shù)值計算能力較差;控制功能很強,數(shù)值計算能力較差; 指令系統(tǒng)比通用微機系統(tǒng)簡單;指令系統(tǒng)比通用微機系統(tǒng)簡單; 更新?lián)Q代速度比通用微機處理器慢多。更新?lián)Q代速度比通用微機處理器慢多。3 3、應用:、應用: 智能儀表中的應用智能儀表中的應用 機電一體化中的應用機電一體化中的應用 實時控制中的應用實時控制中的應用 軍工領(lǐng)域的應用軍工領(lǐng)域的應用 分布式多機系統(tǒng)中的應用分布式多機系統(tǒng)中的應用 民用電子產(chǎn)品中的應用民用電子產(chǎn)品中的應用 3 3、常用的單片機產(chǎn)品、常用的單片機產(chǎn)品 MCSMCS單片機單片機 AVRAVR單片機

6、單片機 PICPIC單片機單片機 MSPMSP單片機單片機 ARMARM處理器處理器 DSPDSP處理器處理器 4、單片機應用系統(tǒng)、單片機應用系統(tǒng)5 5、單片機應用系統(tǒng)開發(fā)概述、單片機應用系統(tǒng)開發(fā)概述 開發(fā)環(huán)境的軟硬件構(gòu)成開發(fā)環(huán)境的軟硬件構(gòu)成 PROTEL、PROTEUS、KEIL C51等等 單片機的在線編程單片機的在線編程 ISP- ISP-在線系統(tǒng)編程在線系統(tǒng)編程 IAP- IAP-在線應用編程在線應用編程二、總體結(jié)構(gòu)二、總體結(jié)構(gòu) 包括四個問題:包括四個問題: 1 1、內(nèi)部結(jié)構(gòu)、內(nèi)部結(jié)構(gòu) 2 2、外部引腳、外部引腳 3 3、總線圖、總線圖 4 4、微處理器、微處理器 講到單片機都有個系列

7、問題講到單片機都有個系列問題 MCS-51MCS-51: 基本型基本型 5151子系列子系列(803180518751)(803180518751) 增強型增強型 5252子系列子系列(803280528752)(803280528752) 特殊型特殊型 所有的基礎都是所有的基礎都是基本型。基本型。1 1、內(nèi)部結(jié)構(gòu)、內(nèi)部結(jié)構(gòu) 8 8位的位的CPUCPU;128128個字節(jié)的片內(nèi)個字節(jié)的片內(nèi)RAMRAM; 4 4K K字節(jié)的片內(nèi)字節(jié)的片內(nèi)ROMROM程序存儲器程序存儲器(8031(8031無無) ) 外部的外部的RAMRAM和和ROMROM的尋址范圍為的尋址范圍為6464K K 2121個字節(jié)的

8、專用寄存器個字節(jié)的專用寄存器 4 4個個8 8位并行位并行I/OI/O口;口;1 1個全雙工的串行口個全雙工的串行口 2 2個個1616位的定時器位的定時器/ /計數(shù)器計數(shù)器 5 5個中斷源、個中斷源、2 2個中斷優(yōu)先級個中斷優(yōu)先級 111111條指令。條指令。內(nèi)部結(jié)構(gòu)框圖:內(nèi)部結(jié)構(gòu)框圖:2 2、外部引腳及說明、外部引腳及說明 P3P3口第二功能:口第二功能: 3 3、總線圖、總線圖4 4、CPUCPU CPUCPU又稱為微處理器又稱為微處理器,是單片機內(nèi)部是單片機內(nèi)部的核心部件,它決定了單片機的重要功的核心部件,它決定了單片機的重要功能特性。它由能特性。它由運算器運算器和和控制器控制器兩大部

9、分兩大部分組成。組成。 對對CPUCPU的使用就是對的使用就是對CPUCPU中的寄存器中的寄存器的使用。的使用。有關(guān)的寄存器有關(guān)的寄存器 累加器累加器ACC ACC 寄存器寄存器B B 程序狀態(tài)字程序狀態(tài)字PSW PSW 布爾處理器布爾處理器C C 程序計數(shù)器程序計數(shù)器PC PC 數(shù)據(jù)指針數(shù)據(jù)指針DPTRDPTR 堆棧指針堆棧指針SPSP三、存儲器結(jié)構(gòu)三、存儲器結(jié)構(gòu) 從物理結(jié)構(gòu)上可分為從物理結(jié)構(gòu)上可分為2 2部分:部分: 1 1、程序存儲器、程序存儲器 (1 1)編址與訪問)編址與訪問 (2 2)程序的)程序的7 7個特殊入口地址個特殊入口地址 2 2、數(shù)據(jù)存儲器、數(shù)據(jù)存儲器 (1 1)編址與

10、訪問)編址與訪問 (2 2)片內(nèi)數(shù)據(jù)存儲器)片內(nèi)數(shù)據(jù)存儲器 (3 3)特殊功能寄存器塊)特殊功能寄存器塊 1 1、程序存儲器、程序存儲器 程序存儲器通常存放程序指令、常數(shù)及程序存儲器通常存放程序指令、常數(shù)及表格等,系統(tǒng)在運行過程中不能修改其表格等,系統(tǒng)在運行過程中不能修改其中的數(shù)據(jù)中的數(shù)據(jù) 。(1 1)編址與訪問)編址與訪問(2 2)程序的幾個特殊地址)程序的幾個特殊地址: : 復位復位 0000 0000H H 外部中斷外部中斷0 00030 0003H H 定時器定時器/ /計數(shù)器計數(shù)器0 0溢出溢出 000 000BHBH 外部中斷外部中斷1 00131 0013H H 定時器定時器/

11、/計數(shù)器計數(shù)器1 1溢出溢出 001 001BHBH 串行口中斷串行口中斷 0023 0023H H (定時器定時器/ /計數(shù)器計數(shù)器2 2溢出溢出 002 002BHBH)2 2、數(shù)據(jù)存儲器、數(shù)據(jù)存儲器 數(shù)據(jù)存儲器則存放緩沖數(shù)據(jù),系統(tǒng)在運數(shù)據(jù)存儲器則存放緩沖數(shù)據(jù),系統(tǒng)在運行過程中可修改其中的數(shù)據(jù)。行過程中可修改其中的數(shù)據(jù)。 包括包括: : (1 1)編址與訪問編址與訪問 (2 2)片內(nèi)數(shù)據(jù)存儲器)片內(nèi)數(shù)據(jù)存儲器 (3 3)特殊功能寄存器塊)特殊功能寄存器塊(1 1)編址與訪問)編址與訪問(2 2)片內(nèi)數(shù)據(jù)存儲器)片內(nèi)數(shù)據(jù)存儲器 00H 00H1FH1FH 20H 20H2FH2FH 30H

12、30H7FH7FH 堆棧:堆棧: 片內(nèi)片內(nèi)RAMRAM、初始化時初始化時SP=07HSP=07H 向上生長的向上生長的 一般程序的開始:一般程序的開始: MOV SP MOV SP,#60H#60H(3 3)特殊功能寄存器塊)特殊功能寄存器塊 特殊功能寄存器又稱為專用寄存器特殊功能寄存器又稱為專用寄存器 專用于控制、管理片內(nèi)算術(shù)邏輯部件、并行專用于控制、管理片內(nèi)算術(shù)邏輯部件、并行I/OI/O口、串行口、串行I/OI/O口、定時器口、定時器/ /計數(shù)器、中斷系計數(shù)器、中斷系統(tǒng)等功能模塊的工作。統(tǒng)等功能模塊的工作。四、并行的四、并行的I/OI/O口口1 1、P1P1口口2 2、P3P3口口3 3、

13、P0P0口口4 4、P2P2口口1 1、P1P1口:口:2 2、P3P3口:口:3 3、P0P0口:口:4 4、P2P2口:口:五、輔助電路及時序五、輔助電路及時序 1 1、時鐘電路、時鐘電路 2 2、復位電路、復位電路 3 3、時序、時序 1 1、 時鐘電路時鐘電路2 2、復位電路、復位電路3 3、時序、時序 (1 1)振蕩周期)振蕩周期 (2 2)狀態(tài)周期)狀態(tài)周期 (3 3)機器周期)機器周期 (4 4)指令周期)指令周期 外部晶振的外部晶振的2 2分頻是分頻是MCS-51MCS-51單片機的內(nèi)單片機的內(nèi)部部時鐘周期時鐘周期,6 6個時鐘周期個時鐘周期構(gòu)成了單片構(gòu)成了單片機的機的1 1個

14、機器周期個機器周期 。第第1 1章章 單片機的單片機的C C語言概述語言概述 1 11 C1 C語言與單片機編程語言與單片機編程1 12 C512 C51程序程序1 13 C513 C51編程舉例編程舉例 1 11 C1 C語言與單片機編程語言與單片機編程 一、單片機的一、單片機的C語言的特點語言的特點 二、單片機的二、單片機的C語言與標準語言與標準C語言的語言的比較比較 三、單片機的三、單片機的C語言與匯編語言的語言與匯編語言的比較比較一、單片機的一、單片機的C語言的特點語言的特點 無須了解機器硬件,只需初步了解無須了解機器硬件,只需初步了解MCS-51MCS-51的存儲器的存儲器結(jié)構(gòu);結(jié)構(gòu)

15、; C51C51語言在小應用程序中產(chǎn)生的代碼量大,執(zhí)行速語言在小應用程序中產(chǎn)生的代碼量大,執(zhí)行速度慢,但在較大的程序中代碼效率高;度慢,但在較大的程序中代碼效率高; C51C51語言程序由若干函數(shù)組成,具有良好的模塊化語言程序由若干函數(shù)組成,具有良好的模塊化結(jié)構(gòu),便于改進和擴充;結(jié)構(gòu),便于改進和擴充; C51C51語言程序具有良好的可讀性和可維護性,而匯語言程序具有良好的可讀性和可維護性,而匯編語言在大應用程序開發(fā)中,開發(fā)難度增加,可讀性編語言在大應用程序開發(fā)中,開發(fā)難度增加,可讀性差;差; C51C51語言有豐富的庫函數(shù),可以大大減少用戶的編語言有豐富的庫函數(shù),可以大大減少用戶的編程量,顯著

16、縮短編程與調(diào)試時間,大大提高軟件開發(fā)程量,顯著縮短編程與調(diào)試時間,大大提高軟件開發(fā)效率;效率; 使用匯編語言編制的程序,當機型改變時,無法直使用匯編語言編制的程序,當機型改變時,無法直接移植使用,而接移植使用,而C C語言程序是面向用戶的程序設計語語言程序是面向用戶的程序設計語言,能在不同機型的機器上運行,可移植性好。言,能在不同機型的機器上運行,可移植性好。二、單片機的二、單片機的C語言與標準語言與標準C語言的比較語言的比較 (1)C51語言中定義的庫函數(shù)和標準語言中定義的庫函數(shù)和標準C語言定義的庫語言定義的庫函數(shù)不同函數(shù)不同 (2)C51語言中的數(shù)據(jù)類型和標準語言中的數(shù)據(jù)類型和標準C語言的

17、數(shù)據(jù)類型語言的數(shù)據(jù)類型也有一定的區(qū)別也有一定的區(qū)別 (3)C51變量的存儲模式與標準變量的存儲模式與標準C語言中變量的存儲語言中變量的存儲模式不一樣模式不一樣 (4)C51語言與標準語言與標準C語言的輸入語言的輸入/輸出處理不一樣輸出處理不一樣 (5)C51語言與標準語言與標準C語言在函數(shù)使用方面有一定的語言在函數(shù)使用方面有一定的區(qū)別區(qū)別 C51語言中有專門的中斷函數(shù)。語言中有專門的中斷函數(shù)。三、單片機的三、單片機的C語言與匯編語言的比較語言與匯編語言的比較 【例例1-11-1】 將外部數(shù)據(jù)存儲器的將外部數(shù)據(jù)存儲器的000BH000BH和和000CH000CH單元的內(nèi)容相互交換單元的內(nèi)容相互交

18、換ORG 0000HMOVDPTR, #000BHMOVXA, DPTRMOVR7, AINCDPTRMOVXA, DPTRMOVDPTR, #000BHMOVXDPTR, AINC DPTRMOVA, R7MOVXDPTR, ASJMP $ENDC C語言編程:語言編程: #include /絕對地址訪問庫函數(shù)絕對地址訪問庫函數(shù) void main(void) char c; c=XBYTE11; XBYTE11=XBYTE12; XBYTE12=c; while(1); 上述的上述的C C語言反匯編:語言反匯編:0 x0000 020013 LJMP STARTUP1(C:0013);跳轉(zhuǎn)

19、;跳轉(zhuǎn)0 x0003 90000B MOV DPTR, #0 x000B0 x0006 E0 MOVX A, DPTR0 x0007 FF MOV R7, A0 x0008 A3 INC DPTR0 x0009 E0 MOVX A, DPTR0 x000A 90000B MOV DPTR, #0 x000B0 x000D F0 MOVX DPTR, A0 x000E A3 INC DPTR0 x000F EF MOV A, R70 x0010 F0 MOVX DPTR, A0 x0011 80FE SJMP C:00110 x0013 787F MOV R0, #0 x7F;以下是清零部分;以

20、下是清零部分0 x0015 E4 CLR A0 x0016 F6 MOV R0,A0 x0017 D8FD DJNZ R0,IDATALOOP(C:0016)0 x0019 758107 MOV SP(0 x81),#0 x070 x001C 020003 LJMP main(C:0003)【例例1-21-2】二進制數(shù)轉(zhuǎn)換成十進制數(shù)(二進制數(shù)轉(zhuǎn)換成十進制數(shù)(BCDBCD碼)碼) 將累加器將累加器A A中給定的二進制數(shù),轉(zhuǎn)中給定的二進制數(shù),轉(zhuǎn)換成換成3 3個十進制數(shù)(個十進制數(shù)(BCDBCD碼),并存碼),并存入入ResultResult開始的開始的3 3個單元。個單元。匯編語言源程序如下:匯編

21、語言源程序如下: Result EQU 20H ORG 0000H LJMP STARTSTART: MOV SP, #60H;主程序主程序 MOV A, #123 LCALL BINTOBCD SJMP $BINTOBCD: MOV B, #100 ;設置轉(zhuǎn)換子程序設置轉(zhuǎn)換子程序 DIV AB MOV Result,A;除以除以100得百位數(shù)得百位數(shù) MOV A, B MOV B, #10 DIV AB MOV Result+1, A;余數(shù)除以余數(shù)除以10得十位數(shù)得十位數(shù) MOV Result+2, B;余數(shù)為個位數(shù)余數(shù)為個位數(shù) RET ENDC51C51源程序如下:源程序如下: void

22、main(void) unsigned char Result3; unsigned char Number; Number=123; Result0=Number/100;/除以除以100得百位得百位 Result1=(Number%100)/10;/余數(shù)除以余數(shù)除以10得十位得十位 Result2=Number%10;/余數(shù)為個位余數(shù)為個位 while(1);/等待暫停等待暫停 【例例1-31-3】二進制數(shù)轉(zhuǎn)換成二進制數(shù)轉(zhuǎn)換成ASCIIASCII碼程序。碼程序。 將累加器將累加器A A中的內(nèi)容分為兩個中的內(nèi)容分為兩個ASCIIASCII碼,并存入碼,并存入ResultResult開始的兩個

23、單元。開始的兩個單元。匯編語言源程序如下:匯編語言源程序如下: Result EQU20H ORG 0000H LJMP STARTSTART: MOV SP, #40H MOV A, #00011010B LCALL BINTOHEX SJMP $BINTOHEX: MOV DPTR, #ASCIITAB MOV B, A SWAP A ANL A, #0FH;取取A的高的高4位位 MOVC A, A+DPTR MOV Result, A MOV A, B ANL A, #0FH;取取A的低的低4位位 MOVC A, A+DPTR MOV Result+1, A RETASCIITAB: D

24、B 0123456789ABCDEF ENDC51C51源程序如下:源程序如下: code unsigned char ASCIITAB16=0123456789ABCDEF; void main(void) unsigned char Result2; unsigned char Number; Number=0 x1a; Result0=ASCIITABNumber/16; /高高4位位 Result1=ASCIITABNumber&0 x0f;/低低4位位 while(1); 1 12 C512 C51程序程序 本節(jié)主要介紹本節(jié)主要介紹C51C51程序的結(jié)構(gòu)、規(guī)范、程序的結(jié)構(gòu)、規(guī)

25、范、注意事項、標識符、關(guān)鍵字等。注意事項、標識符、關(guān)鍵字等。 一、一、C51C51的程序結(jié)構(gòu)的程序結(jié)構(gòu) 二、二、C51C51編程規(guī)范及注意事項編程規(guī)范及注意事項 三、三、C51C51的標識符與關(guān)鍵字的標識符與關(guān)鍵字一、一、C51C51的程序結(jié)構(gòu)的程序結(jié)構(gòu)#include#includevoid Function1(void);unsigned int ch;void main(void) SCON=0 x50; TMOD=0 x20; TH1=221; TR1=1; TI=1; /以上是串口調(diào)試需要以上是串口調(diào)試需要 while(ch=5) Function1( ); printf(char=

26、%dn,ch); while(1);void Function1(void) unsigned char ps; ps=1; ch=ch+ps;從上面的例子可以看出:從上面的例子可以看出: 一個典型的一個典型的C51C51源程序包含源程序包含預處理命令預處理命令、自定自定義函數(shù)聲明義函數(shù)聲明、mainmain主函數(shù)主函數(shù)和和自定義函數(shù)自定義函數(shù)。這。這幾部分完全類似于幾部分完全類似于C C語言的程序結(jié)構(gòu)。語言的程序結(jié)構(gòu)。 預處理命令部分預處理命令部分常用常用#include#include命令來包含一命令來包含一些程序中用到的頭文件。這些頭文件中包含些程序中用到的頭文件。這些頭文件中包含了一些

27、庫函數(shù)以及其他函數(shù)的聲明及定義。了一些庫函數(shù)以及其他函數(shù)的聲明及定義。 自定義函數(shù)聲明部分自定義函數(shù)聲明部分用來聲明源程序中自定用來聲明源程序中自定義的函數(shù)。義的函數(shù)。 mainmain()主函數(shù)()主函數(shù)是整個是整個C51C51程序的入口。程序的入口。不論不論mainmain()函數(shù)位于程序代碼中的哪()函數(shù)位于程序代碼中的哪個位置,個位置,C51C51程序總是從程序總是從mainmain()函數(shù)()函數(shù)開始執(zhí)行的。開始執(zhí)行的。 自定義函數(shù)部分自定義函數(shù)部分是是C51C51源程序中用到的源程序中用到的自定義函數(shù)的函數(shù)體。自定義函數(shù)的函數(shù)體。 除了擴展名為除了擴展名為“.c”.c”的源程序文件

28、,的源程序文件,C51C51程序還支持擴展名為程序還支持擴展名為“.h”.h”的頭文的頭文件以及擴展名為件以及擴展名為“.lib”.lib”的庫文件等。的庫文件等。 在一般的編譯系統(tǒng)中,通常以項目(工程)結(jié)構(gòu)來管在一般的編譯系統(tǒng)中,通常以項目(工程)結(jié)構(gòu)來管理復雜的理復雜的C51C51程序文件。例如程序文件。例如KeilKeil Vision2 Vision2編譯環(huán)編譯環(huán)境中,整個項目結(jié)構(gòu)如圖境中,整個項目結(jié)構(gòu)如圖1-11-1所示。所示。 在這里整個項目由項目文件管理、項目文件擴展名為在這里整個項目由項目文件管理、項目文件擴展名為“.Uv2”.Uv2”。整個工程項目中可以包含如下幾類文件。整個

29、工程項目中可以包含如下幾類文件。 頭文件頭文件用來包含一些庫函數(shù),系統(tǒng)變量聲明以及將用來包含一些庫函數(shù),系統(tǒng)變量聲明以及將不同的不同的C C文件連接起來。文件連接起來。 C C源文件源文件是是C51C51程序的主要部分,用來實現(xiàn)特定的功程序的主要部分,用來實現(xiàn)特定的功能。能。C C源文件可以有一個,也可以按照不同的功能分源文件可以有一個,也可以按照不同的功能分成多個,但所有這些成多個,但所有這些C C源文件中有且僅有一個可以包源文件中有且僅有一個可以包含一個含一個main( )main( )主函數(shù)。主函數(shù)。 庫文件庫文件是實現(xiàn)特定功能的函數(shù)庫,供是實現(xiàn)特定功能的函數(shù)庫,供C C源文件調(diào)用。源文

30、件調(diào)用。 編譯中間文件是源程序在編譯鏈接過程中生成的中編譯中間文件是源程序在編譯鏈接過程中生成的中間文件,其中包含了文件編譯調(diào)試的信息。間文件,其中包含了文件編譯調(diào)試的信息。 可燒錄文件可燒錄文件是編譯系統(tǒng)生成的可以燒錄到單片機內(nèi)是編譯系統(tǒng)生成的可以燒錄到單片機內(nèi)部供執(zhí)行的文件,類似于部供執(zhí)行的文件,類似于“exe”exe”可執(zhí)行文件。在可執(zhí)行文件。在C51C51語言中,一般擴展名為語言中,一般擴展名為“.hex”.hex”或者或者“.bin”.bin”等。等。 二、二、C51C51編程規(guī)范及注意事項編程規(guī)范及注意事項1 1注釋注釋 在在C51C51語言中可以通過兩種方式表示注釋內(nèi)容。語言中可

31、以通過兩種方式表示注釋內(nèi)容。 (1 1)用)用“/”/”開頭來注釋一行開頭來注釋一行 如如“/變量聲明變量聲明”。 (2 2)用)用“/ /* *”符號開頭,并以符號開頭,并以“* */”/”符號結(jié)符號結(jié)束束 如用如用“/ /* *聲明整型變量聲明整型變量chch* */”/”。本方法靈活。本方法靈活多變,可以注釋多行多變,可以注釋多行printf(“chprintf(“ch=%=%dndn”,/”,/* *整型變量整型變量chch* */ /chch);); 一個好的一個好的C51C51源程序應該添加必要的注釋內(nèi)容。源程序應該添加必要的注釋內(nèi)容。2 2命名命名 在進行程序設計時,經(jīng)常需要自定

32、義一些函數(shù)或變量。在進行程序設計時,經(jīng)常需要自定義一些函數(shù)或變量。一般來說,重要符合一般來說,重要符合C51C51命名規(guī)范即可通過編譯。但命名規(guī)范即可通過編譯。但是,為了便于源程序的理解和交流,在進行命名時應是,為了便于源程序的理解和交流,在進行命名時應注意以下幾點:注意以下幾點: 自定義函數(shù)或者變量的名稱最好能反映該函數(shù)或變自定義函數(shù)或者變量的名稱最好能反映該函數(shù)或變量的功能用途。因此,需要選用有意義的單詞或者字量的功能用途。因此,需要選用有意義的單詞或者字母組合來表示。例如母組合來表示。例如MAXMAX表示最大值、表示最大值、MINMIN表示最小值表示最小值等。等。 變量名通常加上表示數(shù)據(jù)

33、類型的前綴,例如變量名通常加上表示數(shù)據(jù)類型的前綴,例如“ucSendDataucSendData”的前綴的前綴“ucuc”表示表示unsigned charunsigned char。 在命名時不要和系統(tǒng)保留的標識符以及關(guān)鍵字產(chǎn)生在命名時不要和系統(tǒng)保留的標識符以及關(guān)鍵字產(chǎn)生沖突或者歧義。沖突或者歧義。3 3格式(同標準格式(同標準C C語言)語言)為了程序閱讀方便,在進行為了程序閱讀方便,在進行C51C51程序設計時,在程序結(jié)構(gòu)以及語程序設計時,在程序結(jié)構(gòu)以及語句書寫格式方面應注意以下幾點:句書寫格式方面應注意以下幾點: 雖然雖然C51C51語言對語言對main( )main( )函數(shù)放置位置

34、沒有限定,但為了程序閱函數(shù)放置位置沒有限定,但為了程序閱讀的方便,最好把它放置在所有自定義函數(shù)的前面,即依次為讀的方便,最好把它放置在所有自定義函數(shù)的前面,即依次為頭文件聲明、自定義函數(shù)以及全局變量聲明、頭文件聲明、自定義函數(shù)以及全局變量聲明、main( )main( )函數(shù)、自函數(shù)、自定義函數(shù)。定義函數(shù)。 C51C51語句可以寫在一行上也可以寫在多行上。為了程序理解的語句可以寫在一行上也可以寫在多行上。為了程序理解的方便,最好將每個語句單獨寫在一行,并加以注釋。有時某幾方便,最好將每個語句單獨寫在一行,并加以注釋。有時某幾個相連的語句或者共同執(zhí)行某個功能則可以放置在一行。個相連的語句或者共同

35、執(zhí)行某個功能則可以放置在一行。 對于源程序文件不同結(jié)構(gòu)部分之間要留有空行。例如,頭文件對于源程序文件不同結(jié)構(gòu)部分之間要留有空行。例如,頭文件聲明、自定義函數(shù)聲明、聲明、自定義函數(shù)聲明、main( )main( )函數(shù)以及自定義函數(shù)之間均要函數(shù)以及自定義函數(shù)之間均要空一行,來明顯區(qū)分不同結(jié)構(gòu)。空一行,來明顯區(qū)分不同結(jié)構(gòu)。 對于對于ifif、whilewhile等塊結(jié)構(gòu)語句中的等塊結(jié)構(gòu)語句中的“”和和“”要配對對齊,要配對對齊,以便于程序閱讀時能夠理解該結(jié)構(gòu)的起始和結(jié)束。以便于程序閱讀時能夠理解該結(jié)構(gòu)的起始和結(jié)束。 源代碼安排時可以通過適當?shù)目崭褚约霸创a安排時可以通過適當?shù)目崭褚约癟abTab鍵

36、來實現(xiàn)代碼對齊。鍵來實現(xiàn)代碼對齊。三、三、C51C51的標識符與關(guān)鍵字的標識符與關(guān)鍵字 1 1標識符標識符標識符常用來聲明某個對象的名稱,如變量和常量的聲明、數(shù)標識符常用來聲明某個對象的名稱,如變量和常量的聲明、數(shù)組和結(jié)構(gòu)的聲明、自定義函數(shù)的聲明以及數(shù)據(jù)類型的聲明等。組和結(jié)構(gòu)的聲明、自定義函數(shù)的聲明以及數(shù)據(jù)類型的聲明等。示例如下。示例如下。intint count; count;void Function1( );void Function1( );在上面的例子中,在上面的例子中,countcount為整型變量的標識符,為整型變量的標識符,F(xiàn)unction1Function1為自為自定義函數(shù)的

37、標識符。定義函數(shù)的標識符。在在C51C51語言中,標識符可以由字母、數(shù)字(語言中,標識符可以由字母、數(shù)字(0 09 9)或者下劃線)或者下劃線“_”_”組成,最多可支持組成,最多可支持3232個字符。個字符。C51C51標識符的第一個字符必標識符的第一個字符必須或者下劃線須或者下劃線“_”_”,例如,例如“untunt”、“ch_1”ch_1”等都是正確的,等都是正確的,而而“5count”5count”則是錯誤的標識符。另外,則是錯誤的標識符。另外,C51C51的標識符區(qū)分大小的標識符區(qū)分大小寫,例如寫,例如“count”count”和和“COUNT”COUNT”代表兩個不同的標識符,代表兩

38、個不同的標識符,使用標識符時應注意以下幾點:使用標識符時應注意以下幾點: 在命名在命名C51C51標識符時,需要能夠清楚地表達其功能標識符時,需要能夠清楚地表達其功能含義,這樣有助于閱讀和理解源程序。含義,這樣有助于閱讀和理解源程序。 C51C51的標識符原則上可以使用下畫線開頭,但有些的標識符原則上可以使用下畫線開頭,但有些編譯系統(tǒng)的專用標識符或者預定義項是以下劃線開頭編譯系統(tǒng)的專用標識符或者預定義項是以下劃線開頭的。為了程序的兼容性和可移植性,所以建議一般不的。為了程序的兼容性和可移植性,所以建議一般不使用下劃線開頭來命名標識符。使用下劃線開頭來命名標識符。 盡量不要使用過長的標識符,以便

39、于使用和程序理盡量不要使用過長的標識符,以便于使用和程序理解方便。解方便。 自定義的自定義的C51C51標識符不能使用標識符不能使用C51C51語言保留的關(guān)鍵字,語言保留的關(guān)鍵字,也不能和用戶已使用的函數(shù)名或也不能和用戶已使用的函數(shù)名或C51C51庫函數(shù)透明。例庫函數(shù)透明。例如如“char”char”是關(guān)鍵字,所以不能作為標識符使用。是關(guān)鍵字,所以不能作為標識符使用。1 13 C513 C51編程舉例編程舉例 【例例1-51-5】PROTEUSPROTEUS仿真電路如圖所示,仿真電路如圖所示,8 8個發(fā)光二極管個發(fā)光二極管D1D1D8D8經(jīng)限流電阻分別經(jīng)限流電阻分別接至接至P1P1口口8 8個

40、引腳,陽極共同接高電平。個引腳,陽極共同接高電平。編程實現(xiàn)發(fā)光二極管的流水點亮,即按編程實現(xiàn)發(fā)光二極管的流水點亮,即按照照D1D2D1D2D8D8的順序,每次點亮一的順序,每次點亮一個發(fā)光二極管,一段時間后熄滅該發(fā)光個發(fā)光二極管,一段時間后熄滅該發(fā)光二極管,然后點亮下一個發(fā)光二極管,二極管,然后點亮下一個發(fā)光二極管,重復循環(huán)。重復循環(huán)。C51C51源程序如下:源程序如下:#include #include /移位庫函數(shù)包含于此頭文件中移位庫函數(shù)包含于此頭文件中void delay(unsigned int d) /定義延時子函數(shù)定義延時子函數(shù) while(-d0); void main( )

41、unsigned char i,sel; while(1) sel=0 xfe; for(i=0;i8;i+) P1=sel; /顯示變量賦給顯示變量賦給P1口口 delay(50000); /延時延時 sel=_crol_(sel,1);/改變顯示變量改變顯示變量 也可以這樣編程:也可以這樣編程:#include void delay(unsigned int d) while(-d0); void main( ) unsigned char i,sel,a; while(1) sel=0 xfe; for(i=0;i8;i+) P1=sel; delay(50000); a=sel1; s

42、el=sel|0 x01; 【例例1-61-6】單片機的單片機的P1P1口接口接8 8個發(fā)光二極管,個發(fā)光二極管,P0P0口接口接8 8個開關(guān),編程實現(xiàn)當開關(guān)動作時,個開關(guān),編程實現(xiàn)當開關(guān)動作時,對應的發(fā)光二極管亮或滅。對應的發(fā)光二極管亮或滅。 匯編語言源程序如下:匯編語言源程序如下:ORG 0000HMOV P0,#0FFH LOOP: MOV A,P0MOV P1,ASJMP LOOPC51C51語言源程序如下:語言源程序如下: #include void main(void) unsigned char i;P0=0 xff;for(;) i=P0; P1=i; 【例例1-71-7】單片機外接單片機外接12MHz12MHz晶振,用晶振,用P1.7P1.7輸出輸出1kHz1kHz和和500Hz500Hz的音頻信號驅(qū)動的音頻信號驅(qū)動揚聲器,作為報警信號,要求揚聲器,作為報警信號,要求1kHz1kHz信號信號與與500Hz500Hz信號交替進行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論