版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年池州考客運(yùn)資格證
- 2024年濰坊客運(yùn)從業(yè)資格模擬考試
- 2024年安徽客運(yùn)員證是考什么內(nèi)容科目
- 2024年貴陽(yáng)客運(yùn)證考試模擬題
- 2024年青海客運(yùn)從業(yè)資格證理論考試試題
- 2024年河南客運(yùn)資格證考試題目下載什么軟件
- 2024年承德道路旅客運(yùn)輸駕駛員繼續(xù)教育試題
- 六年級(jí)下冊(cè)數(shù)學(xué)總教案
- 2024年遼寧省沈陽(yáng)于洪區(qū)機(jī)關(guān)事業(yè)單位派遣制人員招聘69人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 2024年遼寧省大連市長(zhǎng)??h政府雇員招聘23人高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- HY/T 064-2002管式陶瓷微孔濾膜測(cè)試方法
- 醫(yī)用氣體工程技術(shù)規(guī)范
- DB37-T 2401-2022危險(xiǎn)化學(xué)品崗位安全生產(chǎn)操作規(guī)程編寫(xiě)導(dǎo)則
- 110kV變電站新建工程變壓器安裝專(zhuān)項(xiàng)施工方案
- 安全工器具的使用課件
- 《管理思想史》課程教學(xué)大綱
- 加油站消防滅火應(yīng)急演練及培訓(xùn)記錄
- 圖文店制作價(jià)格表
- 咖啡英文課件
- 三位數(shù)乘以一位數(shù)精選練習(xí)題(50道)
- HSK標(biāo)準(zhǔn)教程4上第1課課件
評(píng)論
0/150
提交評(píng)論