第3章-C51語(yǔ)言編程基礎(chǔ)_第1頁(yè)
第3章-C51語(yǔ)言編程基礎(chǔ)_第2頁(yè)
第3章-C51語(yǔ)言編程基礎(chǔ)_第3頁(yè)
第3章-C51語(yǔ)言編程基礎(chǔ)_第4頁(yè)
第3章-C51語(yǔ)言編程基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩73頁(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)介

1、2021/8/21第第3 3章章 C51C51語(yǔ)言編程基礎(chǔ)語(yǔ)言編程基礎(chǔ)2021/8/221 1)機(jī)器語(yǔ)言)機(jī)器語(yǔ)言定義:處理器能直接執(zhí)行的二進(jìn)制代碼定義:處理器能直接執(zhí)行的二進(jìn)制代碼特點(diǎn):效率高、但不易于使用特點(diǎn):效率高、但不易于使用10110110 00000000 10110101 00000000ADD AADD A,#19#193.1 3.1 編程語(yǔ)言編程語(yǔ)言Keil C51Keil C51簡(jiǎn)介簡(jiǎn)介1、編程語(yǔ)言、編程語(yǔ)言2 2)匯編語(yǔ)言)匯編語(yǔ)言 定義:以助記符的形式表示機(jī)器語(yǔ)言定義:以助記符的形式表示機(jī)器語(yǔ)言 特點(diǎn):速度快、體積小、但依賴(lài)于硬件體系特點(diǎn):速度快、體積小、但依賴(lài)于硬件體

2、系2021/8/233)高級(jí)語(yǔ)言)高級(jí)語(yǔ)言獨(dú)立于機(jī)器、面向過(guò)程的、接近于人的自然語(yǔ)言。獨(dú)立于機(jī)器、面向過(guò)程的、接近于人的自然語(yǔ)言。語(yǔ)言:語(yǔ)言:FORTRAN、C語(yǔ)言語(yǔ)言特點(diǎn):與硬件無(wú)關(guān)、易于交流和使用、運(yùn)行效率低特點(diǎn):與硬件無(wú)關(guān)、易于交流和使用、運(yùn)行效率低X = X + 1;X = X + 1;編譯器編譯器鏈接器鏈接器X = X + 1;程序員程序員1001001010110010高級(jí)語(yǔ)言程序高級(jí)語(yǔ)言程序機(jī)器碼機(jī)器碼單片機(jī)如何執(zhí)行程序指令?單片機(jī)如何執(zhí)行程序指令?2021/8/24Keil C51Keil C51語(yǔ)言是在標(biāo)準(zhǔn)語(yǔ)言是在標(biāo)準(zhǔn)C C的基礎(chǔ)上,針對(duì)的基礎(chǔ)上,針對(duì)5151單片機(jī)的硬件特點(diǎn)

3、進(jìn)行單片機(jī)的硬件特點(diǎn)進(jìn)行擴(kuò)展,并向擴(kuò)展,并向5151單片機(jī)上移植的高效、簡(jiǎn)潔的實(shí)用高級(jí)語(yǔ)言。單片機(jī)上移植的高效、簡(jiǎn)潔的實(shí)用高級(jí)語(yǔ)言。 與匯編語(yǔ)言相比的特點(diǎn):與匯編語(yǔ)言相比的特點(diǎn):(1)可讀性好)可讀性好。(2)可模塊化開(kāi)發(fā)。)可模塊化開(kāi)發(fā)。(3)可移植性好。)可移植性好。(4)生成的代碼效率較低。)生成的代碼效率較低。2 2、Keil C51Keil C51語(yǔ)言簡(jiǎn)介語(yǔ)言簡(jiǎn)介對(duì)于對(duì)于5151單片機(jī),目前廣泛使用的是單片機(jī),目前廣泛使用的是Keil C51Keil C51語(yǔ)言,簡(jiǎn)稱(chēng)語(yǔ)言,簡(jiǎn)稱(chēng)C51C51語(yǔ)言。語(yǔ)言。2021/8/253 3、C51C51與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)C C的區(qū)別的區(qū)別(1 1)庫(kù)函數(shù)

4、的不同。庫(kù)函數(shù)的不同。例如庫(kù)函數(shù)例如庫(kù)函數(shù)printfprintf和和scanfscanf,在標(biāo)準(zhǔn),在標(biāo)準(zhǔn)C C中,這中,這兩個(gè)函數(shù)通常用于屏幕打印和接收字符,而在兩個(gè)函數(shù)通常用于屏幕打印和接收字符,而在Keil C51Keil C51中,主要中,主要用于串行口數(shù)據(jù)的收發(fā)。用于串行口數(shù)據(jù)的收發(fā)。(3 3)C51C51的變量存儲(chǔ)模式與標(biāo)準(zhǔn)的變量存儲(chǔ)模式與標(biāo)準(zhǔn)C C中的變量存儲(chǔ)模式不一樣。中的變量存儲(chǔ)模式不一樣。標(biāo)準(zhǔn)標(biāo)準(zhǔn)C C是在通用計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間。是在通用計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間。 5151單片機(jī)存儲(chǔ)區(qū)可分為內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)、外部數(shù)據(jù)存儲(chǔ)區(qū)以及程序

5、單片機(jī)存儲(chǔ)區(qū)可分為內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)、外部數(shù)據(jù)存儲(chǔ)區(qū)以及程序存儲(chǔ)區(qū)。存儲(chǔ)區(qū)。(4 4)標(biāo)準(zhǔn)標(biāo)準(zhǔn)C C語(yǔ)言沒(méi)有處理單片機(jī)中斷的方法。語(yǔ)言沒(méi)有處理單片機(jī)中斷的方法。C51C51中有專(zhuān)門(mén)處理中斷的中斷函數(shù)。中有專(zhuān)門(mén)處理中斷的中斷函數(shù)。(2 2)數(shù)據(jù)類(lèi)型有一定的區(qū)別。數(shù)據(jù)類(lèi)型有一定的區(qū)別。在標(biāo)準(zhǔn)在標(biāo)準(zhǔn)C C的基礎(chǔ)上又?jǐn)U展了的基礎(chǔ)上又?jǐn)U展了4 4種類(lèi)型。種類(lèi)型。2021/8/26(5 5)頭文件的不同。頭文件的不同。5151頭文件把單片機(jī)內(nèi)部的硬件資源如定時(shí)器、中斷、頭文件把單片機(jī)內(nèi)部的硬件資源如定時(shí)器、中斷、I/OI/O等所相等所相應(yīng)的功能寄存器寫(xiě)入頭文件內(nèi)。應(yīng)的功能寄存器寫(xiě)入頭文件內(nèi)。(6 6)程序結(jié)構(gòu)

6、的差異。程序結(jié)構(gòu)的差異。由于由于5151單片機(jī)硬件資源有限,編譯系統(tǒng)不允許太多的程序嵌套。單片機(jī)硬件資源有限,編譯系統(tǒng)不允許太多的程序嵌套。其次,其次,C51C51語(yǔ)言不支持標(biāo)準(zhǔn)語(yǔ)言不支持標(biāo)準(zhǔn)C C的遞歸特性。的遞歸特性。 4 4、Keil C51Keil C51的開(kāi)發(fā)工具的開(kāi)發(fā)工具Keil Vision3Keil Vision3Keil Vision3Keil Vision3是德國(guó)是德國(guó)Keil softwareKeil software公司開(kāi)發(fā)的公司開(kāi)發(fā)的C51C51語(yǔ)言開(kāi)發(fā)軟件。語(yǔ)言開(kāi)發(fā)軟件。這個(gè)軟件集成了文件編輯處理、編譯鏈接等功能。這個(gè)軟件集成了文件編輯處理、編譯鏈接等功能。2021

7、/8/273.2 C513.2 C51語(yǔ)言程序設(shè)計(jì)基礎(chǔ)語(yǔ)言程序設(shè)計(jì)基礎(chǔ)1 1、數(shù)據(jù)類(lèi)型與存儲(chǔ)類(lèi)型、數(shù)據(jù)類(lèi)型與存儲(chǔ)類(lèi)型1 1)數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型2021/8/282)C51擴(kuò)展的數(shù)據(jù)類(lèi)型(擴(kuò)展的數(shù)據(jù)類(lèi)型(4種擴(kuò)展的數(shù)據(jù)類(lèi)型)種擴(kuò)展的數(shù)據(jù)類(lèi)型)(1 1)位變量)位變量bitbit bit bit的值可以是的值可以是1 1(truetrue),或),或0 0(falsefalse)。)。 bit bit 變量名;變量名;格式:格式:例如:例如:bit flag;bit flag;flag = 0flag = 0;2021/8/29(2 2)特殊功能寄存器)特殊功能寄存器sfrsfr 地址單元地址單元8

8、0HFFH80HFFH之間的片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū);之間的片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū); “ “sfr” sfr” 數(shù)據(jù)類(lèi)型占用一個(gè)內(nèi)存單元;數(shù)據(jù)類(lèi)型占用一個(gè)內(nèi)存單元; 利用它可以訪(fǎng)問(wèn)利用它可以訪(fǎng)問(wèn)5151單片機(jī)內(nèi)部的所有特殊功能寄存器。單片機(jī)內(nèi)部的所有特殊功能寄存器。sfr P1 = 0 x90sfr P1 = 0 x90; /定義了定義了P1P1為片內(nèi)的為片內(nèi)的P1P1口寄存器;口寄存器;P1 = 0 xffP1 = 0 xff; /把把P1P1口的所有輸出引腳設(shè)置為高電平。口的所有輸出引腳設(shè)置為高電平。例如:例如:sfr sfr 寄存器變量名寄存器變量名 = = 字節(jié)地址常數(shù);字節(jié)地址常數(shù);格式:格式:202

9、1/8/210sfr SBUF = 0 x99sfr SBUF = 0 x99;習(xí)題:習(xí)題: 往串行發(fā)送數(shù)據(jù)緩沖寄存器往串行發(fā)送數(shù)據(jù)緩沖寄存器SBUF寫(xiě)入寫(xiě)入80SBUF = 80SBUF = 80;習(xí)題:習(xí)題: 從從P0口寄存器讀取數(shù)據(jù),存放到任意一個(gè)變量口寄存器讀取數(shù)據(jù),存放到任意一個(gè)變量X。sfr P0 = 0 x80sfr P0 = 0 x80;int xint x; x = P0 x = P0;2021/8/211例如:例如:(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16“sfr16”“sfr16”數(shù)據(jù)類(lèi)型占兩個(gè)內(nèi)存單元;數(shù)據(jù)類(lèi)型占兩個(gè)內(nèi)存單元;用于操作占兩個(gè)字節(jié)的特殊

10、功能寄存器。用于操作占兩個(gè)字節(jié)的特殊功能寄存器。sfr16 DPTR = 0 x82sfr16 DPTR = 0 x82;/定義了片內(nèi)定義了片內(nèi)1616位數(shù)據(jù)指針寄存器位數(shù)據(jù)指針寄存器DPTRDPTR, /低低8 8位字節(jié)地址為位字節(jié)地址為82H82H, /高高8 8位字節(jié)地址為位字節(jié)地址為83H83H。DPTR=0 x1234;DPTR=0 x1234;sfr16 sfr16 寄存器變量名寄存器變量名 = = 字節(jié)地址常數(shù);字節(jié)地址常數(shù);格式:格式:字節(jié)地址為字節(jié)地址為82H、83H存放的數(shù)據(jù)分別是多少?存放的數(shù)據(jù)分別是多少?2021/8/212(4 4)特殊功能位)特殊功能位 sbitsb

11、it 片內(nèi)特殊功能寄存器的可尋址位。片內(nèi)特殊功能寄存器的可尋址位。“”“”前是特殊功能寄存器的名字;前是特殊功能寄存器的名字;“”的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,取值必須是取值必須是0-70-7。 sbit sbit 位變量名位變量名 = = 特殊功能寄存器特殊功能寄存器 位位置;位位置;格式:格式:sfr PSW = 0 xd0sfr PSW = 0 xd0; /定義定義PSWPSW寄存器地址為寄存器地址為0 xd00 xd0sbit FO = PSW 5 sbit FO = PSW 5 ;/定義定義F0F0位為位為PS

12、W.5PSW.5F0 = 0;F0 = 0;例如:例如:2021/8/213習(xí)題:片內(nèi)習(xí)題:片內(nèi)I/OI/O口口P1P1口的口的P1.0P1.0尋址位置成高電平尋址位置成高電平 sfr sfr P1 = 0 x90 P1 = 0 x90; sbit P1_0 = P10sbit P1_0 = P10; P1_0 = 1P1_0 = 1;習(xí)題:習(xí)題: 從從P2口的口的P2.7讀取數(shù)據(jù),存放到任意一個(gè)位變量讀取數(shù)據(jù),存放到任意一個(gè)位變量X。 sfr sfr P2 = 0 xA0 P2 = 0 xA0; sbit P2_7 = P27sbit P2_7 = P27; bit xbit x; x =

13、P2_7x = P2_7; 2021/8/214sbitsbit 位變量名位變量名 = = 位地址常數(shù);位地址常數(shù); sbit CY = 0 xD7sbit CY = 0 xD7; / /* * CY CY位地址為位地址為0 xD70 xD7* */ /sbit OV = 0 xD2sbit OV = 0 xD2; / /* * OV OV位地址為位地址為0 xD20 xD2* */ /ifif(CY = = 1CY = = 1) 例如:例如:格式:格式:2021/8/215習(xí)題:片內(nèi)習(xí)題:片內(nèi)I/OI/O口口P1P1口的口的P1.0P1.0尋址位置成低電平尋址位置成低電平sbit P1_0

14、= 0 x90sbit P1_0 = 0 x90;P1_0 = 0P1_0 = 0;在頭文件在頭文件AT89X51.hAT89X51.h中定義了常用的特殊功能寄存器和可尋址位。中定義了常用的特殊功能寄存器和可尋址位。#include #include sfr sfr P1 = 0 x90 P1 = 0 x90; sbit P1_0 = 0 x90sbit P1_0 = 0 x90; 兩者區(qū)別??jī)烧邊^(qū)別? 62021/8/2163 3)數(shù)據(jù)存儲(chǔ)類(lèi)型)數(shù)據(jù)存儲(chǔ)類(lèi)型數(shù)據(jù)存儲(chǔ)類(lèi)型是指數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)類(lèi)型是指數(shù)據(jù)存放在5151單片機(jī)的哪一個(gè)存儲(chǔ)器空間。單片機(jī)的哪一個(gè)存儲(chǔ)器空間。2021/8/217bd

15、atadataidatapdataxdatacode2021/8/218(1 1)DATADATA區(qū)。區(qū)。 DATADATA區(qū)指片內(nèi)區(qū)指片內(nèi)RAMRAM的低的低128128字節(jié)的空間,可直接尋址;字節(jié)的空間,可直接尋址; 尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在DATADATA區(qū)。區(qū)。unsigned char unsigned char datadata system_status=0; system_status=0;unsigned int unsigned int datadata unit_id8; unit_id8;例如:例如:格式:格式: 數(shù)據(jù)

16、類(lèi)型數(shù)據(jù)類(lèi)型【存儲(chǔ)類(lèi)型】【存儲(chǔ)類(lèi)型】變量名;變量名;2021/8/219(2 2)BDATABDATA區(qū)。區(qū)。 BDATABDATA區(qū)是內(nèi)部區(qū)是內(nèi)部RAMRAM可位尋址的可位尋址的1616字節(jié)存儲(chǔ)區(qū)(字節(jié)地址為字節(jié)存儲(chǔ)區(qū)(字節(jié)地址為20H20H 2FH2FH)中的)中的128128個(gè)位。個(gè)位。 在這個(gè)區(qū)中聲明變量就可進(jìn)行位尋址。在這個(gè)區(qū)中聲明變量就可進(jìn)行位尋址。例如:例如:unsigned char bdata status_byte;unsigned int bdata status_word;sbit stat_flag= status_byte4;if( status_word15 )

17、stat_flag=1; 2021/8/220(3 3)IDATAIDATA區(qū)。區(qū)。 IDATAIDATA區(qū)是片內(nèi)區(qū)是片內(nèi)RAMRAM的的0-2560-256字節(jié)的存儲(chǔ)區(qū),只能間接尋址,字節(jié)的存儲(chǔ)區(qū),只能間接尋址, 速度比直接尋址慢。速度比直接尋址慢。unsigned char idata system_status=0;float idata value; 例如:例如:2021/8/221(4 4)PDATAPDATA區(qū)和區(qū)和XDATAXDATA區(qū)。區(qū)。 PDATAPDATA區(qū)和區(qū)和XDATAXDATA區(qū)位于片外存儲(chǔ)區(qū);區(qū)位于片外存儲(chǔ)區(qū); PDATAPDATA區(qū)指的是外部數(shù)據(jù)存儲(chǔ)區(qū)區(qū)指的是外

18、部數(shù)據(jù)存儲(chǔ)區(qū)02560256字節(jié)。字節(jié)。 XDATAXDATA區(qū)指的是外部數(shù)據(jù)區(qū)區(qū)指的是外部數(shù)據(jù)區(qū)64KB64KB內(nèi)的任何地址。內(nèi)的任何地址。unsigned char xdata system_status=0;unsigned int pdata unit_id8;例如:例如:2021/8/222(5 5)程序存儲(chǔ)區(qū))程序存儲(chǔ)區(qū)CODECODE。 CODECODE區(qū)是程序存儲(chǔ)區(qū),儲(chǔ)存的數(shù)據(jù)是不可改變的。區(qū)是程序存儲(chǔ)區(qū),儲(chǔ)存的數(shù)據(jù)是不可改變的。unsigned char unsigned char codecode a9 a9 =0 x00,0 x01,0 x02,0 x03,0 x04,0

19、 x05,0 x06,0 x07,0 x08;=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;例如:例如:2021/8/2234 4)數(shù)據(jù)存儲(chǔ)器模式)數(shù)據(jù)存儲(chǔ)器模式C51C51編譯器設(shè)定的存儲(chǔ)器模式:編譯器設(shè)定的存儲(chǔ)器模式: SMALLSMALL、COMPACTCOMPACT和和LARGELARGE三種模式。三種模式。若聲明若聲明 char var1char var1;在在SMALLSMALL模式下,模式下, var1var1被定位在被定位在datadata存儲(chǔ)區(qū);存儲(chǔ)區(qū);在在COMPACTCOMPACT模式下,模式下, var1v

20、ar1被定位在被定位在idataidata存儲(chǔ)區(qū);存儲(chǔ)區(qū);在在LARGELARGE模式下,模式下, var1var1被定位在被定位在xdataxdata存儲(chǔ)區(qū)中。存儲(chǔ)區(qū)中。2021/8/2242 2、C51C51語(yǔ)言的絕對(duì)地址訪(fǎng)問(wèn)語(yǔ)言的絕對(duì)地址訪(fǎng)問(wèn)C51C51語(yǔ)言提供了兩種比較常用的訪(fǎng)問(wèn)絕對(duì)地址的方法,語(yǔ)言提供了兩種比較常用的訪(fǎng)問(wèn)絕對(duì)地址的方法,對(duì)片內(nèi)對(duì)片內(nèi)RAMRAM、片外、片外RAMRAM及及I/OI/O進(jìn)行訪(fǎng)問(wèn)。進(jìn)行訪(fǎng)問(wèn)。絕對(duì)地址絕對(duì)地址2021/8/2251)絕對(duì)宏)絕對(duì)宏C51編譯器提供了一組宏定義對(duì)編譯器提供了一組宏定義對(duì)code、data、pdata和和xdata空間空間進(jìn)行絕對(duì)

21、尋址。這組宏定義放在進(jìn)行絕對(duì)尋址。這組宏定義放在absacc.h頭文件中:頭文件中:CBYTE 以字節(jié)形式對(duì)以字節(jié)形式對(duì)code區(qū)尋址;區(qū)尋址;CWORD 以字形式對(duì)以字形式對(duì)code區(qū)尋址;區(qū)尋址;DBYTE 以字節(jié)形式對(duì)以字節(jié)形式對(duì)data區(qū)尋址;區(qū)尋址;DWORD 以字形式對(duì)以字形式對(duì)data區(qū)尋址;區(qū)尋址;XBYTE 以字節(jié)形式對(duì)以字節(jié)形式對(duì)xdata區(qū)尋址;區(qū)尋址;XWORD 以字形式對(duì)以字形式對(duì)xdata區(qū)尋址;區(qū)尋址;PBYTE 以字節(jié)形式對(duì)以字節(jié)形式對(duì)pdata區(qū)尋址;區(qū)尋址;PWORD 以字形式對(duì)以字形式對(duì)pdata區(qū)尋址。區(qū)尋址。#define #define 變量名變量名

22、 絕對(duì)宏絕對(duì)宏 字節(jié)地址字節(jié)地址 格式格式絕對(duì)宏絕對(duì)宏2021/8/226【例】片內(nèi)【例】片內(nèi)RAMRAM、片外、片外RAMRAM定義的程序如下:定義的程序如下:#include#include#define PORTE XBYTE0 xFFC0 #define PORTE XBYTE0 xFFC0 / /* *將將PORTEPORTE定義為外部定義為外部I/OI/O, 地址為地址為0 xFFC00 xFFC0* */ /#define NRAM DBYTE0 x40 #define NRAM DBYTE0 x40 / /* *將將NRAMNRAM定義為片內(nèi)定義為片內(nèi)RAMRAM, 地址為地址

23、為0 x400 x40* */ /main( )main( ) PORTE=0 x3D; PORTE=0 x3D; NRAM=0 x01;NRAM=0 x01; / /* *數(shù)據(jù)數(shù)據(jù)3DH3DH寫(xiě)入地址寫(xiě)入地址0 xFFC00 xFFC0的外部的外部I/O I/O PORTE PORTE * */ / /* *將數(shù)據(jù)將數(shù)據(jù)01H01H寫(xiě)入片內(nèi)寫(xiě)入片內(nèi)RAMRAM的的40H40H單元單元* */ /2021/8/227習(xí)題習(xí)題 使用絕對(duì)宏將片內(nèi)使用絕對(duì)宏將片內(nèi)RAM 20HRAM 20H的字節(jié)地址單元全部置的字節(jié)地址單元全部置1 1。#include#include#define M DBYTE

24、0 x0020 #define M DBYTE0 x0020 / /* *將將M M定義為外部定義為外部RAMRAM, 地址為地址為0 x00200 x0020* */ /main( )main( ) M=0 xff; M=0 xff; 2021/8/228習(xí)題:習(xí)題: 使用絕對(duì)宏讀取片外使用絕對(duì)宏讀取片外RAM F000HRAM F000H字節(jié)地址單元的內(nèi)容。字節(jié)地址單元的內(nèi)容。#include#include#define WRAM XBYTE0 xF000 #define WRAM XBYTE0 xF000 main( )main( ) char x char x; x = WRAM;x

25、 = WRAM; 72021/8/2292 2)_at_at_關(guān)鍵字關(guān)鍵字使用關(guān)鍵字使用關(guān)鍵字_at_at_可對(duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪(fǎng)問(wèn)??蓪?duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪(fǎng)問(wèn)。格式:格式: 存儲(chǔ)類(lèi)型存儲(chǔ)類(lèi)型 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 變量名變量名 _at_ _at_ 地址常數(shù);地址常數(shù);地址常數(shù):指定變量的絕對(duì)地址,位于存儲(chǔ)器空間之內(nèi);地址常數(shù):指定變量的絕對(duì)地址,位于存儲(chǔ)器空間之內(nèi);使用使用_at_at_定義的變量必須為全局變量。定義的變量必須為全局變量。2021/8/230【例】使用關(guān)鍵字【例】使用關(guān)鍵字_at_at_實(shí)現(xiàn)絕對(duì)地址的訪(fǎng)問(wèn)。實(shí)現(xiàn)絕對(duì)地址的訪(fǎng)問(wèn)。data unsigned

26、char y1 _at_ 0 x50; /data unsigned char y1 _at_ 0 x50; /* *在在data data 區(qū)定義字節(jié)變量區(qū)定義字節(jié)變量 y1y1,地址為,地址為50H50H* */ /xdata unsigned int y2 _at_ 0 x4000; /xdata unsigned int y2 _at_ 0 x4000; /* *在在xdataxdata區(qū)定義字變量區(qū)定義字變量 y2y2,地址為,地址為4000H4000H* */ /void main(void)void main(void) y1=0 xff; y1=0 xff; y2=0 x123

27、4; y2=0 x1234; while(1); while(1); 2021/8/231習(xí)題:使用習(xí)題:使用關(guān)鍵字關(guān)鍵字_at_at_讀取片內(nèi)讀取片內(nèi)RAM 60HRAM 60H單元的內(nèi)容。單元的內(nèi)容。data unsigned char M _at_ 0 x60;data unsigned char M _at_ 0 x60;void main(void)void main(void) unsigned char y ; unsigned char y ; y=M y=M; 2021/8/232【例】【例】使用關(guān)鍵字使用關(guān)鍵字_at_at_將片外將片外RAM 2000HRAM 2000H開(kāi)

28、始的連續(xù)開(kāi)始的連續(xù)2020個(gè)字節(jié)單元清個(gè)字節(jié)單元清0 0。void main(void)void main(void) unsigned char i; unsigned char i; for(i=0; i20; i+) for(i=0; i20; i+) bufferi=0 bufferi=0; xdata unsigned char buffer20 _at_ 0 x2000;xdata unsigned char buffer20 _at_ 0 x2000;2021/8/233data unsigned char buffer8 _at_ 0 x40;data unsigned cha

29、r buffer8 _at_ 0 x40;void main(void)void main(void) unsigned char j ; unsigned char j ; for(j=0; j8; j+) for(j=0; j y; R = x y;2021/8/2363 3)邏輯運(yùn)算符)邏輯運(yùn)算符邏輯表達(dá)式邏輯表達(dá)式int x=0;int x=0;int y=1;int y=1;int R;int R;R = x & y;R = x & y;2021/8/2374)位運(yùn)算符)位運(yùn)算符01001000 01001000 & & 11111111 111111

30、1100001000 00001000 2 201001001 01001001 | | 11111111 111111112021/8/23801001000 01001000 & & 00110111 0011011101000000 01000000 | | 11111111 1111111100001000 00001000 y ) max=x; if( xy ) max=x; 比較變量比較變量x x和變量和變量y y,如果,如果xyxy,則把,則把 x x 賦給變量賦給變量maxmax。習(xí)題:比較變量習(xí)題:比較變量x x和變量和變量y y,如果,如果x x和和y y相

31、等,則把相等,則把0 0賦給變量賦給變量maxmax。if( x = = y ) max=0; if( x = = y ) max=0; 2021/8/244格式:格式:if(if(表達(dá)式表達(dá)式) ) 語(yǔ)句語(yǔ)句1 1; else else 語(yǔ)句語(yǔ)句2 2; 2021/8/245if (xy) max=x; else max=y; 比較變量比較變量x x和變量和變量y y, 如果如果xyxy, 則把則把 x x 賦給變量賦給變量maxmax;否則把否則把 y y 賦給變量賦給變量maxmax。2021/8/246習(xí)題:比較變量習(xí)題:比較變量x x和變量和變量y y,把二者最小值賦給變量,把二者最

32、小值賦給變量minmin;if (xy) min=y; else min=x; 2021/8/247習(xí)題:如果變量習(xí)題:如果變量x x滿(mǎn)足關(guān)系滿(mǎn)足關(guān)系10 x2010 x10)&(x10)&(x20)) ) y=1 y=1; else else y=0; y=0; 92021/8/248void main( )void main( ) sfr P2=0 xA0 sfr P2=0 xA0; sfr P1=0 x90sfr P1=0 x90; sbit P24=P24sbit P24=P24; sbit P10=P10sbit P10=P10; 習(xí)題:如果讀取習(xí)題:如果讀取P2P2

33、口的口的P2.4P2.4位為位為1 1,則把,則把P1P1口的口的P1.0P1.0置成置成0 0。 if(P24=1) if(P24=1) P10=0 P10=0; 2021/8/249if(if(表達(dá)式表達(dá)式1) 1) 語(yǔ)句語(yǔ)句1 1;else if (else if (表達(dá)式表達(dá)式2) 2) 語(yǔ)句語(yǔ)句2 2; else if(else if(表達(dá)式表達(dá)式n) n) 語(yǔ)句語(yǔ)句n n;else else 語(yǔ)句語(yǔ)句n+1n+1;多分支多分支ifif語(yǔ)句語(yǔ)句0表達(dá)式表達(dá)式1 表達(dá)式表達(dá)式2 表達(dá)式表達(dá)式n語(yǔ)句語(yǔ)句n+100語(yǔ)句語(yǔ)句n 語(yǔ)句語(yǔ)句2 語(yǔ)句語(yǔ)句1 非非0 非非0 非非0 2021/8/2

34、50當(dāng)成績(jī)當(dāng)成績(jī)9090時(shí),時(shí), 輸出輸出verygoodverygood,當(dāng)當(dāng)8080成績(jī)成績(jī)9090時(shí),時(shí), 輸出輸出goodgood, 當(dāng)當(dāng)6060成績(jī)成績(jī)8080時(shí),時(shí), 輸出輸出passpass,當(dāng)成績(jī)當(dāng)成績(jī)60=90) printf(“very good);if (score=90) printf(“very good);else if (score=80) printf(“good);else if (score=80) printf(“good); else if (score=60) printf(“pass); else if (score=60) printf(“pass

35、); else printf(“fail); else printf(“fail);2021/8/251多分支多分支switchswitch語(yǔ)句語(yǔ)句switch (switch (表達(dá)式表達(dá)式1) 1) case case 常量表達(dá)式常量表達(dá)式1 1: 語(yǔ)句語(yǔ)句1 1; break break; case case 常量表達(dá)式常量表達(dá)式2 2: 語(yǔ)句語(yǔ)句2 2; break break; case case 常量表達(dá)式常量表達(dá)式n n: 語(yǔ)句語(yǔ)句n n; break break; defaultdefault: 語(yǔ)句語(yǔ)句n+1n+1; 格式:格式:2021/8/252switchswitch表

36、達(dá)式表達(dá)式1 1語(yǔ)句語(yǔ)句1 1語(yǔ)句語(yǔ)句2 2語(yǔ)句語(yǔ)句n n語(yǔ)句語(yǔ)句n+1n+1式式1 1式式2 2式式n ndefaultdefaultcasecase 2021/8/253switch ( key ) switch ( key ) case 1case 1: y=1y=1; breakbreak; case 2case 2: y=2; breaky=2; break;case 3case 3: y=4y=4; breakbreak; defaultdefault: ; ; 在單片機(jī)程序設(shè)計(jì)中,常用在單片機(jī)程序設(shè)計(jì)中,常用switchswitch語(yǔ)句作為鍵盤(pán)中按鍵的判別。語(yǔ)句作為鍵盤(pán)中按鍵的判

37、別。當(dāng)按下鍵的鍵號(hào)變量當(dāng)按下鍵的鍵號(hào)變量key=1key=1,則變量,則變量y=1y=1; 鍵號(hào)變量鍵號(hào)變量key=2key=2,則變量,則變量y=2y=2; 鍵號(hào)變量鍵號(hào)變量key=4key=4,則變量,則變量y=3y=3; 沒(méi)有按下鍵,沒(méi)有按下鍵, 則變量則變量y y不變。不變。2021/8/254key=2;key=2;switch ( key ) switch ( key ) case 1case 1: y=1y=1; case 2case 2: y=2; y=2; case 3case 3: y=4y=4; defaultdefault: ; ; 習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)

38、行的結(jié)果 y =y =?2021/8/2552 2)循環(huán)結(jié)構(gòu)控制語(yǔ)句)循環(huán)結(jié)構(gòu)控制語(yǔ)句whilewhile(表達(dá)式)(表達(dá)式) 循環(huán)體;循環(huán)體; 格式:格式:表達(dá)式表達(dá)式循環(huán)體循環(huán)體假假(0)真真(非非0)先判斷表達(dá)式,先判斷表達(dá)式,后執(zhí)行循環(huán)體。后執(zhí)行循環(huán)體。whilewhile語(yǔ)句語(yǔ)句2021/8/256main()main() int i=0; int i=0; int r; int r; while while(i3i3) i+ i+ ; y=i; y=i; i+i+執(zhí)行幾次?執(zhí)行幾次?y =y =?r = 3r = 3習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?202

39、1/8/257main()main() int i=3; int i=3; int r; int r; while while(i6i6) i+ i+ ; y=i; y=i; y =y =?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?2021/8/258dodo 循環(huán)體;循環(huán)體; whilewhile(表達(dá)式);(表達(dá)式);格式:格式:表達(dá)式表達(dá)式循環(huán)體循環(huán)體假假(0)真真(非非0);不可省略!不可省略!切記!切記!先執(zhí)行循環(huán)體,先執(zhí)行循環(huán)體,后判斷表達(dá)式。后判斷表達(dá)式。do-whiledo-while語(yǔ)句語(yǔ)句2021/8/259main()main() int i=0; in

40、t i=0; int y; int y; do do i+ i+; while (i3); while (i3); y=i; y=i; i+i+執(zhí)行幾次?執(zhí)行幾次?y =y =?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?2021/8/260main()main() int i=0; int i=0; int y=0; int y=0; do do i+ i+; y= y + i;y= y + i; while (y20); while (y20); 習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?2021/8/261forfor(表達(dá)式(表達(dá)式1 1;表達(dá)式;表達(dá)

41、式2 2;表達(dá)式;表達(dá)式3 3) 語(yǔ)句;語(yǔ)句; 格式:格式:forfor語(yǔ)句語(yǔ)句2021/8/262main()main() int i, y; int i, y; y=0; y=0; for(i=1;i4;i+) for(i=1;i4;i+) y = y + i y = y + i; y = y = ?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?2021/8/263main()main() int i, y; int i, y; y=1; y=1; for( i=2; i6 ; i+ ) for( i=2; i6 ; i+ ) y = y + i y = y + i; y =

42、 y = ?習(xí)題:讀程序執(zhí)行的結(jié)果習(xí)題:讀程序執(zhí)行的結(jié)果 y =y =?2021/8/2643 3)breakbreak語(yǔ)句和語(yǔ)句和continuecontinue語(yǔ)句語(yǔ)句breakbreak功能:功能: 跳出跳出switchswitch結(jié)構(gòu);結(jié)構(gòu); 在循環(huán)語(yǔ)句中在循環(huán)語(yǔ)句中, ,終止并跳出本層循環(huán)。終止并跳出本層循環(huán)。continuecontinue功能:功能: 結(jié)束本次循環(huán),跳過(guò)本層循環(huán)體中尚未執(zhí)行的語(yǔ)句,結(jié)束本次循環(huán),跳過(guò)本層循環(huán)體中尚未執(zhí)行的語(yǔ)句, 執(zhí)行循環(huán)體的判斷。執(zhí)行循環(huán)體的判斷。2021/8/265#define PI 3.1415main( ) int r; float are

43、a; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 計(jì)算計(jì)算r=1r=1到到r=10r=10的圓面積,直到面積大于的圓面積,直到面積大于100100時(shí)停止。時(shí)停止。運(yùn)行結(jié)果:運(yùn)行結(jié)果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54結(jié)束整個(gè)結(jié)束整個(gè)for循環(huán)循環(huán)2021/8/266把把100100200200之間不能被之間不能被3 3整除的數(shù)輸出整除的數(shù)輸出 。main( )main( ) int n; int n; for(n=100;n=20

44、0;n+) for(n=100;n=200;n+) if(n%3= =0) if(n%3= =0) continue;continue; printf(“%d ,n); printf(“%d ,n); 結(jié)束本次循環(huán)結(jié)束本次循環(huán),循環(huán)體的剩余語(yǔ)句被忽略循環(huán)體的剩余語(yǔ)句被忽略,執(zhí)行表達(dá)式執(zhí)行表達(dá)式3,進(jìn)入下一循環(huán)。,進(jìn)入下一循環(huán)。2021/8/267main( ) int n; for(n=100;n=200;n+) if(n%3=0) break; printf(“%d ,n); 習(xí)題:讀程序執(zhí)行的結(jié)果?習(xí)題:讀程序執(zhí)行的結(jié)果?2021/8/268習(xí)題:循環(huán)檢測(cè)習(xí)題:循環(huán)檢測(cè)P1.0P1.0引腳

45、,只有檢測(cè)引腳,只有檢測(cè)P1.0P1.0為低電平時(shí),循環(huán)結(jié)束。為低電平時(shí),循環(huán)結(jié)束。sfr P1=0 x90;sbit P10=P10;main( ) while(1) if(P10=0) break; 2021/8/2695 5、數(shù)組、數(shù)組數(shù)組是用來(lái)存儲(chǔ)一組相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu)。數(shù)組是用來(lái)存儲(chǔ)一組相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu)。一維數(shù)組格式:一維數(shù)組格式:數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型變量名變量名 N ;int a 10;int a5 = 1, 2, 3, 4, 5 int a5 = 1, 2, 3, 4, 5 ;初始化:初始化:char b 10;2021/8/270求下列數(shù)組的和。求下列數(shù)組的和。int a5 = 1, 2, 3, 4, 5 int a5 = 1, 2, 3, 4, 5 ;main()ma

溫馨提示

  • 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)論