第一篇:單片機實驗報告大全
單片機原理與應(yīng)用實
學(xué)校:合肥工業(yè)大學(xué)
班級:計算機科學(xué)與技術(shù)
學(xué)號:
姓名:
驗報告
第一章MC51 單片機原理及應(yīng)用軟件實驗
實驗1:系統(tǒng)認(rèn)識實驗
1. 實驗?zāi)康?/p>
(1)了解ZY15MCU12BC2單片機實驗開發(fā)裝置的接線與安排。掌握實驗箱內(nèi)撥位開關(guān)KF,KC的使用方法。(2)通過實例程序的編輯、編譯、鏈接及調(diào)試,熟悉Keil C51軟件的使用方法和基本操作。(3)教育學(xué)生愛撫實驗裝置,養(yǎng)成良好的實驗習(xí)慣。
2. 試驗設(shè)備
(1)ZY15MCU12BC2單片機實驗開發(fā)裝置一臺。(2)PC系列微機及相關(guān)軟件。
3. 試驗內(nèi)容
(1)使用串行通訊電纜將實驗開發(fā)裝置與PC機相連。
(2)開啟PC機及實驗開發(fā)裝置,啟動Keil C51軟件進入uVision2集成開發(fā)環(huán)境。(3)確認(rèn)撥位開關(guān)KF的開關(guān)為A端,確認(rèn)89C51處于仿真狀態(tài)。(4)在uVision2開發(fā)平臺上建立并編輯示例程序:
計算N個數(shù)求和程序。其中N個數(shù)分別放在片內(nèi)RAM區(qū)50H到55H單元中,N=6,求和的結(jié)果放在片內(nèi)RAM區(qū)03H(高位)和04H(低位)單元中。
題目:
1)32H+41H+01H+56H+11H+03H=? 2)895H+02H+02H+44H+48H+12H=?(5)編譯連接源程序。
(6)在Keil uVision2主菜單窗口進入DEBUG調(diào)試環(huán)境,打開存儲器窗口輸入數(shù)據(jù)至片內(nèi)RAM區(qū)50H到55H單元中,全速運行程序,并檢查程序的運行結(jié)果,即觀察在存儲器窗口片內(nèi)RAM區(qū)03H(高位)、04H(低位)單元中的數(shù)據(jù)是否正確。(7)實驗結(jié)束,撤出接線,將一切整理復(fù)原。
4.實驗源程序
ORG 0000H LJMP MAIN ORG 1000H MAIN: MOV R2,#06H MOV R3,#03H MOV R4,#04H MOV R0,#50H L1: MOV A,R4 ADD A,@R0 MOV R4,A INC R0 CLR A ADDC A,R3 MOV R3,A DJNZ R2,L1 END
5.實驗結(jié)果截圖
6.實驗總結(jié)
這次試驗,熟悉了單片機開發(fā)的基本流程,對于實驗的兩道題目 1)32H+41H+01H+56H+11H+03H=? 2)895H+02H+02H+44H+48H+12H=? 實驗結(jié)果如上圖所示50H~54H存放數(shù)據(jù),第一道題計算出來是0x00DEH,第二道題目 計算出來是0x0137H,實驗結(jié)果和預(yù)期相符,成功的完成了實驗。這次試驗對硬件開發(fā)有了基本的認(rèn)識,特別是對于單片機的存儲器有了進一步的認(rèn)識,在程序中把數(shù)據(jù)放入RAM中,結(jié)果存放在R3和R4中,實驗時不知道R3和R4的地 址,后來了解到R3和R4可以直接用他的地址03H和04H,這樣進一步深化了書本上 的知識。另外通過這次試驗,對于51單片機的幾種尋址方式也有了具體的認(rèn)識??傊?,還是要多動手雖然程序不是自己寫的,但是閱讀理解了還是有點收獲的。
實驗六.數(shù)據(jù)排序?qū)嶒?/p>
1. 實驗?zāi)康?/p>
(1)理解并掌握排序程序的設(shè)計方法。(2)掌握減法指令的功能,并聯(lián)系其使用。
(3)逐步提高調(diào)試程序的能力及編寫程序的能力。
2. 試驗設(shè)備
(1)ZY15MCU12BC2單片機實驗開發(fā)裝置一臺。(2)PC系列微機及相關(guān)軟件。
3. 試驗內(nèi)容
(1)使用串行通訊電纜將實驗開發(fā)裝置與PC機相連。
(2)開啟PC機及實驗開發(fā)裝置,啟動Keil C51軟件進入uVision2集成開發(fā)環(huán)境。
(3)編寫程序,實現(xiàn)從平臺連續(xù)輸入六個數(shù),數(shù)碼管將馬上從小到大的順序顯示這六個數(shù)。要求被排序的數(shù)放在70H到7FH單元中。(4)編譯連接源程序。
(5)調(diào)試程序,在存儲器窗口輸入被排序數(shù)放在70H到7FH單元中,全速運行程序,并檢查程序員的運行結(jié)果,觀察是否正確。
(5)若程序中出現(xiàn)錯誤,則可以采用單步分段調(diào)試,排除程序錯誤,直到正確為止。
4.實驗源程序
MAIN:
LOP2:
LOP1:
LOP5:
ORG 0000H LJMP MAIN ORG 0030H MOV R2,#70H MOV R3,#71H MOV R4,#0FH ACALL LOP1 DJNZ R4,LOP2 LJMP LOP6 MOV A,R2 MOV R0,A MOV A,R3 MOV R1,A MOV A,@R0 CLR C SUBB A,@R1 JC LOP4 MOV A,@R0 XCH A,@R1
LOP4:
LOP6:
MOV @R0,A INC R1 INC R0 MOV A,@R0 CJNE
R1,#80H,LOP5 RET END 5.實驗結(jié)果截圖
6.實驗總結(jié)
本次試驗是在冒泡排序算法實現(xiàn)對70H~7FH中的數(shù)據(jù)進行排序,如上第一張圖所示RAM中70H~7FH存放了數(shù)據(jù),第二張圖顯示的是通過冒泡排序整理過的數(shù)據(jù)。成功完成了實驗,收到了預(yù)期效果。
對于習(xí)慣了使用高級語言編程的我,看這些繞來繞去的匯編還是有些頭大,覺得這個例子寫的不太好,跳來跳去,程序?qū)哟尾环置鳎勺x性很差,冒泡不應(yīng)該有內(nèi)外兩層嗎,看書上有一個例子就寫得很好,跟用高級語言寫差不多,然而實驗的這個好像是要考我們對各種跳轉(zhuǎn)指令的了解,所以讀起來暈頭轉(zhuǎn)向的。從另一方面來說,通過這次試驗,我也熟悉了匯編的跳轉(zhuǎn)與分支指令。另外,所以O(shè)RG 0000H
LJMP MAIN
ORG 0030H,這三句ljmp這句跳到了main,那么還要后面一句干嘛。不甚理解。
總之,這次實驗讓我了解了各種分支與跳轉(zhuǎn),還是有所收獲的。
第二章MC51 單片機原理及應(yīng)用硬件實驗
實驗一:廣告燈實驗
1. 實驗?zāi)康?/p>
(1)熟悉ZY15MCU12BC2單片機實驗開發(fā)裝置的試驗箱,學(xué)會選用其功能電路,連接成實驗需要的系統(tǒng)。掌握實驗箱內(nèi)撥位開關(guān)KFKC使用。(2)加深了解MCS-51單片機P1端口的應(yīng)用方法。(3)學(xué)習(xí)編寫接口應(yīng)用程序。
2.試驗設(shè)備
(1)ZY15MCU12BC2單片機實驗開發(fā)裝置一臺。(2)PC系列微機及相關(guān)軟件。
3. 試驗內(nèi)容
(1)使用串行通訊電纜將實驗開發(fā)裝置與PC機相連,確認(rèn)撥位開關(guān)KF的位置。(2)開啟PC機及實驗開發(fā)裝置,啟動Keil C51軟件進入uVision2集成開發(fā)環(huán)境,確認(rèn)89C51處于仿真狀態(tài)。
(3)用試驗箱上的發(fā)光二極管L0到L7模擬外界各種場合的動態(tài)廣告燈,將試驗箱上的發(fā)光二極管L0到L7分別與單片機的P1.0到P1.7相連。
(4)編寫程序,實現(xiàn)從P1口輸出信號驅(qū)動發(fā)光二極管L0到L7模擬外界廣告燈動態(tài)點亮的功能。
(5)在uVision2開發(fā)平臺上輸入程序,編譯、連接程序,調(diào)試通過后將撥位開關(guān)KF撥至B端。
(6)單步執(zhí)行程序,觀察是否進入表格首地址。
(7)單步執(zhí)行程序,觀察發(fā)光二極管L0到L7的變化。
(8)全速運行程序,觀察發(fā)光二極管L0到L7的變化,并注意程序?qū)⒀h(huán)下去。(9)實驗結(jié)束,撤除接線,將一切整理復(fù)原。
4.實驗源程序
ORG 0000H MAIN: MOV DPTR,#TAB
MOV R5,71H LOOP: MOV A,#00H
MOVC A,@A+DPTR
MOV P1,A
ACALL DELAY
ACALL DELAY
INC DPTR
DJNZ R5,LOOP
LJMP MAIN DELAY: MOV R7,#00H
MOV R6,#00H DE:
DJNZ R7,$
DJNZ R6,DE
RET TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH
DB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH
DB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03H
DB 01H,00H,01H,03H,07H,0FH,1FH,3FH
DB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CH
DB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7H
DB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FH
DB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFH
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB 80H,40H,20H,10H,08H,04H,02H,01H,00H
DB 01H,02H,04H,08H,10H,20H,40H,80H,00H
DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
END
5.實驗結(jié)果
6.實驗總結(jié)
廣告燈按照程序所給的效果循環(huán)的有序的點亮,如果應(yīng)用到廣告霓虹燈,的確可以到達璀璨的效果,程序的最后的TAB是最糾結(jié)的,你要按照效果一點一點的編寫十六進制的數(shù)字,換算出效果,可見真正的商業(yè)廣告的效果的確是很麻煩的一件事,通過這個實驗,我清楚地認(rèn)識到了單片機的控制的靈活性,另外對于查表指令也有所理解。實驗二:P1端口應(yīng)用實驗
1.實驗?zāi)康?/p>
(1)進一步熟悉ZY15MCU12BC2實驗箱上的資源,掌握實驗箱內(nèi)撥位開關(guān)KF,KC使用。(2)加深了解MCS-51單片機P1端口的應(yīng)用方法。(3)學(xué)習(xí)編寫接口應(yīng)用程序。
2.試驗設(shè)備
(1)ZY15MCU12BC2單片機實驗開發(fā)裝置一臺。(2)PC系列微機及相關(guān)軟件。
3. 試驗內(nèi)容
(1)使用串行通訊電纜將實驗開發(fā)裝置與PC機相連,確認(rèn)撥位開關(guān)KF的位置。(2)開啟PC機及實驗開發(fā)裝置,啟動Keil C51軟件進入uVision2集成開發(fā)環(huán)境,確認(rèn)89C51處于仿真狀態(tài)。
(3)將試驗箱上的L0到L3接到P1.0到P1.3,開關(guān)K0到K3接到P1.4到P1.7。(4)編寫程序?qū)崿F(xiàn)如下功能: 撥動K0到K3,使L0到L3出現(xiàn)以下組合變化。K3 K2 K1 K0 L3 L2 L1 L0 0 0 0 0 全亮 0 0 0 1 全暗
0 0 1 0 一燈亮其余燈暗并左環(huán)依 0 0 1 1 一燈亮其余燈暗并右環(huán)依 0 1 0 0 一燈暗其余燈亮并左環(huán)依 0 1 0 1 一燈暗其余燈亮并右環(huán)依 ? ? ? 顯示開關(guān)狀態(tài)Ki為0,Li燈亮 要求:
1)設(shè)40H單元為標(biāo)志單元,(40H)=0時開關(guān)狀態(tài)無變化,(40H)=FFH時開關(guān)狀態(tài)發(fā)生變化。
2)設(shè)41H單元為開關(guān)狀態(tài)緩沖器,讀入開關(guān)狀態(tài)和41H單元內(nèi)容比較,相同時開關(guān)狀態(tài)無變化,不同是開關(guān)狀態(tài)有變化。3)設(shè)42H單元為當(dāng)前指示燈狀態(tài)。
(4)在uVision2開發(fā)平臺上輸入程序,編譯、連接程序,調(diào)試通過后將撥位開關(guān)KF撥至B端。
(5)根據(jù)準(zhǔn)雙向口的特性,對P1口寫操作使燈L0到L7的狀態(tài)隨寫入P1.0到P1.3的內(nèi)容而變化;讀P1口的高四位,讀出內(nèi)容隨開關(guān)狀態(tài)的變化而變化。如不對,則檢查開關(guān)K0到K3的接線,檢查K0到K3的電平是否隨開關(guān)狀態(tài)變化而變化。
(6)從開始運至BK1處,檢查A的內(nèi)容是否對應(yīng)開關(guān)狀態(tài),接著單步運行程序,檢查是否轉(zhuǎn)到相應(yīng)入口使L0到L3狀態(tài)產(chǎn)生相應(yīng)的變化。(7)全速運行程序至BK2,在檢查A的內(nèi)容是否與開關(guān)狀態(tài)一致,如不對,則檢查前面對P1口的操作指令。
(8)全速運行程序?qū)崿F(xiàn)所要求的功能。
4.實驗源程序
ORG 0000H STRL: MOV A,P1
SWAP A
ANL A,#0FH
MOV 41H,A
MOV 40H,#0FFH MLP0: CJNE A,#6,$+3
JNC PK6
MOV DPTR,#CTAB
MOV R1,A
RL
A
ADD A,R1
JMP @A+DPTR CTAB: LJMP PK0
LJMP PK1
LJMP PK2
LJMP PK3
LJMP PK4
LJMP PK5 PK6:
MOV 42H,A
LJMP MLP1 PK5:
MOV A,40H
CJNE A,#0FFH,PK51
MOV 42H,#01
LJMP MLP1 PK51: MOV A,42H
LCALL RR7
ANL A,#0FH
JNZ PK52
MOV A,#1 PK52: MOV 42H,A
LJMP MLP1 PK4:
MOV A,40H
CJNE A,#0FFH,PK41
MOV 42H,#1
LJMP MLP1 PK41: MOV A,42H
LCALL RL9
ANL A,#0FH
JNZ PK42
MOV A,#1 PK42: MOV 42H,A
LJMP MLP1 PK3:
MOV A,40H
CJNE A,#0FFH,PK31
MOV 42H,#0F7H
LJMP MLP1 PK31: MOV A,42H
LCALL RR9
ANL
A,#0FH
CJNE A,#0FH,PK32
MOV
A,#0F7H PK32: ORL
A,#0F0H
MOV
42H,A
LJMP MLP1 PK2:
MOV
A,40H
CJNE A,#0FFH,PK21
MOV
42H,0FEH
LJMP MLP1 PK21: MOV
A,42H
RL A
ANL A,#0FH
CJNE A,#0FH,PK22
MOV A,#0FEH PK22: ORL A,#0F0H
MOV 42H,A
LJMP MLP1 PK1:
MOV 42H,#0FH
LJMP MLP1 PK0:
MOV 42H,#0 MLP1: MOV A,42H
ORL A,#0F0H
MOV P1,A
MOV R7,#0
MOV R6,#0 DEL1: DJNZ R6,DEL1
DJNZ R7,DEL1
MOV
A,P1
SWAP A
ANL A,#0FH
CJNE A,41H,MLP2
MOV 40H,#0
LJMP MLP0 MLP2: MOV 41H,A
MOV 40H,#0FEH
LJMP MLP0 RR9:
RR A
RR A RR7:
RR A
RR A
RR A
RR A
RR A
RR A
RR A
RET RL9:
RL A
RL A RL7:
RL A
RL A
RL A
RL A
RL A
RL A
RL A
RET
END
5.實驗結(jié)果截圖
6.實驗結(jié)論
試驗中我們把P1口作為輸入輸出口來測試以下的內(nèi)容 1.P1 口做輸出口,接八只發(fā)光二極管循環(huán)點亮。2.P1 口低四位接四只發(fā)光二極管L1-L4, P1 口高四位接開關(guān)K1-K4,編寫程序,將開關(guān)的狀態(tài)在發(fā)光二極管上顯示出來。
在這次試驗中我認(rèn)識到課本上的關(guān)于P1口的介紹的知識 P1 口為準(zhǔn)雙向口,P1 口的每一位都能獨立地定義為輸出線或輸入線,作為輸入的口線,必須向鎖存器相應(yīng)位寫入“1”,該位才能作為輸入。8031中所有口鎖存器在復(fù)位時均置為“1”,如果后來往口鎖存器寫入過“0”,再作為輸入時,需要向口鎖存器對應(yīng)位寫入“1”。延時程序的編寫可以用兩種方法,一種是用定時器來實現(xiàn),一種使用指令循環(huán)來實現(xiàn)。在系統(tǒng)時間允許的情況下可以采用后一種方法。
實驗三:串轉(zhuǎn)并實驗
1.實驗?zāi)康?/p>
(1)掌握51系列單片機串口工作方式0的應(yīng)用。
(2)學(xué)習(xí)8位串行輸入和并行輸出的同步移位寄存器74LS164和8位并行輸入和穿行 輸出的同步移位寄存器74LS165兩個接口芯片的應(yīng)用性能。(3)研究單片機串行口如何用于擴展并行I/O口。
2.試驗設(shè)備
(1)ZY15MCU12BC2單片機實驗開發(fā)裝置一臺。(2)PC系列微機及相關(guān)軟件。
3. 試驗內(nèi)容
(1)使用串行通訊電纜將實驗開發(fā)裝置與PC機相連,確認(rèn)撥位開關(guān)KF的位置。(2)開啟PC機及實驗開發(fā)裝置,啟動Keil C51軟件進入uVision2集成開發(fā)環(huán)境,確 認(rèn)89C51處于仿真狀態(tài)。(3)實驗步驟:
1)通過單片機串口用一片8位串行輸入/并行輸出的同步移位寄存器74LS164擴展 8位并行輸出口。
2)通過單片機串口用一片8位并行輸入/串行輸出的同步移位寄存器74LS165擴展 8位并行輸入口。(4)將單片機的RXD端與74LS164的串行輸入端SERIAL(PA)相連,將單片機的TXD 端與74LS164的脈沖CLOCK(PB)相連,74LS164的輸出Q0到Q7接發(fā)光二極管 L8到 L15。(5)調(diào)試程序:
1)實驗采用終端方式調(diào)試,既目標(biāo)程序裝入仿真器后,使操作界面進入終端方式。2)單步進入執(zhí)行程序,打開Keil的寄存器窗口,觀察串口數(shù)據(jù)緩沖區(qū)SBUF里的值有何變化。
3)單步執(zhí)行程序,注意中斷標(biāo)志T1的變化以及所亮的發(fā)光二極管的位置。
4.實驗源程序
ORG 0000H SJMP MAIN ORG 0023H SJMP SBV MAIN: MOV SCON,#00H SETB EA SETB ES MOV A,#80H MOV SBUF,A MOV SBUF,A MOV SBUF,A SJMP $ SBV: ACALL DELAY CLR T1 RR A MOV SBUF,A RETi DELAY: MOV R7,#00H MOV R6,#00H DEL: DJNZ R7,$
5.實驗結(jié)果截圖
6.實驗結(jié)論
在實驗中我明白了串行口和并行口的相關(guān)知識8位串行輸入和并行輸出的同步移位寄存器74LS164和8位并行輸入和穿行輸出的同步移位寄存器74LS165兩個接口芯片的應(yīng)用性能。知道了單片機串行口如何用于擴展并行I/O口
第二篇:單片機實驗報告[范文模版]
實 實 驗 驗 報 報 告
實驗課程:
單片機原理及應(yīng)用
班
級:
自動化 2 班
學(xué)
號:
姓
名:
教
師:
張
玲
成績:
實 驗 日 期 :
****年**月**日
實驗名稱:
實驗 1-—計數(shù)顯示器
一、實驗?zāi)康? 學(xué)習(xí)Proteus 軟件得使用,掌握單片機原理圖得繪圖方法。
二、實驗內(nèi)容:
?1、繪制“計數(shù)顯示器”電路原理圖;2、利用提供得hex 文件驗證此電路得運行效果。
三、實驗要求:
提交得實驗報告中應(yīng)包括:1、繪圖方法簡述,要求說明元件與電源得選取、擺放及屬性編輯,總線與標(biāo)簽得畫法等內(nèi)容;2、電路原理圖;3、仿真運行效果展示,要求就仿真文件加載方法及 3~4幅運行截圖進行簡要說明;4、實驗小結(jié),說明遇到得主要問題或?qū)嶒?1 體會等.參考電路原理圖如下:
元件類別 電路符號 元件名稱 Microprocessor ICs “U1“ 80C51 Miscellaneous “X1”/12MHz CRYSTAL Capacitors “C1”~“C2”/1nF CAP Capacitors “C3”/22μF CAP—ELEC Resistors Packs “RP1“/7—100Ω RESPACK—7 Resistors “R1"/100Ω RES Optoelectronics “LED1”~“LED2” 7SEG--CAT-GRN Switches & Relays “BUT” BUTTON 1、、及 編程思路及 C51 源程序:
2、電路原理圖:
:
3、仿真運行效果展示:
4、實驗小結(jié) :
熟悉Proteus 軟件,了解軟件得結(jié)構(gòu)組成與功能;學(xué)習(xí)ISIS 模塊得使用方法,學(xué)會設(shè)置圖紙、選元件、線畫總線、修改屬性等基本操作;學(xué)會可執(zhí)行文件 加載及程序仿法;理解Proteus在單片機開發(fā)中得作用,完成單片機電路原 理圖得繪制. 實驗名稱:
實驗 2——LED 指示燈循環(huán)控制
一、實驗?zāi)康?熟悉μVision3 編譯軟件、掌握 C51編程與調(diào)試方法。
二、
實驗內(nèi)容 1、按照教材 P243 得圖 A、34,繪制實驗二電路原理圖; 2、編寫 C51 程序,實現(xiàn) 8 個 LED 燈依次點亮得功能: P0、0→P0、1→ P0、2→P0、3→ ┅ →P0、7→P0、6→P0、5→ ┅ →P0、0 得順序,無限循環(huán),間隔約50ms; 3、觀察仿真結(jié)果,完成實驗報告。
三、
實驗要求 1、采用兩種加載并運行可執(zhí)行文件得方法,即proteus獨立運行與prote
us + Keil 聯(lián)合運行,體會其中得差異與意義;2、練習(xí)采用單步、斷點以及監(jiān)視窗等手段進行程序調(diào)試得方法;3、觀察仿真結(jié)果,完成實驗報告:繪制得電路原理圖、編程思路分析及 C51源程序、調(diào)試過程簡述,仿真運行效果以及實驗小結(jié)。、電路原理圖:
:
及 2、編程思路及 C51 源程序:、仿真運行效果:、實驗小結(jié) :
通過本次實驗我熟悉 uVision3 編譯軟件了解軟件得結(jié)構(gòu)組成與功能學(xué)習(xí)C51 語言得程序設(shè)計方法)學(xué)會在 uVision3中進行 C51 程序錄入、編譯、與 調(diào)試?yán)斫?Proteus 與 Keil 聯(lián)合得仿真原理實現(xiàn) LED 指示燈循環(huán)控制功能。
更好得將 C 語言與 C51 語言聯(lián)系在了一起)學(xué)到得知識能準(zhǔn)確得利用了出來。
實驗名稱:
實驗3——指示燈與數(shù)碼管得中斷控制
一、實 驗?zāi)康?掌握外部中斷得工作原理,學(xué)會中斷程序設(shè)計.二、實驗內(nèi)容 1、按照教材帕圖 A、53,繪制實驗四電路原理圖;2、要求采用外部中斷原理完成本次實驗,其中按鍵 K1、K2 均設(shè)置為下降沿觸發(fā)方式,自然優(yōu)先級; 3、編寫 C51 程序?qū)崿F(xiàn)如下功能:開機后 D1滅燈,LED1黑屏,隨后單擊 K1→D1狀態(tài)反轉(zhuǎn),單擊 K2 →LED1 從 0 開始循環(huán)顯示0~F 字符。
4、觀察仿真結(jié)果,完成實驗報告。
三、
實驗要求 提交得實驗報告中應(yīng)包括:電路原理圖,外部中斷工作原理闡述(以 K1 為例說明中斷響應(yīng)過程),C51 源程序(含流程圖與注釋語句),運行效果(含運行截圖
與說明),實驗小結(jié). 1、電路原理圖 :
2、外部中斷工作原理闡述:
持續(xù)按下 K1 則 D1 將“亮→滅→亮→滅→?→亮→滅如此循環(huán),表明實現(xiàn)了 K1 對應(yīng)于 D1 狀態(tài)反轉(zhuǎn)這個功能;持續(xù)按下持續(xù)按 K2 則數(shù)碼顯示管依次顯 示 1-F,實現(xiàn)了 K2 對應(yīng)于 0~F 間得數(shù)碼管加一計數(shù)顯示.
3、、及 編程思路及 C51 源 源 程序:、仿真運行效果:
5、實驗小結(jié):
通過實驗對 Protues 有了更多得了解,同時了解到中斷系統(tǒng)在實際中得更好 應(yīng)用。經(jīng)過編程操作起來更加熟練能很快得完成繪圖,編程時也得心應(yīng)手,能熟練得運用軟件找出自己所編程中得語法問題及其她問題,并以改正。
實驗名稱:
實驗4—-電子秒表顯示器
一、實 實 驗?zāi)康?掌握定時/計數(shù)器得中斷法工作原理,熟悉 C51 編程與調(diào)試方法
二、實驗要求:
1、實驗電路原理圖如教材 P260 A、65 圖所示.程序開始時顯示“00”;當(dāng)1s 產(chǎn)生時,秒計數(shù)加1;秒計數(shù)到 59 后,自動從“00”開始。
2、采用12MHz晶振頻率,T0 定時方式 1、50ms 定時中斷法編程(1s 需要經(jīng)過 20 軟循環(huán))(流程圖與參考程序模版如下所示).//定時中斷方式實現(xiàn)得電子秒表
15()件文頭?(定義無符號字符型變量 t—-中斷次數(shù)計數(shù)器,并賦初值0(定義無符號字符型變量 second—-秒計數(shù)器,并賦初值 0(定義位于 ROM 區(qū)得無符號字符型數(shù)組table-—顯示字模)timer0()
(中斷函數(shù)關(guān)鍵詞){ ?()0T 閉關(guān)?(初值重裝載 0x3cb0)
()1增器數(shù)計數(shù)次斷中? {)02==t(fi??
?
// 秒1于當(dāng)相,次 02斷中若?
;0=t???????? //中斷次數(shù)計數(shù)器清零 ?
;++dnoces?? ? // 零清器數(shù)計秒?
}()零清,06 到達值器數(shù)計秒若??()值示顯得 dnoces 量變出輸別分口 2P與0P?()0T動啟??} main(){
?
;]01/dnoces[elbat=0P?? // 值示顯出輸別分口 2P 與 0P?
;]01%dnoces[elbat=2P?(定義T0 定時方式 1—-TMOD)05()0LT與0HT——載加0bc3x0值初出溢 sm?()AE,0TE——化始初斷中?(啟動 T0)
(死循環(huán))3、編程思路及C1 51 源程序: :
4、仿真運行效果:
5、實驗小結(jié) :
本次實驗進行得比較順利,根據(jù)指導(dǎo)材料中提供得流程圖完成了源程序得編 寫,成功生成了、hex文件,經(jīng)過仿真運行達到了預(yù)期得實驗結(jié)果.通過本次得 實驗,我更加深入得了解到單片機定時/計數(shù)功能實現(xiàn)得機理,通過與單片機中 斷功能得結(jié)合,可以完成更多得預(yù)期功能。但就是進過討論我也發(fā)現(xiàn),程序還就是存 在很大得缺陷,想要實現(xiàn)更加準(zhǔn)確實現(xiàn)計時功能還需綜合利用各種知識完善程 序。
第三篇:單片機實驗報告
《單片機原理及應(yīng)用》
實 驗 報 告
2017—2018學(xué)年第一學(xué)期
班級: 152 專業(yè): 電子科學(xué)與技術(shù) 姓名: 子路 學(xué)號: 教師:
實驗一:Keil C51
一、實驗?zāi)康?/p>
1、熟悉Keil C51單片機應(yīng)用開發(fā)系統(tǒng)
2、熟悉Keil C51的調(diào)試技巧
二、實驗內(nèi)容
1、安裝好了Keil軟件以后,我們打開它。打開以后界面如下:
2、我們先新建一個工程文件,點擊“Project->New Project?”菜單,如下圖:
3、選擇工程文件要存放的路徑 ,輸入工程文件名 LED, 最后單擊保存.4、在彈出的對話框中選擇 CPU 廠商及型號
5、選擇好 Atmel 公司的 AT89S52 后 , 單擊確定
6、在接著出現(xiàn)的對話框中選擇“是”。
7、新建一個 C51 文件 , 單擊左上角的 New File 如下圖所示:
8、保存新建的文件,單擊SAVE如下圖:
9、在出現(xiàn)的對話框中輸入保存文件名MAIN.C(注意后綴名必須為.C),再單擊“保存”,如下圖:
10、保存好后把此文件加入到工程中方法如下 : 用鼠標(biāo)在 Source Group1 上單擊右鍵 , 然后再單擊 Add Files to Group ‘Source Group 1' 如下圖:
11、選擇要加入的文件 , 找到 MAIN.C 后 , 單擊 Add, 然后單擊 Close
12、在編輯框里輸入如下代碼:
13、到此我們完成了工程項目的建立以及文件加入工程 , 現(xiàn)在我們開始編譯工程如下圖所示 : 我們先單擊編譯, 如果在錯誤與警告處看到 0 Error(s)表示編譯通過:
14、生成.hex 燒寫文件,先單擊Options for Target,如圖:
15、在下圖中,我們單擊 Output, 選中 Create HEX F。再單擊“確定”
16、打開文件夾‘實驗1’,查看是否生成了HEX文件。如果沒有生成,在執(zhí)行
一遍步驟10到步驟12,直到生成。
三、實驗工具(軟件、硬件等)
1、Keil
2、計算機
實驗二:Proteus軟件學(xué)習(xí)
一、實驗?zāi)康?/p>
1、了解Proteus的基本功能
2、熟悉Proteus的設(shè)計環(huán)境Preoteus ISIS及第三方編譯工具Keil
3、掌握Proteus中實現(xiàn)單片機系統(tǒng)設(shè)計與仿真的步驟與方法
二、實驗內(nèi)容
設(shè)計與仿真的開發(fā)過程
Proteus強大的單方機系統(tǒng)設(shè)計與仿真功能,使之成為單片機系統(tǒng)應(yīng)用開發(fā)和改進手段之一。
開發(fā)的整個過程都是在計算機上完成的,其過程一般分為三步: 1)Proteus 電路設(shè)計:在ISIS平臺上進行單片機系統(tǒng)電路設(shè)計、選擇元器件、接插件、連接電路和電氣現(xiàn)則檢查等。
2)Proteus 源程序設(shè)計和生成目標(biāo)代碼文件:在ISIS平臺上或借助第三方編譯工具進行單片機系統(tǒng)程序設(shè)計、編輯、匯編編譯、代碼級調(diào)試,最后生成目標(biāo)代碼文件(*hex)。
3)Proteus仿真:在ISIS平臺上將目標(biāo)代碼文件加載到單片機系統(tǒng)中,由此實現(xiàn)系統(tǒng)實時交互與協(xié)同傷真。
三、實驗工具(軟件、硬件等)
1、載有Proteus的計算機一臺
實驗三:LED流水燈
一、實驗?zāi)康?/p>
1、用Keil軟件編寫程序并利用開發(fā)板仿真
2、學(xué)習(xí)LED燈工作原理
二、實驗內(nèi)容
延時實現(xiàn)LED流水燈效果P2口八個燈作跑馬燈。采用了寄存器存中間數(shù)。
三、實驗工具(軟件、硬件等)1.載有Keil軟件的計算機一臺 2.開發(fā)板一套
四、實驗結(jié)果及分析
實驗四:靜態(tài)數(shù)碼管
一、實驗?zāi)康?/p>
1、用Keil軟件編寫程序并利用開發(fā)板仿真
2、學(xué)習(xí)靜態(tài)顯示管工作原理
二、實驗內(nèi)容
靜態(tài)數(shù)碼管流動顯示0~9
二、實驗工具(軟件、硬件等)1.載有Keil軟件的計算機一臺 2.開發(fā)板一套
四、實驗結(jié)果及分析
實驗五:按鍵移位動態(tài)顯示
一、實驗?zāi)康?/p>
1、用Keil軟件編寫程序并利用開發(fā)板仿真
2、學(xué)習(xí)靜態(tài)顯示管工作原理
二、實驗內(nèi)容
靜態(tài)顯示管,按鍵不同顯示不同
三、實驗工具(軟件、硬件等)1.載有Keil軟件的計算機一臺 2.開發(fā)板一套
四、實驗結(jié)果及分析
實驗六:中斷INT0+INT1
一、實驗?zāi)康?/p>
1、用Keil軟件編寫程序并利用開發(fā)板仿真
2、學(xué)習(xí)中斷INT0和INT1的工作原理
二、實驗內(nèi)容
試驗數(shù)碼管上顯示外部中斷計數(shù),用單片機腳直接控制數(shù)碼管和外部中斷使用
三、實驗工具(軟件、硬件等)1.載有Keil軟件的計算機一臺 2.開發(fā)板一套
四、實驗結(jié)果及分析
第四篇:單片機實驗報告
目錄
第一章單片機簡介....................................................2 第二章
實驗要求..................................................3 第三章實驗設(shè)備......................................................3 第四章實驗安排......................................................4 第五章實驗內(nèi)容......................................................4
LED燈實驗.......................................................4 步進馬達試驗....................................................5 獨立按鍵控制LED實驗............................................7 矩陣鍵盤實驗....................................................9 靜態(tài)數(shù)碼管實驗.................................................12 動態(tài)數(shù)碼管實驗.................................................14 NE555脈沖發(fā)生器實驗(定時/計數(shù)器).............................16 RS232串口通信實驗(接收與發(fā)送)..................................21 第六章收獲體會.....................................................25
單片機實驗報告
第一章單片機簡介
單片機也被稱為微控制器(Microcontroller),是因為它最早被用在工業(yè)控制領(lǐng)域。單片機由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設(shè)計理念是通過將大量外圍設(shè)備和CPU集成在一個芯片中,使計算機系統(tǒng)更小,更容易集成進復(fù)雜的而對體積要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計出的處理器,從此以后,單片機和專用處理器的發(fā)展便分道揚鑣。單片機是靠程序運行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨特的一些功能,這是別的器件需要費很大力氣才能做到的,有些則是花大力氣也很難做到的。一個不是很復(fù)雜的功能要是用美國50年代開發(fā)的74系列,或者60年代的CD4000系列這些純硬件來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場的系列單片機,結(jié)果就會有天壤之別!只因為單片機的通過你編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!
單片機誕生于20世紀(jì)70年代末,經(jīng)歷了SCM、MCU、SoC三大階段。
1.SCM即單片微型計算機(Single Chip Microcomputer)階段,主要是尋求最佳的單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)?!皠?chuàng)新模式”獲得成功,奠定了SCM與通用計算機完全不同的發(fā)展道路。在開創(chuàng)嵌入式系統(tǒng)獨立發(fā)展道路上,Intel公司功不可沒。
2.MCU即微控制器(Micro Controller Unit)階段,主要的技術(shù)發(fā)展方向是:不斷擴展?jié)M足嵌入式應(yīng)用時,對象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對象的智能化控制能力。它所涉及的領(lǐng)域都與對象系統(tǒng)相關(guān),因此,發(fā)展MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來看,Intel逐漸淡出MCU的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips公司。
Philips公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢,將MCS-51從單片微型計算機迅速發(fā)展到微控制器。因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時,不要忘記Intel和Philips的歷史功績。
3.單片機是嵌入式系統(tǒng)的獨立發(fā)展之路,向MCU階段發(fā)展的重要因素,就是尋求
單片機實驗報告
應(yīng)用系統(tǒng)在芯片上的最大化解決;因此,專用單片機的發(fā)展自然形成了SoC化趨勢。隨著微電子技術(shù)、IC設(shè)計、EDA工具的發(fā)展,基于SoC的單片機應(yīng)用系統(tǒng)設(shè)計會有較大的發(fā)展。因此,對單片機的理解可以從單片微型計算機、單片微控制器延伸到單片應(yīng)用系統(tǒng)。
MCS51系列微控制器應(yīng)用廣泛,在家電、汽車甚至航空等領(lǐng)域都有其活躍的身影。然而,普通51系列微控制器內(nèi)部資源有限,像我用Proteus構(gòu)建微控制器虛擬實驗室選用的AT89C52只有三個定時器、一個全雙工的串行口和中斷控制,并且其數(shù)據(jù)處理能力有限,不適合對大量數(shù)據(jù)進行復(fù)雜分析和運算。
因此,在不重新選型(可選用SoC)的前提下,為實現(xiàn)我們所需要的功能,就需要進行外圍擴展。針對微控制器的特點,我們首先考慮串行擴展,因為微控制器的I/O引腳有限,并行擴展一則外圍芯片面積比較大,二則對抑制EMI不利。
第二章 實驗要求
1.學(xué)習(xí)Keil C51集成開發(fā)工具的操作及調(diào)試程序的方法,包括:仿真調(diào)試與脫機運行間的切換方法
2.熟悉TD-51單片機系統(tǒng)板及實驗系統(tǒng)的結(jié)構(gòu)及使用
3.進行MCS51單片機指令系統(tǒng)軟件編程設(shè)計與硬件接口功能設(shè)
4. 學(xué)習(xí)并掌握Keil C51軟件聯(lián)機進行單片機接口電路的設(shè)計與編程調(diào)試
5.完成指定MCS51單片機綜合設(shè)計題
第三章實驗設(shè)備
1.HC600S-51單片機開發(fā)板 2.Keil C51 3.普中自動下載軟件
第四章 實驗安排
1.LED燈實驗
單片機實驗報告
2.步進馬達試驗
3.獨立按鍵控制LED實驗 4.矩陣鍵盤實驗 5.靜態(tài)數(shù)碼管實驗 6.動態(tài)數(shù)碼管實驗
7.NE555脈沖發(fā)生器實驗(定時/計數(shù)器)8.RS232串口通信實驗(接收與發(fā)送)
第五章 實驗內(nèi)容
一、LED燈實驗
1.基本要求
利用位移循環(huán)指令實現(xiàn)LED燈的閃爍 2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
4.電路原理圖
單片機實驗報告
5.程序
#include
main(){unsigned int i;while(1)
{for(i=0,P0=1;i<4;i++){d(500);P0=(P0<<2);}}}
二、步進馬達試驗
1.基本要求
編程實現(xiàn)馬達的正反轉(zhuǎn),調(diào)速等功能 2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
單片機實驗報告
圖一 圖二
4.電路原理圖
上圖圖二 5.程序
#include “reg52.h” #define speed 2 sbit PH1 = P1^0;
//定義管腳 sbit PH2 = P1^1;sbit I01 = P1^2;sbit I11 = P1^3;sbit I02 = P1^4;sbit I12 = P1^5;
void delay(int time);
void Go(){ //A
PH1 = 0;//PH1為0 則A線圈為反向電流
I01 = 0;I11 = 0;
//以最大電流輸出
PH2 = 0;//PH2為0 則B線圈為反向電流
I02 = 1;I12 = 1;
//輸出0 delay(speed);//圈為反向電流
I01 = 1;//輸出0 I11 = 1;
PH2 = 1;//PH2為1 則B線圈為正向電流
I02 = 0;//以最大電流輸出
I12 = 0;
delay(speed);//B PH1 = 1;
//PH1為1 則A線圈為
正向電流
I01 = 0;
//以最大電流輸出
I11 = 0;
PH2 = 1;//PH2為1 則B線圈為正
向電流
I02 = 1;//輸出0 I12 = 1;
delay(speed);
PH1 = 1;
//PH1為1 則A線圈為正向電流
I01 = 1;I11 = 1;
PH2 = 0;
//PH2為0 則B線圈為反向電流
I02 = 0;I12 = 0;delay(speed);}
void delay(int time){
int i,j;
for(j=0;j <= time;j++)
for(i =0;i <= 120;i++);}
void main(){
while(1)
{
Go();//步進電機運行
} }
單片機實驗報告
三、獨立按鍵控制LED實驗
1.基本要求
通過編程控制8個獨立按鍵分別控制8個LED燈的開關(guān) 2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
圖一 圖二
4.電路原理圖 上圖圖二 5.程序
#include
P1口
#define uchar unsigned char #define uint unsigned int
void Delayms(unsigned int c);
//延時10ms uchar Key_Scan();void main(void){
unsigned char ledValue, keyNum;
ledValue = 0x01;
while(1)
{
keyNum = Key_Scan();//掃描鍵
盤
switch(keyNum)
{
case(0xFE):
//返回按
鍵K1的數(shù)據(jù)
ledValue = 0x01;
break;
單片機實驗報告
case(0xFD):
ledValue = 0x02;
break;case(0xFB):
ledValue = 0x04;
break;case(0xF7):
ledValue = 0x08;
break;case(0xEF):
ledValue = 0x10;
break;case(0xDF):
ledValue = 0x20;
break;case(0xBF):
ledValue = 0x40;
break;case(0x7F):
ledValue = 0x80;
//返回按鍵K2的數(shù)據(jù)
//返回按鍵K3的數(shù)據(jù)
//返回按鍵K4的數(shù)據(jù)
//返回按鍵K5的數(shù)據(jù)
//返回按鍵K6的數(shù)據(jù)
//返回按鍵K7的數(shù)據(jù)
//返回按鍵K8的數(shù)據(jù)
break;default:
break;
}
GPIO_LED = ledValue;//點亮LED燈
}
}
uchar Key_Scan(void)//鍵盤掃描函數(shù) { uchar i,n=0xff;
if(P1==0xff)goto Scan_r;//無鍵按
下,返回
goto Scan_r;Scan_1:
while(P1!=0xff);//等待鍵釋放
Delayms(10);Scan_r:
return n;}
void Delayms(uint x){
uint n;
for(;x>0;x--)
{
for(n=0;n<123;n++)
{;}
} }
四、矩陣鍵盤實驗
1.基本要求
編程由16個矩陣按鍵控制數(shù)碼管顯示相應(yīng)的數(shù)值 2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。
3.接線圖
單片機實驗報告
見下圖圖一
圖一 圖二
4.電路原理圖
見上圖圖二 5.程序
#include
uchar ScanKey(void);void Delayms(uint x);main(){ unsigned char ledValue;uchar i;ledValue = 0x01;loop: i = ScanKey();
switch(i)
{ case 0xee:
ledValue = ~0x3F;
break;
case 0xde:
ledValue = ~0x06;
break;
case 0xbe:
ledValue = ~0x5B;
break;
case 0x7e:
ledValue = ~0x4F;
break;
case 0xed:
ledValue = ~0x66;
break;
case 0xdd:
ledValue = ~0x6D;
break;
單片機實驗報告
case 0xbd:
ledValue = ~0x7D;
break;
case 0x7d:
ledValue = ~0x07;
break;
case 0xeb:
ledValue = ~0x7F;
break;
case 0xdb:
ledValue = ~0x6F;
break;
case 0xbb:
ledValue = ~0x77;
break;
case 0x7b:
ledValue = ~0x7C;
break;
case 0xe7:
ledValue = ~0x39;
break;
case 0xd7:
ledValue = ~0x5E;
break;
case 0xb7:
ledValue = ~0x79;
break;
case 0x77:
ledValue = ~0x71;
break;
}
GPIO_LED = ledValue;i=0;goto loop;}
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
uchar ScanKey(void)//鍵盤掃描函數(shù) { uchar i,n=0xff;
P1=0xf0;
if(P1==0xf0)goto Scan_r;//無鍵按下,返回
for(i=0,P1=0xfe;i<4;i++)
{ if((P1&0xf0)!=0xf0)
{ Delayms(10);
if((P1&0xf0)!=0xf0)
{ n=
P1;
goto
Scan_1;}
}
P1=(P1<<1)+1;
//掃描下
一行
} goto Scan_r;Scan_1:
單片機實驗報告
P1=0xf0;while((P1&0xf0)!=0xf0);//等待鍵
釋放
Delayms(10);
Scan_r:
P1=0xff;return n;} }
五、靜態(tài)數(shù)碼管實驗
1.基本要求
編程使數(shù)碼管顯示字符0-F 2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線框圖(圖一)
圖一
單片機實驗報告
圖二
4.電路原理圖
見上圖圖二 5.程序
#include
{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){
unsigned int LedNumVal;//定義變量 while(1)
{
// 將字模送到P0口顯示
LedNumVal++;
P0 = LED7Code[LedNumVal%16];
Delayms(1000);
//調(diào)用延時程序
}
}
單片機實驗報告
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
六、動態(tài)數(shù)碼管實驗
1.基本要求
編程實現(xiàn)8個數(shù)碼管的動態(tài)掃描。通過P22、P23、P24控制3-8譯碼器來對數(shù)碼管進行位選,通過P0口經(jīng)過573的驅(qū)動控制數(shù)碼管的段選,通過P13控制573的使能端,為低電平時573才會有輸出。2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
圖一 圖二
單片機實驗報告
圖三
4.電路原理圖
見上圖圖
二、圖三 5.程序
#define uint unsigned int void Dsplay();void Delayms(uint x);uchar mDS[6];uchar code cDsCode[]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){ uchar i;
for(i=0;i<6;i++)mDS[i]=i+1;
loop:
Dsplay();
goto loop;}
void Dsplay()//動態(tài)掃描顯示
{uchar i;
for(i=0,P2=0x01;i<6;i++)
{ P1=cDsCode[mDS[i]];//輸出段
Delayms(1000);
P2=P2<<1;
//選通下一位
}
P2=0x00;
//關(guān)閉位選通 }
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
七、NE555脈沖發(fā)生器實驗(定時/計數(shù)器)
1.基本要求
2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
4.電路原理圖
5.程序
#include
CYMOMETER
”};uchar code EN_CHAR2[16]={“FREQ:
HZ”};
單片機實驗報告
void TIMER_Configuration();//初始化定時器 ulong Freq;
//用來存放要顯示的頻率值 ulong TimeCount;//用于計算1S鐘的
void main(){ uchar i, freqValue[6];
LcdInit();TIMER_Configuration();for(i=0;i<16;i++){
LcdWriteData(EN_CHAR1[i]);}
LcdWriteCom(0xc0);//第二行顯示
for(i=0;i<16;i++){
LcdWriteData(EN_CHAR2[i]);}
while(1){
if(TR0==0)
//當(dāng)計數(shù)器停下的時候,表明計數(shù)完畢
{
Freq = Freq + TL1;
//讀取TL的值
Freq = Freq +(TH1 * 256);//讀取TH的值
LcdWriteCom(0xc8);
//--求頻率的個十百千萬十萬位--//
freqValue[0]='0'+Freq%1000000/100000;
freqValue[1]='0'+Freq%100000/10000;
freqValue[2]='0'+Freq%10000/1000;
freqValue[3]='0'+Freq%1000/100;
freqValue[4]='0'+Freq%100/10;
freqValue[5]='0'+Freq%10;
for(i=0;i<5;i++)//從最高位開始查找不為0的數(shù)開始顯示(最低位為0顯示0)
{
if(freqValue[i]==0x30)
{
freqValue[i]=0x20;//若為0則賦值空格鍵
}
else
單片機實驗報告
{
break;
}
}
for(i=0;i<6;i++)
{
LcdWriteData(freqValue[i]);
}
Freq=0;//將計算的頻率清零
TH1=0;//將計數(shù)器的值清零
TL1=0;
TR0=1;//開啟定時器
TR1=1;//開啟計數(shù)器
} } }
void TIMER_Configuration(){ TMOD=0x51;TH0=0x3C;TL0=0xB0;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;} void Timer0()interrupt 1 { TimeCount++;if(TimeCount==20)//計時到1S {
TR0=0;
TR1=0;
TimeCount=0;
}
//--12MHZ設(shè)置定時50ms的初值--// TH0=0x3C;TL0=0xB0;} void Timer1()interrupt 3 {
單片機實驗報告
//--進入一次中斷,表明計數(shù)到了65536--// Freq=Freq+65536;
}
#include“l(fā)cd.h”
void Lcd1602_Delay1ms(uint c)
//誤差 0us {
uchar a,b;for(;c>0;c--){
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
} #ifndef LCD1602_4PINS //當(dāng)沒有定義這個LCD1602_4PINS時 void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;
//使能
LCD1602_RS = 0;
//選擇發(fā)送命令
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = com;
//放入命令
Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1;
//寫入時序
Lcd1602_Delay1ms(5);
//保持時間
LCD1602_E = 0;} #else
void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;//使能清零
LCD1602_RS = 0;//選擇寫入命令
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = com;// Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);
單片機實驗報告
LCD1602_DATAPINS = com << 4;//發(fā)送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS
void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//選擇輸入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;//寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//寫入時序
Lcd1602_Delay1ms(5);
//保持時間
LCD1602_E = 0;} #else void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;
//選擇寫入數(shù)據(jù)
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x38);//開顯示
單片機實驗報告
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點 } #else void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28);//在四位線下的初始化
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點 } #endif
八、RS232串口通信實驗(接收與發(fā)送)
1.基本要求
a.通過實驗了解串口的基本原理及使用,理解并掌握對串口進行初始化; b.使用串口調(diào)試助手(Baud 9600、數(shù)據(jù)位
8、停止位
1、效驗位無)做為上位機來做收發(fā)試驗;
c.利用串口調(diào)試助手中字符串輸入進行數(shù)據(jù)發(fā)送,接受窗口顯示收到的數(shù)據(jù)。2.實驗內(nèi)容
在Keil C51中進行程序的編寫設(shè)計并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實驗結(jié)果,如果不正確對程序進行改進后重復(fù)此操作。實驗結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
單片機實驗報告
4.電路原理圖
5.程序
#include
LcdWriteData(ChCode[i]);} UsartConfiguration();while(1){
if(RI == 1)
//查看是否接收到數(shù)據(jù)
{
receiveData = SBUF;//讀取數(shù)據(jù)
單片機實驗報告
RI = 0;
//清除標(biāo)志位
LcdWriteCom(0xC0);
LcdWriteData('0' +(receiveData / 100));
// 百位
LcdWriteData('0' +(receiveData % 100 / 10));// 十位
LcdWriteData('0' +(receiveData % 10));
// 個位
} } } void UsartConfiguration(){ SCON=0X50;
//設(shè)置為工作方式1 TMOD=0X20;//設(shè)置計數(shù)器工作方式2 PCON=0X80;
//波特率加倍
TH1=0XF3;
//計數(shù)器初始值設(shè)置,注意波特率是4800的TL1=0XF3;TR1=1;
//打開計數(shù)器 }
#include“l(fā)cd.h”
void Lcd1602_Delay1ms(uint c)
//誤差 0us {
uchar a,b;for(;c>0;c--){
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
} #ifndef LCD1602_4PINS //當(dāng)沒有定義這個LCD1602_4PINS時 void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;
//使能
LCD1602_RS = 0;
//選擇發(fā)送命令
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = com;
//放入命令
Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1;
//寫入時序
單片機實驗報告
Lcd1602_Delay1ms(5);
//保持時間
LCD1602_E = 0;} #else
void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;//使能清零
LCD1602_RS = 0;//選擇寫入命令
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4;//發(fā)送低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//選擇輸入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;//寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時序
Lcd1602_Delay1ms(5);
//保持時間
LCD1602_E = 0;} #else void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;
//使能清零
LCD1602_RS = 1;
//選擇寫入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時序
Lcd1602_Delay1ms(5);
單片機實驗報告
LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif
#ifndef LCD1602_4PINS void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x38);//開顯示
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點 } #else void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28);//在四位線下的初始化
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點 } #endif
單片機實驗報告
第六章 收獲體會
本次微控制器綜合設(shè)計基本上使用了所選微控制器的所有資源,進一步熟悉和加深了對中斷、定時器和串行通信的理解和使用。我覺得軟件實驗就是讓我們初學(xué)者熟悉keil的使用,然后復(fù)習(xí)下匯編的思想和掌握程序的流程,所以軟件實驗可以很快的完成,并且慢慢熟悉調(diào)試的強大功能。硬件設(shè)計中,仿真讓我很有感觸,感覺蠻好玩的,可以摒棄麻煩的實驗硬件自己在寢室玩而且不受硬件狀態(tài)的限制,即便出錯了也不會損壞。當(dāng)然更重要的是這種好習(xí)慣,仿真完后再去在實驗板上驗證會比直接要來的確切而且便捷,至少不要老是去插拔線。在做實驗中在同學(xué)指導(dǎo)下我試用C語言來編寫程序,確實發(fā)現(xiàn)比匯編語言容易編寫也容易理解,以前的實驗還是有參考資料的習(xí)慣,現(xiàn)在什么都開始自己寫感覺還是很有成就感的,當(dāng)然這是基于程序本身就那么幾行很容易編寫,也不是說參考不好??偠灾?,這學(xué)期的單片機實驗還是收獲頗豐的。相信在以后的實驗學(xué)習(xí)實踐工作中都會有個潛移默化的作用的。
第五篇:單片機實驗報告
單片機實驗報告
一、實驗?zāi)康?/p>
1.熟練使用Keil、Protues兩款軟件 2.通過上機操作,增強個人動手實踐能力 3.加深對理論知識的理解
4.培養(yǎng)運用匯編語言進行初步編寫程序的能力
二、實驗內(nèi)容
1.將片外RAM3050-306FH中數(shù)據(jù)轉(zhuǎn)移至片內(nèi)70-8FH中。
要求:可以從Keil或Protues上看到RAM的數(shù)據(jù)轉(zhuǎn)移結(jié)果。2.設(shè)計一個外部中斷觸發(fā)流水燈系統(tǒng):當(dāng)外部中斷來臨時,啟動流水燈,即令P2口的LED輪流循環(huán)點亮。
要求:開發(fā)板或Prrotues演示
3.將片內(nèi)存儲器80H中存放的BCD碼轉(zhuǎn)換為ASCII碼,要求使用表格查詢技術(shù)。
要求:在Keil或Protues上看到數(shù)據(jù)轉(zhuǎn)換結(jié)果。
4.各使用中斷方式和查詢方式設(shè)計一個方波發(fā)生器,頻率為50HZ。
要求:Protues使軟件間示波器顯示方波。
三、實驗程序
1.將片外RAM3050-306FH中數(shù)據(jù)轉(zhuǎn)移至片內(nèi)70-8FH中
ORG 0000H AJMP MAIN 上電,轉(zhuǎn)向主程序
ORG 0030H 主程序入口
MAIN: MOV DPTR,#3050H 數(shù)據(jù)指針指向地址3050H MOV A,#04H 將立即數(shù)04H送A寄存器
MOV R0,#20H NEXT: MOVX @DPTR,A INC DPTR 數(shù)據(jù)指針DPTR自加一
DJNZ R0,NEXT 判斷是否跳轉(zhuǎn)到NEXT或繼續(xù)向下執(zhí)行
MOV DPTR,#3050H MOV R0,#70H MOV R2,#20H NEXT1: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 DJNZ R2,NEXT1
SJMP $ 等待
END 2.設(shè)計一個外部中斷觸發(fā)流水燈系統(tǒng):當(dāng)外部中斷來臨時,啟動流水燈,即令P2口的LED輪流循環(huán)點亮 ORG 0000H SJMP MAIN 上電,轉(zhuǎn)向主程序
ORG 0003H 外部中斷0向量入口
AJMP INSER ORG 0030H 主程序入口
MAIN: SETB EX0 SETB IT0
SETB EA CPUHERE: SJMP HERE ORG 0200H INSER: MOV R2,#08H MOV A,#01H NEXT: MOV P2,A LCALL DELAY RL A DJNZ R2,NEXT NEXT或繼續(xù)向下執(zhí)行
RETI DELAY: MOV R3,#0FFH DEL2: MOV R4,#0FFH DEL1: NOP
允許外部中斷0中斷 選擇邊沿觸發(fā)方式 開中斷 等待中斷 設(shè)置循環(huán)次數(shù) 賦初值,設(shè)置高電平亮 將初值送往P2口 延時 左移一位
判斷循環(huán)次數(shù),是否跳轉(zhuǎn)到中斷返回 延時程序 DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 3.將片內(nèi)存儲器80H中存放的BCD碼轉(zhuǎn)換為ASCII碼,要求使用表格查詢技術(shù) ORG 0000H LJMP MAIN ORG 0030H主程序起始地址 MAIN: MOV 80H,#05H 將立即數(shù)50H轉(zhuǎn)送內(nèi)存單元80H MOV A,80H 將內(nèi)存單元80H中的內(nèi)容送寄存器A MOV DPTR,#TAB MOVC A,@A+DPTR A寄存器內(nèi)容加指針偏移量后送A寄存器 MOV 80H,A RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 4.1中斷方式產(chǎn)生50HZ方波
ORG 0000H
AJMP MAIN
ORG 0030H 主程序入口 MAIN: MOV TMOD,#10H 設(shè)置定時器工作模式為模式1 MOV TH1,#0D8H 裝入T1計數(shù)初值
MOV TL1,#0F0H
SETB ET1 開中斷
SETB EA CPU開中斷
SETB TR1 啟動定時器T1 HERE: SJMP HERE 等待中斷 ORG 001BH T1中斷向量地址
CLR TF1 將TF1清零
CPL P2.0 P2.0取反輸出
MOV TH1,#0D8H 重裝初值
MOV TH0,#0F0H
RETI;中斷返回
END 4.2 查詢方式產(chǎn)生50HZ方波
ORG 0000H
AJMP MAIN
ORG 0030H 主程序入口
MAIN: MOV TMOD,#10H 設(shè)置定時器的工作模式為模式1 SETB TR1 啟動定時器T1 LOOP: MOV TH1,#0D8H 裝入T1計數(shù)初值
MOV TH0,#0F0H JNB TF1,$ T1沒有溢出則等待
CLR TF1
產(chǎn)生溢出,清標(biāo)志位
CPL P2.0 P2.0取反輸出
SJMP LOOP 循環(huán)
END
四、實驗結(jié)果截圖
1.2
3.4.1
4.2