2022年單片機-課件4_第1頁
2022年單片機-課件4_第2頁
2022年單片機-課件4_第3頁
2022年單片機-課件4_第4頁
2022年單片機-課件4_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

增強型單片機XC866原理及應(yīng)用

C語言介紹編程語言分類C語言介紹

C語言介紹C語言的特點:對單片機的指令系統(tǒng)不要求了解,僅要求對單片機的存儲結(jié)構(gòu)有初步的了解。 寄存器的分配、不同存儲器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理。程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),可使程序結(jié)構(gòu)化。關(guān)鍵字及運算函數(shù)可用近似人的思維過程方式使用。編程及程序調(diào)試時間顯著縮短,從而提高效率。提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強的數(shù)據(jù)處理能力等。一個C源程序至少包含一個函數(shù)(main函數(shù)),也可以包含一個main函數(shù)和若干個其他函數(shù)。例如: voidmain() {……} function1() {…} function2() {…}……函數(shù)由兩部分組成: 1.函數(shù)說明部分. 2.函數(shù)體.

C語言程序結(jié)構(gòu)例如: Voidmain(void) //函數(shù)說明 {unsignedchara; //函數(shù)體 unsignedcharb; …… }常量:在程序運行過程中,值不能改變的量。

常量的定義方法:

#define CONSTANT 100; 定義后,CONSTANT可代替100使用變量:在程序運行過程中,其值可以改變的量。 變量的定義格式如下:[存儲種類]數(shù)據(jù)類型[存儲器類型]變量名 變量可設(shè)置成多種類型,如下表所示:

數(shù)據(jù)類型、常量及變量數(shù)據(jù)類型

注意:在單片機中,只有bit型和unsignedchar型變量可以直接支持機器指令。

變量的存儲類型定義舉例: char data var1; bit bdata flags; float idata x,y,z; unsigned int pdata u; unsigned charxdata w;特殊功能寄存器的定義

特殊功能寄存器先定義后使用。使用sfr關(guān)鍵字進行定義。

sfr sfr_name=“整型常量”

例如: sfr SCON=0x98; /*串口控制寄存器地址為98H*/ sfr TMOD=0x89; /*定時器計數(shù)器方式控制寄存器地址為89H*/

大多數(shù)單片機特殊功能寄存器的定義都包含在頭文件中,后綴名為.h,只需將其添加進項目中即可對特殊功能寄存器進行操作。對特殊功能寄存器中位的定義使用sbit關(guān)鍵字,共有如下三種方式:1.用sfr_name^位數(shù)進行定義。例如:sfr PSW=0xD0;/*定義PSW寄存器地址為0xD0*/sbit OV=PSW^2/*定義OV位為,地址為0xD2*/2.用int_constant^位數(shù)進行定義。

該方法以一個整型常數(shù)做為基地址,位地址做為偏移量。例如:sbit OV=0xD0^2 /*OV位地址為0xD2*/sbit CY=0xD0^7 /*CY位地址為0xD7*/3.用int_constant進行定義。

這種方法將位的絕對地址賦給變量。例如: sbit OV=0xD2 /*OV位地址為0xD2*/ sbit CY=0xD7 /*CY位地址為0xD7*/中斷函數(shù)為了滿足在C語言源程序中直接編寫中斷服務(wù)函數(shù)的需要,C編譯器對函數(shù)的定義進行了擴展,使用如下的形式:

函數(shù)類型

函數(shù)名(形式參數(shù)表)interruptn(usingn)例如:

voidT01_viTmr0(void)interrupt1 {……} interrupt后的數(shù)字n是中斷編號,編譯器從8n+3處產(chǎn)生中斷向量。 using后的數(shù)字n是使用的工作寄存器組號。程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),可使程序結(jié)構(gòu)化。判斷表達式2是否滿足給定的循環(huán)條件,若滿足循環(huán)條件,則執(zhí)行第3步;程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),可使程序結(jié)構(gòu)化。執(zhí)行完畢后,sum=11。首先執(zhí)行循環(huán)體語句,然后判斷圓括號中的表達式。直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),訪問速度塊#else舉例: #ifndef _MAIN_H_這種方法將位的絕對地址賦給變量。unsignedcharb;== 測試等于else {語句2};for(y=0;y<=10;y++)常見的用于構(gòu)成并行多#define CONSTANT 100;編寫中斷函數(shù)時需要注意以下幾點:中斷函數(shù)不能進行參數(shù)傳遞中斷函數(shù)沒有返回值,將其定義成void類型在任何情況下不能調(diào)用中斷函數(shù)如果在中斷函數(shù)中調(diào)用了其他函數(shù),則被調(diào)用函

數(shù)所使用的寄存器組必須與中斷函數(shù)相同。在Cx51中提供了5種運算符,分別為:算術(shù)運算符、關(guān)系運算符、邏輯運算符、位操作運算符及自增減運算符。1.算術(shù)運算符: 該類運算符主要完成算術(shù)運算的功能,有下列5種:

+ 加法運算符, - 減法運算符 * 乘法運算符

/ 除法運算符 % 模(求余)運算符。

運算符、表達式及其規(guī)則2.關(guān)系運算符 該類運算符主要完成條件語句中的條件判斷,有下列6種:

< 小于

> 大于

<= 小于或等于

>= 大于或等于 == 測試等于 != 測試不等于 由于關(guān)系運算符總是二目運算符,C語言以1代表真,以0代表假。

3.邏輯運算符:該類運算符主要完成邏輯運算的功能,有下列3種:

&& 邏輯“與”

|| 邏輯“或” ! 邏輯“非”

在邏輯表達式中,邏輯運算符的結(jié)合性為自左向右,邏輯表達式的值應(yīng)該是一個邏輯量,為“真”或為“假”。4.位操作運算符

該類運算符完成操作數(shù)的按位的邏輯操作,有下列6種:

& 按位“與”

| 按位“或”

^ 按位“異或” ~ 按位“取反”

<< 按位左移

>> 按位右移5.自增減運算符、復(fù)合運算符

自增減運算符的作用是使變量的值自動加1或減1。其使用有如下兩種方式: ++i,――i:在使用i值之前使i的值加(減)1。

i++,i――:在使用i值之后使i的值加(減)1。C語言程序結(jié)構(gòu)順序結(jié)構(gòu):

順序結(jié)構(gòu)是一種最基本、最簡單的編程結(jié)構(gòu)。在這種結(jié)構(gòu)中,程序由低地址向高地址順序執(zhí)行指令代碼。選擇結(jié)構(gòu)常見的選擇語句有:If、if

else語句,其基本結(jié)構(gòu)為:

1.if(表達式)

{語句};2. if(表達式) {語句1}; else {語句2};串行多分支結(jié)構(gòu)

串行多分支結(jié)構(gòu)的語句格式為:

if(表達式1)

{語句1;} elseif(表達式1) {語句2;} …… elseif(表達式n) {語句n;} else {語句m;}并行多分支結(jié)構(gòu):

常見的用于構(gòu)成并行多分支結(jié)構(gòu)的語句為switch-Case語句,其語句格式為:switch(表達式){case 常量表達式1: {語句1;} break;case 常量表達式2: {語句2;} break;……case 常量表達式n: {語句n;} break;default: {語句n+1;}}While型循環(huán)while語句的格式為:

while(表達式)

{循環(huán)語句}while循環(huán)的最大特點是其循環(huán)條件測試處于循環(huán)體的開頭。do……while型循環(huán)do…while型循環(huán)格式:

do {語句;} while(表達式)

首先執(zhí)行循環(huán)體語句,然后判斷圓括號中的表達式。如果表達式的結(jié)果為真則循環(huán)繼續(xù),并再一次執(zhí)行循環(huán)語句。

只有當(dāng)表達式的結(jié)果為假時,循環(huán)才會終止,并順序執(zhí)行后面的語句。For循環(huán)For循環(huán)語句的一般形式為:

for(表達式1;表達式2;表達式3)

{語句;} /*循環(huán)體*/For循環(huán)的語句執(zhí)行過程如下:先對表達式1賦初值進行初始化,判斷表達式2是否滿足給定的循環(huán)條件,若滿足循環(huán)條件,則執(zhí)行第3步;若不滿足循環(huán)條件,則結(jié)束循環(huán),轉(zhuǎn)到第5步。若表達式2為真,則在執(zhí)行指定的循環(huán)語句后,求解表達式3。回到第2步繼續(xù)執(zhí)行。退出for循環(huán),執(zhí)行下面一條語句。例如: sum=0; for(y=0;y<=10;y++) {sum=sum+1;}

執(zhí)行完畢后,sum=11。C語言中的預(yù)處理命令:宏定義格式:#define標(biāo)識符常量表達式功能:

用標(biāo)識符代替常量表達式舉例:

#defineubyteunsignedchar有效范圍:直到本源文件結(jié)束或遇到#undef文件包含

格式:#include<文件名>

功能:用指定文件的全部內(nèi)容替換該預(yù)處理行。

舉例:#include<main.h>

文件包含命令通常放在C程序的開頭,被包含的文件一般是公用的宏定義和外部變量的

溫馨提示

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

評論

0/150

提交評論