欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12908|回復: 1
收起左側

單片機與單片機之間的串行通訊課設報告

[復制鏈接]
ID:328014 發表于 2018-6-20 05:31 | 顯示全部樓層 |閱讀模式

單片機課程設計


課題單片機與單片機之間的串行通


班級


學號


姓名:


指導老師





一、任務簡介--------------------------------1


二、具體功能--------------------------------1


三、實驗設備及原理圖-------------------1


四、控制程序設計--------------------------3


五、調試分析---------------------------------9

六、用戶使用說明--------------------------11


七、實驗小結--------------------------------12

八、附錄(源代碼-----------------------13






一、任務簡介

實現單片機與單片機之間的串行通訊,要求:

(1)利用RS232串行芯片實現雙向通訊

(2)傳送的數據在數碼管上顯示出來

(3)可通過鍵盤選擇波特率1200、2400、4800和9600bit/s

(4)串行口工作方式為方式1的全雙工串行通信

二、具體功能

(1)首先要能夠通過鍵盤設定兩臺單片機的波特率,最好能將波特率顯示在數碼管(注意:兩臺單片機要想成功通信,必須選擇相同的波特率,否則無法正常通信)

(2)發送端的單片機選擇數據并通過按鍵進行發送,在接收端的單片機可選擇要不要接受該數據(即按不按接收鍵),若接收成功則將數據在本機的數碼管上顯示出來。

(3)兩臺通信的單片機選擇的工作方式為全雙工通信方式,即兩臺單片機都可以選擇接收數據與發送數據。

三、實驗設備及原理圖




四、控制程序設計

1、設計方案:

采用兩片89C52單片機來實現上位機對上位機的控制,由于是近距離的雙機通信,所以選擇接交叉相連的方式,上位機發送的數據由串行口TXD端發送,直接由下位機的串行口數據端RXD接收。需要注意的是一定要保證兩臺單片機以相同的波特率進行通信,電路分為數碼管顯示模塊,指示模塊,以及單片機工作的基本復位,晶振模塊,甲機和乙機都需要用到1個數碼管,6個按鍵(2個收發數據按鍵+4個波特率選擇按鍵)

2、流程圖如下:

甲機:

乙機:

  • 實驗結果

程序下載成功后,連接好線(P3.0連接P3.1,P3.1連接P3.0)兩機都按下S15鍵,選擇波特率4800bit/s,再按下K3鍵發送,甲機按下K4鍵接收乙機發送的數字7,并顯示在數碼管上,如下:(甲機在上,乙機在下)

接下來乙機按S4鍵接收,數碼管上顯示3

同理,兩機按下復位鍵后,再分別按下S14鍵選擇波特率2400bit/s,同時按下K3和K4,兩邊同時接收,甲機顯示6,乙機顯示2

若所選波特率不同,則兩邊都顯示8

五、調試分析

(1)波特率設置調試

在開始進行波特率調試時,總是不能做到設置多種波特率,后來是設置了四個按鍵來對應四種不同的波特率,通過檢測按鍵的高低電平來設置波特率,設計波特率的原理就是給不同的按鍵觸發設置不同的TH1和TL1初值,這些初值對應著不同波特率的值。

(2)數碼管顯示程序調試

本次實驗設計要把接收到的數據顯示在數碼管上,一開始在設計顯示程序時,顯示的數據總是顯示不正確,有時候是亂碼顯示,有時候是顯示初始數據8,有時候是不能顯示出數據,經過調試發現是在循環掃描數碼管時的所設置的延時時間太長,并且自己所寫的字型表也存在一些錯誤,導致數據不能夠在數碼管上正常顯示,所以對數碼管的掃描以及字型表的正確與否,對于數碼管顯示正確與否至關重要。另外在之后的調試過程中我發現自己無法將波特率和傳送的數據同時顯示出來,最終便沒有顯示波特率,只是設置了不同的波特率傳送不同的數據。

(3)通信調試

系統采用的是RS232模塊進行通信,在開始進行通信調試時,每次都是在另一端不能正確接收,后來發現是連線不正確,我連接的時候將兩個發送端相連,兩個接收端相連,而正確的連線方法是甲機的RXD(P3.0)連接乙機的TXD(P3.1),然后同理甲機的TXD連接乙機的RXD。

  • 發送與接收數據調試

在確定數碼管顯示程序調試正確后,我發現進行發送與接收數據調試時數碼管顯示出來的數據大部分時候都是不正確的,有時是上幾次發送的數據,有時候是系統中原有的其他數據。出現這些問題的主要原因是程序設計不夠規范致使收發數據不同步,經過老師的指導,我設置了兩個按鍵來控制發送與接收,并調用了合適的延時函數,這才使得數據接收與發送基本同步。

(5)調試心得

通過對程序的不斷調試,對于串行口通信有了更深的理解,在調試過程中要想調試出自己的想要的結果,必須要了解硬件的設計原理和電路原理,否則即使代碼沒有問題,也無法在硬件上調試成功。還有一點就是在調試過程中要有耐心,認真對待,不要浮躁,心態一旦消極了,只會事倍功半,簡單的問題也會變得復雜。


  • 用戶使用說明

1、首先將MCU程序下載到兩臺89C52單片機上,兩臺單片機的代碼一樣,只是在選擇不同波特率時所傳送的數據不一樣,用戶可自行在設置波特率初值之后修改相應的傳送數據(本次實驗時是甲機傳送1,2,3,4給乙機,乙機傳送5,6,7,8給甲機)

2、給兩臺主機設置波特率,通過矩陣按鍵S13到S16選擇波特率,若選擇的波特率為1200,則按下k13確認該波特率;同樣的按下S14,則選擇的波特率為2400;按下S15,波特率為4800;按下S16,波特率為9600,每次選擇波特率時也傳送了相應的數據給另一臺機。另外需注意:要想進行正常通信,兩臺單片機要設置相同的波特率(按下相同的鍵),否則無法正常傳送數據。

3、設置完波特率之后就可以進行兩臺單片機之間的通信了,按下k3是選擇數據并發送,之后在另一臺機器上可以選擇是否接收數據,若需接收數據則按下k4,接收數據之后數據可以在接收方的數碼管上顯示(甲乙兩機收發可以同時進行,即同時按下K3鍵發送不同的數據,同時按下K4鍵接收,數碼管上分別顯示收到的數據)

4、若需要選擇另外一種波特率進行通信,則需要按下復位鍵,然后重新在矩陣鍵盤上選擇波特率,方法如上(若甲乙兩機選擇不同的波特率,則數碼管上將亂碼顯示)。

七、實驗小結

這次課程設計主要是實現單片機與單片機之間串行通信,通過本次實驗設計,我對單片機之間的串行通信有了更加深刻的理解與體會,對軟件與硬件的配合使用也有了新的了解,同時也懂得了一些分析電路及調試程序的方法。在這次程序設計過程中我也遇到了很多困難,例如開始時對題目的理解有偏差,所寫的程序與自己后來買的單片機也有些地方不適用等。經過與同學的討論、老師的指導、以及自己進一步查閱相關資料,回歸書本,問題才得以解決。雖然最后設計并沒有那么理想(比如波特率與傳輸數據不能同時顯示),但總體上來說實現了單片機間串行通信,基本上算完成了實驗要求。通過本次設計我明白了軟件與硬件相結合的重要性,二者缺一不可,在實現硬件連接的同時也要讀懂軟件所實現的功能;通過做實驗能夠加深我們對理論知識的理解,能夠及時地查漏補缺,實現了很好地互補;同時我也意識到做實驗時嚴謹認真的態度是非常重要的,在不斷地調試與分析過程中,我們才能真正的意識到自己存在的不足,能夠及時地改正,學到更多有用的知識。


八、附錄(源代碼

當波特率是1200,2400,4800,9600時,甲分別送乙機數據1,2,3,4

當波特率是1200,2400,4800,9600時,乙分別送甲機數據5,6,7,8

以下是甲機源代碼:(乙機源代碼與甲機一樣,只需將1,2,3,4改成5,6,7,8


  1. ORG 0000H
  2.     LJMP  MAIN
  3. ORG  0023H                                ;串行口中斷入口地址
  4. LJMP  Seri_INT
  5. MAIN:MOV   SP,#0EFH              ;堆棧初始化      
  6.      MOV   TMOD,#20H              ;定時器T1方式2
  7. MOV   SCON,#50H ;串口初始化方式1多機通信
  8. MOV   R0,#30H              ;發送數據區首址
  9. MOV   R1,#40H   ;接收數據區首址                                                                     
  10. LCALL Switch                 ;選擇波特率
  11. SETB    EA       ;開總中斷控制位
  12.      SETB    TR1      ;啟動T1
  13.      SETB    ES      ;允許串口中斷

  14. Seri_INT:
  15.          LCALL  DLY
  16.          JNB   P3.2,FSSSS1                            ;K3按鍵發送
  17. SJMP               Seri_INT

  18. FSSSS1:
  19.         LCALL  DLY                             ;延時20ms
  20.         LCALL SEND                               ;調用發送子程序

  21. ACCCN2:
  22.          LCALL DLY
  23.          JNB P3.3,FSSSS2   ;K4按鍵接收
  24.               SJMP               ACCCN2

  25. FSSSS2:
  26.          LCALL DLY
  27.          LCALL RECE              ;調用接收子程序
  28.          INC R0                                          ;修改發送數據指針
  29.   INC R1                                          ;修改接收數據指針
  30.               LCALL Display              ;將接收到的數據顯示出來

  31. SEND:
  32.           MOV A,@R0                            ;進入串口中斷            
  33. MOV C,P                            ;C為進位標志位,P為奇偶標志位,把P中的內容傳輸給C
  34.           MOV SBUF,A              ;發送數據到緩沖區
  35.               CLR TI                            ;發送中斷標志清零
  36.                   RET


  37. RECE:
  38. CLR   RI                            ;接收中中斷標志清0
  39.       MOV   A,SBUF              ;讀出接收緩沖區內容
  40.       MOV   @R1,A                            ;讀入接收緩沖區內容
  41.         RET


  42. DELAY2ms:                                              ;延時2ms
  43.         MOV  R6,#62
  44. DEL1: MOV  R7,#8
  45. DEL2: NOP          ; 晶振頻率12MHz,則執行一次所需時間為1微秒
  46.       NOP            ; 1微秒
  47.       DJNZ   R7,DEL2  ; 2微秒
  48.       DJNZ   R6,DEL1  ; 2微秒[(1+1+2)*62+2]*80=2ms
  49.         RET

  50. DLY:                                                           ;延時20ms
  51.       MOV  R6,#62
  52. DLY3: MOV  R7,#80
  53. DLY4: NOP          ; 晶振頻率12MHz,則執行一次所需時間為1微秒
  54.       NOP            ; 1微秒
  55.       DJNZ   R7,DLY4  ; 2微秒
  56.       DJNZ   R6,DLY3  ; 2微秒[(1+1+2)*62+2]*80=20ms
  57.         RET


  58. Display:
  59.         MOV DPTR,#TAB              ;字型表首址
  60.         CLR P2.2
  61.          CLR P2.3
  62. CLR P2.4                            ;使傳送的數據在第0位數碼管顯示
  63.               MOV A,40H
  64.               MOVC A,@A+DPTR              ;查字型表
  65.               MOV P0,A                                 ;將傳送的數據送到P0口顯示
  66.               LCALL DELAY2mS
  67.               SJMP Display

  68. Switch:                                                           ;選擇波特率
  69.        LCALL  DLY               
  70.        MOV    P1,#0EFH                  ;選擇按鍵S13到S16,屏蔽S1到S12
  71.        MOV    R3,P1
  72.        CJNE   R3,#0EFH,CON1              ;判斷按下的鍵
  73.        SJMP   Switch                              
  74.                                                                                       
  75. CON1: CJNE R3,#0E7H,CON2     ;S13選擇波特率1200
  76.      MOV TH1,#0E8H                                          ;賦初值232
  77.      MOV TL1,#0E8H
  78. MOV 30H,#1            ;當波特率是1200時,甲機發送數據1
  79.                 RET

  80. CON2: CJNE R3,#0EBH,CON3     ;S14選擇波特率2400
  81.       MOV TH1,#0F4H                                          ;初值244
  82.       MOV TL1,#0F4H
  83. MOV 30H,#2          ;當波特率是2400時,甲機發送數據2
  84.                 RET                                          
  85.                
  86. CON3: CJNE R3,#0EDH,CON4     ;S15選擇波特率4800
  87.       MOV TH1,#0FAH                                          ;初值250
  88.       MOV TL1,#0FAH
  89. MOV 30H,#3        ;當波特率是4800時,甲機發送數據3
  90.               RET

  91. CON4: CJNE R3,#0EEH,CON5      ;S16選擇波特率9600
  92.       MOV TH1,#0FDH                                            ;初值253
  93.       MOV TL1,#0FDH
  94. MOV 30H,#4     ;當波特率是9600時,甲機發送數據4
  95. CON5:   RET

  96. TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H  ;0到f的字型表
  97.      DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H  
  98. END
復制代碼

完整的Word格式文檔51黑下載地址:
單片機與單片機之間的串行通訊.doc (1002.43 KB, 下載次數: 26)


回復

使用道具 舉報

ID:354902 發表于 2018-6-20 09:41 | 顯示全部樓層
厲害了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表