最近想研究研究嵌入式系統(tǒng),由于雖然是計(jì)算機(jī)專(zhuān)業(yè)的,但是硬件知識(shí)很差,再加上畢業(yè)若干年,全部忘光光。可以說(shuō),一切幾乎是從零開(kāi)始了。
我還是從簡(jiǎn)單點(diǎn)的單片機(jī)開(kāi)始學(xué)習(xí),看了一眼,感覺(jué)比較容易些,從淺入深的學(xué)習(xí)吧。原來(lái)學(xué)東西好囫圇吞棗,學(xué)了一大堆幾乎都是些皮毛,我這次寫(xiě)這個(gè)日志,一個(gè)是把它當(dāng)做我的學(xué)習(xí)筆記,另外也是敦促我自己踏踏實(shí)實(shí)的學(xué)習(xí)。
言歸正傳,去年在二手市場(chǎng)上花了¥2.00(也夠摳門(mén)的了)買(mǎi)來(lái)了一本《單片微型機(jī) 原理、應(yīng)用與實(shí)驗(yàn)》,復(fù)旦大學(xué)出版社的(我就是由買(mǎi)書(shū)的愛(ài)好,有沒(méi)有用看到就想買(mǎi)),就拿它當(dāng)做我的課本了吧。單片機(jī)這個(gè)東西,要理論聯(lián)系實(shí)際,沒(méi)有實(shí)驗(yàn)啥都是白學(xué)!于是跑到淘寶上花了3百多RMB買(mǎi)來(lái)開(kāi)發(fā)板一套,附贈(zèng)視頻教程。預(yù)覽了一遍,都是簡(jiǎn)單介紹一下理論(很多東西都沒(méi)有說(shuō)清楚),主要就是講解了一下C代碼,一切都得靠自己,哪有那么多現(xiàn)成的。
教材上用的是匯編語(yǔ)言,寫(xiě)程序真是麻煩,還是用C吧,大不了C搞不定的時(shí)候嵌匯編不就完了么!
還是從51,這個(gè)雖然比較老,但是很經(jīng)目前典用應(yīng)仍然很廣泛的這類(lèi)芯片開(kāi)始學(xué)習(xí),下面是一個(gè)典型的8051引腳圖。
圖1.1 8051引腳圖
制造工藝為HMOS(參考數(shù)電)的MSC-51單片機(jī)采用的是只引腳雙列直插封裝。12個(gè)時(shí)鐘是一個(gè)機(jī)器周期,51的指令1~4個(gè)機(jī)器周期。
?。?) 電源引腳:
Vcc接(+5v)電源
Vss接地。
(2) 時(shí)鐘引腳:
XTAL1、XTAL2外接晶體振蕩器。
?。?) 控制引腳:
RST/Vpd:復(fù)位信號(hào)/備用電源輸入(H/L)
ALE/PROC:地址鎖存允許信號(hào)/編程脈沖輸入端(H/L)
PSEN:程序存儲(chǔ)器輸出控制(L)
EA/Vpp:內(nèi)外程序存儲(chǔ)器選擇控制端/施加較高編程電壓(+21V或12V)的輸入端(L/H)
?。?)I/O口引腳
P0口:是雙向8位三態(tài)I/O口,在外接存儲(chǔ)器時(shí),與地址總線的低8位及數(shù)據(jù)總線復(fù)用,能以吸收電流的方式驅(qū)動(dòng)8個(gè)LS型的TTL負(fù)載。
P1口:是準(zhǔn)雙向8位I/O口。由于這種接口輸出沒(méi)有高阻狀態(tài),輸入也不能鎖存,故不是真正的雙向I/O口。P1口能驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。對(duì)8052、8032,P1.0引腳的第二功能為T(mén)2定時(shí)/計(jì)數(shù)器的外部輸入,P1.1引腳的第二功能為T(mén)2EX捕捉、重裝觸發(fā),即T2的外部控制端。對(duì)EPROM編程和程序驗(yàn)證時(shí),它接收低8位地址。
P2口:是準(zhǔn)雙向8位I/O口。在訪問(wèn)外部存儲(chǔ)器時(shí),它可以作為擴(kuò)展電路高8位地址總線送出高8位地址。在對(duì)EPROM編程和程序驗(yàn)證期間,它接收高8位地址。P2可以驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。
P3口:是準(zhǔn)雙向8位I/O口,在MCS-51中,這8個(gè)引腳還用于專(zhuān)門(mén)功能,是復(fù)用雙功能口。P3能驅(qū)動(dòng)(吸收或輸出電流)4個(gè)LS型的TTL負(fù)載。
P3.0 10 RXD(串行輸入口)
P3.1 11 TXD(串行輸出口)
P3.2 12 INT0(外部中斷0)
P3.3 13 INT1(外部中斷1)
P3.4 14 T0(定時(shí)器0外部輸入)
P3.5 15 T1(定時(shí)器1外部輸入)
P3.6 16 WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)脈沖)
P3.7 17 RD(外部數(shù)據(jù)存儲(chǔ)器讀脈沖)
在4個(gè)端口當(dāng)中,只有P0是真正的雙向口,其他都是準(zhǔn)雙向口。其他都是準(zhǔn)雙向口。
單片機(jī)控制的時(shí)候就是向4個(gè)I/O口送高低電平,另外我們需要關(guān)注的是它的存貯器,和尋址方式。
?。?)程序存貯器:
可以在單片機(jī)內(nèi)部或者在外部,PC就是從0地址開(kāi)始執(zhí)行的,此時(shí)要設(shè)置一個(gè)跳轉(zhuǎn)指令,跳向用戶(hù)設(shè)計(jì)的主程序。MSC-51的中斷入口是固定的,它們的地址是0BH,13H,1BH,23H……。地址通常從3開(kāi)始,每隔8個(gè)字節(jié)安排一個(gè)中斷入口。
?。?)內(nèi)部RAM數(shù)據(jù)存貯器
工作寄存器區(qū)(由PSW的第三和第四位指示):在需要的時(shí)候它們也可以作為數(shù)據(jù)緩沖器。
00H~07H:工作寄存器區(qū)0(R0~R7)
08H~0FH:工作寄存器區(qū)1(R0~R7)
10H~17H:工作寄存器區(qū)2(R0~R7)
18H~1FH:工作寄存器區(qū)3(R0~R7)
位尋址區(qū):20H~2FH,它們每一位都占據(jù)地址空間00H~7FH,用于存放程序標(biāo)志、位控制信息,同樣它們也可以作為一般的數(shù)據(jù)緩沖器。
堆棧和數(shù)據(jù)緩沖器:30H~7FH。進(jìn)棧是,SP先加1在寫(xiě)入,復(fù)位后SP為07H。所以對(duì)SP初始化時(shí)SP=6FH。
(3)特殊功能寄存器(地址空間80H~FFH)
復(fù)位時(shí)寄存器的狀態(tài)如下:PC(0),PSW(0),SP(07H),P0~P3(FFH),SBUF(未知)…
(4)外部RAM和I/O口
MSC-51可以擴(kuò)展64KB的RAM和I/O口,它們是統(tǒng)一編址的。
8051中斷系統(tǒng)
5個(gè)中斷源:INT0(P3.2),INT1(P3.3)外部中斷源;TF0(定時(shí)器0),TF1(定時(shí)器1),RI/TI(串口輸入輸出中斷)三個(gè)內(nèi)部中斷源。
2級(jí)的中斷優(yōu)先級(jí)(如圖所示)
與中斷有關(guān)的寄存器:
TCON
IT0:外部中斷INT0觸發(fā)方式選擇(0,電平觸發(fā)L;1,跳沿觸發(fā)H2L),軟件設(shè)置
IE0:外部中斷INT0請(qǐng)求標(biāo)志位,CPU響應(yīng)中斷后硬件清零
IT1:外部中斷INT0觸發(fā)方式選擇,與IT0類(lèi)似
IE1:外部中斷INT0請(qǐng)求標(biāo)志位,,與IE0類(lèi)似
TR0:與TR1類(lèi)似
TF0:T0溢出請(qǐng)求標(biāo)志位,CPU響應(yīng)中斷后清零,查詢(xún)方式下由軟件清零
TR1:T1運(yùn)行控制位。TR1置1時(shí),T1開(kāi)始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。
TF1:T1溢出請(qǐng)求標(biāo)志位,與TF0類(lèi)似
SCON
TI:串口發(fā)送中斷請(qǐng)求標(biāo)志位,硬件自動(dòng)置位,在中斷服務(wù)程序中軟件清零
RI:串口接受中斷請(qǐng)求標(biāo)志位,硬件自動(dòng)置位,在中斷服務(wù)程序中軟件清零
IE
EA:中斷允許控制位,1-開(kāi)中斷 0-關(guān)中斷
ES:串口輸入輸出中斷控制位,1-允許中斷 0-禁止中斷
ET1:T1中斷控制位,1-允許中斷 0-禁止中斷
EX1:INT1中斷控制位,1-允許中斷 0-禁止中斷
ET0:T0中斷控制位,1-允許中斷 0-禁止中斷
EX0:INT0中斷控制位,1-允許中斷 0-禁止中斷
IP
PS:串口輸入輸出中斷優(yōu)先級(jí)控制位,1-高 0-低
PT1:T1中斷優(yōu)先級(jí)控制位,1-高 0-低
PX1:INT1中斷優(yōu)先級(jí)控制位,1-高 0-低
PT0:T0中斷優(yōu)先級(jí)控制位,1-高 0-低
PX0:INT0中斷優(yōu)先級(jí)控制位,1-高 0-低
編輯:黃飛
評(píng)論