![第三章 單片機(jī)并行口C語言程序設(shè)計_第1頁](http://file3.renrendoc.com/fileroot3/2021-11/12/bc9891d0-946f-47eb-91d0-96b6f66dd5db/bc9891d0-946f-47eb-91d0-96b6f66dd5db1.gif)
![第三章 單片機(jī)并行口C語言程序設(shè)計_第2頁](http://file3.renrendoc.com/fileroot3/2021-11/12/bc9891d0-946f-47eb-91d0-96b6f66dd5db/bc9891d0-946f-47eb-91d0-96b6f66dd5db2.gif)
![第三章 單片機(jī)并行口C語言程序設(shè)計_第3頁](http://file3.renrendoc.com/fileroot3/2021-11/12/bc9891d0-946f-47eb-91d0-96b6f66dd5db/bc9891d0-946f-47eb-91d0-96b6f66dd5db3.gif)
![第三章 單片機(jī)并行口C語言程序設(shè)計_第4頁](http://file3.renrendoc.com/fileroot3/2021-11/12/bc9891d0-946f-47eb-91d0-96b6f66dd5db/bc9891d0-946f-47eb-91d0-96b6f66dd5db4.gif)
![第三章 單片機(jī)并行口C語言程序設(shè)計_第5頁](http://file3.renrendoc.com/fileroot3/2021-11/12/bc9891d0-946f-47eb-91d0-96b6f66dd5db/bc9891d0-946f-47eb-91d0-96b6f66dd5db5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 單片機(jī)有單片機(jī)有P0P0口、口、P1P1口、口、P2P2口及口及P3P3口口4 4個并行個并行I/OI/O口,口,每個口每個口8 8條線,共條線,共3232條條I/OI/O線。線。(1 1)P0P0口口(P0.0(P0.0P0.7):P0.7):低低8 8位地址和數(shù)據(jù)復(fù)用。位地址和數(shù)據(jù)復(fù)用。(2 2)P1P1口口(P1.0(P1.0P1.7)P1.7):作一般:作一般I/OI/O接口使用。接口使用。 (3 3)P2P2口口(P2.0(P2.0P2.7)P2.7):地址(高:地址(高8 8位)或作一位)或作一般般I/OI/O接口。接口。 (4 4)P3P3口口(P3.0(P3.0P3.7)P3
2、.7):作一般:作一般I/OI/O接口或第二接口或第二功能引腳。功能引腳。 第三章第三章 單片機(jī)并行口語單片機(jī)并行口語C語言基礎(chǔ)語言基礎(chǔ)3.1 80C513.1 80C51的并行口結(jié)構(gòu)與應(yīng)用的并行口結(jié)構(gòu)與應(yīng)用3.1.1 P0口、口、P2口的結(jié)構(gòu)口的結(jié)構(gòu) 一、一、 P0口的結(jié)構(gòu)口的結(jié)構(gòu)數(shù)據(jù)鎖存數(shù)據(jù)鎖存數(shù)據(jù)緩數(shù)據(jù)緩沖器沖器2選選1多路多路開關(guān)開關(guān)驅(qū)動驅(qū)動控制控制 1 1、P0P0口作通用的口作通用的I/OI/O口使用??谑褂?。 這時,這時,CPUCPU發(fā)來的發(fā)來的“控制控制”信號為信號為低電平低電平,上拉場上拉場效應(yīng)管截止,效應(yīng)管截止,多路轉(zhuǎn)接開關(guān)多路轉(zhuǎn)接開關(guān)MUXMUX打向下邊打向下邊,與與D
3、D鎖存器鎖存器的的Q Q端接通。端接通。 (1 1) P0P0作輸出口使用作輸出口使用 來自來自CPUCPU的的“寫入寫入”脈沖加在脈沖加在D D鎖存器的鎖存器的CPCP端,內(nèi)部端,內(nèi)部總線上的數(shù)據(jù)寫入總線上的數(shù)據(jù)寫入D D鎖存器,并向端口引腳鎖存器,并向端口引腳P0.xP0.x輸出。輸出。 注意:注意:由于輸出電路是漏極開路(因為這時上拉場由于輸出電路是漏極開路(因為這時上拉場效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。 (2 2) P0P0作輸入口使用作輸入口使用 區(qū)分“讀引腳”和“讀鎖存器”。 CPU在執(zhí)行“讀修改寫”類輸入指令時,內(nèi)部
4、產(chǎn)生的“讀鎖存器讀鎖存器”操作信號,使鎖存器Q端數(shù)據(jù)進(jìn)入內(nèi)部數(shù)據(jù)總線,在與累加器A進(jìn)行邏輯運算之后,結(jié)果又送回P0的口鎖存器并出現(xiàn)在引腳(如:ANL P0,A) CPU在執(zhí)行“MOV”類輸入指令時,內(nèi)部產(chǎn)生的操作信號是“讀引腳讀引腳” (如:MOV A,P0) 。在執(zhí)行該類輸入指令前要先把鎖存器寫入“1”。所以,P0口在作為通用I/O口時,屬于準(zhǔn)雙向口。 2 2、P0P0口傳送地址或數(shù)據(jù)口傳送地址或數(shù)據(jù)時時 CPUCPU發(fā)出控制信號為發(fā)出控制信號為高電平高電平,打開上面的與門,使打開上面的與門,使多路轉(zhuǎn)接開關(guān)多路轉(zhuǎn)接開關(guān)MUXMUX打向上邊,使內(nèi)部地址打向上邊,使內(nèi)部地址/ /數(shù)據(jù)線與下數(shù)據(jù)線
5、與下面的場效應(yīng)管處于反相接通狀態(tài)。此時輸出驅(qū)動電路面的場效應(yīng)管處于反相接通狀態(tài)。此時輸出驅(qū)動電路由于上下兩個由于上下兩個FETFET處于反相,形成推拉式電路結(jié)構(gòu),處于反相,形成推拉式電路結(jié)構(gòu),大大提高負(fù)載能力。大大提高負(fù)載能力。 且在讀指令碼或輸入數(shù)據(jù)前,且在讀指令碼或輸入數(shù)據(jù)前,CPUCPU自動向自動向P0P0口鎖存口鎖存器寫入器寫入0FFH0FFH,破壞了,破壞了P0P0口原來的狀態(tài)。因此,不能再口原來的狀態(tài)。因此,不能再作為通用的作為通用的I/OI/O端口。端口。 二、二、P2P2端口的結(jié)構(gòu)端口的結(jié)構(gòu) 字節(jié)地址為字節(jié)地址為A0HA0H,位地址位地址A0HA0HA7HA7H。 在實際應(yīng)用中
6、,因為在實際應(yīng)用中,因為P2P2口用于提供高位地址,口用于提供高位地址,有一個多路轉(zhuǎn)接開關(guān)有一個多路轉(zhuǎn)接開關(guān)MUXMUX。但。但MUXMUX的一個輸入端不再的一個輸入端不再是是“地址地址/ /數(shù)據(jù)數(shù)據(jù)”,而是單一的,而是單一的“地址地址”,因為,因為P2P2口只作為地址線使用??谥蛔鳛榈刂肪€使用。 當(dāng)當(dāng)P2P2口用作為高位地址線使用時口用作為高位地址線使用時,多路轉(zhuǎn)接開關(guān),多路轉(zhuǎn)接開關(guān)應(yīng)接向應(yīng)接向“地址地址”端。正因為只作為地址線使用,口端。正因為只作為地址線使用,口的輸出用不著是三態(tài)的,所以,的輸出用不著是三態(tài)的,所以,P2P2口也是一個口也是一個準(zhǔn)雙準(zhǔn)雙向口。向口。 P2P2口也可以作為通
7、用口也可以作為通用I/OI/O口使用,這時,多路轉(zhuǎn)口使用,這時,多路轉(zhuǎn)接開關(guān)接向鎖存器接開關(guān)接向鎖存器Q Q端端。 3.1.2 P13.1.2 P1口、口、P3P3口的結(jié)構(gòu)口的結(jié)構(gòu) 一、一、 P1P1口的結(jié)構(gòu)口的結(jié)構(gòu) P1口由一個輸出鎖存器、兩個三態(tài)輸入口由一個輸出鎖存器、兩個三態(tài)輸入緩沖器和輸出驅(qū)動電路組成。輸出驅(qū)動電緩沖器和輸出驅(qū)動電路組成。輸出驅(qū)動電路與路與P2口相同,內(nèi)部設(shè)有上拉電阻。口相同,內(nèi)部設(shè)有上拉電阻。 P1口是通用的準(zhǔn)雙向口是通用的準(zhǔn)雙向I/O口。輸出高電口。輸出高電平時,能向外提供拉電流負(fù)載,不必再接平時,能向外提供拉電流負(fù)載,不必再接上拉電阻。當(dāng)口用作輸入時,須向口鎖存上
8、拉電阻。當(dāng)口用作輸入時,須向口鎖存器寫入器寫入1。二、二、 P3口的結(jié)構(gòu)口的結(jié)構(gòu) (字節(jié)地址為字節(jié)地址為B0HB0H,位地址位地址為為B0HB0HB7HB7H)1 1、P3P3用作第一功能(通用用作第一功能(通用I/O口)口) 對對P3P3口進(jìn)行字節(jié)或位尋址時,單片機(jī)內(nèi)部的硬件口進(jìn)行字節(jié)或位尋址時,單片機(jī)內(nèi)部的硬件自動將第二功能輸出線的自動將第二功能輸出線的W W置置1 1。這時,對應(yīng)的口線。這時,對應(yīng)的口線為通用為通用I/OI/O口方式??诜绞健 輸出時,鎖存器的狀態(tài)(輸出時,鎖存器的狀態(tài)(Q Q端)與輸出引腳的狀態(tài)端)與輸出引腳的狀態(tài)相同;相同;n 輸入時,要先向口鎖存器寫入輸入時,要先
9、向口鎖存器寫入1 1,使引腳處于高,使引腳處于高阻輸入狀態(tài)。輸入的數(shù)據(jù)在阻輸入狀態(tài)。輸入的數(shù)據(jù)在“讀引腳讀引腳”信號的作用信號的作用下,進(jìn)入內(nèi)部數(shù)據(jù)總線。下,進(jìn)入內(nèi)部數(shù)據(jù)總線。 P3P3口作為通用口作為通用I/OI/O口時,屬于準(zhǔn)雙向口口時,屬于準(zhǔn)雙向口。2 2、第二功能信號(、第二功能信號(有有輸出輸出和和輸入輸入兩類):兩類):(1 1)作)作通用的通用的I/OI/O輸出輸出, “第二輸出功能第二輸出功能”線應(yīng)線應(yīng)保持高電平,與非門開通,使鎖存器保持高電平,與非門開通,使鎖存器Q Q端輸出暢通。端輸出暢通。作作第二功能信號輸出第二功能信號輸出,鎖存器預(yù)先置鎖存器預(yù)先置“1”1”,使與,使與
10、非門對非門對“第二輸出功能第二輸出功能”信號的輸出是暢通的信號的輸出是暢通的。(2 2)作)作第二功能信號輸入第二功能信號輸入,在口線引腳的內(nèi)部增加在口線引腳的內(nèi)部增加了一個緩沖器,輸入的信號就從這個緩沖器的輸了一個緩沖器,輸入的信號就從這個緩沖器的輸出端取得。而作為通用出端取得。而作為通用I/OI/O輸入,仍取自三態(tài)緩沖輸入,仍取自三態(tài)緩沖器的輸出端。器的輸出端。 P3P3口無論作哪種輸入,鎖存器輸出和口無論作哪種輸入,鎖存器輸出和“第二輸出第二輸出功能功能”線都應(yīng)保持高電平。線都應(yīng)保持高電平。3 3、P3P3用作第二功能使用用作第二功能使用 當(dāng)當(dāng)CPUCPU不對不對P3P3口進(jìn)行字節(jié)或位尋
11、址時,內(nèi)部硬件自口進(jìn)行字節(jié)或位尋址時,內(nèi)部硬件自動將口鎖存器的動將口鎖存器的Q Q端置端置1 1,P3P3口作為第二功能使用口作為第二功能使用。 引腳引腳 第二功能第二功能 P3.0P3.0 RXD RXD(串行輸入口)(串行輸入口) P3.1P3.1 TXD TXD(串行輸出口)(串行輸出口) P3.2P3.2 INT0 INT0* * (外部中斷(外部中斷0 0) P3.3P3.3 INT1 INT1* * (外部中斷(外部中斷1 1) P3.4P3.4 T0 T0(定時器(定時器0 0外部計數(shù)輸入)外部計數(shù)輸入) P3.5P3.5 T1 T1(定時器(定時器1 1外部計數(shù)輸入)外部計數(shù)輸
12、入) P3.6P3.6 WR WR* * (外部數(shù)據(jù)存儲器寫選通)(外部數(shù)據(jù)存儲器寫選通) P3.7P3.7 RD RD* * (外部數(shù)據(jù)存儲器讀選通)(外部數(shù)據(jù)存儲器讀選通) 3.1.3 3.1.3 并行口的負(fù)載能力并行口的負(fù)載能力 n P0、P1、P2、P3口的口的電平電平與與CMOS和和TTL電電平兼容。平兼容。n P0口的每一位口線可以口的每一位口線可以驅(qū)動驅(qū)動8個個LSTTL負(fù)載。負(fù)載。在在作為通用作為通用 I/O口口時,由于輸出驅(qū)動電路是開漏時,由于輸出驅(qū)動電路是開漏方式,由集電極開路(方式,由集電極開路(OC門)電路或漏極開路門)電路或漏極開路電路驅(qū)動時電路驅(qū)動時需外接上拉電阻需
13、外接上拉電阻;當(dāng)作為;當(dāng)作為地址地址/數(shù)據(jù)數(shù)據(jù)總線總線使用時,口線輸出不是開漏的,使用時,口線輸出不是開漏的,無須外接無須外接上拉電阻上拉電阻。P1、P2、P3口的每一位能驅(qū)動口的每一位能驅(qū)動4個個LSTTL負(fù)載。負(fù)載。它們的輸出驅(qū)動電路設(shè)有內(nèi)部上拉電阻,所以它們的輸出驅(qū)動電路設(shè)有內(nèi)部上拉電阻,所以可以方便地由集電極開路(可以方便地由集電極開路(OC門)電路或漏極門)電路或漏極開路電路所驅(qū)動,而開路電路所驅(qū)動,而無須外接上拉電阻無須外接上拉電阻。 由于單片機(jī)口線僅能提供幾毫安的電流,當(dāng)由于單片機(jī)口線僅能提供幾毫安的電流,當(dāng)作為輸出驅(qū)動一般的晶體管的基極時,應(yīng)在口作為輸出驅(qū)動一般的晶體管的基極時
14、,應(yīng)在口與晶體管的基極之間串接限流電阻。與晶體管的基極之間串接限流電阻。 3.1.4 并行口的應(yīng)用并行口的應(yīng)用 1、用、用P1P3端口驅(qū)動端口驅(qū)動LED發(fā)光二極管發(fā)光二極管 P1、P2、P3口的每一位的驅(qū)動能力,只有口的每一位的驅(qū)動能力,只有P0口的口的一半。當(dāng)口的某位為高電平時,可提供較小的電流;一半。當(dāng)口的某位為高電平時,可提供較小的電流;當(dāng)口的某位為低電平(當(dāng)口的某位為低電平(0.45V)時,可提供較大的灌)時,可提供較大的灌電流,如低電平允許提高,灌電流可相應(yīng)加大。電流,如低電平允許提高,灌電流可相應(yīng)加大。 所以,任一個口要想獲得較大的驅(qū)動能力,只能用所以,任一個口要想獲得較大的驅(qū)動能
15、力,只能用低電平輸出。例如,使用單片機(jī)的并行端口低電平輸出。例如,使用單片機(jī)的并行端口P1P3直直接驅(qū)動發(fā)光二極管,電路如接驅(qū)動發(fā)光二極管,電路如圖圖所示。所示。(a a)不正確的連接:)不正確的連接: (b b)正確的連接:)正確的連接: 高電平驅(qū)動高電平驅(qū)動 低電平驅(qū)動低電平驅(qū)動 發(fā)光二極管與單片機(jī)并行口的直接連接發(fā)光二極管與單片機(jī)并行口的直接連接 8個發(fā)光二極管與并行口個發(fā)光二極管與并行口P1的連接的連接驅(qū)動驅(qū)動LED發(fā)光二極管舉例發(fā)光二極管舉例2、單片機(jī)與LED數(shù)碼管接口(1)LED靜態(tài)顯示 如圖:用P1口和P2口接2個8段數(shù)碼管。 保持P1口和P2口的數(shù)據(jù)不變,可使數(shù)碼管一直顯示要求
16、的內(nèi)容。(2)LED動態(tài)顯示 用P1口接數(shù)碼管的段碼(顯示碼),用P2口接數(shù)碼管的位選碼。需要加驅(qū)動。3.2 80C513.2 80C51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)返回返回返回返回 1、 數(shù)據(jù)傳送類指令(數(shù)據(jù)傳送類指令(29條)條) 傳送類指令分成兩大類傳送類指令分成兩大類 (1)一般傳送:)一般傳送:寄存器、存儲器、立即數(shù)間的傳送寄存器、存儲器、立即數(shù)間的傳送 (2) 特殊傳送:特殊傳送:程序存儲器、內(nèi)外程序存儲器、內(nèi)外RAM之間、堆之間、堆棧操作(壓入棧操作(壓入/彈出),字節(jié)彈出),字節(jié)/半字節(jié)數(shù)據(jù)交換等。半字節(jié)數(shù)據(jù)交換等。 2、 算術(shù)運算類指令(算術(shù)運算類指令(24條)條) 加、
17、減、乘、除及加加、減、乘、除及加1和減和減1等,等, 多數(shù)以多數(shù)以A為源操為源操作數(shù),同時又使作數(shù),同時又使A為目的操作數(shù)。為目的操作數(shù)。 影響影響PSW中的中的OV、CY、AC 3、邏輯運算與循環(huán)類指令(邏輯運算與循環(huán)類指令(24條)條) (1)邏輯運算邏輯運算:與、或、異或、清與、或、異或、清0和取反和取反 A清清0操作對操作對P標(biāo)志有影響。標(biāo)志有影響。 (2)移位)移位:左移、右移、帶左移、右移、帶CY位的左移和右移位的左移和右移 4 、控制轉(zhuǎn)移類指令(、控制轉(zhuǎn)移類指令(17條)條) 程序執(zhí)行是順序的,改變程序執(zhí)行順序,稱作程程序執(zhí)行是順序的,改變程序執(zhí)行順序,稱作程序轉(zhuǎn)移;控制程序轉(zhuǎn)移
18、采用轉(zhuǎn)移指令。序轉(zhuǎn)移;控制程序轉(zhuǎn)移采用轉(zhuǎn)移指令。 包括:包括: 無條件轉(zhuǎn)移、無條件轉(zhuǎn)移、 條件轉(zhuǎn)移、條件轉(zhuǎn)移、 子程序調(diào)用與返回。子程序調(diào)用與返回。 5 、位操作類指令(位操作類指令(17條)條) 以位為單位進(jìn)行的各種操作。以位為單位進(jìn)行的各種操作。(1)20H-2FH的位尋址區(qū):共的位尋址區(qū):共128位,地址位,地址00H-7FH。(2)11個特殊功能寄存器(地址可被個特殊功能寄存器(地址可被8整除)。整除)。共共88位。位。 3.3 3.3 單片機(jī)的單片機(jī)的kiel C51kiel C51語言簡介語言簡介 單片機(jī)C51以函數(shù)形式組織程序結(jié)構(gòu)。 C C程序基本結(jié)構(gòu)程序基本結(jié)構(gòu)XTAL1XTA
19、L289C51VCCRP1.0P1.7例例3-1.3-1.單片機(jī)單片機(jī)C51C51語言程序:控制語言程序:控制8 8個發(fā)光二極管閃爍個發(fā)光二極管閃爍 硬件結(jié)構(gòu)如圖:單片機(jī)硬件結(jié)構(gòu)如圖:單片機(jī)89C5189C51和時鐘電路、復(fù)位和時鐘電路、復(fù)位電路構(gòu)成最小系統(tǒng)電路構(gòu)成最小系統(tǒng)P1P1口上接口上接8 8個發(fā)光二極管。個發(fā)光二極管。+5VC3R1KRSTC1C212MHZD1 發(fā)光二極管的導(dǎo)發(fā)光二極管的導(dǎo)通壓降通壓降1.7V1.7V,電流,電流10mA10mA左右。左右。 當(dāng)當(dāng)P1P1給低電平時給低電平時D1D1亮,給高電平時亮,給高電平時D1D1滅。滅。#include /#include /頭文
20、件頭文件Void delay(unsigned char i) /Void delay(unsigned char i) /延時函數(shù)聲明延時函數(shù)聲明Void main() /Void main() /主函數(shù)主函數(shù) while while(1 1) p1=0 x00; p1=0 x00;/ P1/ P1低電平,燈亮低電平,燈亮 delay(200);delay(200); p1=0 xff; p1=0 xff;/ P1/ P1高電平,等滅高電平,等滅 delay(200); delay(200); Void delay(unsigned char i) / / 函數(shù)定義部分:函數(shù)定義部分:延時函
21、數(shù) unsigned char j,k; / / 函數(shù)體函數(shù)體 (1) 數(shù)據(jù)類型說明 for(k=0,kI,k+) / / (2) 執(zhí)行部分 for(j=0,j255,j+); 3.3.1 C51 3.3.1 C51基本結(jié)構(gòu)基本結(jié)構(gòu) 一、一、C51C51語言源程序的組成語言源程序的組成(1)C51語言源程序是由一個或若干個函數(shù)組成一個或若干個函數(shù)組成,每個函數(shù)由函數(shù)定義和函數(shù)體函數(shù)定義和函數(shù)體組成,完成獨立的功能。(2)每個C51程序都必須有(且僅有)一個主函數(shù)一個主函數(shù)main()main(),程序的執(zhí)行總是從主函數(shù)開始,調(diào)用其他函數(shù)后返回主函數(shù)main(),不管函數(shù)的排列順序如何,最后在主
22、函數(shù)中結(jié)束整個程序。(3)C51語言程序中同樣有預(yù)處理命令預(yù)處理命令,預(yù)處理命令通常放在源程序的最前面,用用#include#include定義定義。(4)C51語言程序使用“;”作為語句的結(jié)束符,一條語句可以多行書寫,也可以一行書寫多條語句。 二、二、C51C51語言的優(yōu)點:語言的優(yōu)點:(1)結(jié)構(gòu)化語言 C51語言源程序是函數(shù)組成函數(shù)組成,并提供多種結(jié)構(gòu)化控制語句,如:分支、循環(huán)等結(jié)構(gòu)。(2)豐富的數(shù)據(jù)類型 C51數(shù)據(jù)類型豐富,運算符眾多,可直接訪問存儲器,進(jìn)行位運算,能實現(xiàn)匯編語言的大部分功能。(3)C51程序與其它高級語言程序相比,雖然程序開發(fā)中需要對單片機(jī)的內(nèi)部結(jié)構(gòu)有一定的了解,但相比
23、程序執(zhí)行效率高,速度快。(4)與匯編語言相比,C51語言的優(yōu)點如下: 不要求編程者詳細(xì)了解單片機(jī)的指令系統(tǒng),但需了解單片機(jī)的存儲器結(jié)構(gòu);單片機(jī)的存儲器結(jié)構(gòu); 寄存器分配、不同存儲器的尋址、數(shù)據(jù)類型、運算過程等細(xì)節(jié)可由編譯器管理完成; 程序可移植性好,結(jié)構(gòu)清晰,程序可讀性強(qiáng); 編譯器提供了很多標(biāo)準(zhǔn)庫函數(shù),具有較強(qiáng)的數(shù)據(jù)處理能力。 三、單片機(jī)三、單片機(jī)C51C51程序結(jié)構(gòu)和標(biāo)準(zhǔn)程序結(jié)構(gòu)和標(biāo)準(zhǔn)C C語言程序的區(qū)別語言程序的區(qū)別 1 1、定義的庫函數(shù)不同、定義的庫函數(shù)不同 C51C51中的庫函數(shù)要按中的庫函數(shù)要按5151單片機(jī)的結(jié)構(gòu)來定義,如:單片機(jī)的結(jié)構(gòu)來定義,如: #include /#inclu
24、de /定義特殊功能寄存器定義特殊功能寄存器 2 2、數(shù)據(jù)類型有區(qū)別、數(shù)據(jù)類型有區(qū)別 有特殊功能寄存器和位類型有特殊功能寄存器和位類型 (1 1)特殊功能寄存器特殊功能寄存器 需要用需要用sfr(8位)、位)、sfr16(16位)定義;位)定義; (2)位操作用)位操作用bit(不固定地址位)、(不固定地址位)、sbit(固定地(固定地 址位)定義。址位)定義。 3 3、變量存儲模式需符合單片機(jī)的存儲空間要求。、變量存儲模式需符合單片機(jī)的存儲空間要求。 數(shù)據(jù)存儲器主要分為:內(nèi)部RAM(128B)、位尋址區(qū)(20-2FH)、外部擴(kuò)展RAM(64KB)。4 4、C51C51輸入輸出通過串行口完成。
25、輸入輸出通過串行口完成。 與C語言中的輸入輸出語句不同,需要對單片機(jī)的串行口進(jìn)行設(shè)置。5 5、C51C51的函數(shù)中有專門用于中斷的函數(shù)。的函數(shù)中有專門用于中斷的函數(shù)。 C51編譯器允許0-31個中斷,對51單片機(jī)只提供5個中斷源:類型號0-4,使用時需要專門說明。四、四、C51C51中的庫函數(shù)中的庫函數(shù)1 1、reg51/52.h :reg51/52.h :特殊功能寄存器和相應(yīng)的位函數(shù)特殊功能寄存器和相應(yīng)的位函數(shù)2 2、stdio.hstdio.h: 一般輸入輸出函數(shù)一般輸入輸出函數(shù)3、ctype.h: 字符函數(shù)4、intrins.h: 內(nèi)部函數(shù)5、stdlib.h: 標(biāo)準(zhǔn)函數(shù)6、string
26、.h: 字符串函數(shù)7、math.h: 數(shù)學(xué)函數(shù)8、absacc.h: 絕對地址訪問函數(shù) 例例3-2 C513-2 C51程序的輸入輸出程序的輸入輸出#include#includemain() int x,y,z; SCON=0 x52; / 串行口方式1可接收發(fā)送 TMOD=0 x20; / 定時器1工作方式2 TH1=0 xf4; / 波特率2400 TR1=1; / 啟動T1工作 printf(input x,y:n); scanf(%d %d,&x,&y); z=x+y; printf(%dn,z); while(1);3.3.2 C513.3.2 C51程序設(shè)計基礎(chǔ)程
27、序設(shè)計基礎(chǔ)一、一、 C51C51的數(shù)據(jù)類型的數(shù)據(jù)類型 C51的數(shù)據(jù)類型分為基本類型、構(gòu)造類型、指針和空類型。 注意的是:注意的是:其中整型(int)與短整型(short)相同,浮點型float型與double型相同。 C51中還有專門的特殊功能寄存器型和位類型。 1 1字符型字符型charchar 分為signed char和unsigned char,默認(rèn)為signed char。它們的長度一個字節(jié)一個字節(jié)。 signed char定義帶符號字節(jié)數(shù)據(jù),字節(jié)的最高位為符號位,負(fù)數(shù)用補(bǔ)碼表示,所能表示的數(shù)值范圍是-128- +127; unsigned char定義無符號字節(jié)數(shù)據(jù)或字符,可以存放
28、一個字節(jié)的無符號數(shù),取值范圍為0-255。 2 2intint整型整型 分signed int和unsigned int。默認(rèn)為signed int。它們的長度均為兩個字節(jié)兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。 對于signed int,帶符號數(shù),補(bǔ)碼表示,數(shù)的范疇為-32768- +32767。 對于unsigned int,無符號數(shù),數(shù)的范圍為0-65535。 3 3longlong長整型長整型 分signed long和unsigned long。默認(rèn)為signed long。它們的長度均為四個字節(jié)為四個字節(jié)。 對于signed long,存放帶符號數(shù),補(bǔ)碼表示,數(shù)的范疇為-21474836
29、48-+2147483647。對于unsigned long,無符號數(shù),數(shù)的范圍為0-4294967295。 4 4floatfloat浮點型浮點型 float型數(shù)據(jù)的長度為四個字節(jié)四個字節(jié),包含指數(shù)和尾數(shù)兩部分,最高位為符號位,“1”表示負(fù)數(shù),“0”表示正數(shù),其次的8位為階碼,最后的23位為尾數(shù)的有效數(shù)位,由于尾數(shù)的整數(shù)部分隱含為“1”,所以尾數(shù)的精度為24位。 5 5* * 指針型指針型 指針型本身就是一個變量,在這個變量中存放的指向另一個數(shù)據(jù)的地址。指針變量要占用一定的內(nèi)存單元,對不同的處理器其長度不一樣,在C51中它的長度一般為1-31-3個字節(jié)個字節(jié)。 6 6特殊功能寄存器型特殊功能
30、寄存器型 這是C51擴(kuò)充的數(shù)據(jù)類型,用于訪問MCS-51單片機(jī)中的特殊功能寄存器,分sfr和sfr16兩種類型。(1)sfrsfr為字節(jié)型特殊功能寄存器類型,占一個內(nèi)一個內(nèi)存單元存單元,利用它可以訪問MCS-51內(nèi)部的所有8位的特殊功能寄存器;(2)sfr16sfr16為雙字節(jié)型特殊功能寄存器類型,占用兩個字節(jié)單元兩個字節(jié)單元,利用它可以訪問MCS-51內(nèi)部的所有兩個字節(jié)的特殊功能寄存器。 在C51中對特殊功能寄存器的訪問必須先用sfr或sfr16進(jìn)行聲明,例如:例如:sfr P0=0 x80sfr P0=0 x80。 7 7位類型位類型 是C51中擴(kuò)充的數(shù)據(jù)類型,訪問可尋址的位單元。 在C5
31、1中,支持兩種位類型:bitbit型和型和sbitsbit型型。它們在內(nèi)存中都只占一個二進(jìn)制位一個二進(jìn)制位,其值可以是“1”或“0”。 (1)用bit定義的位變量在C51編譯器編譯時,在不同的時候位地址是可以變化地址是可以變化的。 (2)sbit定義的位變量必須與MCS-51單片機(jī)的一個可以尋址位單元或可位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在C51編譯器編譯時,其對應(yīng)的位地址地址是不可變化的。是不可變化的。 定義格式:定義格式:sbit sbit 位名稱位名稱= =位地址位地址 例如:例如: sbit CY=0 xd7sbit CY=0 xd7(或(或0 xd000 xd00,PSW7PSW
32、7)基本數(shù)據(jù)類型長度取值范圍unsigned char1字節(jié)0255signed char1字節(jié)-128+127unsigned int2字節(jié)065535signed int2字節(jié)-32768+32767unsigned long4字節(jié)04294967295signed long4字節(jié)-2147483648+2147483647float4字節(jié)1.175494E-383.402823E+38bit1位0或1Sbit1位0或1sfr1字節(jié)0255sfr162字節(jié)065535C51C51的數(shù)據(jù)類型的數(shù)據(jù)類型 8 8、優(yōu)先級、優(yōu)先級 在C51語言程序中,出現(xiàn)運算中數(shù)據(jù)類型不一致的情況時,允許任何標(biāo)準(zhǔn)
33、數(shù)據(jù)類型的隱式轉(zhuǎn)換,隱式轉(zhuǎn)換的優(yōu)先級順序如下: bitcharintlongfloat signedunsigned 例如:當(dāng)char型與int型進(jìn)行運算時,將char型擴(kuò)展為int型,然后與int型運算,運算結(jié)果為int型。 C51除了支持隱式類型轉(zhuǎn)換外,還可以通過強(qiáng)制類型轉(zhuǎn)換符對數(shù)據(jù)類型進(jìn)行人為的強(qiáng)制轉(zhuǎn)換。 C5l編譯器還能支持一些復(fù)雜的數(shù)據(jù)類型,如數(shù)組類型、指針類型、結(jié)構(gòu)類型、聯(lián)合類型等。3.3.3 C513.3.3 C51的運算量與基本運算的運算量與基本運算一、常量一、常量 常量是程序執(zhí)行過程中值不能改變的量。C51中支持整型常量、浮點型常量、字符型常量和字符串型常量。 1 1整型常量
34、整型常量 整型常量在C51中它可以表示成以下幾種形式:十進(jìn)制整數(shù)。如234、-56、0等。十六進(jìn)制整數(shù)。以0 x開頭表示,如0 x12表示十六進(jìn)制數(shù)12H。長整數(shù)。在C51中當(dāng)一個整數(shù)的值達(dá)到長整型的范圍,則該數(shù)按長整型存放,在存儲器中占四個字節(jié),一個整數(shù)后面加一個字母L,這個數(shù)在存儲器中按長整型存放。如123L在存儲器中占四個字節(jié)。 2 2浮點型常量浮點型常量 浮點型常量有十進(jìn)制表示形式和指數(shù)表示形式。 十進(jìn)制表示形式又稱定點表示形式,由數(shù)字和小數(shù)點組成。如: 0.123、34.645等都。 指數(shù)表示形式為: 數(shù)字 .數(shù)字 e 數(shù)字 例如:123.456e-3、-3.123e2。 3 3字符
35、型常量字符型常量 字符型常量是用單引號引起的字符,如a、1等。可以是可顯示的ASCII字符,和不可顯示的控制字符。 對不可顯示的控制字符在前面加上反斜杠“”組成轉(zhuǎn)義字符。利用它可以完成一些特殊功能和輸出時的格式控制。常用的轉(zhuǎn)義字符如表所示。 轉(zhuǎn)義字符 含 義 ASCII碼(十六進(jìn)制數(shù)) 0 空字符(null)00H n 換行符(LF)0AH r 回車符(CR)0DH t 水平制表符(HT)09H b 退格符(BS)08H f 換頁符(FF)0CH 單引號27H ” 雙引號22H 反斜杠5CH 4 4字符串型常量字符串型常量 字符串型常量由雙引號“”括起的字符組成。如“D”、“1234”、“AB
36、CD”等。 注意字符串常量與字符常量是不一樣,一個字符常量在計算機(jī)內(nèi)只用一個字節(jié)存放,而一個字符串一個字符串常量在內(nèi)存中存放時不僅雙引號內(nèi)的字符一個占一常量在內(nèi)存中存放時不僅雙引號內(nèi)的字符一個占一個字節(jié),而且系統(tǒng)會自動的在后面加一個轉(zhuǎn)義字符個字節(jié),而且系統(tǒng)會自動的在后面加一個轉(zhuǎn)義字符“0”0”作為字符串結(jié)束符。作為字符串結(jié)束符。因此不要將字符常量和字符串常量混淆,如字符常量A和字符串常量“A”是不一樣的。 二、變量二、變量 在C51中,變量在使用前必須對變量進(jìn)行定義,指出變量的數(shù)據(jù)類型和存儲模式。以便編譯系統(tǒng)為它分配相應(yīng)的存儲單元。定義的格式如下:存儲種類 數(shù)據(jù)類型說明符 存儲器類型 變量名1
37、=初值,變量名2=初值; 1 1數(shù)據(jù)類型說明符數(shù)據(jù)類型說明符 在定義變量時,必須通過數(shù)據(jù)類型說明符指明變量的數(shù)據(jù)類型,變量在存儲器中占用的字節(jié)數(shù)。 可以是基本數(shù)據(jù)類型說明符,也可以是組合數(shù)據(jù)類型說明符,還可以是用typedef或#define定義的類型別名。 2 2變量名變量名 變量名是C51區(qū)分不同變量,為不同變量取的名稱。在C51中規(guī)定變量名可以由字母、數(shù)字和下劃線三種字符組成,且第一個字母必須為字母或下劃線。 變量名有兩種:普通變量名和指針變量名。它們的區(qū)別是指針變量名前面要帶“*”號。 3 3存儲種類存儲種類 存儲種類是指變量在程序執(zhí)行過程中的作用范圍。C51變量的存儲種類有四種,分別
38、是自動(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。 (1 1)autoauto:使用auto定義的變量稱為自動變量,其作用范圍在定義它的函數(shù)體或復(fù)合語句內(nèi)部,當(dāng)定義它的函數(shù)體或復(fù)合語句執(zhí)行時,C51才為該變量分配內(nèi)存空間,結(jié)束時占用的內(nèi)存空間釋放。 自動變量一般分配在內(nèi)存的堆??臻g中。定義變量時,如果省略存儲種類,則該變量默認(rèn)為自動變量默認(rèn)為自動(auto)(auto)變量。變量。(2 2)externextern:定義的變量稱為外部變量。在一個函數(shù)體內(nèi),要使用一個已在該函數(shù)體外或別的程序中定義過的外部變量時,該變量在該函數(shù)體內(nèi)要用extern說明。外
39、部變量被定義后分配固定的內(nèi)存空間,外部變量被定義后分配固定的內(nèi)存空間,在程序整個執(zhí)行時間內(nèi)都有效,直到程序結(jié)束才釋放。在程序整個執(zhí)行時間內(nèi)都有效,直到程序結(jié)束才釋放。(3 3)staticstatic:定義的變量稱為靜態(tài)變量。它又分為內(nèi)部靜態(tài)變量和外部靜態(tài)變量。在函數(shù)體內(nèi)部定義的靜態(tài)變量為內(nèi)部靜態(tài)變量,它在對應(yīng)的函數(shù)體內(nèi)有效,一直存在,但在函數(shù)體外不可見,這樣不僅使變量在定義它的函數(shù)體外被保護(hù),還可以實現(xiàn)當(dāng)離開函數(shù)時值不被改變。 外部靜態(tài)變量是在函數(shù)外部定義的靜態(tài)變量。它在程序中一直存在,但在定義的范圍之外是不可見的。如在多文件或多模塊處理中,外部靜態(tài)變量只在文件內(nèi)部或模塊內(nèi)部有效。 (4 4
40、)registerregister:使用register定義的變量稱為寄存器變量。它定義的變量存放在CPU內(nèi)部的寄存器中,處理速度快,但數(shù)目少。 C51編譯器編譯時能自動識別程序中使用頻率最高的變量,并自動將其作為寄存器變量,用戶可以無需專門聲明。4 4存儲器類型存儲器類型存儲器類型指明變量所處的單片機(jī)的存儲器區(qū)域情況。定義變量時如果省“存儲器類型”,C51編譯器按默認(rèn)存儲器類型。存儲器類型描 述 datadata 直接尋址的片內(nèi)片內(nèi)RAMRAM低128B,訪問速度快 b bdata 片內(nèi)片內(nèi)RAMRAM的可位尋址區(qū)(20H-2FH),允許字節(jié)和位混合訪問 i idata 間接尋址訪問的片內(nèi)片
41、內(nèi)RAMRAM,允許訪問全部片內(nèi)RAM p pdata 用Ri間接訪問的片外片外RAMRAM的低的低256B256B x xdata 用DPTR間接訪問的片外片外RAMRAM,允許訪問全部,允許訪問全部64k64k片外片外RAMRAM codecode 程序存儲器ROMROM 64k空間5 5特殊功能寄存器變量特殊功能寄存器變量 MCS-51片內(nèi)有許多特殊功能寄存器,通過它們可以控制單片機(jī)的定時器、計數(shù)器、串口、I/O等。 在C51中,用戶對特殊功能寄存器進(jìn)行訪問須通過sfr或sfr16類型說明符進(jìn)行定義,定義格式如下: sfrsfr或或sfr16 sfr16 特殊功能寄存器名特殊功能寄存器名
42、 = = 地址;地址; sfr用于對MCS-51單片機(jī)中單字節(jié)的特殊功能寄存器進(jìn)行定義。 sfr16用于對雙字節(jié)特殊功能寄存器進(jìn)行定義。 特殊功能寄存器名一般用大寫字母表示特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式?!纠纠?-33-3】特殊功能寄存器的定義。 sfr PSW=0 xd0; sfr SCON=0 x98; sfr TMOD=0 x89; sfr P1=0 x90; sfr16 DPTR=0 x82; sfr16 T1=0X8A; 6 6位變量位變量 在C51中,允許用戶通過位類型符定義位變量。位類型符有兩個:bit和sbit。 bit位類型符用于定義一般的可位處
43、理位變量。它的格式如下: bit bit 位變量名;位變量名; 在格式中可以加上各種修飾,但注意存儲器類型只能是bdata、data、idata。只能是片內(nèi)RAM的可位尋址區(qū),嚴(yán)格來說只能是嚴(yán)格來說只能是bdatabdata。【例【例3-43-4】 bit型變量的定義。bit data a1; /*正確*/bit bdata a2; /*正確*/bit pdata a3; /*錯誤*/bit xdata a4; /*錯誤*/ sbitsbit位類型符用于定義在可位尋址字節(jié)或特殊位類型符用于定義在可位尋址字節(jié)或特殊功能寄存器中的位,功能寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是
44、可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號。 格式如下: sbit sbit 位變量名位變量名= =位地址;位地址; 如位地址為位直接地址,其取值范圍為0 x00-0 xff; 如位地址是可位尋址變量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能寄存器進(jìn)行定義。字節(jié)地址與位號之間、特殊字節(jié)地址與位號之間、特殊功能寄存器與位號之間一般用功能寄存器與位號之間一般用“”作間隔。作間隔?!纠纠?-53-5】sbit型變量的定義。(1)sbit OV=0 xd2; /直接地址sbit CY=oxd7;(2)sfr P1=0 x90; /定義P1sbit P1_0=P10;
45、 /位號定義sbit P1_1=P11;sbit P1_2=P12;sbit P1_7=P17; 有些C51編譯器把MCS-51單片機(jī)的特殊功能寄存器進(jìn)行了定義,放在“reg51.h”或“reg52.h”的頭文件中,用戶使用時用一條預(yù)處理命令#include 把這個頭文件包含到程序中,就可使用殊功能寄存器名和特殊位名稱。 三、存儲模式三、存儲模式 C51編譯器支持三種存儲模式: SMALLSMALL模式、模式、COMPACTCOMPACT模式和模式和LARGELARGE模式模式。(1 1)SMALLSMALL模式。模式。 SMALL模式稱為小編譯模式,在SMALL模式下,編譯時,函數(shù)參數(shù)和變量
46、被默認(rèn)在片內(nèi)RAM中,存儲器類型為data。(2 2)COMPACTCOMPACT模式。模式。COMPACT模式稱為緊湊編譯模式,在COMPACT模式下,編譯時,函數(shù)參數(shù)和變量被默認(rèn)在片外RAM的低256字節(jié)空間,存儲器類型為pdata。(3 3)LARGELARGE模式。模式。 LARGE模式稱為大編譯模式,在LARGE模式下,編譯時函數(shù)參數(shù)和變量被默認(rèn)在片外RAM的64K字節(jié)空間,存儲器類型為xdata。 在程序中變量的存儲模式的指定通過#pragma預(yù)處理命令來實現(xiàn)。 函數(shù)的存儲模式可通過在函數(shù)定義時后面帶存儲模式說明。 如果沒有指定,則系統(tǒng)都隱含為如果沒有指定,則系統(tǒng)都隱含為SMALL
47、SMALL模式。模式?!纠纠?-63-6】變量的存儲模式。#pragma small /#pragma small /* *變量的存儲模式為變量的存儲模式為SMALLSMALL* */ /char k1;int xdata m1;#pragma compact /#pragma compact /* *變量的存儲模式為變量的存儲模式為COMPACTCOMPACT * */ /char k2;int xdata m2;int func1(int x1,int y1) largeint func1(int x1,int y1) large /*函數(shù)的存儲模式為LARGE*/return(x1+y
48、1);int func2(int x2,int y2) /*函數(shù)的存儲模式隱含為SMALL*/ return(x2-y2); 程序編譯時,k1變量存儲器類型為data,k2變量存儲器類型為pdata,而m1和m2由于定義時帶了存儲器類型xdata,因而它們?yōu)閤data型;函數(shù)func1的形參x1和y1的存儲器類型為xdata型,而函數(shù)func2由于沒有指明存儲模式,隱含為SMALL模式,形參x2和y2的存儲器類型為data。四、四、C C語言的基本運算語言的基本運算 C51語言的基本運算與標(biāo)準(zhǔn)C類似,主要包括算術(shù)運算、關(guān)系運算、邏輯運算、位運算和賦值運算及其表達(dá)式等。1.1.算術(shù)運算符算術(shù)運算
49、符 算術(shù)運算符及其說明如表3-4所示(1)注意:“/”和“%” ?!?”運算是取商,而“%” 運算為取余數(shù)。例如“5/3”的結(jié)果(商)為1,而“5%3”的結(jié)果為2(余數(shù))。(2)自增和自減運算符是使變量自動加1或減1,自增和自減運算符放在變量前和變量之后是不同的。 +i+i,-i-i:在使用:在使用i i之前,先使之前,先使i i值加(減)值加(減)1 1。 i+i+,i-i-:在使用:在使用i i之后,再使之后,再使i i值加(減)值加(減)1 1。 例如:若例如:若i=4i=4,則執(zhí)行,則執(zhí)行x=+ix=+i時,先使時,先使i i加加1 1,再,再引用結(jié)果,即引用結(jié)果,即x=5x=5,運算
50、結(jié)果為,運算結(jié)果為i=5i=5,x=5x=5。 再如:若再如:若i=4i=4,則執(zhí)行,則執(zhí)行x=i+x=i+時,先引用時,先引用i i值,即值,即x=4x=4,再使,再使i i加加1 1,運算結(jié)果為,運算結(jié)果為i=5i=5,x=4x=4。64 2. 2. 邏輯運算符和邏輯運算符和關(guān)系運算符關(guān)系運算符(1)邏輯運 算符 (2)關(guān)系運 算符4. 4. 位運算位運算66 在實際的控制應(yīng)用中,人們常常想要改變I/O口中的某一位的值,而不影響其它位,如果I/O口是可位尋址的,這個問題就很簡單。但有時外擴(kuò)的I/O口只能進(jìn)行字節(jié)操作,因此要想在這種場合下實現(xiàn)單獨的位控,就要采用位操作。 例例3-7 3-7
51、編寫程序?qū)U(kuò)展的某編寫程序?qū)U(kuò)展的某I/OI/O口口PORTAPORTA(只能字節(jié)(只能字節(jié)操作)的操作)的PORTA.5PORTA.5清清0 0,PORTA.1PORTA.1置為置為1 1,程序如下:,程序如下: #define #define PORTA XBYTE0 xFFC0 /定義變量PORTA void main( ) PORTA=( PORTA&0 xDF)0 x02; /是先用運算符“&”將PORTA.5置成0(0 xDF=11011111),然后再用“0 x02”運算將PORTA.1置為1。 5. 5.指針和取地址運算符指針和取地址運算符 C51語言中提供的兩
52、個專門用于指針和取地址運算符,如表3-8所示。 取內(nèi)容和取地址的一般形式分別為:變量變量= = * *指針變量指針變量指針變量指針變量= &= &目標(biāo)變量目標(biāo)變量3.3.5 C51語言的基本語句 C51語言程序的執(zhí)行部分由語句組成。 C51語言提供了豐富的程序控制語句,按照結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu): 順序結(jié)構(gòu)順序結(jié)構(gòu) 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) C51語言的語句主要包括:表達(dá)式語句、復(fù)合表達(dá)式語句、復(fù)合語句、選擇語句和循環(huán)語句等。語句、選擇語句和循環(huán)語句等。 一、表達(dá)式語句和復(fù)合語句一、表達(dá)式語句和復(fù)合語句 (1)表達(dá)式語句是最基本的C51語言語句。表達(dá)式語句由表達(dá)式加
53、上分號“;”組成,其一般形式如下: 表達(dá)式;表達(dá)式; 執(zhí)行表達(dá)式語句就是計算表達(dá)式的值。(2)在C51語言中有一個特殊的表達(dá)式語句,稱為空語句。空語句中只有一個分號空語句中只有一個分號“;”,程序執(zhí)行空語句時需要占用一條指令的執(zhí)行時間,但是什么也不做。在C51程序中常常把空語句作為循環(huán)體,用于消耗CPU時間等待事件發(fā)生的場合。 (3) 把多個語句用大括號多個語句用大括號 括起來括起來,組合在一起形成具有一定功能的模塊,這種由若干條語句組合而成的語句塊稱為復(fù)合語句。稱為復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句看成是單條語句,而不是多條語句。 復(fù)合語句在程序運行時, 中的各行單語句是依次順序
54、執(zhí)行的。 在C51語言的函數(shù)中,函數(shù)體就是一個復(fù)合語句。 +5VC3R1KRSTXTAL1XTAL2C1C212MHZ89C51VCCRD1P1.0P1.1P3.0P3.1例例3-8.3-8.單片機(jī)單片機(jī)C51C51語言程序:模擬汽車左右轉(zhuǎn)向燈控語言程序:模擬汽車左右轉(zhuǎn)向燈控制制如圖:單片機(jī)如圖:單片機(jī)89C5189C51P1.0P1.0、P1.1P1.1口上接口上接2 2個發(fā)光二個發(fā)光二極管,極管,P3.0P3.0和和P3.1P3.1接開關(guān)接開關(guān)S0S0和和S1S1。RS0S1P3.0 P3.1 轉(zhuǎn)向燈狀態(tài)轉(zhuǎn)向燈狀態(tài) 0 0 2燈同時閃爍故障燈同時閃爍故障 0 1 左燈亮左燈亮 左轉(zhuǎn)左轉(zhuǎn) 1
55、 0 右燈亮右燈亮 右轉(zhuǎn)右轉(zhuǎn) 1 1 未發(fā)命令未發(fā)命令 方向燈邏輯關(guān)系單片機(jī)單片機(jī)C51語言程序語言程序:汽車轉(zhuǎn)向燈控制程序汽車轉(zhuǎn)向燈控制程序#include sbit P1_0=P10; /定義P1.0引腳位名稱為P1_0sbit P1_1=P11; /定義P1.1引腳位名稱為P1_1sbit P3_0=P30; /定義P3.0引腳位名稱為P3_0sbit P3_1=P31; /定義P3.1引腳位名稱為P3_1void delay(unsigned char i); /延時函數(shù)聲明void main( ) /主函數(shù) bit left,right; /定義位變量left、right表示左、右狀
56、態(tài) while(1) left=P3_0; /讀P3.0引腳的(左轉(zhuǎn)向燈)狀態(tài)賦給left right=P3_1; /讀P3.1引腳的(右轉(zhuǎn)向燈)狀態(tài)賦給right P1_0=left;/將left的值送至P1.0引腳 P1_1=right;/將right的值送至P1.1引腳 delay(200);/調(diào)用延時函數(shù),實際參數(shù)為200 P1_0=1; /將P1.0引腳置1輸出(熄滅LED) P1_1=1;/將P1.1引腳置1輸出(熄滅LED) delay(200);/調(diào)用延時函數(shù),實際參數(shù)為200 /函數(shù)名:delay 函數(shù)功能:實現(xiàn)軟件延時void delay(unsigned char i)
57、unsigned char j,k;/定義無符號字符型變量j和k for(k=0;ki;k+)/雙重for循環(huán)語句實現(xiàn)軟件延時 for(j=0;j255;j+);二、選擇語句二、選擇語句 1 1、基本、基本ifif語句(單分支)的格式:語句(單分支)的格式:if (表達(dá)式) 語句組; if語句執(zhí)行過程:當(dāng)“表達(dá)式”的結(jié)果為“真”時,執(zhí)行其后的“語句組”,否則跳過該語句組,繼續(xù)執(zhí)行下面的語句。 基本if、if-else、if-else-if、switch 四種語句p if語句中的“表達(dá)式”通常為邏輯表達(dá)式或關(guān)系表達(dá)式,也可以是任何其他的表達(dá)式或類型數(shù)據(jù),只要表達(dá)式的值非0即為“真”。以下語句都是
58、合法的: if(3) if(x=8) if(P3_0)p 在if語句中,“表達(dá)式”必須用括號括起來。p 在if語句中,花括號“ ”里面的語句組如果只有一條語句,可以省略花括號。如“if (P3_0=0) P1_0=0;”語句,但為了提高程序的可讀性和防止程序書寫錯誤,建議讀者在任何情況下,都加上花括號。 2 2、if-elseif-else語句(雙分支)的格式:語句(雙分支)的格式:if (表達(dá)式) 語句組1; else 語句組2; if-else語句執(zhí)行過程:當(dāng)“表達(dá)式”的結(jié)果為“真”時,執(zhí)行其后的“語句組1”,否則執(zhí)行“語句組2” 3 3、if-else-ifif-else-if語句(多個
59、條件分支)的格式:語句(多個條件分支)的格式:if (表達(dá)式表達(dá)式1) 語句組語句組1; else if (表達(dá)式表達(dá)式2) 語句組語句組2; else if (表達(dá)式表達(dá)式n) 語句組語句組n; else 語句組語句組n+1; 采用if語句實現(xiàn)的模擬汽車轉(zhuǎn)向燈控制程序#include sbit P1_0=P10;/定義P1.0引腳位名稱為P1_0sbit P1_1=P11;/定義P1.1引腳位名稱為P1_1sbit P3_0=P30;/定義P3.0引腳位名稱為P3_0sbit P3_1=P31;/定義P3.1引腳位名稱為P3_1void delay(unsigned char i); /延時
60、函數(shù)聲明void main()/主函數(shù) while(1) if (P3_0=0) P1_0=0; /P3.0狀態(tài)為0,則點亮左轉(zhuǎn)燈 if (P3_1=0) P1_1=0; /P3.1狀態(tài)為0,則點亮右轉(zhuǎn)燈 delay(200);/延時 P1_0=1;/左轉(zhuǎn)燈回到熄滅狀態(tài) P1_1=1;/右轉(zhuǎn)燈回到熄滅狀態(tài) delay(200); /延時 2 2、switchswitch語句(多分支)格式:語句(多分支)格式: switch(表達(dá)式) case常量表達(dá)式1: 語句組1;break; case常量表達(dá)式2: 語句組2;break; case常量表達(dá)式n: 語句組n;break; default : 語句組n+1; 執(zhí)行過程是:執(zhí)行過程是:先
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)技術(shù)在職教實訓(xùn)室的應(yīng)用前景
- 現(xiàn)代物流配送體系的智能化升級路徑
- 2024年學(xué)年八年級語文上冊 第一單元 愛在人間 第3課《蘆花蕩》說課稿 滬教版五四制
- 2024年四年級英語下冊 Unit 5 What will you do this weekend Lesson 25說課稿 人教精通版(三起)
- Unit 1 Greetings(說課稿)-2024-2025學(xué)年滬教版(五四制)(2024)英語一年級上冊
- 2023二年級數(shù)學(xué)下冊 7 萬以內(nèi)數(shù)的認(rèn)識第2課時 1000以內(nèi)數(shù)的認(rèn)識(2)說課稿 新人教版
- Unit 3 Food Let's Spell(說課稿)-2024-2025學(xué)年人教新起點版英語三年級上冊
- 2024-2025學(xué)年高一地理《宇宙中的地球》說課稿
- 2023六年級數(shù)學(xué)上冊 八 探索樂園單元概述和課時安排說課稿 冀教版
- 2024-2025學(xué)年高中歷史 專題4 雅爾塔體制下的冷戰(zhàn)與和平 3 人類對和平的追求說課稿(含解析)人民版選修3
- 《梅大高速茶陽路段“5·1”塌方災(zāi)害調(diào)查評估報告》專題警示學(xué)習(xí)
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 《大健康解讀》課件
- 2025年度交通運輸規(guī)劃外聘專家咨詢協(xié)議3篇
- 專項債券培訓(xùn)課件
- 2024年公司領(lǐng)導(dǎo)在新年動員會上的講話樣本(3篇)
- 2025年中國濕度傳感器行業(yè)深度分析、投資前景、趨勢預(yù)測報告(智研咨詢)
- 人教版道德與法治二年級下冊《第一單元 讓我試試看》大單元整體教學(xué)設(shè)計2022課標(biāo)
- 甘肅省蘭州市蘭煉一中2025屆數(shù)學(xué)高一上期末統(tǒng)考試題含解析
- 聯(lián)合體三方協(xié)議合同模板
- 《傻子上學(xué)》臺詞
評論
0/150
提交評論