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

下載本文檔

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

文檔簡(jiǎn)介

第三章單片機(jī)的

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

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

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

#ifndef標(biāo)識(shí)符 程序段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)鍵字:常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲(chǔ)器code:程序存儲(chǔ)區(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常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲(chǔ)器常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定3)外部數(shù)據(jù)存儲(chǔ)器xdata:可指定多達(dá)64KB的外部直接尋址區(qū),地址范圍0000H~0FFFFH4)特殊功能寄存器(SFR)sfr:字節(jié)尋址sfrsfr_name=int_constant;sfr16:字尋址sfr16DPTR=0x82;sbit:位尋址

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

//pt本身依存儲(chǔ)模式存放unsignedcharxdata*datapt;

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

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

3-1】

編程實(shí)現(xiàn)通過(guò)延時(shí)函數(shù),由P2.0輸出方波信號(hào),并通過(guò)示波器觀察程序輸出波形的周期。#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)通過(guò)延時(shí)函數(shù),由P2.0輸出方波信號(hào)【例

3-1】

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

{delay(60000);P20=~P20;}}voiddelay(unsignedlongcnt) //延時(shí)函數(shù){while(cnt>0)cnt--;}【例

3-1】IAP15W4K58S4單片機(jī)C語(yǔ)言程序調(diào)試編寫(xiě)好程序代碼并編譯成功(沒(méi)有錯(cuò)誤和警告)后,可以使用集成開(kāi)發(fā)環(huán)境(IDE)對(duì)單片機(jī)程序進(jìn)行調(diào)試。調(diào)試的方法分為兩種,一種是使用開(kāi)發(fā)環(huán)境本身提供的軟件模擬仿真器調(diào)試;另一種是使用仿真器仿真調(diào)試。IAP15W4K58S4單片機(jī)C語(yǔ)言程序調(diào)試編寫(xiě)好程序代碼第三章單片機(jī)的

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

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

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

#ifndef標(biāo)識(shí)符 程序段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)鍵字:常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲(chǔ)器code:程序存儲(chǔ)區(qū)。可以使用code定義表格常數(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常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定1)程序存儲(chǔ)器常見(jiàn)的關(guān)鍵字-內(nèi)存區(qū)域的指定3)外部數(shù)據(jù)存儲(chǔ)器xdata:可指定多達(dá)64KB的外部直接尋址區(qū),地址范圍0000H~0FFFFH4)特殊功能寄存器(SFR)sfr:字節(jié)尋址sfrsfr_name=int_constant;sfr16:字尋址sfr16DPTR=0x82;sbit:位尋址

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

//pt本身依存儲(chǔ)模式存放unsignedcharxdata*datapt;

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論