




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
系列單片機程序設計演示文稿目前一頁\總數八十六頁\編于十七點系列單片機程序設計目前二頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述計算機是仿照人的思維方式順序執行一條條指令來完成特定任務的機器,計算機程序因此被定義為指令或語句的“有序集合”,程序設計是指編寫計算機程序的過程。匯編語言是用指令助記符等表示的計算機指令,采用匯編語言編寫的程序被稱為匯編語言程序。匯編語言程序具有代碼效率高(編譯后的指令代碼占用存儲空間小)和執行時間短等優勢和特點。由于單片機的存儲器等資源有限,單片機應用程序中經常需要面對硬件操作,且對程序執行的時間有較為嚴格的要求或限制。因此,匯編語言程序設計是單片機應用系統設計的重要基礎之一。
目前三頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述1、匯編語言的特點:
匯編語言的特點歸納如下:
助記符指令與機器指令一一對應;
程序代碼效率高,占用存儲空間小,運行速度快,匯編語言程序往往是最優化的程序;
助記符指令(匯編指令)與計算機硬件聯系緊密,要求編程人員對計算機硬件較為熟悉;
匯編語言程序缺乏通用性,移植性較差。
4.1.1匯編語言的特點及語句格式目前四頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述2、匯編語言的語句格式
MCS-51系列單片機匯編語言的語句格式如下:
[<標號>]:<操作碼>[<操作數>];[<注釋>]
[<標號>]——標號是匯編語句地址的符號表示。
<操作碼>——用于規定該語句所執行的操作。
[<操作數>]——操作數為匯編指令的操作提供數據或地址
[<注釋>]——注釋是指對一條匯編語句或一段匯編語言程序的說明,以增加匯編語言程序的可讀性。
4.1.1匯編語言的特點及語句格式目前五頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
1、起始地址定位偽指令ORG
格式:[標號]:ORG操作數說明:其功能是指出緊接其后的指令的目標代碼的第一個字節在程序存儲器中的絕對地址。例如:
ORG0030HSTART:MOVA,#33H......即定義標號START表示的起始地址值為0030H,該段程序的指令代碼從該地址開始順序存放。
4.1.2匯編語言偽指令目前六頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
2、賦值偽指令EQU
格式:字符名稱EQU操作數說明:該指令用于字符名稱賦值。在同一個源程序中,任何一個字符名稱只能賦值一次。且一旦賦值之后,整個源程序中該字符的值就固定不變了。例如:
ADPORTEQU1001H即給字符名稱ADPORT賦值16進制數1001H。
4.1.2匯編語言偽指令目前七頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
3、數據地址賦值偽指令DATA格式:字符名稱DATA操作數說明:DATA偽指令的功能與EQU偽指令相似,不同之處在于DATA偽指令所定義的字符名稱可先使用后定義(賦值),也可先定義(賦值)后使用。在程序中它常用來定義(賦值)數據地址。
4.1.2匯編語言偽指令目前八頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
4、字節數據賦值偽指令DB格式:[標號:]DB數據表(字節)說明:該偽指令用于定義(賦值)若干字節數據表(固定常數),并存放在指定地址單元開始的程序存儲器中。例如:
ORG0050HTABLE:DB99H,88H
即表示在地址0050H(標號TABLE)開始定義(賦值)兩個字節數據(99H,88H)。
4.1.2匯編語言偽指令目前九頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
5、雙字節數據賦值偽指令DW格式:[標號:]DW數據表(雙字節)說明:該偽指令與DB偽指令的不同之處在于DW定義(賦值)的是雙字節數據,而DB定義(賦值)的是單字節數據。高8位數據安排在低地址單元,低8位數據安排在高地址單元。6、預留空間定義偽指令DS格式:[標號:]DS操作數說明:該偽指令的作用是通知匯編程序,從指定的地址單元開始(通常由標號指定首地址),保留由操作數(常數或表達式)規定的字節空間。
4.1.2匯編語言偽指令目前十頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述
7、位地址賦值偽指令BIT格式:字符名稱BIT位地址說明:該偽指令給字符名稱賦予位地址(片內RAM和SFR中的位地址),常用于位操作程序中。例如:
FLAGBIT20H
即將位地址20H賦予字符名稱FLAG。8、定義匯編結束偽指令END格式:[標號:]END說明:匯編結束偽指令END的作用是通知匯編程序,匯編源程序到此結束。在一個匯編程序中,只允許出現一條END偽指令,且必須安排在整個源程序的末尾處。
4.1.2匯編語言偽指令目前十一頁\總數八十六頁\編于十七點4.1匯編語言程序設計概述4.2基本程序結構1、順序結構程序2、分支結構程序3、循環結構程序4、子程序5、中斷程序基本程序結構目前十二頁\總數八十六頁\編于十七點4.2基本程序結構
順序結構是各類程序中最簡單的,也是最基本的程序結構。順序結構程序的特征是整個程序段沒有任何轉移指令。主要由數據傳遞類指令和數據運算類指令組成,通常用于執行數據傳送和較為簡單的算術或邏輯運算任務。
4.2.1順序結構目前十三頁\總數八十六頁\編于十七點4.2基本程序結構
例4-1,將內部RAM中20H單元和30H單元的無符號數相加,存入R0(高位)和R1(低位)中。源程序如下:
MOVA,20H;取出被加數
ADDA,30H;兩數相加
MOVR1,A;低位存入R1 CLRA;
ADDCA,#00H;取進位標志
MOVR0,A;高位存入R0 RET
4.2.1順序結構目前十四頁\總數八十六頁\編于十七點4.2基本程序結構
分支結構程序利用條件轉移指令,使程序在執行某一指令后(產生測試條件),根據所規定的條件滿足與否改變其后程序執行的順序(產生分叉),即根據判斷條件的成立與否來確定程序的走向。分支結構程序的特征是程序段中有控制轉移類指令(條件轉移指令)。 依據程序分叉的數目,可將分支結構程序細分為單分支選擇結構和多分支選擇結構兩類。
4.2.2分支結構目前十五頁\總數八十六頁\編于十七點4.2基本程序結構1、單分支選擇結構當程序的判斷僅有兩個出口(分叉),即兩者選一時,稱為單分支結構。通常用條件判斷指令來選擇并確定程序的出口。例4-3.設內部RAM40H和41H單元中存放2個8位無符號二進制數,試編程找出其中的大數存人30H單元中。源程序如下:
MOVA,40H CJNEA,41H,LOOP;取2個數進行比較
LOOP:JNCLOOP1;根據CY值,判斷單分支出
MOVA,41H;41H單元中是大數
LOOP1:MOV30H,A;40H單元中是大數
RET
4.2.2分支結構目前十六頁\總數八十六頁\編于十七點4.2基本程序結構
2、多分支選擇結構當程序的判別部分有兩個以上的出口(分叉)時,稱為多分支選擇結構。例4-4,設變量X的值存放在內部RAM的30H單元中,編程求解下列函數式,將求得的函數值Y存人40H單元。
X+1(X≥100)
Y=0(10≤X<100)
X一1(X<10)
4.2.2分支結構目前十七頁\總數八十六頁\編于十七點4.2基本程序結構MOVA,30H;取自變量X值
CJNEA,#10,LOOP;與10比較,A中值不改變LOOP:JCLOOP2;若X<10,轉LOOP2CJNEA,#100,LOOP1;與100比較LOOP1:JNCLOOP3;若X>100,轉LOOP3MOV40H,#00H;因10≤X<100,故Y=0SJMPEXITLOOP2:DECA;因X<10,故Y=X一1MOV40H,ASJMPEXITLOOP3:INCA;若X>100,故Y=X+1MOV40H,AEXIT:RET目前十八頁\總數八十六頁\編于十七點4.2基本程序結構
在程序設計中,遇到一段程序需要多次重復執行的情況,通常應該采用循環結構程序。1、循環結構程序組成循環結構程序由初始化、循環處理、循環控制和循環結束4部分組成。
(1)初始化部分初始化部分設置循環處理之前的初始狀態,如循環次數、變量初值、地址指針初值等。
(2)循環處理部分循環處理部分又稱循環體,是重復執行的數據處理程序段,它是循環程序的核心部分(功能主體)。4.2.3循環結構目前十九頁\總數八十六頁\編于十七點4.2基本程序結構
(3)循環控制部分 控制部分控制循環繼續與否。(4)結束部分 結束部分對循環程序全部執行結束后的結果進行分析、處理和保存。 循環結構程序一般分為“單重循環”和“多重循環”兩類,循環次數的控制有多種方式,當循環次數已知時,可采用循環次數計數器控制循環;若循環次數未知時,可按條件滿足與否控制循環。4.2.3循環結構目前二十頁\總數八十六頁\編于十七點4.2基本程序結構2.循環程序設計
在一個循環程序的循環體中不包含另外的循環結構稱為單重循環。
例4-5,設某字符串以回車符(0DH)為結束標志,并存放在內部RAM40H單元開始的連續存儲單元之中,編寫測試字符串長度的匯編語言程序。
編程思路——為測試字符串(0DH)的長度,應使用逐個字符依次與回車符(ODH)比較的方法。為此需要設一個字符串指針和一個長度計數器,字符串指針用于指定字符,長度計數器用于累加字符串的長度。如比較不相等,則長度計數器和字符串指針都加1,以繼續往下比較;如果比較相等,則表示該字符為回車符,字符串結束,長度計數器的值就是字符串的長度。4.2.3循環結構目前二十一頁\總數八十六頁\編于十七點4.2基本程序結構2.循環程序設計
程序如下:
MOVR7,#0FFH;設長度計數器初值
MOVR0,#3FH;字符串指針初值LOOP:INCR7INCR0 CJNE@R0,#ODH,LOOP RET4.2.3循環結構目前二十二頁\總數八十六頁\編于十七點4.2基本程序結構4.2.4子程序結構
在編寫程序過程中,如果遇到在幾個程序段中都需要執行某段相同程序的情況(功能獨立),為減少編程工作量和節省程序存儲空間,就應該采用子程序結構,將重復執行的相同程序段編寫成為一個子程序(功能子程序)。返回調用斷點子程序主程序目前二十三頁\總數八十六頁\編于十七點4.2基本程序結構MAIN:……;進入主程序MOVR0,#03H;設置入口參數(延時1)ACALLSUBPRO;調用子程序……;子程序返回,繼續執行主程序;###################################;子程序入口地址(子程序名稱):SUBPRO;功能:延時子程序(延時時間由R0初值設置);入口參數:R0內存放延時計數初值;出口參數:無;使用寄存器:R0、R1;###################################SUBPRO:MOVR1,#03HDJNZR1,$DJNZR0,SUBPRORET;子程序返回END4.2.3子程序結構目前二十四頁\總數八十六頁\編于十七點4.2基本程序結構單片機中斷程序設計主要有以下三個方面:
1、中斷向量設置
2、中斷初始化
3、中斷服務程序
4.2.5中斷程序結構目前二十五頁\總數八十六頁\編于十七點4.2基本程序結構例4-7,設89C51單片機外中斷0(EX0)下降沿有效,每次進入中斷服務程序,要求將89C51單片機的P1.7~P1.0取反。主程序如下:
ORG0000HSTAR:AJMPMAIN;主程序原始入口
ORG0003H;外部中斷0中斷向量
AJMPEXTR;跳轉到EX0中斷服務子程序實際入口地址
ORG0030HMAIN:SETBIT0;主程序實際入口,邊沿觸發設置
SETBEX0;外部中斷0允許
SETBEA;總中斷允許HERE:AJMPHERE;等待再次進入中斷服務程序4.2.5中斷程序結構目前二十六頁\總數八十六頁\編于十七點4.2基本程序結構中斷服務子程序:
ORG1200HEXTR:PUSHPSW;保護現場
CPLA;累加器A數據取反
MOVP1,A;數據輸出至P1端口
POPPSW;恢復現場
RETI;中斷返回4.2.5中斷程序結構目前二十七頁\總數八十六頁\編于十七點4.3匯編語言程序設計實踐
匯編語言程序設計的一般步驟如下:
建立數學模型——用適用的數學方法描述所需要解決的問題;
確定算法——將數學模型轉化為適合單片機處理(順序執行)的形式,采用繪制程序流程圖等方法表示程序設計的思路和依據。
編寫源程序——采用模塊化設計方法,合理劃分功能模塊,分配存儲器和I/O端口(依據硬件電路)等資源,確定各模塊內各程序段的結構,編寫源程序文件。
匯編及調試——在集成開發環境的支持下,匯編語言源程序經匯編生成目標程序文件,并通過調試以及對運行結果的分析,修正源程序中的錯誤,達到預期的設計目標。目前二十八頁\總數八十六頁\編于十七點
所謂查表,就是根據變量x在表格中查找y,使y=f(x)。函數值y事先根據變量x的取值范圍計算出,并按一定規律編成表格存放在計算機的程序存儲器中。當用戶程序中需要用這些數據時,直接按編排的索引值(或程序號)尋找答案。這樣編寫的程序稱為查表程序。查表程序是一種常用程序,廣泛應用于LED顯示器控制、智能化儀表控制、打印機打印以及數據轉換等功能程序中,具有程序簡單、執行速度快等優點。查表程序有多種結構形式,下面舉例介紹一種常用的查表程序。4.3.1查表程序4.3匯編語言程序設計實踐
目前二十九頁\總數八十六頁\編于十七點4.3.1查表程序
例4-8,將16進制數轉換成ASCII碼的子程序。假設16進制數存放在R0中低4位,要求將轉換后的ASCII碼送回到R0中。設計思路:己知0-9的ASCII碼為30H一39H,A—F的ASCII碼為41H一46H。對十六進制數而言,0-F是連續的,而對應的ASCII碼不連續,查表方法對解決此類問題十分有效。根據題意,子程序的入口參數和出口參數均通過R0傳遞,表中所有的值都是單字節,表格長度為16字節。4.3匯編語言程序設計實踐
目前三十頁\總數八十六頁\編于十七點查表子程序:MOVA,R0;讀取主程序通過R0傳送的十六進制數ANLA,0FH;屏蔽高4位,取出低4位ADDA,#02H;設置變址值(依據表首地址與查表指 令所處位置)MOVCA,@A+PC;查表指令(獲得對應的ASCII碼)MOVR0,A:通過R0將查表結果傳遞給主程序RETTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H
程序中因為“MOVCA,@A+PC”指令與表格首址相隔兩個字節,故變址調整值為2,程序中對應變量x的函數值y為單字節。4.3.1查表程序4.3匯編語言程序設計實踐
目前三十一頁\總數八十六頁\編于十七點
在51系列單片機指令集中有單字節的算術運算(加、減、乘、除)指令,但在實際程序設計中經常會遇到多字節算術運算問題,需要通過編制專門的功能子程序解決此類問題。 例4-9,多字節無符號數加法運算。假設R0中存放被加數低位字節地址指針,R1中存放加數低位字節地址指針,R2中存放字節數,多字節算術運算一般從低字節(低位)到高字節(高位)的順序依次進行。
4.3.2算術運算程序4.3匯編語言程序設計實踐
目前三十二頁\總數八十六頁\編于十七點匯編源程序如下:ADDBIN:CLRCLOOP1:MOVA,@R0;取被加數
ADDCA,@R1;兩數相加,帶進位
MOV@R0,A INCR0 INCR1 DJNZR2,LOOP1;未加完轉LOOP1 JNCLOOP2;無進位轉LOOP2 MOV@R0,#0lH RETLOOP2:DECR0 RET
4.3.2算術運算程序4.3匯編語言程序設計實踐
目前三十三頁\總數八十六頁\編于十七點例4-10,BCD碼多字節加法運算。假設R0中存放被加數低位字節地址指針,R1中存放加數低位字節地址指針,R2中存放字節數。
BCDADD:MOV20H,R0 MOV23H,R2 CLRCLP0:MOVA,R0;取被加數
ADDCA,@R1;兩數相加
DAA;十進制調整
MOV@RO,A INCR0;指針加1 DJN2R2,LP0;做完加法否4.3.2算術運算程序
MOVR2,23H JNCRETURN;有無進位
MOV@R0,#01H INCR3RETURN:MOVR0,#20H RET4.3匯編語言程序設計實踐
目前三十四頁\總數八十六頁\編于十七點例4-11,如圖4-2所示,MCS-51單片機的P1作為輸出端口,連接8只發光二極管。按該電路工作原理,P1口各位輸出“0”時,將發光二極管點亮;P1口各位輸出“1”使發光二極管滅。分析下述匯編程序運行后,8個發光二極管點亮的規律。4.3.3I/O接口控制程序圖4-2P1口驅動LED示意圖4.3匯編語言程序設計實踐
目前三十五頁\總數八十六頁\編于十七點主程序:
LP:MOVP1,#7EHLCALLDELAYMOVP1,#0BDHLCALLDELAYMOVP1,#0DBHLCALLDELAYMOVP1,#0E7HLCALLDELAYMOVP1,#0DBHLCALLDELAYMOVP1,#0BDHLCALLDELAYSJMPLP子程序:
DELAY:MOVR2,#0FAHL1:MOVR3,#0FAHL2:DJNZR3,L2DJNZR2,L1RET 4.3.3I/O接口控制程序目前三十六頁\總數八十六頁\編于十七點
例4-12:按照圖4-2所示的電路,試編寫控制發光二極管指示燈移位的程序,要求8個發光二極管依次亮一個,循環左移,一個一個地亮,直至循環。相關源程序如下:MOVA,#7FHL1:MOVP1,ARLALCALLDELAY;與例4-11的延時程序相同
SJMPLl4.3.3I/O接口控制程序4.3匯編語言程序設計實踐
目前三十七頁\總數八十六頁\編于十七點一個函數的定義由類型、函數名、參數表和函數體四部分組合而成。一個函數在程序中可以三種形態出現:函數定義、函數調用、函數說明。
C51函數的一般格式為: 類型函數名(參數表) 參數說明;
{
數據說明部分;//注釋執行語句部分;
}4.4.1C51程序結構
4.4面向51單片機的C語言程序目前三十八頁\總數八十六頁\編于十七點4.4.2C51數據類型數據類型位型(bit)字符型(char)整型(int)長整型(long)浮點型(float)雙精度浮點型(double)數組類型(array)結構體類型(struct)共用體(union)枚舉(enum)基本類型構造類型指針類型空類型1.數據類型目前三十九頁\總數八十六頁\編于十七點KEILC51編譯器支持的數據類型、長度和值域如表4-1所列。數據類型長度/Byte值域BitUnsignedcharSignedcharUnsignedintSignedintUnsignedlongSignedlongFloatDouble……11224440,10~255-128~1270~65535-32768~327670~4294967295-2147483648~2147483647±1.176E-38~±3.40E+38(6位數字)±1.176E-38~±3.40E+38(10位數字)表4-1KEILC51數據類型4.4.2C51數據類型1.數據類型目前四十頁\總數八十六頁\編于十七點
C語言的數據有常量、變量之分。常量是在程序運行的過程中,其值不能改變的量;變量是在程序運行中,其值可以改變的量。一個變量由兩部分構成:變量名和變量值,每一個變量都有一個變量名,在內存中占據一定的存儲單元(地址),并在該內存單元中存放該變量的值。常量定義:#defineCONST44//定義常量符號CONST,值為44
變量定義:chart;//定義字符型變量,變量名為t C語言中習慣上以小寫字母定義變量,以大寫字母定義常量。另外由于51單片機的寄存器及數據總線為8位所以在定義變量時,應盡可能使用無符號字符型。4.4.2C51數據類型1.數據類型-常量和變量目前四十一頁\總數八十六頁\編于十七點
2.C51數據存儲類型
51系列單片機的程序存儲器與數據存儲器是分開的,并獨立尋址。51系列單片機共有如下四個存儲空間:
片內程序存儲空間;
片外程序存儲空間;
片內數據存儲空間;
片外數據存儲空間。
C語言編程時在對常量、變量的定義時,要注意不同功能的常量、變量應存儲在不同的存儲區,在定義變量或常量時要定義成不同的存儲類型(data,bdata,idata,pdata,xdata,code)。4.4.2C51數據類型目前四十二頁\總數八十六頁\編于十七點存儲類型存儲空間databdataidatapdataxdatacode內部RAM低128單元,可直接尋址片內RAM位尋址區內部RAM,間接尋址片外RAM,256字節片外RAM,64KB代碼存儲區,64KB表4-2C51存儲類型與單片機存儲空間對應關系4.4.2C51數據類型2.C51數據存儲類型目前四十三頁\總數八十六頁\編于十七點
3.特殊功能寄存器的定義
在51單片機內部RAM的高128字節,分散著21個特殊功能寄存器(SFR),為了能直接訪問這些特殊功能寄存器,KEILC51提供一種自主形式的定義方法,此種方法與標準C語言不兼容,只適用于對8051系列單片機進行定義。這種定義的方法引入關鍵字“sfr”,如:
sfrTMOD=0x89;/*定時/計數器方式控制寄存器地址為89H*/。sbit:特殊功能位聲明,sbitled1=P1^0;4.4.2C51數據類型目前四十四頁\總數八十六頁\編于十七點將其視為片外數據存儲器的一個單元,利用#define語句進行定義:#definePORTAXBYTE[0x0020] /*將PORTA定義為外部I/O口,地址為0x0020*/例:要通過地址0x0020向外部寫數據0x01,下面分別用匯編語言和C語言編程實現:匯編語言實現: MOVDPTR,#0020H MOVA,#01H MOVX@DPTR,AC語言實現:#definePORTAXBYTE[0x0020] PORTA=0x01;4.4.2C51數據類型4.片外擴展I/O口目前四十五頁\總數八十六頁\編于十七點
C51的運算符主要包括算術運算、關系運算、邏輯運算、位操作運算、自增減運算及復合運算等。其運算符與表達式與C語言要求基本一致。4.4.3C51運算符和表達式4.4.2C51數據類型目前四十六頁\總數八十六頁\編于十七點4.4.3C51運算符和表達式運算符分類運算符表達式示例優先關系(高→低)算術運算符*乘法/除法%求余+加法或正值-減法或負值a+b;(a+b)*c;!算術運算符關系運算符邏輯運算符賦值運算符關系運算符<小于>大于<=小于或等于>=大于或等于==測試等于!=測試不等于c>(a+b)a==b<c邏輯運算符&&邏輯與||邏輯或!邏輯非c=a&&bb=!a位操作運算符&按位與|按位或^按位異或~按位取反<<位左移>>位右移c=a&ba=b<<1自增減運算符++自加1--自減1++ii++復合運算符算術運算符及位操作運算符復合使用i+=3目前四十七頁\總數八十六頁\編于十七點C語言程序主要有順序、選擇和循環三種結構。順序結構即語句逐條執行,是最基本、最簡單的程序結構。選擇結構和循環結構的相關控制語句分別介紹如下:
1.選擇結構語句及流程圖在選擇結構中常見的控制語句有:if,elseif,switch-case。其中if、elseif主要應用在串行多分支結構程序控制中,而switch-case主要用于并行從分去結構程序的控制中。圖4-3所示為串行多分支結構流程圖。
4.4.4C51流程控制語句4.4面向51單片機的C語言程序目前四十八頁\總數八十六頁\編于十七點圖4-3串行多分支結構流程圖串行多分支結構目前四十九頁\總數八十六頁\編于十七點語句的基本形式:
1)if(表達式){語句;}//當括號內的表達式為真,則執行{}內的語句;
2)if(表達式){語句1;}else{語句2;}//當括號內的表達式為真,則執行{}內的語句,否則執行語句2;
3)if(表達式1){語句1;}
elseif(表達式2){語句2;}
…………
else{語句n;}
//哪一個表達式條件為真,則執行對應{}中的語句,但判斷時表達式1的優先級最高,只有條件不滿足時,才繼續向下判斷。
4)if(表達式1)
{if(表達式2){語句1;}
else{語句2;}
}
//if的嵌套使用,只有當表達式1為真時,才進行下一級判斷。
1.選擇結構語句及流程圖目前五十頁\總數八十六頁\編于十七點
并行多分支結構圖4-4并行多分支結構流程圖目前五十一頁\總數八十六頁\編于十七點switch-case語句表達形式:
switch(表達式1)
{
case值1:語句1;break;
case值2:語句2;break;
…………
case值N:語句N;break;
default:語句N+1;
}
1.選擇結構語句及流程圖4.4.4C51流程控制語句目前五十二頁\總數八十六頁\編于十七點2.循環結構語句及流程圖
循環結構中常見的控制語句主要有while,dowhile,for等。
While語句的一般形式為:while(條件){語句;},圖4-5while結構流程圖4.4.4C51流程控制語句目前五十三頁\總數八十六頁\編于十七點
與while相比,dowhile的區別就是行執行循環語句后判斷循環條件。語句的形式為:do{語句;}while(條件)。流程圖如圖4-6所示。
圖4-6dowhile結構流程圖4.4.4C51流程控制語句2.循環結構語句及流程圖目前五十四頁\總數八十六頁\編于十七點for(表達式1;表達式2;表達式3) {語句;},for語句在執行時共有5個過程,具體執行過程如下:
對表達式進行賦值初始化
判斷表達式2是否為真,若為真則進行循環,若為假則退出循環
若表達式2為真,則執行循環體內的語句,并求解表達式3
回到第二步,再判斷表達式2
退出for循環4.4.4C51流程控制語句2.循環結構語句及流程圖目前五十五頁\總數八十六頁\編于十七點
51單片機內部資源主要是特殊功能寄存器或SFR尋址,在KEILC51中提供了定義這些寄存器的頭文件<reg51.h>,在進行C語言編程,應在源程序的開始處包含頭文件,#include<reg51.h>。內部資源的C語言編程主要介紹外中斷、定時器和串行口編程。
C51編譯器支持在C源程序中直接開發中斷程序,采用特殊語法定義中斷函數,定義方法如下:返回值函數名interruptnusingmn代表單片機的中斷編號,n的范圍(0—4)依次為外部中斷0、定時/計數器0、外部中斷1、定時/計數器1、串行口中斷。m表示通用寄存器組的的選擇,范圍(0-3)。4.4.5單片機資源與C語言編程目前五十六頁\總數八十六頁\編于十七點
4.4.6C語言程序實例
在進行單片機的C語言編程時,其步驟與匯編語言編程沒有區別,首先要了解單片機系統硬件電路的設計,尤其單片機的外部資源的地址編碼,當了解了單片機系統的硬件電路后,就可以根據要求畫出流程圖,合理分配內部資源進行編程,下面以一個數據采集的實例進行說明。目前五十七頁\總數八十六頁\編于十七點
圖4-7為ADC0809與51系列單片機(89S51)的接口電路原理圖,要求順序采集ADC0809的8個通道的模擬量,并存放在數組ADCON[]中
圖4-7單片機數據采集原理圖目前五十八頁\總數八十六頁\編于十七點
由電路原理圖可以看到,ADC0809的啟動信號START由譯碼器Y1與單片機RD信號經或非門產生,輸出使能信號OE由Y1與單片機WR信號經或非門產生,3/8譯碼器的輸入接到P2.5至P2.7,ADC0809的通道選擇信號接到單片機的地址線A0至A2,因此得到ADC0809的8個輸入通道的地址為2000H—2007H,ADC0809轉換結束標志EOC經非門后接到單片機的P3.2口。
目前五十九頁\總數八十六頁\編于十七點C51源程序如下:
#include<reg51.h> //包含頭文件
#include<absacc.h> #defineucharunsignedchar #defineIN0XBYTE[0x2000]//設置ADC0809通道0的地址
sbitad_over=P3^2; //轉換結束標志定義
voidad0809(ucharidata*x)//采集函數
{ uchari; ucharxdata*ad_adr; ad_adr=&IN0; for(i=0;i<8;i++) //循環采集8個通道
{*ad_adr=0; //啟動AD while(ad_over==0); //查詢轉換結束標志
x[i]=*ad_adr; //存儲結果
ad_adr++; //下一通道
} } voidmain(void) //主函數
{staticucharad[10]; ad0809(ad); }目前六十頁\總數八十六頁\編于十七點目前六十一頁\總數八十六頁\編于十七點#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitD0=P1^0;uinta;voidmain(){
D0=0; a=59000; while(a--); D0=1; a=50000; while(a--); }目前六十二頁\總數八十六頁\編于十七點#include<AT89X51.h>delay_10ms(unsignedt){unsignedinti,j;for(i=0;i<t;i++) for(j=0;j<1880;j++);}voidmain(){while(1){ delay_10ms(100); P0=0xfe; delay_10ms(100); P0=0xfd; delay_10ms(100); P0=0xfb; Delay_10ms(100); P0=0xf7; delay_10ms(100); P0=0xef; delay_10ms(100); P0=0xdf; delay_10ms(100); P0=0xbf; delay_10ms(100); P0=0x7f;}}目前六十三頁\總數八十六頁\編于十七點#include<reg52.h> //52系列單片機頭文件#defineuintunsignedint //宏定義#defineucharunsignedcharvoiddelayms(uint); //聲明子函數ucharx; //聲明無符號數原變量x(占1B)voidmain() //主函數{ P1=0xfe; //賦初值11111110 while(1) //大循環
{ for(x=0;x<8;x++) //左移8次
{delayms(500);//延時500毫秒
P1=P1<<1;//左移1位
} //左移結束,燈全部亮
for(x=0;x<8;x++) //右移8次
{delayms(500); P1=P1>>1|0x80; //右移1位,并設定最高位為1 } //右移結束,燈全部滅
}目前六十四頁\總數八十六頁\編于十七點無論是單片機匯編語言還是C語言編程,都需要借助一個軟件工具,一般也稱為開發環境,目前有很多專業的單片機軟件開發工具,下面為讀者介紹一種單片機的集成開發環境,KeiluVision2集成開發環境。KeilμVision2集成開發環境是德國Keil公司針對51系列單片機應用系統開發而推出的基于32位windows環境下,以51單片機為開發目標,以高效率C語言為基礎的集成開發平臺。本節主要介紹KeilC51V7.20版,它主要包括C51交叉編譯器和A51宏匯編等工具,還內嵌了單片機仿真調試軟件,可以讓用戶采用模擬仿真和實時在線仿真兩種方式對目標系統進行開發。軟件仿真時,它可以查看程序變量,內部存儲單元。以及模擬和查看單片機I/O口,定時器及中斷的工作方式和設置,甚至可以仿真單片機的串行通信。4.5KeilμVsion2集成開發環境目前六十五頁\總數八十六頁\編于十七點
雙擊安裝程序setup,進入安裝模式。它與一般軟件安裝過程類似。值得注意的是,當出現提示“InstallSupport....全新安裝”和“UpdateCurrentInstallation……升級安裝”時,選擇“InstallSupport....全新安裝”。并且在出現提示“Fullversion”和“Evalversion”時,選擇“Fullversion”。隨后依次點擊“Next->Yes->選擇安裝目錄->Next->”輸入序列號、姓名、公司”等。安裝完成后在Windows桌面上會出現一個Keilμ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAZG 002-2019黑頸鶴飼養管理技術規范
- T/CATCM 028-2024中藥飲片質量評價新技術應用指南
- T/CATCM 001.2-2017保健類眼貼第2部分:檢測方法
- T/CAR 4-2020制冷自提柜
- T/CAQI 32-2017家用和類似用途飲用水處理裝置用電磁閥
- T/CAQI 274-2022水處理構筑物鋼結構模塊智能制造系統技術要求
- T/CAQI 249-2022民用建筑室內空氣質量分級與評價
- T/CAMIR 003-2022媒體大數據分類分級指南
- 法治相關面試題及答案
- 公司面試題型及答案
- GB/T 17468-1998電力變壓器選用導則
- 有機化學課件第十九章
- 工程部部門級安全培訓課件
- DB42T1745-2021橋梁高強度螺栓連接安裝技術指南
- 實驗室安全記錄表
- 進出口業務內部審計制
- 揚塵污染防治監理實施細則
- 教科版二年級下冊各單元知識整理復習及思維導圖-課件
- 四年級下冊數學課件-3 乘法分配律2-冀教版14張PPT
- 《學弈》優質課教學課件
- 2022年檢驗科三基試題及答案
評論
0/150
提交評論