51單片機實驗合集


實驗一 多字節十進制加法程序設計

一.實驗目的:

1.熟悉仿真器的軟件使用環境及單片機匯編語言編程;

2.掌握多字節十進制加法的程序設計及實現方法。

二.實驗內容:

編寫多字節十進制加法程序,實現下式運算 :

         4574+6728=11302

要求:被加數在片內RAM區20H、21H單元;分別為學號(7),學號+1(8);

      加數在片內RAM區30H、31H單元;分別為學號+2(9),學號+3(10);

         結果在片內RAM區20H(最高位進位)、21H(高位)、22H(低位)單元。

三.實驗步驟:

1.開機啟動Keil C51軟件進入μVision2 集成開發環境,確認89C51處於軟件仿真狀態。

2.完成程序的設計、編輯、編譯、連接。

3.進入DEBUG方式,打開存儲器Memory 1窗口,在窗口Address欄鍵入D:20H;點擊鼠標右鍵,選擇最后一項Modify Memory ,輸入被加數;在窗口Address欄鍵入D:30H;點擊鼠標右鍵,選擇最后一項Modify Memory ,輸入加數。

4.調試和運行程序並記錄存儲器Memory 1窗口實驗結果。

四.實驗參考程序:

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV A,20H

ADD A,30H

DA A

MOV 22H,A

MOV A,21H

ADDC A,31H

DA A

MOV 21H,A

CLR A

MOV R3,00H

ADDC A,R3

MOV 20H,A

SJMP $

END

五.實驗截圖:

 

 

 

實驗總結:學會了多字節十進制加法程序設計,對keilc51有了更為熟練地掌握,也對程序有了更為深入的了解,課堂所學的理論以及一些不清楚的地方在實驗中得到了答案。

 

 

 

實驗三 P1口輸出實驗

 

一.實驗目的:

 

1.掌握P1口輸出端口的使用原理及編程方法;

 

2.加深I/O端口對外部電路驅動原理的理解。

 

二.實驗內容:

 

P1口做輸出,驅動8只發光二極管,編寫程序,以1s的時間間隔使得一個發光二極管從左到右循環點亮。

 

三.實驗步驟:

 

1.理解P1口內部結構,掌握P1口輸出高低電平的原理。

 

2.看懂實驗電路,完成接口連線(注意,接線時需要關閉實驗箱電源)。

 

 

 

3.編寫控制程序,注意延時循環的時間控制在1s

 

4.進入DEBUG方式,打開I/O口查看工具,監視P1口的輸出變化。調試程序並觀察發光二極管點亮情況。

 

 

四.實驗參考程序:

 

ORG 0000H

 

SJMP MAIN

 

ORG 0030H

 

MAIN: MOV P2,#0FEH

 

LOOP: ACALL DELAY

 

MOV A,P2

 

RL A

 

MOV P2,A

 

AJMP LOOP

 

 

 

DELAY:

 

MOV R3,#100

 

DELAY2: MOV R4,#100

 

DELAY3: MOV R5,#100

 

DELAY1: DJNZ R5,$

 

DJNZ R4,DELAY3

 

DJNZ R3,DELAY2

 

RET

 

END

 

;說明:P1口接發光二極管

 

實驗結果:輸入代碼調試好,通過燒寫器可以看見單片機上的二極管呈周期性點亮,改動數據能改變它點亮的時間間隔。實驗結果如下圖所示:

 

 

 

實驗總結:這次實驗中花了很多時間去看電路圖以及去理解代碼,調整代碼,對keil uVision軟件的使用並不是很熟練,初次使用燒寫器沒找到要燒入的文件忘記調芯片類型以及波特率,通過這次試驗掌握了P1口輸出端口的原理,也熟悉了代碼程序的編寫。

 

 

 

實驗四 P口輸入實驗

 

一.實驗目的:

 

1.掌握P3口輸入端口的使用原理及編程方法;

 

2.加深I/O端口對外部電路驅動原理的理解。

 

二.實驗內容:

 

通過手動按鍵K1-K3,循環讀取P3.0-P3.3,並將結果顯示在P2.0-P2.3LED上,按鍵觀察讀入的值變化。

 

三.實驗步驟:

 

1.理解I/O口讀取外部電平原理.

 

2.進入DEBUG方式,打開I/O口查看工具,監視P3口的輸出變化。

 

4.生成HEX文件,燒入實驗板,按鍵並觀察發光二極管閃爍情況。

 

 

 

 

四.實驗參考程序:

 

            ORG   0000H

 

   SJMP  0030H

 

   ORG   0030H

 

START:

 

LOOP:       MOV   C,P3.1

 

            MOV   P2.0,C            ;讀按鍵K1顯示在D1

 

   MOV   C,P3.0

 

   MOV   P2.1,C            ;讀按鍵K2顯示在D2

 

   MOV   C,P3.2

 

   MOV   P2.2,C            ;讀按鍵K3顯示在D3

 

 

 

   MOV   C,P3.3

 

   MOV   P2.3,C            ;讀按鍵K4顯示在D4

 

   

 

   SJMP  LOOP

 

   

 

   END

 

 

 

;說明:P2口接發光二極管

 

 

 

 

 

 

 

 

 

實驗總結:最開始照搬老師的代碼發現並無法實現按K1實現D1燈亮,按K2實現D2燈亮,自己仔細分析了一遍找到了兩處需要更改的地方,經過更改最后順利實現了通過手動按鍵實現相應的LED燈亮起,這次實驗也加深了我對I/O口作用的理解。

 

 

 

實驗五 外部中斷實驗

 

一.實驗目的:

 

1.掌握51單片機中斷原理及編程方法;

 

2.了解中斷觸發方式及中斷優先級的概念。

 

二.實驗內容:

 

通過手動按鍵產生負脈沖信號,K3控制輸出的負脈沖信號加於INT0,K4控制輸出的負脈沖加於INT1.主程序以1秒為間隔循環點亮響鈴的兩個LED程序,設置INT0為低優先級,當按K3鍵並釋放按鍵后,發出中斷信號,使得8個LED1秒為間隔“全亮-全滅”方式閃動10秒。

 

 

 

 

 

完成上述試驗后,設置INT1的觸發方式為邊沿觸發,優先級為高優先級,安東開關K4,產生負脈沖,INT1中斷服務為高優先級,按動開關K4,長生負脈沖,INT1響應,以1秒為間隔循環點亮8LED。

 

三.實驗步驟:

 

1.理解TCON寄存器中IT0 IT1的設置,IE和EA的正旗設置。

 

2.理解外部中斷的觸發原理.

 

2.進入DEBUG方式,打開I/O口查看工具,監視P3口的輸出變化。

 

4.生成HEX文件,燒入實驗板,按鍵並觀察發光二極管閃爍情況。

 

 

四.實驗參考程序:

 

ORG 0000H

 

LJMP MAIN

 

ORG 0003H

 

LJMP INT_0

 

ORG 0013H

 

LJMP INT_1

 

ORG 0030H

 

MAIN:

 

MOV SP,#07H

 

MOV A,#0FCH

 

SETB EA

 

SETB EX0

 

SETB EX1

 

SETB IT1

 

SETB PX1

 

 

 

 

 

LOOP:

 

MOV     P2,A

 

MOV     R2,#30

 

LCALL DLY

 

RL A

 

SJMP LOOP

 

 

 

INT_0:

 

PUSH ACC

 

PUSH PSW

 

SETB RS0

 

CLR     RS1

 

MOV     A,#00H

 

MOV     R3,#10

 

LOOP1:

 

MOV     P2,A

 

MOV     R2,#49

 

LCALL DLY

 

CPL     A

 

DJNZ R3,LOOP1

 

POP     PSW

 

POP     ACC

 

RETI

 

INT_1:

 

PUSH ACC

 

PUSH PSW

 

SETB RS1

 

SETB RS0

 

MOV     A,#07FH

 

MOV     R3,#8

 

LOOP2:

 

MOV     P2,A

 

MOV     R2,#49

 

LCALL DLY

 

RL     A

 

DJNZ R3,LOOP2

 

POP     PSW

 

POP     ACC

 

RETI

 

DLY: MOV     R0,#100

 

DLY1: MOV     R1,#100

 

 

 

DJNZ R1,$

 

DJNZ R0,DLY1

 

DJNZ R2,DLY

 

RET

 

END

 

 

 

;說明:P2口接發光二極管

 

五、實驗過程

 

打開Keil uvisions軟件,做好編譯前准備,根據實驗要求編寫程序,先編寫三個循環程序,一個是主程序以1秒為間隔循環點亮響鈴的兩個LED程序,一個是8個LED1秒為間隔“全亮-全滅”方式閃動10秒,一個是1秒為間隔循環點亮8LED,再設置好INT_0和INT_1調好他們觸發方式以及優先級,讓INT_1優先級高於INT_0,從而實現按K3實施INT_0中斷服務,K4實施INT_1中斷服務(具體程序步驟四)。編譯檢查程序無誤,保存,執行。生成HEX文件,燒入實驗板,按鍵並觀察發光二極管閃爍情況。

 

六、實驗結果

 

 

 

 

 

 

 

七、實驗總結

 

在老師的指導下通過這次實驗我了解了中斷原理以及相應的編程,也了解了如何設置中斷程序優先級和循環的問題,同時也對匯編語言的操作便有了更多的認識。

 

 

 

實驗六 計數器實驗

一.實驗目的:

1.熟悉MCS-51單片機定時/計數器的外部計數原理;

2.進一步掌握定時/計數器的計數功能的初始化和編程方法。

二.實驗內容:

模擬產品包裝線上對物品件數的計數,假設每個包裝箱10件物品,每個物品經過傳送帶時,光電傳感器將發出一個脈沖信號,利用T0定時計數器對該脈沖進行計數,每計滿19個物件,將箱數計數器加1,同時將箱數計數器的值以二進制的形式顯示在8個LED發光二級管中。

光電傳感器脈沖由實驗儀器上的K3按鍵來模仿。

三.實驗步驟:

1.理解TCON寄存器中IF0 IF1的設置,IE的EA和ET0的正確設置。

2.理解定時計數器的外部計數的觸發原理.

2.編寫匯編程序,並生成HEX文件,燒入實驗板。

4.按鍵並保持100毫秒以上,模擬光電傳感器的脈沖,記錄按鍵次數,並觀察發光二極管組的顯示,驗證其代表的計數(二進制形式)正確情況情況。

 

四.實驗參考程序:

 ORG   0000H

 LJMP  MAIN

 ORG   0030H

MAIN:    MOV   TMOD,#0110B ;T0方式2,計數器方式

 MOV   TH0,#00F6H ;計數次數為10

 MOV   TL0,#00F6H

 MOV   R1,#0H

 SETB  TR0 ;啟動計時器

;---------------------------------

;控制燈亮

LOOP:  MOV   A,R1

     CPL   A ;A取反

 MOV   P2,A ;控制燈亮

 MOV   C,P3.2

 CPL   C

 MOV   P3.4,C ;傳遞給P3.4

 JBC   TF0,NEXT ;查詢溢出位,10個溢出一次

 LJMP  LOOP

;---------------------------------

;控制R1數值並在LOOP中令A取反控制燈亮

NEXT:    

 INC   R1

 LJMP  LOOP

 END

 

;說明:P2口接發光二極管

五、實驗過程

打開Keil uvisions軟件,做好編譯前准備,根據實驗要求編寫程序,計數器方式采用T0方式2,根據計數次數為10計算出2^8-10=246即00F6H,根據要求寫好主程序與循環程序(具體程序步驟四)。編譯檢查程序無誤,保存,執行。生成HEX文件,燒入實驗板,持續按動按鍵K3並觀察發光二極管閃爍情況。

六、實驗結果:

 

七、實驗總結

通過實驗熟悉了單片機定時的外部計數原理以及編程方法,此次實驗發現我對定時器中斷方式的掌握有所欠缺不足,更傾向於使用查詢方式,對單片機定時方式還應該多花時間看看。

 

 

 

實驗七 定時器實驗

一.實驗目的:

1.熟悉MCS-51單片機定時/計數器的定時工作原理及使用方法;

2.進一步掌握定時/計數器的初始化和編程方法。

3.進一步掌握中斷程序的調試方法。

二.實驗內容:

初始化設置內部定時器T0工作在方式1,即作為16位定時器使用。定時時間為10ms,每10ms T0溢出中斷一次,將P1.0~1.7分別接發光二極管L1~L8。編寫程序模擬一時序控制裝置。開機后第一秒L1,L3亮,第二名L2,L4,亮,第三秒L5,L7亮,第4秒L6,L8亮以后重頭開始,一直循環。

三.實驗步驟:

1.理解TCON寄存器中TF0 TF1的作用,IE的EA和ET0的正確設置。

2.理解定時/計數器的定時功能的觸發原理.

3.編寫匯編程序,並生成HEX文件,燒入實驗板。

 

四.實驗參考程序:

LJMP INT_T0

ORG 0030H

MAIN:

MOV TMOD,#01H;T0選用定時器方式1

MOV TH0,#0D8H ;設置T0每10ms中斷一次

MOV TL0,#0F0H

MOV R0,#00H ;控制R0處內容

MOV R1,#100 ;控制中斷次數為100

SETB EA ;總中斷

SETB ET0 ;啟動定時器中斷

SETB TR0     ;啟動定時器

SJMP $

;-----------------------------中斷程序

INT_T0:

CLR TR0 ;關閉中斷

MOV TH0,#0D8H  

MOV TL0,#0F0H

SETB TR0

DJNZ R1,EXIT ;中斷次數少於100返回main繼續執行 MOV R1,#100

MOV DPTR,#T_DATA

MOV A,R0

MOVC A,@A+DPTR

MOV P2,A ;控制燈亮

INC R0

ANL 00,#03H

EXIT:

RETI ;返回

T_DATA: DB 0FAH,0F5H,0AFH,05FH

END

 

;說明:P2口接發光二極管

五、實驗過程

打開Keil uvisions軟件,做好編譯前准備,根據實驗要求編寫程序,計數器方式采用T0方式1,根據定時時間為10ms計算出2^16-10000=5536即D8F0H,按照要求計算出各個燈亮對應的編碼 0FAH,0F5H,0AFH,05FH,根據要求寫好主程序與循環程序(具體程序步驟四)。編譯檢查程序無誤,保存,執行。生成HEX文件,燒入實驗板,觀察發光二極管閃爍情況。

六、實驗結果

 

 

七、實驗總結

   這次的單片機的定時實驗並不是很難,通過實驗我了解51單片機定時/計數器的定時工作原理及使用方法,也進一步掌握了中斷程序的調試方法,對程序的每一部分都有了更為清楚的掌握。                  

 

 

 

實驗八 數碼管實驗

一.實驗目的:

1.掌握51單片機前后台程序結構及編程方法;

2.了解數碼管段碼和位碼的控制。

二.實驗內容:

通過手動按鍵K3,使得數碼管0位從“0”-“f”顯示

通過手動按鍵K4,使得數碼管1位從“0”-“f”顯示

 

三.實驗步驟:

1.理解共陰極數碼管工作原理。

2.理解3-8譯碼器工作原理.

2.查詢按鍵小兜並使得內存單元加1。

4.依次顯示數碼管0,1位上變化的數據。

四.實驗參考程序:

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT_K3

ORG 0013H

LJMP INT_K4

ORG 0030H

MAIN:

SETB EA           

SETB IE0          

SETB IE1          

CLR IT0          

CLR IT1          

SETB EX0         

SETB EX1           

MOV DPTR,#TAB     

MOV R5,#0

MOV R6,#0

L1:

ACALL LOOP     

SJMP L1           

;--------------------------------------

INT_K3:

ACALL LOOP         

JNB P3.2,INT_K3     

INC R5             

CJNE R5,#16,EIXT      

MOV R5,#0             

RETI                    

;--------------------------------------

INT_K4:

ACALL LOOP

JNB P3.3,INT_K4

INC R6

CJNE R6,#16,EIXT

MOV R6,#0

RETI

;--------------------------------------

LOOP:

MOV A,#11111111B

MOV P2,A                

MOV A,R5                 

MOVC A,@A+DPTR

MOV P0,A

ACALL DELAY

MOV A,#11111011B

MOV P2,A

MOV A,R6

MOVC A,@A+DPTR

MOV P0,A

ACALL DELAY

RET

;--------------------------------------

EIXT:

RETI

;--------------------------------------

DELAY:

MOV R1,#10

DELY1: MOV R2,#10

DJNZ R2,$              

DJNZ R1,DELY1          

RET

;--------------------------------------

TAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

 

END

;說明:P0口接數碼管端碼,3-8譯碼器選擇數碼管位碼。

五、實驗過程

打開Keil uvisions軟件,做好編譯前准備,根據實驗要求編寫程序,按鍵k3,k4分別控制數碼管0位和1位從0顯示到F,據要求編寫好代碼(具體程序步驟四)。編譯檢查程序無誤,保存,執行。生成HEX文件,燒入實驗板,按動按鍵觀察數碼管顯示情況。

六、實驗結果

 

七、實驗總結

通過實驗了解了共陰極數碼管工作原理,也發現了自己前面一些知識的掌握有所不足,還需要多多學習。

 

 

實驗九 串口實驗

一.實驗目的:

1.掌握51單片機串口原理及編程方法;

2.了解中斷服務的概念。

二.實驗內容:

通過編程,實現單片機開機發送“Welcome”,並等待接收串口的數字信息,顯示在數碼管的第0位。實現波特率115200bps的通信。

三.實驗步驟:

1.理解SCON寄存器中SM0,SM1,REN的設置。

2.學習根據fosc計算波特率,並設置定時器的工作方式和參數.

2.按中斷接收服務程序的模式,調試運行,打開串口助手,接收和發送單片機的內容。

4.生成HEX文件,燒入實驗板,打開並觀察數碼管顯示情況。

四.實驗參考程序:

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV TMOD,#20H   ;定時器1 定時方式 方式2
MOV TH1,#0FDH ;3us
MOV TL1,#0FDH
SETB TR1 ;開啟T1定時器
MOV SCON,#52H
MOV DPTR,#T_TAB
;-------------------------------------發送
SEND: CLR A
MOVC A,@A+DPTR
INC DPTR
JZ RECEIVE ;
JNB TI,$ ;TI判斷輸出一個字符是否完成
CLR TI
MOV SBUF,A ;
SJMP SEND
;-------------------------------------接收
RECEIVE:JNB RI,$ ;RI判斷輸入一個字符是否完成
CLR RI
MOV A,SBUF ;
MOV B,#48 
DIV     AB
MOV A,B ;
ACALL DISPLAY
SJMP RECEIVE
;-------------------------------------顯示
DISPLAY:MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV  P0,A
RET
;-------------------------------------發送字段
T_TAB: DB 'WELCOME'
DB 0DH,0
;-------------------------------------接收譯碼字段
TAB:
DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

;說明:串口采用8位異步通信方式2

五、實驗過程

打開Keil uvisions軟件,做好編譯前准備,根據實驗要求編寫程序,采用定時器1方式2,根據波特率9600計算出9600=11059200/(32*12*(256-N))即N=253,即)0FDH,共陰極0-9對應的編碼為3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,根據要求寫好各個模塊內容(具體程序步驟四)。編譯檢查程序無誤,保存,執行。生成HEX文件,燒入實驗板。

六、實驗結果

 

七、實驗總結

通過學習了解了根據fosc計算波特率的算法,也再次鞏固了定時器的工作方式,同時也初步了解了單片機串口原理以及編程方法。

 

 

(實驗結果是圖復制不過來,就這樣)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM