第一篇:單片機(jī)串行通信實(shí)驗(yàn)
實(shí)驗(yàn)四 單片機(jī)串行通信實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
1、掌握單片機(jī)串行口工作方式的程序設(shè)計(jì),及簡易三線式通訊的方法。
2、了解實(shí)現(xiàn)串行通訊的硬環(huán)境、數(shù)據(jù)格式的協(xié)議、數(shù)據(jù)交換的協(xié)議。
3、學(xué)習(xí)串口通訊的中斷方式的程序編寫方法
二、實(shí)驗(yàn)說明
利用單片機(jī)串行口,實(shí)現(xiàn)兩個(gè)實(shí)驗(yàn)臺(tái)之間的串行通訊。其中一個(gè)實(shí)驗(yàn)臺(tái)作為發(fā)送方,另一側(cè)為接收方。發(fā)送方讀入按鍵值,并發(fā)送給接收方,接收方收到數(shù)據(jù)后在LED上顯示。
三、實(shí)驗(yàn)儀器
計(jì)算機(jī)
偉福實(shí)驗(yàn)箱(lab2000P)
四、實(shí)驗(yàn)內(nèi)容與軟件流程圖 1、8051的RXD、TXD接線柱在POD51/96仿真板上。
2、通訊雙方的RXD、TXD信號本應(yīng)經(jīng)過電平轉(zhuǎn)換后再行交叉連接,本實(shí)驗(yàn)中為減少連線可將電平轉(zhuǎn)換電路略去,而將雙方的RXD、TXD直接交叉連接。也可以將本機(jī)的TXD接到RXD上,這樣按下的鍵,就會(huì)在本機(jī)LED上顯示出來。
3、若想與標(biāo)準(zhǔn)的RS232設(shè)備通信,就要做電平轉(zhuǎn)換,輸出時(shí)要將TTL電平換成RS232電平,輸入時(shí)要將RS232電平換成TTL電平??梢詫⒎抡姘迳系腞XD、TXD信號接到實(shí)驗(yàn)板上的“用戶串口接線”的相應(yīng)RXD和TXD端,經(jīng)過電平轉(zhuǎn)換,通過“用戶串口”接到外部的RS232設(shè)備??梢杂脤?shí)驗(yàn)儀上的邏輯分析儀采樣串口通信的波形
4、軟件流程圖
5、實(shí)驗(yàn)電路連接方式
①雙機(jī)串行通信方式。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。
②單機(jī)通信的情況下,只需將自己的TXD腳與RXD腳連接就可以,不用公地操作。
五、思考題
1、接收到的數(shù)據(jù)加1顯示出來;
2、保存前一個(gè)接收到的數(shù)據(jù),數(shù)據(jù)向前推動(dòng)顯示。
六、源程序修改原理及其仿真結(jié)果 實(shí)驗(yàn)結(jié)果圖 源程序:
加1顯示:
接收到的數(shù)據(jù)先前推送:
七、心得體會(huì)
通過這次實(shí)驗(yàn),我掌握了單片機(jī)串行口工作方式的程序設(shè)計(jì),及簡易三線式通訊的方法。了解了實(shí)現(xiàn)串行通訊的硬環(huán)境、數(shù)據(jù)格式的協(xié)議、數(shù)據(jù)交換的協(xié)議。學(xué)習(xí)了串口通訊的中斷方式的程序編寫方法。
第二篇:實(shí)驗(yàn)一簡單的異步串行通信實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)一 簡單的異步串行通信實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康募耙?/p>
1、了解掌握RS-232接口標(biāo)準(zhǔn)以及 DB9的主要引腳功能;
2、了解掌握串口通信的基本原理;
3、學(xué)習(xí)掌握RS-232電纜的制作和測試方法;
4、學(xué)習(xí)掌握使用串口調(diào)試程序進(jìn)行串口之間的通信實(shí)驗(yàn)。
二、實(shí)驗(yàn)原理
1、異步串行通信原理
在計(jì)算機(jī)系統(tǒng)中,每個(gè)字符一般使用一個(gè) 8 位二進(jìn)制代碼表示。在數(shù)據(jù)通信中,通常將 傳送的每個(gè)字符的二進(jìn)制代碼按照由低位到高位的順序依次發(fā)送的方式稱為串行通信。圖 2-1 是串行通信的示意圖。由于串行通信只需在發(fā)送方和接收方之間建立一條通信信道,因 此可以減小通信系統(tǒng)的造價(jià)。在遠(yuǎn)程通信中,一般采用串行通信方式。
圖 1-1 串行通信示意圖
同步是數(shù)據(jù)通信中必須解決的一個(gè)重要問題。所謂同步就是要求通信的收發(fā)雙方在時(shí)間基準(zhǔn)上保持一致。在串行通信中,“異步”是同步收發(fā)雙方通信的重要方式。在異步串行通信中,每個(gè)字符作為一個(gè)獨(dú)立的整體進(jìn)行發(fā)送,字符之間的時(shí)間間隔可以是任意的。為了實(shí)現(xiàn)同步,需要在每個(gè)字符的第一位前加 1 位起始符(邏輯 1),并在字符的最后一位后加 1位、1.5 位或 2 位停止位(邏輯 0)。異步串行傳輸?shù)谋忍亓鹘Y(jié)構(gòu)如圖 2-2所示。
圖 1-2 異步串行傳輸?shù)谋忍亓鹘Y(jié)構(gòu)
常用的串行通信接口標(biāo)準(zhǔn)包括RS-232、RS-449、V.24、V.35等。其中,RS-232是最常 用的串行通信標(biāo)準(zhǔn)之一。個(gè)人計(jì)算機(jī)及終端系統(tǒng)中配備的串行接口幾乎都符合 RS-232 標(biāo)準(zhǔn)。
2、RS-232 接口標(biāo)準(zhǔn)
串行口是一種最基本的通信接口,基本上所有的個(gè)人計(jì)算機(jī)及通信終端設(shè)備都配有這種接口。RS-232 的主要內(nèi)容就 是定義數(shù)據(jù)終端設(shè)備DTE(data terminal equipment)和數(shù)據(jù)通信設(shè)備DCE(data circuit equipment)之間的接口標(biāo)準(zhǔn)。RS-232 是美國電子工業(yè)協(xié)會(huì) EIA 推薦使用的串行通信標(biāo)準(zhǔn)。其初衷是為了促進(jìn)利用電話網(wǎng)進(jìn)行數(shù)據(jù)通信應(yīng)用的發(fā)展,現(xiàn)在也普遍應(yīng)用于各類計(jì)算機(jī)或終端設(shè)備之間的短距離連接。
RS-232 使用的連接器包括 DB-
25、DB-15 和 DB-9 等幾種類型,不同類型連接器使用的引腳定義也各不相同。
計(jì)算機(jī) RS-232 串行通信的基本過程。圖 1-4 異步串行通信實(shí)驗(yàn)總體結(jié)構(gòu)示意圖
三、實(shí)驗(yàn)過程與實(shí)驗(yàn)步驟
1、使用制作的 RS-232電纜將 2臺(tái)計(jì)算機(jī)的可用 COM 口連接起來。
2、復(fù)制串口調(diào)試助手到硬盤上。
3、直接雙擊 “串口調(diào)試助手 3.0”運(yùn)行軟件。檢查串口線是否連接到計(jì)算機(jī)和設(shè)備上。確定串口(本機(jī)為com1)。在串口調(diào)試助手中打開串口:com1。
4、使用字符串收發(fā)
5、使用文件傳輸功能
使用文件傳輸功能,在 2 臺(tái)電腦上傳輸文件,這對于某些特定場合可以用到該功能。首先由接收一端在打開串口后,按下接收文件按鈕。
之后會(huì)彈出一個(gè)對話框,等待對方發(fā)送文件。
發(fā)送一端在打開串口后,先選擇發(fā)送文件(如下圖)
選擇文件后,按下發(fā)送按鈕,文件開始傳輸中,這時(shí) 2 端都可以看到發(fā)送的進(jìn)度條。發(fā)送完畢后,軟件會(huì)提示!
四、實(shí)驗(yàn)結(jié)果與分析:串口(com1)
1、正常發(fā)送:
(1)A機(jī):波特率相同(9600)、校驗(yàn)位相同(none)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機(jī):波特率相同(9600)、校驗(yàn)位相同(none)、數(shù)據(jù)位相同(8)、停止位相同(1)結(jié)果:A機(jī)發(fā)“你好”,B機(jī)收“你好”,(圖1); B機(jī)發(fā)“哈哈”,A機(jī)收“哈哈”,(圖2);
圖1
圖2(2)、A機(jī):波特率相同(19200)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(2)
B機(jī):波特率相同(19200)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(2)結(jié)果:A機(jī)發(fā)“我很好”,B機(jī)收“我很好”;圖3); B機(jī)發(fā)“你呢”,A機(jī)收“你呢”;圖4);
圖3
圖4
2、波特率不同
A機(jī):波特率相同(4800)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)B機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結(jié)果:A機(jī)發(fā)“01 02 03”,B機(jī)收“胉”;(圖5); B機(jī)發(fā)“yjw”,A機(jī)收“?”;(圖6); 分析: 圖6
圖5 波特率控制采樣時(shí)間間隔,波特率不相同,收發(fā)雙方在 相等時(shí)間內(nèi)接收和發(fā)送數(shù)據(jù) 不一致。
3、數(shù)據(jù)位不同
A機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(6)、停止位相同(1)B機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結(jié)果:A機(jī)發(fā)“040506”,B機(jī)收“?”,(圖7); B機(jī)發(fā)“l(fā)ys”,A機(jī)收“,9>”,(圖8); 分析:數(shù)據(jù)位不相同,收發(fā)雙方在相等時(shí)間內(nèi)接收和發(fā)送數(shù)據(jù)不一致,所以結(jié)果不相同
圖7
圖8
4、奇偶校檢不同
(1)A機(jī):波特率相同(9600)、校驗(yàn)位相同(EVE)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結(jié)果:A機(jī)發(fā)“54 85 96 75”,B機(jī)收“54 85 96 75”;(圖9)B機(jī)發(fā)“第五種”,A機(jī)收“第五種”;(圖10)分析:因?yàn)樾r?yàn)位用于檢驗(yàn) 接收和發(fā)送的數(shù)據(jù)的正確性的,在最終轉(zhuǎn)換時(shí)會(huì)去除校驗(yàn)位,所以接收到的有效數(shù)據(jù)和發(fā)送的有效數(shù)據(jù)相同,發(fā)送與接收結(jié)果一樣。
圖9
圖10(2)A機(jī):波特率相同(9600)、校驗(yàn)位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結(jié)果:A機(jī)發(fā)“54 85 96 75”,B機(jī)收“
”;(圖11)
B機(jī)發(fā)“第六種”,A機(jī)收“第六種”;(圖12)
分析:由于A機(jī)無校驗(yàn)位,B機(jī)有校驗(yàn)位,所以B機(jī)在收到數(shù)據(jù)并校檢,后會(huì)自動(dòng)去除校檢位以致發(fā)雙方的有校數(shù)據(jù)不一致,結(jié)果不一樣。
相反的。當(dāng)A機(jī)為接收方時(shí),雖然A機(jī)無檢驗(yàn)位,但是因?yàn)锳機(jī)已接收到8位數(shù)據(jù)故不接收B機(jī)發(fā)送的校檢位。結(jié)果一樣。
圖11
圖12
5、停止位不同
A機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位不同(1)B機(jī):波特率相同(9600)、校驗(yàn)位相同(ODD)、數(shù)據(jù)位相同(8)、停止位不同(2)
圖13
結(jié)果:A機(jī)發(fā)“B機(jī)收“B機(jī)發(fā)“
”,A機(jī)收“
”,”;(圖13)”;(圖14)
圖14 分析:
5、發(fā)送文件
A機(jī):波特率相同(9600)、校驗(yàn)位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(2)B機(jī):波特率相同(9600)、校驗(yàn)位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(2)結(jié)果分析:
當(dāng)有校檢位時(shí),不可以接收文件;波特率不同、校驗(yàn)位不同、數(shù)據(jù)位同或停止位不同時(shí),文件無法接收;即唯有當(dāng)波特率相同、數(shù)據(jù)位相同、停止位相同且無校檢位時(shí),方可以正確接收文件。
五、思考并回答以下問題:
(1)在本實(shí)驗(yàn)中,RS—232 串口電纜處于 OSI 參考模型的什么位置?它的作用是什么?
答:處于OSI 參考模型的物理層,其作用是作為傳輸介質(zhì),連接通信的網(wǎng)絡(luò)節(jié)點(diǎn),實(shí)現(xiàn)比特流的透明傳輸,為數(shù)據(jù)鏈路層提供數(shù)據(jù)傳輸服務(wù)。
(2)在本實(shí)驗(yàn)中,數(shù)據(jù)和信號分別體現(xiàn)在 OSI參考模型的什么位置?兩者之間有何區(qū)別?
答:數(shù)據(jù)體現(xiàn)在數(shù)據(jù)鏈路層,信號體現(xiàn)在物理層。兩者區(qū)別在:數(shù)據(jù)鏈路層:為網(wǎng)絡(luò)層提供服務(wù)的,解決兩個(gè)相鄰結(jié)點(diǎn)之間的通信問題,傳送的協(xié)議數(shù)據(jù)單元稱為數(shù)據(jù)幀。物理層:OSI模型的最底層。它提出了網(wǎng)絡(luò)的物理特性,比如連接的電纜類型。這里是二進(jìn)制值0和1的世界,也就是數(shù)據(jù)以信號的電特性(高低電平)來表示。
(3)什么是波特率?為何兩臺(tái) PC 的波特率不同就不能正常通信?
答:波特率又稱調(diào)制速率、傳碼速率,記為Nbd,是指在數(shù)據(jù)通信系統(tǒng)中,每秒鐘傳輸信號碼元個(gè)數(shù),單位是波特。
在串口通信,一般包括起始位,數(shù)據(jù)位,校驗(yàn)位(可無)和停止位。以起始位為標(biāo)志,通信雙方進(jìn)行同步,然后發(fā)送方以一個(gè)固定的時(shí)間間隔進(jìn)行比特位的傳輸,接收方以一個(gè)固定的時(shí)間間隔進(jìn)行比特位的接收,如果雙方的波特率不同,就意味著發(fā)送方和接收方所采用的時(shí)間間隔不相等,就可能導(dǎo)致接收數(shù)據(jù)的錯(cuò)位。一般認(rèn)為通信雙方的波特率相差2.5%以內(nèi)可保證正常通信。
第三篇:串行通信的工作方式
串行通信的工作方式?數(shù)據(jù)按時(shí)間順序(分時(shí))先后一位一位地通過單通信通路傳送的通信方式。
①從通信距離上看:并行通信適宜于近距離的數(shù)據(jù)傳送,通常小于30米。而串行通信適宜于遠(yuǎn)距離傳送,可以從幾米到數(shù)千公里。
②從通信速率上看:在短距離內(nèi),并行接口的數(shù)據(jù)傳輸速率顯然比串行接口的傳輸速率高得多,但遠(yuǎn)距離串行數(shù)據(jù)傳送速率比并行數(shù)據(jù)傳送速率易于提高。由于串行通信的通信時(shí)鐘頻率較并行通信容易提高,因此許多高速外部設(shè)備如數(shù)字?jǐn)z像機(jī)與計(jì)算機(jī)之間的通信也往往使用串行通信方式。
③從抗干擾性能上看:串行通信由于只有少數(shù)幾根信號線,信號間的互相干擾比較小。
④從設(shè)備和費(fèi)用上看:隨著大規(guī)模和超大規(guī)模集成電路的發(fā)展,邏輯器件價(jià)格趨低,而通信線路費(fèi)用趨高,因此對遠(yuǎn)距離通信而言,串行通信的費(fèi)用顯然會(huì)低得多。另一方面串行通信還可利用現(xiàn)有的電話網(wǎng)絡(luò)來實(shí)現(xiàn)遠(yuǎn)程通信,降低了通信費(fèi)用。
第四篇:單片機(jī)實(shí)驗(yàn)三 雙機(jī)通信實(shí)驗(yàn)程序
實(shí)驗(yàn)三 雙機(jī)通信實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
UART 串行通信接口技術(shù)應(yīng)用
二、實(shí)驗(yàn)實(shí)現(xiàn)的功能
用兩片核心板之間實(shí)現(xiàn)串行通信,將按鍵信息互發(fā)到對方數(shù)碼管顯示。
三、系統(tǒng)硬件設(shè)計(jì)
實(shí)驗(yàn)所需硬件:電腦一臺(tái);
開發(fā)板一塊;
串口通信線一根; USB線一根;
四、系統(tǒng)軟件設(shè)計(jì)
實(shí)驗(yàn)所需軟件:編譯軟件:keil uvision3;
程序下載軟件:STC_ISP_V480; 試驗(yàn)程序:
#include
L1=1;L2=1;L3=1;
H1=0;if(L1==0)
return 1;else if(L2==0)
return 2;else if(L3==0)
return 3;
H1=1;H2=0;if(L1==0)
return 4;else if(L2==0)
return 5;else if(L3==0)
return 6;H2=1;return 0;
} unsigned char keyscan(){ static unsigned int ct=0;static unsigned char lastkey=0;unsigned char key;key=getkey();
if(key==lastkey){
ct++;
if(ct==900)
{
ct=0;
lastkey=0;
return key;
} } else {
第五篇:單片機(jī)實(shí)驗(yàn)
實(shí)驗(yàn)
一、MCS51單片機(jī)基本開發(fā)環(huán)境
1. 實(shí)驗(yàn)?zāi)康模?/p>
1)熟悉軟件的集成開發(fā)環(huán)境 2)掌握單片機(jī)軟件設(shè)計(jì)流程
3)掌握單片機(jī)存貯器結(jié)構(gòu)及各窗口之間的聯(lián)系 2. 實(shí)驗(yàn)內(nèi)容:
1)用三種方法實(shí)現(xiàn)將累加器A內(nèi)容改為20H
方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做實(shí)驗(yàn)時(shí)就越感覺這題根本不能說是題目,但不得不說在沒接觸過編程軟件,剛開始學(xué)的匯編,第一次做的實(shí)驗(yàn)就光這道題都覺得不知道做什么.所以凡是總有開始,不了解情況的多簡單的都會(huì)覺得難.2)將58H位單元置為1,觀察內(nèi)部RAM中2BH內(nèi)容的變化 代碼:
SETB 2BH.0 JMP $ END 心得:這是關(guān)于內(nèi)部存儲(chǔ)中對單元和字節(jié)了解,不理解很容易做錯(cuò).比如開始寫的指令為
MOV R0,#58H;MOV @R0,#1
這是錯(cuò)誤的指令。這就需要認(rèn)真去了解單片機(jī)中的字節(jié)地址與位地址的關(guān)系。80C51中有位尋址區(qū)和字節(jié)尋址區(qū)。題目中58H為位地址,2BH為字節(jié)地址,且58H為2B字節(jié)的最低位。由于58H屬于位尋址區(qū),可用位操作指令 SETB 進(jìn)行置位,SETB 2BH.0 執(zhí)行后,2BH中內(nèi)容變?yōu)椋埃?/p>
3)如果當(dāng)前狀態(tài)為有進(jìn)位、工作寄存器使用區(qū)2,請用3種方法設(shè)置這種狀態(tài)
代碼:
ANL PSW,#01H MOV A,PSW
CJNE A,#01,LAB2 LAB1:JMP LAB1
LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18H CLR PSW.3 MOV C,P0.0 MOV PSW,R0 MOV PSW.4,C CPL C MOV PSW.3,C END
心得:以上LAB2寫了三段代碼,可分別完成題目要求。不過實(shí)驗(yàn)時(shí)只是對代碼進(jìn)行了錯(cuò)誤調(diào)試,沒有對結(jié)果進(jìn)行檢驗(yàn)。其中值得注意的是對于布爾(位)操作指令的用法,比如傳送指令必須經(jīng)累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及對于位尋址的方式(如需用到“.”隔開)的應(yīng)用。4)編一個(gè)小程序?qū)?nèi)部RAM中的20H單元的內(nèi)容送到21H單元并調(diào)試
代碼:
MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END
5)用程序?qū)⒍褩V羔樦赶?0H,然后在堆棧中依次壓入01,02,03,04,05五個(gè)數(shù),觀察哪些單元內(nèi)容發(fā)生了變化,各變?yōu)槎嗌??從哪些窗口可以發(fā)現(xiàn)這些變化?順序?qū)⒍褩V械奈鍌€(gè)數(shù)放入30H~34H五個(gè)單元中,編程實(shí)現(xiàn)之。
代碼:
MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END
6)將外部數(shù)據(jù)存貯器1000H~100FH 16個(gè)單元中存放00H~0FH 代碼:
MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
心得:此處需要訪問片外存儲(chǔ)空間,需要借助寄存器DPTR,需注意其為16位的寄存器,在使用時(shí)若與八位寄存器進(jìn)行數(shù)據(jù)交換時(shí)需分為高八位DPH與低八位DPL來用。7)若要求程序從0010H單元開始運(yùn)行,可用兩種方法實(shí)現(xiàn)?
方法一 ORG 0010H 方法二 AJMP 0010H
3. 選做實(shí)驗(yàn)內(nèi)容:數(shù)據(jù)傳送 目的:
1)掌握8051單片機(jī)內(nèi)部數(shù)據(jù)存貯器、外部數(shù)據(jù)存貯器的數(shù)據(jù)傳送特點(diǎn)和應(yīng)用 2)掌握MOV,MOVX和MOVC類指令的用法及區(qū)別 內(nèi)容:
1)將片內(nèi)RAM數(shù)據(jù)區(qū)20H為首地址的十六個(gè)字節(jié)傳送到30H為首地址的數(shù)據(jù)區(qū),即:20H~2FH送30H~3FH
代碼: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END
2)將外部數(shù)據(jù)存儲(chǔ)器2000H~200FH單元的十六個(gè)數(shù)傳送至內(nèi)部數(shù)據(jù)存儲(chǔ)器的30H~3FH 代碼: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
總體心得體會(huì):
第一次做實(shí)驗(yàn)主要是熟悉了解了下單片機(jī)編程軟件的使用,開始接觸時(shí)在對其軟件不是太了解的情況下實(shí)驗(yàn)編程做的確實(shí)很亂,不清楚該怎樣進(jìn)行,比如不知如何進(jìn)行對指令的調(diào)試,也不清楚該如何觀察結(jié)果,沒有一個(gè)整體的概念,所以在了解其開發(fā)環(huán)境上花了不少時(shí)間。經(jīng)過一段時(shí)間的摸索后也終于了解了其具體的使用,也能夠順利的對指令的編程運(yùn)用。運(yùn)行指令時(shí)遇到的一些問題需要注意的也在上面各題中做了說明。還有需要注意的是:進(jìn)入軟件仿真時(shí)需要對存儲(chǔ)空間進(jìn)行查看的方法是在Address窗口中輸入:d:00h 顯示內(nèi)部數(shù)據(jù)存儲(chǔ)器從00h開始的單元; x:1000h 顯示外部數(shù)據(jù)存儲(chǔ)器從1000h開始的單元; c:0000H 顯示程序存儲(chǔ)器內(nèi)容。還有由于偽指令 END 定義的原因,在程序末需加一條死循環(huán)調(diào)轉(zhuǎn)指令(如 JMP $)使程序不會(huì)進(jìn)入其他未知空間執(zhí)行其他指令。實(shí)驗(yàn)
二、加、減法實(shí)驗(yàn)
1. 實(shí)驗(yàn)?zāi)康?/p>
1)正確使用單片機(jī)的加減運(yùn)算指令
2)掌握不同指令對于程序狀態(tài)字的影響及程序狀態(tài)字的意義、用處 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)學(xué)習(xí)模塊化程序設(shè)計(jì)方法 2. 實(shí)驗(yàn)內(nèi)容
1)編寫3字節(jié)二進(jìn)制加法子程序,并用主程序調(diào)用不同的加數(shù)和被加數(shù)來檢測該子程序的正確性。需考慮有進(jìn)位和無進(jìn)位情況。程序入口為: 加數(shù):22H,21H,20H三字節(jié),22H為最高位
被加數(shù):32H,31H,30H三字節(jié),32H為最高位
程序出口為: 23H,22H,21H,20H四字節(jié),23H為最高位 例如:地址:23 22 21 20 32 31 30 執(zhí)行前數(shù)據(jù): 01 23 45 FF 01 01 執(zhí)行后數(shù)據(jù):01 00 24 46
代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加數(shù)1地址、和的地址 MOV R1, #30H;加數(shù)2地址 CLR C MOV R2, #3;循環(huán)3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到進(jìn)位 MOV 23H, A;保存 POP PSW RET END
2)編寫三字節(jié)二進(jìn)制減法子程序 入口:被減數(shù): 52H,51H,50H, 50H為最低位
減數(shù): 42H,41H,40H, 40H為最低位
出口:差:外部數(shù)據(jù)存貯器2003H~2000H(2000H為最低位)用主程序調(diào)用多組數(shù)據(jù)來調(diào)試,需考慮無借位和有借位兩種情況。例如:
執(zhí)行前:地址: 52 51 50 42 41 40
數(shù)據(jù): 90 80 70 10 10 10
執(zhí)行后:地址: 2003 2002 2001 2000
數(shù)據(jù): 00 80 70 60 代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被減數(shù)地址 MOV R1, #40H;減數(shù)地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循環(huán)3次 LOOP: MOV A, @R0;取 SUBB A, @R1;減 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END
3)編寫10位十進(jìn)制加法子程序(十進(jìn)制數(shù)采用壓縮BCD碼存放)入口: 加數(shù):24H—20H,低地址放低字節(jié)
被加數(shù):29H—25H,低地址放低字節(jié)
出口 和:4005H—4000H,低地址放低字節(jié)
要求調(diào)用多組數(shù)據(jù)調(diào)試,注意觀察PSW的變化,理解DA A指令的含義。例如:
執(zhí)行前地址:24 23 22 21 20 29 28 27 26 25
數(shù)據(jù):12 34 56 78 90 88 99 33 12 74
執(zhí)行后地址:4005 4004 4003 4002 4001 4000
數(shù)據(jù): 01 01 33 89 91 64
代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加數(shù)1地址 MOV R1, #25H;加數(shù)2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循環(huán)5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加
DA A;調(diào)整為BCD碼 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END