国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

PC機與多單片機串行通信的實現

[復制鏈接]
樓主
1 引言
  在實際工程應用中,經常會遇到將一臺pc機與多個單片機或多個智能儀表相連接進行實時監測與管理的情況。這就要考慮通信方案的選擇問題,如果采用多個串行口或采用網絡通信的方法,則會增加成本,同時,軟件的編寫也不容易。下面介紹一種簡單易行,成本低廉的通信方法—用pc機的一個串行口對多個at89c51單片機的通信。
2 通信硬件系統的構成
   整個系統如圖1。
  2.1 pc機的rs-232串行口接口設計
  通常,pc機提供一個打印機輸出的并行口(lpt),兩個串行口(com1,com2),采用pc機的rs-232串行口時,在pc機與單片機間通信必須有相同的通信協議,由于at89c51單片機采用的電平為ttl邏輯電平,在pc機側的rs-232串行口采用+12v和-12v的電平方式,為使兩者的連接,在pc機的rs-232側用max202cp進行電平轉換。
  2.2 at89c51單片機的接口設計
  at89c51芯片內部有一個全雙工的串行口,其與外部交換數據用兩線即可,該引腳與p3.0(rxd)、p3.1(txd)共用,在本方法中要對于多個at89c51進行串行通信,考慮到多個at89c51共用一個rs-232轉換后的電平,在單片機向pc機傳送數據時不受其它的at89c51單片機的影響,就在at89c51的rxd端串入一個二極管,如上圖1所示:
PC機與多單片機串行通信的實現 q1.jpg
  圖1 通信硬件系統

3 軟件部分的設計
  3.1 pc機的通信程序的設計
  由于pc機側的開發環境較多,如:vc++、delphi、vb等等,在此主要敘述用vb來進行程序設計。
  目前,vb(visual basic)編程已成為windows系統開發的主要語言之一,以其高效、簡單易學及功能強大的特點越來越為廣大程序設計人員及用戶所喜愛。vb支持面向對象的程序設計,具有結構化的事件驅動編程模式并可以使用無限擴增的控件,而且可以十分簡便地作出良好的人機界面。在標準串口通信方面,vb提供了具有強大功能的通信控件mscomm,文件名為mscomm.vbx。該控件可設置串行通信的數據發送和接收,對串口狀態及串口通信的信息格式和協議進行設置。這是一個標準的十位串口通信,包括8位標準數據和數據的起始位和停止位。在發送或接收數據過程中觸發oncomm事件,通過編程訪問commevent屬性了解通信事件的類型,分別進行各自的處理。每個通信控件對應一個串口,可以設計多個通信控件來訪問多個通信口。vb通信控件設計軟件如下:
  定義一些變量
  dim rec(512)as integer ‘接受字節數組定義
  dim sent() as byte ‘發送的可變數組定義
  private sub form_load() ‘串口初始化
  comml.commport=1 ‘設置串口1
  mscomml.settings=600,n,8,1波特率:9600 奇校驗,8位數據,1位停止位
  mscomml.inputlen=0 ‘讀取接收緩沖區的所有字符
  mscomm1.inputmode= 1 ‘以二進制形式從輸入緩沖區中讀數據
  mscomml.inbuffersize=1024 ‘設置接收緩沖區為1024字節
  mscomml.outbuffersize=512 ‘設置發送緩沖區為512字節
  mscomml.portopen=true ‘打開串口1
  mscomml.sthreshold=0 ‘使用查詢方式發送數據
  mscomml.rthreshold=1 ‘使用中斷方式接受數據
  end sub
  public sub send-data() ‘發送n個數據
  dim i as integer
  mscomm1.rtsenable =1 ‘請求發送數據
  for i=0 to n
  mscomml.output=data(i)
  next i
  mscomm1.rtsenable =false ‘數據發送完畢,撤消請求發送信號
  end sub
  public sub mscomml_oncomm() ‘中斷事件
  select case mscomml.commevent
  case comevreceive ‘在發生接受到數據事件時執行以下命令:
  mscomm1.rthreshold=0 ‘不準后續接受字節引起中斷事件
  …… ‘可以根據具體的問題,在此處添加相應的處理程序
  end select
  end sub


  3.2 at89c51單片機通信程序的設計
  at89c51采用匯編語言編程。at89c51內有一個標準的串行口,有4種工作方式,其中方式1是標準的10位異步通信方式,1位啟始位,8位數據位,1位停止位,10位數據和pc機的標準串口相對應,由串行口控制寄存器scon設置狀態,其字節地址為98h。如下式所示:
  sm0 sm1 sm2 ren tb8 rb8 t1 r1
  本系統中at89c51串口控制器scon設置為50h,sm0、sm1為0、1,即為串行工作方式1,ren為1,即允許串口接收。另外,使at89c51的中斷允許寄存器ie的開放或禁止所有中斷位ea為1,開放或禁止串行通道中斷位es為1,即允許串行口中斷。程序簡介如下:
  串行口初始化
  mov th1,# xxh ,設定波特率
  mov tl1, #xxh
  mov scon, #50h ,串行工作方式為1
  mov pcon, #80h
  setb tr1 ,允許定時器1計數
  setb ea ,允許所有中斷
  setb es ,允許串行中斷
  串口中斷入口
  push acc
  push psw
  clr ea
  clr ri
  mov a, sbuf
  mov r0,a
  cjne r0, #0feh, lh1 ,判斷是否為本at89c51的標志,不是則跳出串行中斷,是則處理相應的程序
  …… ,可以根據具體的問題,在此處添加相應的處理程序
  lh1: pop psw
  pop acc
  setb ea
  reti
  4 結束語
  該系統目前已成功地應用在山東風光電子有限公司的jd-bp37系列高壓變頻調速系統中對23個at89c51的串行通信,運行良好。對于目前廣泛應用的windows環境下實現pc機與多個單片機之間的通信問題,希望本文能夠提供一點有用的參考價值。
沙發
慕容輕風 發表于 2013-7-3 10:25:23 | 只看該作者
太好了,謝謝你
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:06

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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