AT89C51實驗報告

2021-03-04 02:49:43 字數 4572 閱讀 2353

實驗一 mcs-51指令系統實驗——資料排序

一、實驗目的

熟悉mcs-51指令系統,掌握程式設計方法;加深對內部儲存器讀寫的認識;熟悉**開發環境,學會源程式的編寫、彙編/編譯、除錯;熟悉微控制器硬體實驗系統以及良好的實驗習慣培養等;學會檢查結果的正確性。

二、實驗內容

將程式儲存器的乙個列表中的10個單位元組無符號資料傳送到內部ram,然後用冒泡法對其按從小到大的次序重新排列,並送到外部ram 以8000h開始的位址單元內。

三、實驗說明

有序的數列更有利於查詢。本程式用的是「氣泡排序」法,演算法是將乙個數與後面的數相比較,如果比後面的數大,則交換,如此將所有的數比較一遍後,最大的數就會在數列的最後面。再進行下一輪比較,找出第二大資料,直到全部資料有序。

四、程式流程圖

五、除錯程式

;第一步:將程式儲存器的乙個列表中的10個單位元組無符號資料傳送到內部ram 40h~49h單元中。

*** 0000h

ljmp start1

*** 0030h

start1: mov r0,#40h設定r0為內部ram首位址

mov r1,#10設rl為計數器

mov dptr,#tab1

loop1: clr a累加器清零

movc a,@a+dptr ;外部資料送累加器a中

mov @r0,a送內部ram

inc r0調整內部ram指標,指向下乙個資料

inc dptr調整外部ram指標

djnz r1,loop1未完繼續

;第二步:排序。把片內ram 40h~49h單元中的10個無符號數逐一比較,並按從小到大的順序依次排列在這片單元中。

start2: clr f0清除交換標誌位f0

mov r3,#9 ;10個資料迴圈次數

mov r0,#40h ;資料存放區首址

mov a,@r0 ;取前數

l2: inc r0

mov r2,a ;儲存前數

subb a,@r0 ;前數減後數

mov a,r2 ;恢復前數

jc l1順序則繼續比較

setb f0逆序則建立標誌位

xch a,@r0 ;前數與後數交換

dec r0指向前數單元

xch a,@r0

inc r0仍指向後數單元

l1: mov a,@r0 ;取下乙個數

djnz r3,l2 ;依次重複比較

jb f0,start2 ;交換後重新比較

;第三步:將內部資料ram中40h~49h單元的內容傳送到外部資料儲存器以8000h開始的連續單元中去。

;40h~49h共計10個單元,需傳送10次資料。將rl作為迴圈計數器。具體程式如下。

start3: mov r0,#40h設定r0為內部ram首位址

mov dptr,#8000h ;設定外部ram首位址

mov r1,#10設rl為計數器

loop: mov a,@r0取內部ram數

movx @dptr,a ;送外部ram

inc r0調整內部ram指標,指向下乙個資料

inc dptr調整外部ram指標

djnz r1,loop未完繼續

sjmp暫停

tab1: db 09h,04h,02h,08h,00h ;數0-9表

db 00h,06h,07h,07h,0fh

end六、收穫與體會

第一次用組合語言在偉福6000環境下執行,感覺和vc6.0稍有不同,偉福6000除錯介面非常豐富,有片內ram——date;片外ram——xdate;**暫存器——code;特殊功能暫存器——sfr;

並且可以單步除錯,自己所編的程式一目了然;偉福6000果然是好東西;

冒泡法存在的不足及改進方法:

第一,在排序過程中,執行完最後的排序後,雖然資料已全部排序完備,但程式無法判斷是否完成排序,為了解決這一不足,可設定乙個標誌單元flag,將其設定為off,表示被排序的表示是乙個無序的表。在每一排序開始時,檢查此標誌,若此標誌為0,則結束排序;否則進行排序;

第二,當排序的資料比較多時排序的時間會明顯延長。改進方法:快速排序:

具體做法:任意選取某一記錄(通常取第乙個記錄),比較其關鍵字與所有記錄的關鍵字,並將關鍵字比它小的記錄全部放在它的前面,將比它大的記錄均存放在它的後面,這樣,經過一次排序之後,可將所有記錄以該記錄所在的分界點分為兩部分,然後分別對這兩部分進行快速排序,直至排序完。

實驗二 i/o口輸入輸出實驗

一、實驗目的

學習p1口作為輸出/輸入方式使用的方法;掌握延時子程式的編寫和使用;

二、實驗內容

(1)p1口做輸出口,接8個發光二極體,編寫程式,使發光二極體迴圈點亮。

(2)p1.0~p1.3口做輸入口,接4位撥碼開關;p1.

4~p1.7做輸出口,接4個發光二極體。編寫程式讀取p1口低四位的開關量輸入狀態,輸出到p1口的高四位,由二極體指示出來。

三、 實驗流程圖

(1) p1口迴圈點燈程式框圖

2)p1口輸入輸出程式框圖

四、除錯程式

(1)、p1口迴圈點燈程式

*** 0000h

ljmp start

*** 0030h

start:mov a,#01h;位初值

loop: mov p1,a;輸出

lcall delay;延時

rl a;左移下一位

ljmp loop

delay: mov r5,#20 ;延時子程式,延時0.2秒

d1: mov r6,#20

d2: mov r7,#248

djnz r7,$

djnz r6,d2

djnz r5,d1

retend(2)、p1口輸入輸出程式

*** 0000h

ljmp start

*** 0030h

start: mov a,p1

anl a,#0fh ;p1用作輸入口時,必須置1,否則讀入的數可能出錯

;可用半位元組交換指令swap a再賦值給p1

rr ap1.0~p1.3口做輸入口,接4位撥碼開關

rr ap1.4~p1.7做輸出口,接4個發光二極體

rr a

rr a

orl a,#0fh ;p1用作輸入口時,必須置1,否則讀入的數可能出錯

mov p1,a

sjmp start

end五、收穫與體會

這次試驗做的是i/o口的輸入輸出,這個實驗以以小見大的手法,將微控制器的功能表現的淋漓盡致;只要我可以使它乙個燈亮,我就可以控制全部外圍裝置;這樣的感覺太爽了;果真是其樂無窮,「給我乙個支點,我可以撬動整個地球」;

p1口是準雙向口。它作為輸出口時與一般的雙向口使用方法相同。由準雙向口結構可知當p1口用為輸入口時,必須先對它置「1」。若不先對它置「1」,讀入的資料是不正確的。

實驗三定時器/計數器實驗

一、實驗目的

了解mcs-51微控制器中定時器/計數器的基本結構、工作原理和工作方式,掌握工作在定時器和計數器兩種方式下的程式設計方法。

二、實驗內容

(1)定時器實驗:在使用6mhz晶振的條件下,用定時器1產生10ms定時,由p1.0口輸出週期為2s的方波訊號,並通過發光二極體指示p1.0的輸出波形。

(2)定時器實驗(選作):在使用6mhz晶振的條件下,用埠輸出不同頻率的脈衝(不同頻率的脈衝用定時器實現),控制蜂鳴器發出「do re mi fa sol la si do」不同音調(這些音調的頻率可以參考書中p142的表6-3)

(3)計數器實驗:按計數器模式和方式2工作,對p3.4(t0)引腳進行計數。將其數值按二進位制數在p1口驅動led燈上顯示出來。

三、實驗說明

1、關於內部計數器的程式設計主要是定時常數的設定和有關控制暫存器的設定。內部計數器在微控制器中主要有定時器和計數器兩個功能。本實驗使用的是定時器。

2、定時器有關的暫存器有工作方式暫存器tmod和控制暫存器tcon。tmod用於設定定時器/計數器的工作方式0-3,並確定用於定時還是用於計數。tcon主要功能是為定時器在溢位時設定標誌位,並控制定時器的執行或停止等。

3、內部計數器用作定時器時,是對機器週期計數。每個機器週期的長度是12個振盪器週期。因為實驗系統的晶振是6mhz,本程式工作於方式2,即8位自動重灌方式定時器, 定時器100us中斷一次, 所以定時常數的設定可按以下方法計算:

機器週期=12÷6mhz=2us

(256-定時常數)×2us=100us

定時常數=206. 然後對100us中斷次數計數10000次,就是1秒鐘.

4、在例程的中斷服務程式中,因為中斷定時常數的設定對中斷程式的執行起到關鍵作用,所以在置數前要先關對應的中斷,置數完之後再開啟相應的中斷。

四、實驗流程圖

主程式框圖定時中斷子程式框圖

五、除錯程式

(1)、定時器實驗

中斷方式

*** 0000h

reset: ljmp main

*** 001bh

AT89C51微控制器的基本結構

at89c51微控制器的主要工作特性 內含4kb的flash儲存器,擦寫次數1000次 內含28位元組的ram 具有32根可程式設計i o線 具有2個16位可程式設計定時器 具有6個中斷源 5個中斷向量 2級優先權的中斷結構 具有1個全雙工的可程式設計序列通訊介面 具有乙個資料指標dptr 兩種低功...

AT89C51串並轉換驅動數碼管實驗指導

2011 05 17 18 49 42 網際網路 關鍵字 at89c51 串並轉換驅動數碼管 器件 74hc595.引腳說明 sda 資料輸入口。sh cp 資料輸入控制端,在每個 sh cp的上公升沿,sda口上的資料移入暫存器,在 sh cp的第 9個上公升沿,資料開始從 qs 移出。st cp...

AT89C51微控制器在無線資料的應用

數理與資訊工程學院 課程設計 題目 at89c51微控制器在無線資料的應用 專業 電腦科學與技術 專公升本 班級 電腦科學與技術 056專公升本 姓名 董越學號 05191133 指導老師餘水寶 成績 2006.6 目錄第1節引言3 1.1 無線資料傳輸概述3 1.2 設計任務3 1.3 系統主要功...