任務(wù)二單片機(jī)控制流水燈課件_第1頁(yè)
任務(wù)二單片機(jī)控制流水燈課件_第2頁(yè)
任務(wù)二單片機(jī)控制流水燈課件_第3頁(yè)
任務(wù)二單片機(jī)控制流水燈課件_第4頁(yè)
任務(wù)二單片機(jī)控制流水燈課件_第5頁(yè)
已閱讀5頁(yè),還剩285頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

教知識(shí)重點(diǎn)(1)C51的數(shù)據(jù)類型與變量的存儲(chǔ)種類、存儲(chǔ)器類型(2)C51運(yùn)算符和表達(dá)式(3)C51基本控制語(yǔ)句(4)C51函數(shù)及預(yù)處理(5)單片機(jī)時(shí)鐘電路及CPU時(shí)序知識(shí)難點(diǎn)變量的存儲(chǔ)種類、存儲(chǔ)器類型;C51函數(shù)及其調(diào)用;CPU時(shí)序推薦教學(xué)方式以任務(wù)入手,通過(guò)單片機(jī)控制8只發(fā)光二極管實(shí)現(xiàn)流水燈這一任務(wù)的完成初步掌握C51的基本語(yǔ)法、基本控制語(yǔ)句的使用、函數(shù)調(diào)用。建議學(xué)時(shí)8學(xué)時(shí)學(xué)推薦學(xué)習(xí)方法通過(guò)對(duì)教師提供的電路圖,設(shè)計(jì)單片機(jī)控制流水燈程序,利用KeilC開發(fā)環(huán)境與Proteus完成程序編輯、編譯、仿真運(yùn)行,理解C51基本語(yǔ)法及相關(guān)理論知識(shí)。必須掌握的理論知識(shí)(1)C51的數(shù)據(jù)類型與存儲(chǔ)種類、存儲(chǔ)器類型(2)C51運(yùn)算符和表達(dá)式(3)C51基本程序結(jié)構(gòu)(4)C51函數(shù)及預(yù)處理(5)單片機(jī)時(shí)鐘電路及機(jī)器周期(6)單片機(jī)位尋址區(qū)與特殊功能寄存器必須掌握的技能(1)學(xué)會(huì)編寫C51基本程序(2)學(xué)會(huì)編寫對(duì)并行I/O口操作的程序教學(xué)導(dǎo)航教知識(shí)重點(diǎn)(1)C51的數(shù)據(jù)類型與變量的存儲(chǔ)種類、存儲(chǔ)器類型任務(wù)單任務(wù)描述由MCS-51單片機(jī)的并行I/O口接8個(gè)發(fā)光二極管,實(shí)現(xiàn)發(fā)光二極管逐一點(diǎn)亮(或每次點(diǎn)亮兩只或從外向內(nèi)、從內(nèi)向外)的流水燈。任務(wù)要求由P0連接8只發(fā)光二極管(如圖2-1所示),實(shí)現(xiàn)如下功能:(1)讓發(fā)光二極管從左至右循環(huán)輪流點(diǎn)亮兩只燈;(2)讓8只發(fā)光二極管從外向內(nèi)循環(huán)輪流點(diǎn)亮;(3)讓8只發(fā)光二極管從內(nèi)向外循環(huán)輪流點(diǎn)亮。實(shí)現(xiàn)方法1.利用Proteus仿真運(yùn)行,分別實(shí)現(xiàn)上述三個(gè)任務(wù)要求。2.在開發(fā)板等實(shí)訓(xùn)設(shè)備上按任務(wù)要求連線,完成程序設(shè)計(jì)并運(yùn)行。任務(wù)單任務(wù)描述由MCS-51單片機(jī)的并行I/O口接8個(gè)發(fā)光二2任務(wù)二電路圖任務(wù)二電路圖3任務(wù)二單片機(jī)控制流水燈2.1C51基礎(chǔ)2.2C51語(yǔ)句2.3C51函數(shù)與預(yù)處理2.4單片機(jī)時(shí)鐘電路及時(shí)鐘周期案例3單片機(jī)控制模擬廣告流水燈任務(wù)二單片機(jī)控制流水燈2.1C51基礎(chǔ)42.1C51基礎(chǔ)C51語(yǔ)言是針對(duì)8051系列及其擴(kuò)展系列單片機(jī)的語(yǔ)言,支持符合ANSI標(biāo)準(zhǔn)的c語(yǔ)言程序設(shè)計(jì),同時(shí)針對(duì)8051系列單片機(jī)的一些特點(diǎn)進(jìn)行了擴(kuò)展。2.1C51基礎(chǔ)C51語(yǔ)言是針對(duì)8051系列及其擴(kuò)展系列52.1.1C51的標(biāo)識(shí)符和關(guān)鍵字1、標(biāo)識(shí)符

程序設(shè)計(jì)者為自定義的變量、函數(shù)、類型所起的名字只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線不能與關(guān)鍵字同名,盡量“見名知義”2.1.1C51的標(biāo)識(shí)符和關(guān)鍵字1、標(biāo)識(shí)符62.1.1C51的標(biāo)識(shí)符和關(guān)鍵字【例2.1

】指出下面哪些是非法的標(biāo)識(shí)符?

a f-2f6 m+n x4b4afas_da.sstotalmainmonth int

關(guān)鍵字:main

int

非法字符:f-2 m+n a.ss

開頭非法:4af2.1.1C51的標(biāo)識(shí)符和關(guān)鍵字【例2.1】指出下面哪72.1.1C51的標(biāo)識(shí)符和關(guān)鍵字2、關(guān)鍵字

又稱保留字,是程序設(shè)計(jì)語(yǔ)言中規(guī)定的、有固定含義的單詞符號(hào)。(32個(gè))autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2.1.1C51的標(biāo)識(shí)符和關(guān)鍵字2、關(guān)鍵字autobre8C51擴(kuò)展的關(guān)鍵字_at_alienbdatabitcodecompatdataidataintertuptlargepdata_priorityreentrantsbitsfrsfr16small_task_usingxdataC51擴(kuò)展的關(guān)鍵字_at_alienbdatabitcod9數(shù)據(jù)類型C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實(shí)型單精度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union長(zhǎng)整型long整型int數(shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進(jìn)行的操作2.1.2C51的數(shù)據(jù)類型位型

bit短整型short數(shù)據(jù)類型C基本類型構(gòu)造類型指針類型空類型void定義類型ty102.1.3C51的數(shù)據(jù)類型2.1.3C51的數(shù)據(jù)類型111.字符型(char)(1)字符型常量字符常量是用單引號(hào)括起來(lái)的一個(gè)字符,如’a’,’$’,’1’,’A’等都是字符常量。注意,字符型常量區(qū)分大小寫,因此’a’和’A’是不同的字符常量。不可以顯示的控制字符,可以在該字符前面加一個(gè)“\”組成轉(zhuǎn)義字符,也就是把“\”后面的字符轉(zhuǎn)變成另外的意義。1.字符型(char)(1)字符型常量12轉(zhuǎn)義字符轉(zhuǎn)義字符13(2)字符型變量字符型變量的長(zhǎng)度為一個(gè)字節(jié)(即8位),而8051單片機(jī)每次可以處理8位數(shù)據(jù),因此字符型變量非常適合于8051單片機(jī)。字符型變量分為無(wú)符號(hào)和有符號(hào)兩種。如果沒(méi)有顯式地指明是無(wú)符號(hào)還是有符號(hào),則默認(rèn)為有符號(hào)字符型變量。(2)字符型變量字符型變量的長(zhǎng)度為一個(gè)字節(jié)(即8位),而8014(2)字符型變量對(duì)字符型變量賦值有兩種方法:既可以將用單引號(hào)括起來(lái)的一個(gè)字符賦給字符型變量,也可以將一個(gè)在其取值范圍內(nèi)的正整數(shù)賦給字符型變量。對(duì)于有符號(hào)的變量,最具有重要意義的是其最高位((8位中最左一位)。在此位上,1代表“負(fù)”,0代表“正”,剩余的低7位代表變量的絕對(duì)值,因此有符號(hào)字符型變量所能表示的數(shù)值范圍是從-128~十127。而無(wú)符號(hào)的變量的最高位不作為符號(hào)位,這與人們的習(xí)慣比較一致,不易出錯(cuò)。(2)字符型變量對(duì)字符型變量賦值有兩種方法:既可以將用單引號(hào)15(3)字符串常量字符串常量是用一對(duì)雙引號(hào)括起來(lái)的字符序列不要把字符常量與字符串常量混淆。這是因?yàn)樵贑51中,系統(tǒng)在每一個(gè)字符串的結(jié)尾加一個(gè)被稱為“字符串結(jié)束標(biāo)志”字符’\0’以判斷字符串是否結(jié)束。因此“A”表示一個(gè)字符串,它包含了’A'和’\0’兩個(gè)字節(jié),因此,無(wú)法存儲(chǔ)到只有一個(gè)字節(jié)的存儲(chǔ)空間的字符型變量中。同樣地,"China"占用了6個(gè)字節(jié)而不是5個(gè)字節(jié)。注意:‘\0’是系統(tǒng)自動(dòng)加上的,在寫字符串時(shí)不必加‘\0’。(3)字符串常量字符串常量是用一對(duì)雙引號(hào)括起來(lái)的字符序列162.整型(int)(1)整型常量整型常量按進(jìn)制有以下3種表示形式:1)十進(jìn)制整數(shù):如134、5、-5、0等。2)八進(jìn)制整數(shù):以0開頭的數(shù),例如034表示八進(jìn)制數(shù)(34)8,等于十進(jìn)數(shù)28。3)十六進(jìn)制數(shù):以0x或0X開頭的數(shù)是十六進(jìn)制數(shù),例如0x3a代表十六進(jìn)制數(shù)(3a)16,等于十進(jìn)制數(shù)58;-0x56代表十六進(jìn)制數(shù)(56)16,等于十進(jìn)制-88。2.整型(int)(1)整型常量17(2)整型變量1)基本型:以int表示,長(zhǎng)度為兩個(gè)字節(jié)。2)短整型:以shortint表示,長(zhǎng)度為兩個(gè)字節(jié)。3)長(zhǎng)整型:以longint表示,長(zhǎng)度為四個(gè)字節(jié)。以u(píng)nsigned表示,這種類型與前3種類型匹配而構(gòu)成無(wú)符號(hào)整型、無(wú)符號(hào)短整型和無(wú)符號(hào)長(zhǎng)整型。注意:int,shortint,longint的缺省類型為有符號(hào)型。(2)整型變量1)基本型:以int表示,長(zhǎng)度為兩個(gè)字節(jié)。18(2)整型變量說(shuō)明整型變量的一般形式為:類型說(shuō)明符變量名[,變量名,…];同類型的整型變量之間和不同類型的整型變量之間都可以進(jìn)行算術(shù)運(yùn)算。整型變量和字符型變量之間也可以進(jìn)行算術(shù)運(yùn)算。(2)整型變量說(shuō)明整型變量的一般形式為:193.浮點(diǎn)型(float)(1)浮點(diǎn)型常量浮點(diǎn)常量只有十進(jìn)制這一種進(jìn)制,并且都被默認(rèn)為double型。對(duì)于絕對(duì)值小于1的浮點(diǎn)數(shù)可省略小數(shù)點(diǎn)前面的零,如.654就是0.654的縮略形式。科學(xué)計(jì)數(shù)法:-3.3E9由尾數(shù)和階兩部分構(gòu)成的,-3.3E9表示:-3.3×109。3.浮點(diǎn)型(float)(1)浮點(diǎn)型常量203.浮點(diǎn)型(float)(2)浮點(diǎn)型變量浮點(diǎn)型變量分為單精度型(float)和雙精度型(double),長(zhǎng)度都是4個(gè)字節(jié)浮點(diǎn)型變量定義方法:

floata;doubleb;3.浮點(diǎn)型(float)(2)浮點(diǎn)型變量214.指針型指針型是一種特殊的數(shù)據(jù)類型,其本身就是一個(gè)變量,但在其中存放的是另一個(gè)數(shù)據(jù)的地址。在C51中,指針的長(zhǎng)度一般是3個(gè)字節(jié)。根據(jù)所指向的變量類型的不同指針變量也有不同的類型,指針變量的類型也就表示了該指針指向的地址中的數(shù)據(jù)的類型。4.指針型指針型是一種特殊的數(shù)據(jù)類型,其本身就是一個(gè)變量224.指針型指針類型的表示方法是在指針?lè)?hào)“*”前面冠以數(shù)據(jù)類型符號(hào)例如:char*pa;//定義pa為字符型指針unsignedint*pb;//定義pb為無(wú)符號(hào)整形指針float*pf;//定義pf為浮點(diǎn)型指針4.指針型指針類型的表示方法是在指針?lè)?hào)“*”前面冠以數(shù)235.位變量(bit)位變量的長(zhǎng)度是1位(bit),位變量和前面介紹的字符型變量是可以直接被8051單片機(jī)處理的。位變量的值可以取0(false)或1(true)。對(duì)位變量進(jìn)行定義的語(yǔ)法如下:bitflag1;bitsend_en=1;注意:不能定義一個(gè)位變量指針,如不能定義bit*flagl;也不能定義一個(gè)位變量數(shù)組,如不能定義bitflags[3]。5.位變量(bit)位變量的長(zhǎng)度是1位(bit),位變量245.位變量(bit)與8051單片機(jī)硬件特性操作有關(guān)的位變量必須定位在8051單片機(jī)片內(nèi)RAM的可位尋址空間中,也就是字節(jié)地址為20H-2FH的16個(gè)節(jié)單元。5.位變量(bit)與8051單片機(jī)硬件特性操作有關(guān)的位252FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07MSB位地址LSB7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800單元地址2FH7FMSB266.特殊功能寄存器(sfr)

定義:?jiǎn)纹瑱C(jī)內(nèi)的各種控制寄存器、狀態(tài)寄存器以及I/O端口鎖存器、定時(shí)器、串行端口數(shù)據(jù)緩沖器是內(nèi)部數(shù)據(jù)存儲(chǔ)器的一部分,離散地分布在80H~FFH的地址空間范圍內(nèi),這些寄存器統(tǒng)稱特殊功能寄存器(SFR,SpecialFunctionRegisters)。數(shù)據(jù)存儲(chǔ)器00HFFH7FH80H(高128B)(低128B)內(nèi)部RAM特殊功能

寄存器(2)說(shuō)明:51子系列離散分布有21個(gè)特殊功能寄存器SFR、52子系列為26個(gè)。凡地址能被8整除的寄存器(共11個(gè))都是可位尋址的寄存器。6.特殊功能寄存器(sfr)定義:?jiǎn)纹瑱C(jī)內(nèi)的各種控制寄2799HSBUFA0HA0HA1HA2HA3HA4HA5HA6HA7HP2EX0ET0EX1ET1ES--EAA8HA8HA9HAAHABHACHADHAEHAFHIEB0HB0HB1HB2HB3HB4HB5HB6HB7HP3PX0PT0PX1PT1PS---B8HB8HB9HBAHBBHBCHBDHBEHBFHIPP-OVRS0RS1F0ACCyD0HD0HD1HD2HD3HD4HD5HD6HD7HPSWE0HE0HE1HE2HE3HE4HE5HE6HE7HACCF0HF0HF1HF2HF3HF4HF5HF6HF7HB地址位地址/位定義SFR助記符99HSBUFA0HA0HA1HA2HA3HA4HA5HA6289FH9EH9DH9CH9BH9AH99H98HSCONSM0SM1SM2RENTB8RB8TIRI98H

97

96

95

94

93

92

91

90

P1

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

90H

TH1

8DH

TH0

8CH

TL1

8BH

TL0

8AH

TMODGATE

C/T

M1

M0

GATE

C/T

M1

M0

89H

8F

8E

8D

8C

8B

8A

89

88

TCON

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

88HPCON

SMOD

///GF1

GF0

PD

IDL

87H

DPH

83H

DPL

82HSP

81H

87

86

85

84

83

82

81

80

P0P0.7

P0.6

P0.5

P0.4

P0.3

P0.2

P0.1

P0.0

80H

9FH9EH9DH9CH9BH9AH99H98HS29特殊功能寄存器變量定義方法sfr類型的長(zhǎng)度為一個(gè)字節(jié),其定義方式如下:sfr特殊功能寄存器名=地址常量;說(shuō)明“地址常量”就是所定義的特殊功能寄存器的地址,例如:sfrP1=0x90;sfrSCON=0x98;注意:在關(guān)鍵字sfr后面必須是一個(gè)名字,名字可以任意選取,但應(yīng)符合一般的習(xí)慣。等號(hào)后面必須是常數(shù),不允許有帶運(yùn)算符的表達(dá)式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80H~0FFH)在頭文件reg51.h中對(duì)所有的特殊功能寄存器都進(jìn)行了定義。特殊功能寄存器變量定義方法sfr類型的長(zhǎng)度為一個(gè)字節(jié),其定義307.16位特殊功能寄存器(sfr16)在新一代的8051單片機(jī)中,特殊功能寄存器在功能上經(jīng)常組合成16位來(lái)使用。為了有效地訪問(wèn)這種16位的特殊功能寄存器,可采用關(guān)鍵字sfrl6。sfrl6類型的長(zhǎng)度為兩個(gè)字節(jié),其定義語(yǔ)法與8位SFR相同,但16位SFR的低端地址必須作為sfr16的定義地址。例如sfr16T2=0CCH;//定義TIMER2,其地址為T2L=0CCH、T2H=0CDH注意:這種定義方法適用于所有新一代的8051單片機(jī)中新增加的特殊功能寄存器,但不能用于定時(shí)器/計(jì)數(shù)器TIMER0和TIMER1的定義。7.16位特殊功能寄存器(sfr16)在新一代的8051318.可尋址位(sbit)(1)sbit位變量名=位地址這種方法將位的絕對(duì)地址賦給位變量,位地址必須位于80H~0FFH之間。(2)sbit位變量名=特殊功能寄存器名^位位置當(dāng)可尋址位位于特殊功能寄存器種時(shí)可采用這種方法,“位位置”是一個(gè)0~7之間的常數(shù)。(3)sbit位變量名=字節(jié)地址^位位置這種方法以一個(gè)常數(shù)(字節(jié)地址)作為基礎(chǔ),該常數(shù)必須在80H~0FH之間。“位位置”是一個(gè)0-7之間的常數(shù)。sbit是一個(gè)獨(dú)立的關(guān)鍵字,不要與關(guān)鍵字bit相混淆。8.可尋址位(sbit)(1)sbit位變量名=位地址s322.1.3C51的運(yùn)算量1、常量程序運(yùn)行期間其值不能被改變的量,即常數(shù)。數(shù)值型常量:3、3.5、-9字符常量:’a’、’\n’字符串常量:”InputInformation--1”2.1.3C51的運(yùn)算量1、常量332.1.3C51的運(yùn)算量2、變量程序運(yùn)行過(guò)程中其值可以改變的量。變量名:標(biāo)識(shí)符x變量值:變量存儲(chǔ)單元中的數(shù)據(jù)8變量類型:值的大小由其類型來(lái)決定變量要“先定義、后使用”8x

2.1.3C51的運(yùn)算量2、變量8x342.1.3C51的運(yùn)算量變量的定義變量的名字變量的數(shù)據(jù)類型系統(tǒng)根據(jù)數(shù)據(jù)類型為變量分配內(nèi)存空間變量的取值范圍變量可以進(jìn)行的操作2.1.3C51的運(yùn)算量變量的定義35[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)器類型]變量名表;完整的變量定義格式:完整的變量定義格式:36(1)存儲(chǔ)種類1)自動(dòng)變量函數(shù)體內(nèi)部或者復(fù)合語(yǔ)句中定義的變量,如果省略存儲(chǔ)種類說(shuō)明或者在變量名前面加上存儲(chǔ)種類說(shuō)明符“auto”,即可將該變量定義為自動(dòng)變量。通常采用缺省形式,即省略存儲(chǔ)種類說(shuō)明。自動(dòng)變量的作用域在定義其的函數(shù)體或復(fù)合語(yǔ)句內(nèi)部。自動(dòng)變量始終是相對(duì)于函數(shù)或復(fù)合語(yǔ)句的局部變量。(1)存儲(chǔ)種類1)自動(dòng)變量37(1)存儲(chǔ)種類2)外部變量在所有函數(shù)外部定義的變量或者使用存儲(chǔ)種類說(shuō)明符

“extern”定義的變量稱為外部變量,一個(gè)外部變量被定義后,就被分配了固定的內(nèi)存空間,并且可以被一個(gè)程序中的所有函數(shù)使用外部變量屬于全局變量,其作用域是整個(gè)程序,在程序的任何地方均可以對(duì)這種變量進(jìn)行訪問(wèn)如果外部變量與自動(dòng)變量有同名變量,則只有自動(dòng)變量起作用。(1)存儲(chǔ)種類2)外部變量38(1)存儲(chǔ)種類3)靜態(tài)變量靜態(tài)變量的定義方法是在類型定義語(yǔ)句之前加關(guān)鍵字static。內(nèi)部靜態(tài)變量是在函數(shù)內(nèi)部定義的,與自動(dòng)變量相比,其作用域同樣限于定義內(nèi)部靜態(tài)變量的函數(shù)內(nèi)部,但內(nèi)部靜態(tài)變量始終都是存在的,其初值只是在進(jìn)入時(shí)賦值一次,退出函數(shù)之后變量的值仍然保存但不能訪問(wèn)。外部靜態(tài)變量是在函數(shù)外部被定義的,與外部變量相比,其作用域同樣是從定義點(diǎn)開始,一直到程序結(jié)束,但外部靜態(tài)變量只能在被定義的模塊文件中訪問(wèn),其數(shù)據(jù)值可以為該文件內(nèi)所有的函數(shù)所共享,退出該文件后,雖然變量的值仍然保存著,但不能被其他模塊文件訪問(wèn)。(1)存儲(chǔ)種類3)靜態(tài)變量39內(nèi)部靜態(tài)變量的用法示例#include<reg51.h>#include<stdio.h>voidmain(){chari;SCON=0x52;TMOD=0x20;TH1=0XE8;TR1=1;for(i=1;i<=3;i++){staticints_int=1;inta_int=1;printf("\n");printf("s_int=%d",s_int);printf("s_int=%d",a_int);s_int=s_int+1;a_int=a_int+1;}while(1){}}內(nèi)部靜態(tài)變量的用法示例#include<reg51.h>fo40(1)存儲(chǔ)種類(4)寄存器變量定義一個(gè)變量時(shí)在變量名前加上存儲(chǔ)種類符號(hào)“register”即可將該變量定義為寄存器變量,例如:registerinti;registerunsignedcharch1,ch2;使用寄存器變量的目的在于將一些使用頻率最高的變量定義為能夠直接使用硬件寄存器。寄存器變量可以認(rèn)為是自動(dòng)變量的一種,其作用域與自動(dòng)變量相同。將變量定義為寄存器變量只是給編譯器一個(gè)建議,該變量能否真正成為寄存器變量還有由編譯器根據(jù)實(shí)際情況決定;另一方面,編譯器可以自行識(shí)別使用頻率最高的變量,在可能的情況下,即使程序中并未將變量定義為寄存器變量,編譯器也會(huì)自動(dòng)將其作為寄存器變量處理。目前已不推薦寄存器變量這種方式?。?)存儲(chǔ)種類(4)寄存器變量目前已不推薦寄存器變量這種方式41(2)存儲(chǔ)器類型存儲(chǔ)類型長(zhǎng)度值域范圍與物理存儲(chǔ)空間的對(duì)應(yīng)關(guān)系data80~127直接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)的低128字節(jié),訪問(wèn)速度快bdata10~1可位尋址片內(nèi)RAM0x20~0x2F空間(16字節(jié)),允許位與字節(jié)混合訪問(wèn)idata80~255間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)(256字節(jié)),可訪問(wèn)片內(nèi)全部RAM地址空間pdata80~255片外數(shù)據(jù)存儲(chǔ)區(qū)的開頭256字節(jié),通過(guò)P0端口的地址對(duì)其訪問(wèn)xdata160~65535片外數(shù)據(jù)存儲(chǔ)區(qū)(64KB),通過(guò)DPTR訪問(wèn)code160~65535程序存儲(chǔ)區(qū)全部空間(64KB),通過(guò)DPTR訪問(wèn)(2)存儲(chǔ)器類型存儲(chǔ)類型長(zhǎng)度值域與物理存儲(chǔ)空間的對(duì)應(yīng)關(guān)系d421)DATA區(qū)DATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為data,通常指低128字節(jié)的內(nèi)部存儲(chǔ)區(qū)存儲(chǔ)的變量,可直接尋址。DATA區(qū)是存放臨時(shí)性傳遞變量或使用頻率較高的變量的理想場(chǎng)所。聲明舉例如下:unsignedintdatasum;externchardatach1;1)DATA區(qū)DATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為data,通432)BDATA區(qū)BDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為bdata,指內(nèi)部可位尋址的16字節(jié)存儲(chǔ)區(qū)。BDATA區(qū)其實(shí)就是DATA區(qū)中的位尋址區(qū),在這個(gè)區(qū)聲明變量就可以進(jìn)行位尋址。在BDATA區(qū)聲明和使用位變量舉例:unsignedintbdatastatus;sbitstatus_1=status^1;注意:不允許在BDATA區(qū)聲明float和double型的變量。2)BDATA區(qū)BDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為bdat443)IDATA區(qū)8051系列的一些單片機(jī)如8052有附加的128字節(jié)的內(nèi)部RAM,位于從80H開始的128字節(jié)地址空間中,被稱為IDATA。因?yàn)镮DATA區(qū)的地址和SFR的地址重疊,所以通過(guò)尋址方式來(lái)區(qū)分二者,IDATA區(qū)只能通過(guò)間接尋址來(lái)訪問(wèn)。IDATA區(qū)也可存放使用比較頻繁的變量,使用寄存器作為指針進(jìn)行尋址。IDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為idata,聲明舉例如下:unsignedcharidatasum;intidatai;floatidataf_value;3)IDATA區(qū)8051系列的一些單片機(jī)如8052有附加的1454)PDATA區(qū)和XDATA區(qū)PDATA區(qū)和XDATA區(qū)屬于片外數(shù)據(jù)存儲(chǔ)空間。外部存儲(chǔ)空間是可以讀寫的存儲(chǔ)區(qū),最多可以有64KB。PDATA區(qū)和XDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符分別為pdata和xdata,xdata存儲(chǔ)類型標(biāo)識(shí)符可以指定片外數(shù)據(jù)區(qū)64KB空間內(nèi)的任何地址,而pdata存儲(chǔ)類型標(biāo)識(shí)符僅能指定256字節(jié)的片外數(shù)據(jù)區(qū)。聲明舉例如下:unsignedcharxdatasum;intpdatai;floatpdataf-value;4)PDATA區(qū)和XDATA區(qū)PDATA區(qū)和XDATA區(qū)屬于465)CODE區(qū)CODE區(qū)也稱代碼段,是只讀的,用來(lái)存放可執(zhí)行代碼,16位尋址空間可達(dá)64KB。除了可執(zhí)行代碼,還可在CODE區(qū)中存放其他非易失信息,例如查詢表。CODE區(qū)中對(duì)象要在編譯的時(shí)候進(jìn)行初始化,否則就會(huì)產(chǎn)生錯(cuò)誤。CODE區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符分別為code。5)CODE區(qū)CODE區(qū)也稱代碼段,是只讀的,用來(lái)存放可執(zhí)行47(3)存儲(chǔ)模式存儲(chǔ)模式?jīng)Q定了默認(rèn)的存儲(chǔ)器類型,此存儲(chǔ)器類型將應(yīng)用于函數(shù)參數(shù)、局部變量和定義時(shí)沒(méi)有顯式地包含存儲(chǔ)類型的變量。在命令行中使用SMALL、COMPACT、LARGE控制命令指定存儲(chǔ)器類型。定義變量時(shí),使用存儲(chǔ)器類型顯式定義將屏蔽由存儲(chǔ)模式?jīng)Q定的默認(rèn)存儲(chǔ)器類。(3)存儲(chǔ)模式存儲(chǔ)模式?jīng)Q定了默認(rèn)的存儲(chǔ)器類型,此存儲(chǔ)器類型將481)?。⊿MALL)模式在該模式下所有變量都默認(rèn)位于片內(nèi)數(shù)據(jù)存儲(chǔ)器和使用data指定存儲(chǔ)器類型的作用一樣。對(duì)變量訪問(wèn)的效率很高,但所有的數(shù)據(jù)對(duì)象和堆棧的總大小不能超過(guò)內(nèi)部RAM的大小。當(dāng)連接器/定位器將變量都配置在片內(nèi)數(shù)據(jù)存儲(chǔ)器時(shí),SMALL模式是最佳選擇。1)?。⊿MALL)模式在該模式下所有變量都默認(rèn)位于片內(nèi)數(shù)據(jù)492)緊湊(COMPACT)模式在該模式下所有變量都默認(rèn)位于片外數(shù)據(jù)存儲(chǔ)器的一頁(yè)(256字節(jié))內(nèi),但堆棧位于片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)中和使用pdata指定存儲(chǔ)器類型的作用一樣,該存儲(chǔ)模式適用于變量不超過(guò)256字節(jié)的情況。地址的高字節(jié)往往通過(guò)端口P2輸出,其值必須在啟動(dòng)代碼中設(shè)置。這種模式不如SMALL模式高效,對(duì)變量訪問(wèn)的速度要慢一些。2)緊湊(COMPACT)模式在該模式下所有變量都默認(rèn)位于片503)大(LARGE)模式在該模式下所有變量都默認(rèn)位于片外數(shù)據(jù)存儲(chǔ)器內(nèi)和使用xdata指定存儲(chǔ)器類型的作用一樣。使用數(shù)據(jù)指針DPTR進(jìn)行尋址,通過(guò)DPTR訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器的效率較低,特別是當(dāng)變量為兩個(gè)字節(jié)或更多字節(jié)時(shí),該模式的數(shù)據(jù)訪問(wèn)要比前兩種模式產(chǎn)生更多代碼。3)大(LARGE)模式在該模式下所有變量都默認(rèn)位于片外數(shù)據(jù)512.1.5C51運(yùn)算符和表達(dá)式1.算術(shù)運(yùn)算符和算術(shù)表達(dá)式十:加法運(yùn)算符或取正值運(yùn)算符。一:減法運(yùn)算符或取負(fù)值運(yùn)算符。*:乘法運(yùn)算符。/:除法運(yùn)算符。%:模(取余)運(yùn)算符。2.1.5C51運(yùn)算符和表達(dá)式1.算術(shù)運(yùn)算符和算術(shù)表達(dá)式522.賦值運(yùn)算符和賦值表達(dá)式功能是將數(shù)據(jù)賦給變量。用賦值運(yùn)算符將一個(gè)變量與一個(gè)表達(dá)式連接起來(lái)的式子為賦值表達(dá)式。其一般形式為:變量=表達(dá)式如果賦值號(hào)兩側(cè)的類型不一致,系統(tǒng)會(huì)自動(dòng)將右側(cè)表達(dá)式求得的數(shù)據(jù)按賦值號(hào)左邊的變量類型進(jìn)行轉(zhuǎn)換。2.賦值運(yùn)算符和賦值表達(dá)式功能是將數(shù)據(jù)賦給變量。用賦值運(yùn)533.增量、減量運(yùn)算3.增量、減量運(yùn)算544.關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算實(shí)際上就是“比較運(yùn)算”,將兩個(gè)表達(dá)式進(jìn)行比較以判斷是否和給定的條件相符。關(guān)系運(yùn)算符包括:“<”(小于)、“<=”(小于等于)、“>”(大于)、“>=”(大于等于)、“(等于)、“!=”(不等于)。關(guān)系表達(dá)式的結(jié)果只有兩種:1(true)或0(false)。4.關(guān)系運(yùn)算符與關(guān)系表達(dá)式關(guān)系運(yùn)算實(shí)際上就是“比較運(yùn)算”555.邏輯運(yùn)算符與邏輯表達(dá)式5.邏輯運(yùn)算符與邏輯表達(dá)式56

邏輯“與”和邏輯“或”的真值表邏輯“與”和邏輯“或”的真值表57注意:如果使用“&&”來(lái)連接兩個(gè)表達(dá)式,若第一個(gè)表達(dá)式的值為假,則不再求解第二個(gè)表達(dá)式,因?yàn)槭褂谩埃ΓΑ边B接的兩個(gè)表達(dá)式都為真時(shí),整個(gè)邏輯表達(dá)式的值才為真,所以若第一個(gè)表達(dá)式的值為假就沒(méi)有必要再求解第二個(gè)表達(dá)式。同理,如果使用“||”來(lái)連接兩個(gè)表達(dá)式,若第一個(gè)表達(dá)式的值為真,則不再求解第二個(gè)表達(dá)式,因?yàn)槭褂谩皘|”連接的兩個(gè)表達(dá)式都為假時(shí),整個(gè)邏輯表達(dá)式的值才為假,所以若第一個(gè)表達(dá)式的值為真就沒(méi)有必要再求解第二個(gè)表達(dá)式。注意:如果使用“&&”來(lái)連接兩個(gè)表達(dá)式,若第一個(gè)表達(dá)586.位運(yùn)算符與位運(yùn)算表達(dá)式6.位運(yùn)算符與位運(yùn)算表達(dá)式59(1)按位與運(yùn)算符“&”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位都是1,則結(jié)果值中的該位為1,否則為0。1)清除一個(gè)數(shù)中的某些特定位。2)取出一個(gè)數(shù)中的某些特定位。(1)按位與運(yùn)算符“&”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的60(2)按位或運(yùn)算符“|”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位至少有一個(gè)是1,則結(jié)果值中的該位為1,否則為0。按位或運(yùn)算常用來(lái)對(duì)一個(gè)數(shù)據(jù)的某些特定位置1。(2)按位或運(yùn)算符“|”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的61(3)按位異或運(yùn)算符“^”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位相同,即均為1或均為0,則結(jié)果值中的i位為0,否則為1。按位異或運(yùn)算常用來(lái)對(duì)一個(gè)數(shù)據(jù)的某些特定位進(jìn)行翻轉(zhuǎn)。(3)按位異或運(yùn)算符“^”參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)62(4)按位取反運(yùn)算符“~”“~”是一個(gè)單目運(yùn)算符,用來(lái)對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即將0變1,1變0。(4)按位取反運(yùn)算符“~”“~”是一個(gè)單目運(yùn)算符,用來(lái)對(duì)一個(gè)63(5)右移運(yùn)算符“>>”右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,移到右端的低位被舍棄。對(duì)無(wú)符號(hào)數(shù)或者有符號(hào)數(shù)中的正數(shù),左邊高位移入0;對(duì)有符號(hào)數(shù)中的負(fù)數(shù),左邊高端移入1。右移1位相當(dāng)于除以2,右移n位相當(dāng)于除以2n,因此a>>2相當(dāng)于a/4。(5)右移運(yùn)算符“>>”右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全64(6)左移運(yùn)算符“<<”右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部左移若干位,移到左端的高位被舍棄,右邊的低位補(bǔ)0。左移1位相當(dāng)于乘以2,左移n位相當(dāng)于乘以除以2n。(6)左移運(yùn)算符“<<”右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全657.復(fù)合賦值運(yùn)算符凡是二目運(yùn)算符都可以和賦值運(yùn)算符結(jié)合組成復(fù)合賦值運(yùn)算符。C語(yǔ)言規(guī)定可以使用以下10種復(fù)合賦值表達(dá)式:+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=復(fù)合賦值表達(dá)式的一般形式為:變量復(fù)合賦值運(yùn)算符表達(dá)式7.復(fù)合賦值運(yùn)算符凡是二目運(yùn)算符都可以和賦值運(yùn)算符結(jié)合組成復(fù)668.逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式C51提供了一種特殊運(yùn)算符—逗號(hào)運(yùn)算符,用逗號(hào)運(yùn)算符可以把兩個(gè)或多個(gè)表達(dá)式連接起來(lái),形成逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式式2,……、表達(dá)式n逗號(hào)表達(dá)式的求解過(guò)程是從左到右依次計(jì)算出每個(gè)表達(dá)式的值,整個(gè)逗號(hào)表達(dá)式的值等于最右邊的表達(dá)式(表達(dá)式n)的值。并非程序中任何地方出現(xiàn)的逗號(hào)都是逗號(hào)運(yùn)算符,例如在變量定義或函數(shù)參數(shù)表中,逗號(hào)就不是逗號(hào)運(yùn)算符,而是用作各變量之間的間隔符。8.逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式C51提供了一種特殊運(yùn)算符—逗號(hào)運(yùn)679.條件運(yùn)算符與條件表達(dá)式條件運(yùn)算符“?:”是惟一的一個(gè)三目運(yùn)算符,條件表達(dá)式的一般形式為:邏輯表達(dá)式?表達(dá)式1:表達(dá)式2條件表達(dá)式的求解過(guò)程是首先計(jì)算邏輯表達(dá)式的值,如果為1(true),則整個(gè)表達(dá)式值為表達(dá)式1的值,否則為表達(dá)式2的值。9.條件運(yùn)算符與條件表達(dá)式條件運(yùn)算符“?:”是惟一的一個(gè)6810.指針與地址運(yùn)算符C51提供了“*”與“&”兩個(gè)單目運(yùn)算符,前者的作用是返回一個(gè)地址內(nèi)的變量值,取內(nèi)容;后者的作用是返回操作數(shù)的地址,即取地址。這兩種運(yùn)算的一般形式分別為:變量=*指針變量;指針變量=&目標(biāo)變量;取內(nèi)容運(yùn)算是將指針變量所指向的目標(biāo)變量的值賦給左邊的變量;取地址運(yùn)算是將目標(biāo)變量的地址賦給左邊的變量。10.指針與地址運(yùn)算符C51提供了“*”與“&”兩個(gè)單目6911.C51運(yùn)算符的優(yōu)先級(jí)C51語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)。在對(duì)有多個(gè)運(yùn)算符參加運(yùn)算的表達(dá)式求值時(shí),按照運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行。11.C51運(yùn)算符的優(yōu)先級(jí)C51語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)7011.C51運(yùn)算符的優(yōu)先級(jí)11.C51運(yùn)算符的優(yōu)先級(jí)71課堂作業(yè)(分組完成)針對(duì)任務(wù)一中的電路圖,先使D1、D3、D5、D7亮,其他燈滅;再使右4燈維持原狀,而左4燈亮;再使D3~D6熄,其他燈維持原狀;再使右4燈狀態(tài)變反,其他不變;然后所有燈狀態(tài)變反;最后使所有燈的狀態(tài)向左流動(dòng)一次。課堂作業(yè)(分組完成)針對(duì)任務(wù)一中的電路圖,先使D1、D3、D722.2C51語(yǔ)句2.2.1C51語(yǔ)句概述一個(gè)完整的C51程序包括數(shù)據(jù)描述和數(shù)據(jù)操作。數(shù)據(jù)描述定義數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)初值,由數(shù)據(jù)定義部分來(lái)實(shí)現(xiàn);數(shù)據(jù)操作是對(duì)己提供的數(shù)據(jù)進(jìn)行加工,這部分的功能就是由語(yǔ)句來(lái)實(shí)現(xiàn)的。既包括與底層硬件無(wú)關(guān)的數(shù)據(jù)也包括如特殊功能寄存器(SFR)等與底層硬件狀態(tài)直接相關(guān)的數(shù)據(jù)。2.2C51語(yǔ)句2.2.1C51語(yǔ)句概述既包括與底層732.2.1簡(jiǎn)單語(yǔ)句與復(fù)合語(yǔ)句分號(hào)是語(yǔ)句的終結(jié)符,一個(gè)語(yǔ)句必須在最后出現(xiàn)分號(hào),分號(hào)是語(yǔ)句中不可缺少的一部分,在后面介紹空語(yǔ)句時(shí)會(huì)看到,甚至一個(gè)單獨(dú)的分號(hào)也可以構(gòu)成一個(gè)語(yǔ)句。C51的語(yǔ)句按其復(fù)雜度可以分為簡(jiǎn)單語(yǔ)句和復(fù)雜語(yǔ)句??梢杂没ɡㄌ?hào)“{”和“}”把一些語(yǔ)句組合在一起,使其在語(yǔ)法上等價(jià)于一個(gè)簡(jiǎn)單語(yǔ)句,這樣的語(yǔ)句就稱之為復(fù)合語(yǔ)句。復(fù)合語(yǔ)句中最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫;結(jié)束一個(gè)復(fù)合語(yǔ)句的右花括號(hào)之后不能帶分號(hào)。2.2.1簡(jiǎn)單語(yǔ)句與復(fù)合語(yǔ)句分號(hào)是語(yǔ)句的終結(jié)符,一個(gè)語(yǔ)句742.2.2分支控制語(yǔ)句1.if…else…語(yǔ)句

if(表達(dá)式){

分支一}else{

分支二}表達(dá)式分支1分支2TT2.2.2分支控制語(yǔ)句1.if…else…語(yǔ)句表達(dá)式分752.2.2分支控制語(yǔ)句2.if…語(yǔ)句

if(表達(dá)式){語(yǔ)句}既可以是簡(jiǎn)單語(yǔ)句也可以是復(fù)合語(yǔ)句if(表達(dá)式){語(yǔ)句}else{}2.2.2分支控制語(yǔ)句2.if…語(yǔ)句既可以是簡(jiǎn)單語(yǔ)句76P0口接8只發(fā)光二極管,P1.0接一個(gè)按鈕,要求將按鈕按下時(shí),左邊四個(gè)發(fā)光二極管亮,當(dāng)按鈕放開時(shí),右邊四個(gè)發(fā)光二極管亮。

實(shí)例2-3P0口接8只發(fā)光二極管,P1.0接一個(gè)按鈕,要求將按鈕按下時(shí)77實(shí)例2-3#include<reg51.h>sbitp10=P1^0;main(){while(1){if(p10==1)P0=0x0f;elseP0=0xf0;}}#include<reg51.h>sbitp10=P1^0;voidmain(){while(1){

if(p10==1)P0=0x0f;if(p10==0)P0=0xf0;

}}實(shí)例2-3#include<reg51.h>#include783.多級(jí)if…else…語(yǔ)句if(表達(dá)式1){

分支一}elseif(表達(dá)式2){

分支二}elseif(表達(dá)式3){

分支三}……else{

分支n}3.多級(jí)if…else…語(yǔ)句if(表達(dá)式1)elseif79多級(jí)if語(yǔ)句流程圖表達(dá)式1分支1表達(dá)式2分支2表達(dá)式3分支3分支n真假假真真…………假假多級(jí)if語(yǔ)句流程圖表達(dá)式1分支1表達(dá)式2分支2表達(dá)式3分支80實(shí)例2-4P0口接8只發(fā)光二極管,P1.0、P1.1分別接一個(gè)按鍵S1、S2,要求當(dāng)沒(méi)有鍵按下時(shí),8全滅,當(dāng)S1按鍵按下時(shí),左邊四個(gè)亮,當(dāng)S2按鍵按下時(shí),右邊四個(gè)亮,當(dāng)兩個(gè)按鍵按下時(shí),全亮。

實(shí)例2-4P0口接8只發(fā)光二極管,P1.0、P1.1分別接一81流程圖開始S1、S2同時(shí)按下P0←0(全亮)只S2按下P0←0x0f(右4亮)只S1按下P0←0xf0(左4亮)P0←0xff(全滅)結(jié)束TFFFTT流程圖開始S1、S2同時(shí)按下P0←0只S2按下P0←0x0f82源程序#include<reg51.h>sbitp10=P1^0;sbitp11=P1^1;voidmain(){while(1){if(p10==0&&p11==0)P0=0;elseif(p11==0)P0=0x0f;elseif(p10==0)P0=0xf0;elseP0=0xff;}}P0口接8只發(fā)光二極管,P1.0、P1.1分別接一個(gè)按鍵S1、S2,要求當(dāng)沒(méi)有鍵按下時(shí),8全滅,當(dāng)S1按鍵按下時(shí),左邊四個(gè)亮,當(dāng)S2按鍵按下時(shí),右邊四個(gè)亮,當(dāng)兩個(gè)按鍵按下時(shí),全亮。源程序#include<reg51.h>P0口接8只發(fā)光二極834.switch語(yǔ)句switch(整形或字符型變量){case變量可能值1:分支一;break;case變量可能值2:分支二;break;……case變量可能值n:分支n;break;default:分支n+1或空語(yǔ)句;}4.switch語(yǔ)句switch(整形或字符型變量)84switch語(yǔ)句流程圖變量分支1分支2分支n分支n+1值1……值2值n其他值switch語(yǔ)句流程圖變量分支1分支2分支n分支n+1值185【例2-5】P1.0~P1.3接4個(gè)按鍵,P1.4~P1.7接4個(gè)發(fā)光二極管,現(xiàn)要求一般情況下,4個(gè)發(fā)光二極管全亮,如果只按S1時(shí)D1滅,只按S2時(shí)D2滅,依此類推?!纠?-5】P1.0~P1.3接4個(gè)按鍵,P1.4~P1.786源程序清單:#include<reg51.h>voidmain(){unsignedcharctl;P1=0X0F;while(1){ctl=P1;}}ctl=ctl&0x0f;switch(ctl){case0x0e:P1=0x8f;break;case0x0d:P1=0x4f;break;case0x0b:P1=0x2f;break;case0x07:P1=0x1f;break;default:P1=0x0f;}源程序清單:#include<reg51.h>ctl872.2.3循環(huán)語(yǔ)句1.while語(yǔ)句while(表達(dá)式){循環(huán)體}事先測(cè)試循環(huán),在執(zhí)行語(yǔ)句之前判斷表達(dá)式,因此,循環(huán)可能沒(méi)有執(zhí)行循環(huán)體就退出。語(yǔ)句循環(huán)條件?FT2.2.3循環(huán)語(yǔ)句1.while語(yǔ)句事先測(cè)試循環(huán),在執(zhí)行88【例2-6】使用while語(yǔ)句實(shí)現(xiàn)從1到100的累加。#include<reg52.h>#include<stdio.h>voidmain(){unsignedinti=1;unsignedintsum=0;SCON=0x52;TMOD=0x20;TH1=0xE8;TR1=1;while(i<=100){sum+=1;i++;}printf(“sum=%d\n”,sum);while(1){}}【例2-6】使用while語(yǔ)句實(shí)現(xiàn)從1到100的累加。#in892.for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體}表達(dá)式1為循環(huán)控制變量初始化表達(dá)式,表達(dá)式2為循環(huán)條件表達(dá)式,表達(dá)式3為循環(huán)控制變量增值表達(dá)式?!霸鲋怠眱H僅是指循環(huán)控制變量發(fā)生了變化,不要按其字面意思去理解。表達(dá)式1表達(dá)式2循環(huán)體表達(dá)式3真假2.for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)表達(dá)式90for語(yǔ)句的幾點(diǎn)說(shuō)明①for語(yǔ)句中的控制變量初始化表達(dá)式可以省略,但分號(hào)(;)不可省略。②for語(yǔ)句中的循環(huán)條件表達(dá)式可以省略。此時(shí)一般要在循環(huán)體中對(duì)循環(huán)條件進(jìn)行判斷并提供退出循環(huán)的措施,否則會(huì)導(dǎo)致“死循環(huán)”。③for語(yǔ)句中的循環(huán)控制變量增值表達(dá)式也可以省略。④可以同時(shí)省略for語(yǔ)句中的循環(huán)控制變量初始化表達(dá)式和增量表達(dá)式,這樣的for語(yǔ)句完全等價(jià)于while語(yǔ)句。for語(yǔ)句的幾點(diǎn)說(shuō)明①for語(yǔ)句中的控制變量初始化表達(dá)式可以91實(shí)例:常見程序段:inti;for(i=0;i<30000;i++){}自行完成例2-6的功能。實(shí)例:常見程序段:923.do…while語(yǔ)句do{循環(huán)體}while(表達(dá)式);注意:在while(表達(dá)式)后面要加分號(hào)。語(yǔ)句繼續(xù)循環(huán)?FT3.do…while語(yǔ)句do注意:在while(表達(dá)式)934.嵌套的循環(huán)結(jié)構(gòu)實(shí)際應(yīng)用中,經(jīng)常要用到嵌套的循環(huán)結(jié)構(gòu)。在嵌套循環(huán)結(jié)構(gòu)中,內(nèi)層循環(huán)需要置于稱之為外層循環(huán)的另一個(gè)循環(huán)中。3種循環(huán)語(yǔ)句還可以互相嵌套。4.嵌套的循環(huán)結(jié)構(gòu)實(shí)際應(yīng)用中,經(jīng)常要用到嵌套的循環(huán)結(jié)構(gòu)。94【例2-9】P0.0接一個(gè)發(fā)光二極管,P1.0按一個(gè)按鍵,要求當(dāng)按鍵按下時(shí),發(fā)光二極管不停地閃爍,當(dāng)按鍵放開時(shí),停止閃爍?!纠?-9】P0.0接一個(gè)發(fā)光二極管,P1.0按一個(gè)按鍵,要95源程序清單:#include<reg51.h>sbitp10=P1^0;sbitp00=P0^0;voidmain(){while(1){while(p10==0)p00=~p00;

}}for(i=50000;i>0;i--);unsignedinti;源程序清單:#include<reg51.h>for(i=5962.2.4轉(zhuǎn)移語(yǔ)句1.break語(yǔ)句break;在switch語(yǔ)句中,break語(yǔ)句用來(lái)使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch之后的語(yǔ)句;在for語(yǔ)句中,break語(yǔ)句用來(lái)使流程跳出循環(huán)體,接著執(zhí)行循環(huán)后面的語(yǔ)句。2.2.4轉(zhuǎn)移語(yǔ)句1.break語(yǔ)句97【例2-10】#include<reg51.h>sbitP10=P1^0;sbitP00=P0^0;voidmain(){inti;while(1){P0=~P0;for(i=30000;i>0;i++);

if(P10==0)break;}while(1);}針對(duì)例2-9,若與P0.0相連的發(fā)光二極管不停地閃爍,當(dāng)與P1.0相連的按鍵按下時(shí)停止閃爍。【例2-10】#include<reg51.h>針對(duì)例2-982.2.4轉(zhuǎn)移語(yǔ)句2.continue語(yǔ)句continue;continue語(yǔ)句的作用是跳過(guò)本次循環(huán)中剩余的循環(huán)體語(yǔ)句,立即進(jìn)行下一次循環(huán)2.2.4轉(zhuǎn)移語(yǔ)句2.continue語(yǔ)句99【例2-11】針對(duì)例2-9,其功能改變?yōu)楫?dāng)與P1.0相連的K1按下時(shí),發(fā)光二極管暫停閃爍,K1放開時(shí),發(fā)光二極管繼續(xù)閃爍,試編寫程序?qū)崿F(xiàn)之。#include<reg51.h>sbitP10=P1^0;sbitP00=P0^0;voidmain(){inti;while(1){

if(P10==0)continue;P0=~P0;for(i=30000;i>0;i++);}}【例2-11】針對(duì)例2-9,其功能改變?yōu)楫?dāng)與P1.0相連的K1002.3C51函數(shù)與預(yù)編譯處理采用函數(shù)有以下優(yōu)點(diǎn):可以將不同的模塊分別進(jìn)行封裝,使程序的整體結(jié)構(gòu)清晰明了;可以增加程序的可重復(fù)使用性,減少重復(fù)勞動(dòng);對(duì)于經(jīng)常使用的程序段,使用函數(shù)可以顯著地縮減代碼的大小。2.3C51函數(shù)與預(yù)編譯處理采用函數(shù)有以下優(yōu)點(diǎn):101主函數(shù)與普通函數(shù)主函數(shù):每一個(gè)C51程序都必須至少有一個(gè)函數(shù),以main為名,稱為main函數(shù)或主函數(shù)。main函數(shù)是程序的入口,在程序運(yùn)行時(shí)從main函數(shù)開始執(zhí)行。普通函數(shù):main函數(shù)之外的函數(shù)可以統(tǒng)稱為普通函數(shù)。普通函數(shù)從用戶使用的角度劃分,可以分為標(biāo)準(zhǔn)函數(shù)(即庫(kù)函數(shù))和用戶自定義函數(shù)。函數(shù)定義的形式上劃分可以分為無(wú)參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。主函數(shù)與普通函數(shù)主函數(shù):每一個(gè)C51程序都必須至少有一個(gè)函數(shù)1022.3.1函數(shù)的定義函數(shù)定義的一般形式為有兩種:ANSIC標(biāo)準(zhǔn)形式:類型標(biāo)識(shí)符名函數(shù)名(數(shù)據(jù)類型名形式參數(shù)1,數(shù)據(jù)類型名形式參數(shù)2,……)

{函數(shù)體}老版C語(yǔ)言形式:類型標(biāo)識(shí)符名函數(shù)名(形式參數(shù)1,形式參數(shù)2,……)數(shù)據(jù)類型名形式參數(shù)1;……數(shù)據(jù)類型名形式參數(shù)n;{函數(shù)體}2.3.1函數(shù)的定義函數(shù)定義的一般形式為有兩種:1031.無(wú)參數(shù)函數(shù)類型標(biāo)識(shí)符名函數(shù)名(){函數(shù)體}無(wú)參數(shù)函數(shù)往往并不返回函數(shù)值,在這種情況下,“類型標(biāo)識(shí)符名’,使用“void”!1.無(wú)參數(shù)函數(shù)類型標(biāo)識(shí)符名函數(shù)名()無(wú)參數(shù)函數(shù)往往并不返104串行口初始化函數(shù)voidserial_initial(){SCON=0x52;//設(shè)置串行口控制寄存器SCONTMOD=0x20;//定時(shí)器1工作于方式2TH1=0xE8;//11.0592MHz,1200波特率TR1=1;//啟動(dòng)定時(shí)器1TI=1;}串行口初始化函數(shù)voidserial_initial()1052.有參數(shù)函數(shù)類型標(biāo)識(shí)符名函數(shù)名(數(shù)據(jù)類型名形式參數(shù)1,數(shù)據(jù)類型名形式參數(shù)2,……)

{函數(shù)體}2.有參數(shù)函數(shù)類型標(biāo)識(shí)符名函數(shù)名(數(shù)據(jù)類型名形式參數(shù)1063.空函數(shù)類型標(biāo)識(shí)符名函數(shù)名(){}在實(shí)際設(shè)計(jì)中,在開發(fā)的初級(jí)階段,程序的功能通常不是十分完善,這時(shí)就經(jīng)常會(huì)使用空函數(shù)首先搭出程序的框架,再在后續(xù)的工作中逐漸擴(kuò)充。但在最后定型的程序中一般是沒(méi)有空函數(shù)的。3.空函數(shù)類型標(biāo)識(shí)符名函數(shù)名()在實(shí)際設(shè)計(jì)中,在開發(fā)的初107提示:(1)在同一工程中,函數(shù)名必須惟一。(2)形式參數(shù)在同一個(gè)函數(shù)中必須惟一,但可以與其他函數(shù)中的變量同名。(3)不能在一個(gè)函數(shù)中再定義函數(shù)。(4)在定義函數(shù)時(shí)應(yīng)指明函數(shù)返回值的類型,如果沒(méi)有函數(shù)返回值,應(yīng)將設(shè)為void,若省略了函數(shù)返回值的類型,則默認(rèn)為int型。(5)函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的,若不需要返回函數(shù)值,可以不要return語(yǔ)句。(6)函數(shù)名后面的圓括號(hào)不可省略,在圓括號(hào)后面也不可加分號(hào)(;)。提示:(1)在同一工程中,函數(shù)名必須惟一。1082.3.2函數(shù)參數(shù)和返回值1.形式參數(shù)和實(shí)際參數(shù)在定義函數(shù)時(shí)函數(shù)名后面圓括號(hào)中的變量名稱稱為“形式參數(shù)”,簡(jiǎn)稱“形參”;在主調(diào)函數(shù)調(diào)用被調(diào)函數(shù)時(shí),函數(shù)名后面圓括號(hào)中的表達(dá)式稱為“實(shí)際參數(shù)”,簡(jiǎn)稱“實(shí)參”。2.3.2函數(shù)參數(shù)和返回值1.形式參數(shù)和實(shí)際參數(shù)109提示:(1)形式參數(shù)在函數(shù)定義的時(shí)候沒(méi)有分配存儲(chǔ)空間,只有在函數(shù)被調(diào)用時(shí)才分配存儲(chǔ)空間,并把實(shí)際參數(shù)的值復(fù)制到分配的存儲(chǔ)空間中。(2)形式參數(shù)和實(shí)際參數(shù)占據(jù)不同的地址,形式參數(shù)的變化不影響實(shí)際參數(shù)。(3)函數(shù)調(diào)用完畢后,形式參數(shù)的存儲(chǔ)空間立即釋放,但實(shí)際參數(shù)仍然存在并維持原值,能被其他函數(shù)繼續(xù)使用。(4)實(shí)際參數(shù)的個(gè)數(shù)與形式參數(shù)的個(gè)數(shù)必須一致,在數(shù)據(jù)類型上與形式參數(shù)一一對(duì)應(yīng)匹配。(5)實(shí)際參數(shù)可以是常量、變量或表達(dá)式,但形式參數(shù)只能是變量。提示:(1)形式參數(shù)在函數(shù)定義的時(shí)候沒(méi)有分配存儲(chǔ)空間,只1102.函數(shù)的返回值希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這個(gè)值就是函數(shù)的返回值。函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的。如果需要從被調(diào)用函數(shù)中返回一個(gè)函數(shù)值,被調(diào)函數(shù)中必須包含return語(yǔ)句。返回值的類型必須與函數(shù)頭中的類型標(biāo)識(shí)符名-致,否則以函數(shù)頭中的類型為準(zhǔn),由系統(tǒng)自動(dòng)轉(zhuǎn)換。為了明確表示“不帶回值”,可以用“void”定義“無(wú)類型”(或稱“空類型”)。2.函數(shù)的返回值希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確1112.3.3函數(shù)的原型聲明C51語(yǔ)言中,主函數(shù)與其他函數(shù)是平行的,相對(duì)于在同一個(gè)源程序文件中的main()函數(shù),其他函數(shù)可以在main()函數(shù)之前定義。缺點(diǎn):所有的函數(shù)都位于main()函數(shù)之前,使得整個(gè)源程序文件顯得龐雜混亂。原型聲明:所有的函數(shù)的定義都放在main()函數(shù)之后,但要在main()函數(shù)之前對(duì)其進(jìn)行原型聲明。2.3.3函數(shù)的原型聲明C51語(yǔ)言中,主函數(shù)與其他函數(shù)是112函數(shù)原型聲明的格式類型標(biāo)識(shí)符函數(shù)名(數(shù)據(jù)類型名<形式參數(shù)1>;數(shù)據(jù)類型名<形式參數(shù)2>,…);尖括號(hào)<>中的內(nèi)容可選,也就是可以只列出各個(gè)形式參數(shù)的數(shù)據(jù)類型名而不必列出形式參數(shù)的名稱。函數(shù)原型聲明的格式類型標(biāo)識(shí)符函數(shù)名(數(shù)據(jù)類型名<形式113注意函數(shù)原型聲明與函數(shù)的定義是完全不同的,函數(shù)的定義是對(duì)函數(shù)功能的確立,是一個(gè)完整的函數(shù)單位。函數(shù)原型聲明中的類型標(biāo)識(shí)符名、函數(shù)名、形式參數(shù)的數(shù)據(jù)類型名都要和函數(shù)定義中一致,并且在圓括號(hào)后面必須加分號(hào)(;)。注意函數(shù)原型聲明與函數(shù)的定義是完全不同的,函數(shù)的定義1142.3.4函數(shù)的調(diào)用1.函數(shù)調(diào)用的一般形式

函數(shù)名(實(shí)際參數(shù)列表);如果被調(diào)函數(shù)是無(wú)參數(shù)函數(shù),則實(shí)際參數(shù)列表為空,但函數(shù)名后面的圓括號(hào)不能省略。如果實(shí)際參數(shù)列表包括多個(gè)實(shí)際參數(shù),則各參數(shù)之間用逗號(hào)隔開,實(shí)際參數(shù)與形式參數(shù)的個(gè)數(shù)應(yīng)該相等,類型應(yīng)該一致,實(shí)際參數(shù)與形式參數(shù)按順序?qū)?yīng),一一傳遞數(shù)據(jù)。2.3.4函數(shù)的調(diào)用1.函數(shù)調(diào)用的一般形式1152.函數(shù)調(diào)用的方式(1)函數(shù)語(yǔ)句:把函數(shù)調(diào)用作為一個(gè)語(yǔ)句。此時(shí)不要求被調(diào)函數(shù)返回函數(shù)值,只是完成一定的操作。(2)函數(shù)表達(dá)式:函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式,這時(shí)要求函數(shù)帶回一個(gè)確定的值來(lái)參與運(yùn)算。(3)函數(shù)參數(shù):在主調(diào)函數(shù)中將函數(shù)調(diào)用作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)。這種在一個(gè)函數(shù)的過(guò)程中又調(diào)用了另外一個(gè)函數(shù)的方式,稱為嵌套函數(shù)調(diào)用。2.函數(shù)調(diào)用的方式(1)函數(shù)語(yǔ)句:把函數(shù)調(diào)用作為一個(gè)語(yǔ)句。1162.3.5內(nèi)部函數(shù)與外部函數(shù)1.內(nèi)部函數(shù)內(nèi)部函數(shù)只能被本文件中其他函數(shù)所調(diào)用。static類型標(biāo)識(shí)符名函數(shù)名(數(shù)據(jù)類型名形式參數(shù)1,數(shù)據(jù)類型名形式參數(shù)2,…){函數(shù)體}內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。使用內(nèi)部函數(shù)可以使函數(shù)只局限于所在文件,即使不同的文件中有相同函數(shù)名的函數(shù)也不會(huì)相互干擾。通常把只由同一文件使用的函數(shù)和外部變量放在一個(gè)文件中,用static加以說(shuō)明使之局部化,限制其他文件對(duì)其引用。2.3.5內(nèi)部函數(shù)與外部函數(shù)1.內(nèi)部函數(shù)內(nèi)部函數(shù)只能1172.外部函數(shù)外部函數(shù)的定義方法是在函數(shù)的類型標(biāo)識(shí)符名前加extern,即:extern類型標(biāo)識(shí)符名函數(shù)名(數(shù)據(jù)類型名形式參數(shù)1,數(shù)據(jù)類型名形式參數(shù)2,…){函數(shù)體}如果在定義函數(shù)時(shí)省略extern,則默認(rèn)為外部函數(shù)。在需要調(diào)用此函數(shù)的文件中對(duì)此函數(shù)進(jìn)行原型聲明時(shí)一般也要用extern來(lái)說(shuō)明所用的函數(shù)是外部函數(shù)。2.外部函數(shù)外部函數(shù)的定義方法是在函數(shù)的類型標(biāo)識(shí)符名前加ex1182.3.6預(yù)處理命令在源程序中這些命令都放在函數(shù)之外,并且一般都放在源文件的前面。在編譯系統(tǒng)對(duì)程序進(jìn)行通常的編譯(包括詞法分析、語(yǔ)法分析、代碼生成、代碼優(yōu)化等)之前,先對(duì)程序中這些特殊的命令進(jìn)行預(yù)處理,然后將預(yù)處理的結(jié)果和源程序一起再進(jìn)行通常的編譯處理,以得到目標(biāo)代碼。這些特殊的命令就是預(yù)處理命令。(1)宏定義;(2)文件包含;(3)條件編譯。2.3.6預(yù)處理命令在源程序中這些命令都放在函數(shù)之外,并1191.宏定義宏定義命令為#define,其作用是用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,稱為宏。被定義為宏的標(biāo)識(shí)符稱為宏名,而被代替的字符串既可以是常數(shù),也可以是其他任何字符串。在編譯預(yù)處理時(shí),對(duì)程序中所有出現(xiàn)的宏名,都用宏定義中的字符串去代換,這稱為宏代換或宏展開。1.宏定義宏定義命令為#define,其作用是用一個(gè)標(biāo)識(shí)符來(lái)120(1)不帶參數(shù)的宏定義#define宏名(字符串)當(dāng)字符串為常數(shù)時(shí)通常不加括號(hào)常對(duì)程序中反復(fù)使用的表達(dá)式進(jìn)行宏定義,字符串為表達(dá)式時(shí)要加括號(hào)宏名的有效范圍是從宏定義命令#define開始,直到本源文件結(jié)束,或用#undef終止宏定義。(1)不帶參數(shù)的宏定義#define宏名(字符串)121(2)帶參數(shù)的宏定義#define宏名(形參表)(字符串)在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。對(duì)帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實(shí)參去代換形參。帶參數(shù)的宏定義將一個(gè)帶形式參數(shù)的表達(dá)式定義為一個(gè)帶形式參數(shù)表的宏名。對(duì)程序中所有帶實(shí)際參數(shù)表的該宏名都用指定的表達(dá)式來(lái)替換,同時(shí)用參數(shù)表中的實(shí)際參數(shù)替換表達(dá)式中對(duì)應(yīng)的形式參數(shù)。(2)帶參數(shù)的宏定義#define宏名(形參表)(字122提示:1)帶參數(shù)的宏定義在進(jìn)行宏展開時(shí),只是用語(yǔ)句中宏名后面括號(hào)內(nèi)的實(shí)際參數(shù)字符串來(lái)替換#define命令行中的形式參數(shù)。因此,對(duì)于宏展開后可能出現(xiàn)錯(cuò)誤的表達(dá)式,在進(jìn)行宏定義時(shí)應(yīng)將該表達(dá)式用圓括號(hào)括起來(lái)。2)在宏定義時(shí),在宏名與帶參數(shù)的括號(hào)之間不能加空格,否則將空格以后的字符都作為替代字符串的一部分。提示:1)帶參數(shù)的宏定義在進(jìn)行宏展開時(shí),只是用語(yǔ)句中宏名123宏定義與函數(shù)的區(qū)別帶參數(shù)的宏定義函數(shù)不必作類型定義必須作類型說(shuō)明。只是符號(hào)代換,不存在值傳遞調(diào)用時(shí)要把實(shí)參值賦予形參,進(jìn)行值傳遞;可設(shè)法得到幾個(gè)結(jié)果只可得到一個(gè)返回值宏展開后源程序變長(zhǎng)不使源程序變長(zhǎng)宏替換不占運(yùn)行時(shí)間調(diào)用則占運(yùn)行時(shí)間宏定義與函數(shù)的區(qū)別帶參數(shù)的宏定義函數(shù)不必作類型定義1242.文件包含文件包含處理是指一個(gè)源文件可以將另外的文件包含到本文件中。文件包含命令行的一般形式為:#include<文件名>文件包含命令的功能是把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。2.文件包含文件包含處理是指一個(gè)源文件可以將另外的文件包含125說(shuō)明(1)包含命令中的文件名可以用雙引號(hào)括起米,也可以用尖括號(hào)括起來(lái)。使用尖括號(hào)表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時(shí)設(shè)置的)。使用雙引號(hào)則表示首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。說(shuō)明(1)包含命令中的文件名可以用雙引號(hào)括起米,也可126說(shuō)明(2)一個(gè)include命令只能指定一個(gè)被包含文件,若有多個(gè)文件要包含則需用多個(gè)include命令。(3)文件包含允許嵌套,即在一個(gè)被包含的文件中又可以包含另一個(gè)文件。(4)被包含文件與其所在的文件在預(yù)編譯后已經(jīng)成為同一個(gè)文件而不是兩個(gè)文件,因此,如果被包含文件(filel.h)中有全局靜態(tài)變量,則這些全局靜態(tài)變量也在filel.c中有效,不必用extern說(shuō)明。說(shuō)明(2)一個(gè)include命令只能指定一個(gè)被包含文127單片機(jī)的定時(shí)控制功能是由片內(nèi)的時(shí)鐘電路和定時(shí)電路來(lái)完成的,而片內(nèi)的時(shí)鐘產(chǎn)生有兩種方式:內(nèi)部時(shí)鐘方式外部時(shí)鐘方式2.4單片機(jī)時(shí)鐘電路及CPU時(shí)序2.4.1單片機(jī)時(shí)鐘電路單片機(jī)的定時(shí)控制功能是由片內(nèi)的時(shí)鐘電路和定時(shí)電路來(lái)完成的,128內(nèi)部振蕩器方式外部振蕩器方式兩種時(shí)鐘電路內(nèi)部振蕩器方式外部振蕩器方式兩種時(shí)鐘電路129片內(nèi)的高增益反相放大器通過(guò)XTAL1、XTAL2外接作為反饋元件的片外晶體振蕩器(呈感性)與電容組成的并聯(lián)諧振回路構(gòu)成一個(gè)自激振蕩器,向內(nèi)部時(shí)鐘電路提供振蕩時(shí)鐘。振蕩器的頻率主要取決于晶體的振蕩頻率,一般晶體可在1.2~12MHz之間任選,電容C1、C2可在5~30pF之間選擇,電容的大小對(duì)振蕩頻率有微小的影響,可起頻率微調(diào)作用。內(nèi)部振蕩方式的連接方法片內(nèi)的高增益反相放大器通過(guò)XTAL1、XTAL2外接作為反130外部時(shí)鐘方式:不同工藝制造的單片機(jī)芯片外部時(shí)鐘電路連接方法芯片類型接法XTAL1XTAL2HMOS接地接片外振蕩脈沖輸入端(帶上拉電阻)CHMOS接片外振蕩脈沖輸入端(帶上拉電阻)懸空外部時(shí)鐘方式:不同工藝制造的單片機(jī)芯片外部時(shí)鐘電路連接方法芯1312.4.2CPU時(shí)序CPU以不同的方式,通過(guò)復(fù)雜的時(shí)序電路執(zhí)行并完成各種不同指令功能。CPU的控制器按照指令的功能發(fā)出一系列在時(shí)間上有一定次序的信號(hào)去控制和啟動(dòng)一部分邏輯電路,完成某種操作。在一定時(shí)刻發(fā)出一定的控制信號(hào)去啟動(dòng)一定的邏輯部件動(dòng)作,這就是CPU的時(shí)序。2.4.2CPU時(shí)序CPU以不同的方式,通過(guò)復(fù)雜的時(shí)序電1321.時(shí)鐘周期通過(guò)單片機(jī)的時(shí)鐘電路可以產(chǎn)生系統(tǒng)時(shí)鐘信號(hào)。系統(tǒng)時(shí)鐘信號(hào)是一切微處理器、微控制器內(nèi)部電路工作的基礎(chǔ)。晶體振蕩器輸出的振蕩脈沖經(jīng)2分頻成為內(nèi)部時(shí)鐘信號(hào),用作單片機(jī)內(nèi)部各功能部件按序協(xié)調(diào)工作的控制信號(hào),其周期稱為時(shí)鐘周期(也稱狀態(tài)周期)。1.時(shí)鐘周期通過(guò)單片機(jī)的時(shí)鐘電路可以產(chǎn)生系統(tǒng)時(shí)鐘信號(hào)。系統(tǒng)時(shí)1332.機(jī)器周期CPU完成一種基本操作所需要的時(shí)間稱為機(jī)器周期Tcy。MCS-51系列單片機(jī)的的1個(gè)機(jī)器周期包括6個(gè)時(shí)鐘周期。為了敘述方便,以S1~S6分別表示6個(gè)時(shí)鐘周期,以P1、P2表示每個(gè)時(shí)鐘周期的兩節(jié)拍,則1個(gè)機(jī)器周期依次由S1P1、S1P2、S2P1……S6P2等12個(gè)節(jié)拍(每個(gè)節(jié)拍為1個(gè)振蕩周期)組成。2.機(jī)器周期CPU完成一種基本操作所需要的時(shí)間稱為機(jī)器周期T134機(jī)器周期與振蕩周期的關(guān)系如果系統(tǒng)時(shí)鐘的晶振頻率為fosc=12MHz,則

1Tcy

=12Tosc=12/fosc=12/(12×106)=1μs即:1個(gè)機(jī)器周期的時(shí)間為1μs。機(jī)器周期與振蕩周期的關(guān)系如果系統(tǒng)時(shí)鐘的晶振頻率為fosc=11353.指令周期基本的機(jī)器周期有取指周期、存儲(chǔ)器讀周期和存儲(chǔ)器寫周期等,各種指令功能都是由這幾種基本機(jī)器周期實(shí)現(xiàn)的。CPU執(zhí)行一條指令所需要的時(shí)間稱為指令周期,它以機(jī)器周期為單位。MCS-51的指令可以分為單周期指令、雙周期指令和四周期指令三種,它們的執(zhí)行時(shí)間依次是1個(gè)、2個(gè)和4個(gè)機(jī)器周期。3.指令周期基本的機(jī)器周期有取指周期、存儲(chǔ)器讀周期和存儲(chǔ)器寫136單字節(jié)單周期指令雙字節(jié)單周期指令單字節(jié)雙周期指令例:INCDPTR4.CPU時(shí)序假讀單字節(jié)單周期指令雙字節(jié)單周期指令單字節(jié)雙周期指令例:INC137案例3單片機(jī)控制模擬廣告流水燈案例3單片機(jī)控制模擬廣告流水燈138發(fā)光二極管的連接方式:共陽(yáng)極:8個(gè)發(fā)光二極管的陽(yáng)極連在一起,并且將此公共端接到+5V,這種連接方法稱共陽(yáng)極結(jié)構(gòu),當(dāng)某一段發(fā)光二極管的陰極為低電平時(shí),該段發(fā)光。共陰極:如果將8個(gè)發(fā)光二極管的陰極連在一起,并且將此公共端接地,稱為共陰極結(jié)構(gòu),當(dāng)某一段發(fā)光二極管的陽(yáng)極為高電平時(shí),該段發(fā)光。發(fā)光二極管的連接方式:共陽(yáng)極:8個(gè)發(fā)光二極管的陽(yáng)極連在一起,139流水燈原理分析sta

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論