單芯片應用實習報告
班級:二技電一甲
姓名:林桀民
學號:AD89017
相關知識
MCS-51是Intel公司所設計的8051系列單芯片總名稱在MCS-51這個大家族裏較具知名度的編號有80518751&8031實際上這些不同編號的單芯片都使用相同的核心CPU與指令及只是在製造IC時給予不同的周邊設計分別賦予這些IC一個特別編號
主要功能:
MCS-51系列單芯片的主要功能列舉如下
專爲控制應用所設計的8位CPU
有完整的單位元邏輯運算指令,具有布爾運算能力
有32條(4個Port)雙向且每條都可以被單獨尋址的I/O
內部有兩個16位Timer/Counter
有一個通信用的全雙工UART(串行I/O)
可接受5箇中斷源且有2層優先權的中斷結構
內部有時脈震盪器(最高頻率可到12MHz)
內部有4K的程序內存(ROM),128byte數據存儲器(RAM)
可在外部擴充到64K程序內存(EPROM)
可在外部擴充到64K數據存儲器(RAM)
8051內部結構方塊圖
8051接腳圖與功能(40):
若系統讀取外部程序,接低電位/
EA/Vpp/Psen
高電位動作,系統重置,PC回到0000H
RESET(9腳)
串行通訊輸出/入(P3.0,P3.1)
RXD/TXD
外部中斷輸入(P3.2,P3.3)
INT0/1
計時計數器的輸入(P3.4,P3.5)
T0/T1
8位I/O端口,外接內存可做地址線
P2.0~P2.7
地址閂鎖致能信號
ALE/Prog
外部數據的讀取/寫入(P3.7,P3.8)
RD/WR
8位I/O端口,
P1.0~P1.7
8位I/O端口,外接內存做數據地址線
P0.0~P0.7
時脈反相放大器輸出/入端,接石英振盪器
XTAL1/2(19/18腳)
電源(5V)/接地
Vcc(40腳)/Vss(20腳)
功能
接腳
8051基本電路圖:
基本電路中有振盪電路及開機重置電路
振盪電路:8051芯片內部有一個振盪器,可以當作CPU的時脈,再設計時脈源時,若使用芯片內部的振盪器,只要在18、19腳兩腳間接振盪頻率範圍3.5M~12MHZ的石英振盪晶體或陶質共振器,並各自接20PF~50PF的電容。
重置電路:任何微電腦系統均有硬件重置功能,硬件重置主要用來確保CPU在開機時從程序的預定起始地址開始執行及當系統當機時使系統能重新開始,8051的重至信號輸入腳爲第9腳,此輸入腳爲高電位動作,且高電位至少要維持2個機械週期也就是24個振盪週期。開機時RST腳電位爲高電位促使系統重置,利用電容充電效應使RST接腳電位降成低電位,8051完成重置動作固定到程序內存地址0000H開始執行。
8051內存介紹:
8051的內存包含程序內存(ROM)和數據存儲器(RAM)兩種,他們分別有不同的用途,程序內存的作用是在儲存所要執行的程序,而數據存儲器用來存放在程序執行過程中所產生的數據,由於8051讀取程序內存有專用控制線PSEN,所以程序內存和數據存儲器二者選址時完全獨立不相干。
程序內存(ROM)結構:
89C51的4K程序內存中,有下列幾個重要地址,若沒有用到,就作一般程序內存使用,單芯片系統程序儲存在程序內存(ROM),一般8051/52提供4~8KBytes程序內存。使用者將編輯好的程序,經過組譯(Assembler)、連結(Link)後,燒錄到單芯片的ROM。如果採用89C51芯片,可重複燒錄多次,每次燒錄可將前一次燒錄的程序自動清除。若採用8031芯片,由於本身沒有內建ROM,所以必須採外部擴充內存
TIMER0中斷服務程序地址
000BH
TIMER1中斷服務程序地址
001BH
UART串行通訊服務程序地址
0023H
功能
地址
INT1外部中斷服務程序地址
0013H
INT0外部中斷服務程序地址
0003H
RESET程序開始執行地址
0000H
程序內存配置圖
單芯片數據存儲器(RAM)結構:
8051的數據存儲器是隨機存取的,使用者隨時讀取或寫入數據,通常是用來當程序執行時存放數據的緩存器。
SCON/SBUF
1byteX2
(98H/99H)
PSW/ACC
1byteX2
(D0H/E0H)
特殊緩存器(SFR)
128byte
80H~FFH
功能
長度
地址
TCON/TMOD/TL/TH
6byte
(88H~8DH)
使用者直接尋址可
設定SP建立堆棧區
80byte
30H~7FH
個別位數據尋址
8bit×16
20H~2FH
R0~R7四個緩存器庫
8byte×4
00H~1FH
數據存儲器(RAM)是單芯片在執行程序時,儲存處理數據的地方。一般8051/52提供128~256Bytes數據存儲器。其中又可將它們區分爲下列幾項功能的緩存器與內存區:
n[00~1FH]的32個字節可分爲四個緩存器庫,分別爲RB0、RB1、RB2、RB3。每個緩存器庫有8個緩存器,分別爲R0、R1、R2、R3、R4、R5、R6、R7。
n[20~2FH]的16位(2BYTES)可做直接位尋址,例如SETB20H.0、CLR20H.1。
n[30~7FH]80個字節的內存區又稱爲”使用者RAM”,可以直接尋址存取資料,同時也可以由使用者透過設定SP,自定堆棧數據區。
n[80~FFH]的128個字節數據,8031/8051芯片沒有提供。在8031/8052芯片可做間接尋址數據區,或是可直接尋址的狀態緩存器(SFR)使用。其中包括P0、P1、P2、P3端口的對應緩存器,以及稍候我們作UART通訊功能會用到的SCON串行控制緩存器、與定時器/計數器控制緩存器…。
熟悉這些內存的結構,對撰寫單芯片程序會有很大的幫助。讀者想自行撰寫或修改單板微電腦的系統監督程序,最好能下點工夫,將這些內存的功能與結構做充分的瞭解。
中斷向量地址:
由於這些內部程序內存的地址都與中斷有關,所以我們也稱這些地址爲中斷向量,在撰寫程序時,若程序本身沒有利用到中斷的功能,則以下七個特別的地址可視爲一般程序內存地址來處理,但是若程序中使用到某個中斷時,則該中斷對應的地址,就必須保留,因爲,只要該中斷髮生時,接下來被執行的就是位於該地址的指令,下列這些地址是各種中斷服務程序的進入點。
功能
地址
中斷
串行埠中斷向量
0023H
UART
計時計數中斷TIMER2向量
002BH
TIMER2
計時計數中斷TIMER1向量
001BH
TIMER1
計時計數中斷TIMER0向量
000BH
TIMER0
外部中斷INT1向量
0013H
INT1
外部中斷INT0向量
0003H
INT0
系統重置啓始地址
0000H
RESET
單芯片指令集:
數據尋址指令:累加器,緩存器,直接,間接內存尋址與I/O端口間的數據轉移。
算術運算指令:數據做加(ADD)、減(SUB)、乘(MUL)、除(DIV)運算,或加一(INC),減一(DEC)等運算。
邏輯運算指令:數據做AND(ANL)、OR(ORL)、XOR(XRL)運算,與RR、RL、RRC、RLC位旋轉功能。
布爾代數運算指令:位數據的清除與設定,如SETB,CLR。或位數據的運算ANLC,bit...等。
程序流程控制:循環,呼叫子程序(CALL),中斷,條件判斷的跳躍。如JMP,JZ,CJNZ,DJNZ,RET...等指令。
範例應用:
名稱:
單開關控制燈號變化,以指撥開關以控制程序流向,造成燈號的變化
動作要求:
接於阜腳P2.7上之指撥開關撥至ON位置時,P2.7阜腳爲低電壓,接於P0之8個LED燈不停的作霹靂燈之動作,直制止撥開關撥至OFF位置時,P2.7爲高電位,LED燈號變成奇偶位置不停地交互亮滅。
電路圖:
程序:
ORG00H
START:JBP2.7,LOOP2;檢查P2.7,若爲1則跳至LOOP2,否則往下執行
LOOP1:MOVDPTR#TABLE;設定表格之起始爲止於DPTR
MOVR3,#07H;設定表格數據之地址組數於R3
MOVA,#00H;設定偏移量起始地址值0於A緩存器
L1:JBP2.7,LOOP2;在LOOP1循環中,依據DPTR及A
MOVR0,A;依序由表格取出七個字節數據送
MOVCA,@A+DPTR傳至P0作霹靂燈動作且檢查P2.7之變
MOVP0,A;化,以決定是否跳出LOOP1循環
MOVR5,#5
ACALLDELAY
MOVA,R0
INCA
DJNZR3,L1
AJMPLOOP1;無條件跳出LOOP1
LOOP2:MOVA,#55H;在L2循環中,不停的作奇偶燈交互換互亮滅的動作並檢查P2.7之變化,已決定是否跳出L2循環
L2:JNBP2.7,LOOP2
MOVP0,A
MOVR5,#5
ACALLDELAY
XRLA,#FFH
AJMPL2
DELAY:MOVR3,#38H;子程序,延遲時間=R5*20ms
D1:MOVR6,#F9H
DJNZR6,$
DJNZR7,D1
DJNVR5,DELAY
RET
TABLE:DB7EH,0BDH,0DBH,07EH;霹靂燈之表格數據
DB0DBH,0BDH,7EH
END