20天89C51單片機總結(jié)
看了怎么久的單片機做個總結(jié)。其實就芯片來說單片機沒想象的那么復雜!89C51就40個引腳。其中P0~P3口占了32個。一個接地一個接電源,兩個振蕩引腳。一個EA引腳ROM的起始地址選擇端。一個ALE/Vpp片外地址鎖存器充許引腳/線編程電源輸入端。PSEN片外ROM充許使能端。當然還有個復位REST引腳。其中P3口全部都有第2功能復用:定時 中斷 串行口中斷。當P0~P3端口寫#FFH時片內(nèi)鎖存器置1這是單口為雙向輸入 輸出口。這是從芯片外圍看。
從芯片的內(nèi)部看的話主要的就兩個獨立的存儲器 ROM,RAM 一個為程序指示,一個為數(shù)據(jù)處理和存放。編程時通過尋址方式區(qū)別ROM,RAM。他們都為64KB的容量。ROM的片內(nèi)為4KB存儲空間。由EA指示是從片外執(zhí)行程序還是從片內(nèi)執(zhí)行。RAM片內(nèi)為256字節(jié)即FFH分4個部分。00H~1FH為工作寄存器組。20H~2FH為為尋址空間。30H~7FH為用戶RAM區(qū)。80H~FFH為特殊寄存器區(qū)。有22個SFR(這里就不在介紹了)。
說說指令系統(tǒng)吧。MOV ,MOVX, MOVC3個傳送指令其中片外存儲器是不能直接傳送的。3個調(diào)用指令A(yù)JMP,LJMP,SJMP.分別用于不同的調(diào)用范圍。邏輯算術(shù)指令A(yù)NL ,ORL ,XRL.還有加 ADD,減SUBB,乘MUL,除DIV。還有很多的指令如交換,跳轉(zhuǎn),循環(huán),位尋址,布爾處理指令等。
例如下面的循環(huán)-跳轉(zhuǎn)指令
MOV R0,#00H
MOV R1,#AAH
MOV R7#0BH
loop: MOV A ,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,loop
END
這個程序就是執(zhí)行片內(nèi)傳送功能的。
說說程序的一般流程吧。分為順序,分支,循環(huán),還有組合嵌套。上面的例題就是循環(huán)的一種。
寫個分支程序的例題
MOV A,R1
RL A
MOV DPTR,#data
JMP @A +DPTR
data: AJMP KK1
AJMP KK2
.
.
AJMP KKn
這個指令就是以 data為首地址 R1為偏移量的分支轉(zhuǎn)移,因為AJMP為雙字節(jié)指令所以要執(zhí)行RL A。
下面在說下中斷跟定時吧。
中斷涉及的寄存器由 TCON , IE, IP,SCOM.
通過對中斷中斷標志位的設(shè)置區(qū)執(zhí)行中斷請求。中斷有5個入口地址 03H 0BH 13H 1BH 23H.
例如外部中斷一的入口在默認模式下設(shè)置為最高優(yōu)先級
SETB PX1
STEB EX1
STEB EA
非常簡單,有點像闖關(guān)游戲每個環(huán)節(jié)都完成才能執(zhí)行中斷。
下面是定時器,定時器在單片機的運用是非常高的。4種工作模式0 , 1 ,2 ,3。
我就用典型的定時器0模式2在12MHZ的程序編寫一個正弦波輸出XXMS在P1.0。初值就用KKH代替吧。
MOV P1 ,#FFH
MAIN: MOV TMOD , #02H
MOV TH0 ,#KKH
MOV LHO ,#KKH
STEB ET0
STEB TRO
STEB EA
AJMP $
中斷程序 TIME0: CLR TF0
CPL P1.0
RETI.
還有串行口傳輸了。89C51有4種模式的傳輸,其中波特率的設(shè)置尤為重要。
涉及寄存器有 TCOM TDOM SCOM SDOM PCON.
其實89C51還可以用軟件模擬總線接口。如SPI I2C等還有按鍵的程序設(shè)置外部的擴展實在太多了。以后有時間在編寫發(fā)上來。
評論