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