單片機(jī)的C語言程序設(shè)計(jì)及調(diào)試課件_第1頁
單片機(jī)的C語言程序設(shè)計(jì)及調(diào)試課件_第2頁
單片機(jī)的C語言程序設(shè)計(jì)及調(diào)試課件_第3頁
單片機(jī)的C語言程序設(shè)計(jì)及調(diào)試課件_第4頁
單片機(jī)的C語言程序設(shè)計(jì)及調(diào)試課件_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章單片機(jī)的

C語言程序設(shè)計(jì)及調(diào)試第三章單片機(jī)的

C語言程序設(shè)計(jì)及調(diào)試C語言編程特點(diǎn):編寫簡單、直觀易讀、便于維護(hù)、通用性好、可移植性強(qiáng)、更符合人們的思考習(xí)慣但同學(xué)們一定會(huì)有這樣的疑問,我們學(xué)過了C語言,該如何用它操作單片機(jī)呢?C語言編程特點(diǎn):編寫簡單、直觀易讀、便于維護(hù)、通用性好、可移不要著急,接下來,讓我們一起學(xué)習(xí)單片機(jī)的C語言程序設(shè)計(jì)與調(diào)試。限于篇幅,本章不介紹標(biāo)準(zhǔn)C語言的語句及語法規(guī)則,只介紹C語言在IAP15W4K58S4單片機(jī)程序設(shè)計(jì)中的特殊性問題,包括C51編程語言(簡稱C51)與ANSIC的區(qū)別、單片機(jī)C語言程序的設(shè)計(jì)等內(nèi)容。不要著急,接下來,讓我們一起學(xué)習(xí)單片機(jī)的C語言程序設(shè)計(jì)與調(diào)試關(guān)系運(yùn)算符關(guān)系運(yùn)算符用于比較兩個(gè)常數(shù)或者表達(dá)式的大小。關(guān)系運(yùn)算的結(jié)果只能是0或1。關(guān)系運(yùn)算符的值為真時(shí),結(jié)果值為1;關(guān)系運(yùn)算符的值為假時(shí),結(jié)果值為0。<><=>===!=特別注意,判斷兩個(gè)常數(shù)或者表達(dá)式相等時(shí),使用“==”,不要使用單個(gè)的“=”。否則,判斷兩個(gè)數(shù)是否相等就變成了賦值語句。關(guān)系運(yùn)算符關(guān)系運(yùn)算符用于比較兩個(gè)常數(shù)或者表達(dá)式的大小。關(guān)系運(yùn)邏輯運(yùn)算符邏輯運(yùn)算符包括與(&&)、或(||)、非(!)三種,用于對包含關(guān)系運(yùn)算符的表達(dá)式進(jìn)行合并或取非。使用邏輯運(yùn)算符的表達(dá)式,返回0表示“假”,返回1表示“真”。邏輯運(yùn)算符邏輯運(yùn)算符包括與(&&)、或(||)、非(!)三種位運(yùn)算符按位與(&)、按位或(|)、按位異或(^)、取反(~)、左移(<<)和右移(>>)應(yīng)用:按位與運(yùn)算通常用來對某些位清0按位或運(yùn)算通常用來對某些位置1按位異或運(yùn)算通常用來對某些位取反位運(yùn)算符按位與(&)、按位或(|)、按位異或(^)、取反(~預(yù)處理-宏定義(define)在C語言源程序中允許用一個(gè)標(biāo)識符來表示一個(gè)字符串,稱為宏。無參宏定義的一般形式如下:#define標(biāo)識符字符串帶參宏定義的一般形式如下:#define宏名(形參表)字符串如要終止宏定義,可使用#undef命令。預(yù)處理-宏定義(define)在C語言源程序中允許用一個(gè)標(biāo)識預(yù)處理-文件包含(include)文件包含的一般形式如下:#include"文件名"◎你知道嗎?包含命令中的文件名可以用雙引號括起來,也可以用尖括號括起來。兩者有何不同呢?#include"math.h"#include<math.h>預(yù)處理-文件包含(include)文件包含的一般形式如下:預(yù)處理-條件編譯(1)條件編譯就是按不同的條件去編譯不同的程序部分,從而產(chǎn)生不同的目標(biāo)代碼文件。1)第一種形式 #ifdef標(biāo)識符 程序段1 #else 程序段2 #endif

預(yù)處理-條件編譯(1)條件編譯就是按不同的條件去編譯不同的程預(yù)處理-條件編譯(2)2)第二種形式

#ifndef標(biāo)識符 程序段1 #else 程序段2 #endif預(yù)處理-條件編譯(2)2)第二種形式預(yù)處理-條件編譯(3)3)第二種形式 #if常量表達(dá)式 程序段1 #else 程序段2 #endif預(yù)處理-條件編譯(3)3)第二種形式KeilC51擴(kuò)展關(guān)鍵字C51有以下19個(gè)擴(kuò)展關(guān)鍵字:_at_、sbit、sfr、bit、sfr16、idata、bdata、xdata、pdata、data、code、alien、small、compact、large、using、reentrant、interrupt、_task_KeilC51擴(kuò)展關(guān)鍵字C51有以下19個(gè)擴(kuò)展關(guān)鍵字:常見的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲器code:程序存儲區(qū)??梢允褂胏ode定義表格常數(shù)2)內(nèi)部RAMdata:直接尋址區(qū),內(nèi)部RAM的低128字節(jié),地址范圍為00H~7FHidata:間接尋址區(qū),包括整個(gè)內(nèi)部RAM區(qū)256字節(jié),地址范圍為00H~0FFHbdata:可位尋址區(qū),地址范圍為20H~2FH常見的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲器常見的關(guān)鍵字-內(nèi)存區(qū)域的指定3)外部數(shù)據(jù)存儲器xdata:可指定多達(dá)64KB的外部直接尋址區(qū),地址范圍0000H~0FFFFH4)特殊功能寄存器(SFR)sfr:字節(jié)尋址sfrsfr_name=int_constant;sfr16:字尋址sfr16DPTR=0x82;sbit:位尋址

sbitbitname=sfr_name^bit_number;常見的關(guān)鍵字-內(nèi)存區(qū)域的指定3)外部數(shù)據(jù)存儲器常見的關(guān)鍵字-變量或數(shù)據(jù)類型C51提供以下幾種擴(kuò)展數(shù)據(jù)類型:bit:位變量,值為0或1sbit:從字節(jié)中定義的位變量(0或1)sfr:sfr字節(jié)地址(0x80~0xff)sfr16:sfr字地址(0x80~0xff,其實(shí)是占用兩個(gè)連續(xù)的地址)其余的數(shù)據(jù)類型如char、enum、short、int、long、float等與ANSIC相同常見的關(guān)鍵字-變量或數(shù)據(jù)類型C51提供以下幾種擴(kuò)展數(shù)據(jù)類型:常見的關(guān)鍵字-KeilC51指針KeilC51支持一般指針(GenericPointer)和存儲器指針(MemorySpecificPointer)。一般指針的聲明和使用均與標(biāo)準(zhǔn)C相同,同時(shí)還可以說明指針的存儲類型。例如:unsignedcharxdata*pt;

//pt本身依存儲模式存放unsignedcharxdata*datapt;

//pt被保存在內(nèi)部RAM中unsignedcharxdata*xdatapt;

//pt被保存在外部RAM中常見的關(guān)鍵字-KeilC51指針KeilC51支持一般指常見的關(guān)鍵字-KeilC51指針除了和標(biāo)準(zhǔn)C語言一樣使用指針外,指針還可以用來訪問外部并行擴(kuò)展的器件。例如:為了方便地訪問外部存儲器及I/O端口,在C51中的absacc.h頭文件做了如下定義,利用這些定義可以方便地訪問外部I/O端口。#defineCBYTE((unsignedcharvolatilecode*)0)#defineDBYTE((unsignedcharvolatiledata*)0)#definePBYTE((unsignedcharvolatilepdata*)0)#defineXBYTE((unsignedcharvolatilexdata*)0)常見的關(guān)鍵字-KeilC51指針除了和標(biāo)準(zhǔn)C語言一樣使用指KeilC51函數(shù)-中斷函數(shù)聲明中斷函數(shù)通過使用interrupt關(guān)鍵字和中斷號(0~31)來聲明。中斷號告訴編譯器中斷服務(wù)程序的入口地址。IAP15W4K58S4單片機(jī)的中斷號及中斷服務(wù)程序入口地址見教材58頁表3-3。中斷函數(shù)具體是哪個(gè)中斷的函數(shù),與中斷號有關(guān),而與函數(shù)名無關(guān)。KeilC51函數(shù)-中斷函數(shù)聲明中斷函數(shù)通過使用interKeilC51函數(shù)-中斷函數(shù)聲明例如:串行口1的中斷函數(shù)可以聲明如下 voidUART1_ISR(void)interrupt4[using1] { /*中斷服務(wù)程序的代碼*/ }KeilC51函數(shù)-中斷函數(shù)聲明例如:串行口1的中斷函數(shù)可【例

3-1】

編程實(shí)現(xiàn)通過延時(shí)函數(shù),由P2.0輸出方波信號,并通過示波器觀察程序輸出波形的周期。#include“stc15.h”

sbitP20=P2^0; //定義P2.0引腳voiddelay(unsignedlongcnt); //延時(shí)函數(shù)聲明voidmain(void){P2M1=0;P2M0=0; //將整個(gè)P2口所有口線設(shè)置為準(zhǔn)雙向口模式 P20=1;【例

3-1】編程實(shí)現(xiàn)通過延時(shí)函數(shù),由P2.0輸出方波信號【例

3-1】

while(1)//主程序循環(huán)

{delay(60000);P20=~P20;}}voiddelay(unsignedlongcnt) //延時(shí)函

溫馨提示

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

評論

0/150

提交評論