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