<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PC機(jī)與多單片機(jī)串行通信的實(shí)現(xiàn)

          PC機(jī)與多單片機(jī)串行通信的實(shí)現(xiàn)

          作者: 時(shí)間:2012-02-02 來(lái)源:網(wǎng)絡(luò) 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/172212.htm

          在實(shí)際工程應(yīng)用中,經(jīng)常會(huì)遇到將一臺(tái)機(jī)與多個(gè)或多個(gè)智能儀表相連接進(jìn)行實(shí)時(shí)監(jiān)測(cè)與管理的情況。這就要考慮方案的選擇問(wèn)題,如果采用多個(gè)口或采用網(wǎng)絡(luò)的方法,則會(huì)增加成本,同時(shí),軟件的編寫(xiě)也不容易。下面介紹一種簡(jiǎn)單易行,成本低廉的方法—用機(jī)的一個(gè)口對(duì)多個(gè)AT89C51的通信。

          2 通信硬件系統(tǒng)的構(gòu)成

          整個(gè)系統(tǒng)如圖1。

          2.1 機(jī)的RS-232口接口設(shè)計(jì)

          通常,PC機(jī)提供一個(gè)打印機(jī)輸出的并行口(LPT),兩個(gè)串行口(COM1,COM2),采用PC機(jī)的RS-232串行口時(shí),在PC機(jī)與間通信必須有相同的通信協(xié)議,由于AT89C51單片機(jī)采用的電平為T(mén)TL邏輯電平,在PC機(jī)側(cè)的RS-232串行口采用+12V和-12V的電平方式,為使兩者的連接,在PC機(jī)的RS-232側(cè)用MAX202CP進(jìn)行電平轉(zhuǎn)換。

          2.2 AT89C51單片機(jī)的接口設(shè)計(jì)

          AT89C51芯片內(nèi)部有一個(gè)全雙工的串行口,其與外部交換數(shù)據(jù)用兩線即可,該引腳與P3.0(RXD)、P3.1(TXD)共用,在本方法中要對(duì)于多個(gè)AT89C51進(jìn)行串行通信,考慮到多個(gè)AT89C51共用一個(gè)RS-232轉(zhuǎn)換后的電平,在單片機(jī)向PC機(jī)傳送數(shù)據(jù)時(shí)不受其它的AT89C51單片機(jī)的影響,就在AT89C51的 RXD端串入一個(gè)二極管,如上圖1所示:

          15.jpg

          圖1 通信硬件系統(tǒng)

          3 軟件部分的設(shè)計(jì)

          3.1 PC機(jī)的通信程序的設(shè)計(jì)

          由于PC機(jī)側(cè)的開(kāi)發(fā)環(huán)境較多,如:VC++、DELPHI、VB等等,在此主要敘述用VB來(lái)進(jìn)行程序設(shè)計(jì)。

          目前,VB(Visual Basic)編程已成為WINDOWS系統(tǒng)開(kāi)發(fā)的主要語(yǔ)言之一,以其高效、簡(jiǎn)單易學(xué)及功能強(qiáng)大的特點(diǎn)越來(lái)越為廣大程序設(shè)計(jì)人員及用戶所喜愛(ài)。VB支持面向?qū)ο蟮某绦蛟O(shè)計(jì),具有結(jié)構(gòu)化的事件驅(qū)動(dòng)編程模式并可以使用無(wú)限擴(kuò)增的控件,而且可以十分簡(jiǎn)便地作出良好的人機(jī)界面。在標(biāo)準(zhǔn)串口通信方面,VB提供了具有強(qiáng)大功能的通信控件MSCOMM,文件名為MSCOMM.VBX。該控件可設(shè)置串行通信的數(shù)據(jù)發(fā)送和接收,對(duì)串口狀態(tài)及串口通信的信息格式和協(xié)議進(jìn)行設(shè)置。這是一個(gè)標(biāo)準(zhǔn)的十位串口通信,包括8位標(biāo)準(zhǔn)數(shù)據(jù)和數(shù)據(jù)的起始位和停止位。在發(fā)送或接收數(shù)據(jù)過(guò)程中觸發(fā)OnComm事件,通過(guò)編程訪問(wèn)CommEvent屬性了解通信事件的類型,分別進(jìn)行各自的處理。每個(gè)通信控件對(duì)應(yīng)一個(gè)串口,可以設(shè)計(jì)多個(gè)通信控件來(lái)訪問(wèn)多個(gè)通信口。VB通信控件設(shè)計(jì)軟件如下:

          定義一些變量
          Dim Rec(512)As Integer ‘接受字節(jié)數(shù)組定義
          Dim Sent() As byte ‘發(fā)送的可變數(shù)組定義
          Private Sub Form_Load() ‘串口初始化
          Comml.CommPort=1 ‘設(shè)置串口1
          MSComml.Settings=600,N,8,1波特率:9600 奇校驗(yàn),8位數(shù)據(jù),1位停止位
          MSComml.InputLen=0 ‘讀取接收緩沖區(qū)的所有字符
          MSComm1.InputMode= 1 '以二進(jìn)制形式從輸入緩沖區(qū)中讀數(shù)據(jù)
          MSComml.InBufferSize=1024 ‘設(shè)置接收緩沖區(qū)為1024字節(jié)
          MSComml.OutBufferSize=512 ‘設(shè)置發(fā)送緩沖區(qū)為512字節(jié)
          MSComml.PortOpen=True ‘打開(kāi)串口1
          MSComml.SThreshold=0 ‘使用查詢方式發(fā)送數(shù)據(jù)
          MSComml.RThreshold=1 ‘使用中斷方式接受數(shù)據(jù)
          End Sub
          Public Sub send-data() ‘發(fā)送n個(gè)數(shù)據(jù)
          Dim I As Integer
          MSComm1.RTSEnable =1 ‘請(qǐng)求發(fā)送數(shù)據(jù)
          For I=0 To n
          MSComml.Output=data(i)
          Next I
          MSComm1.RTSEnable =False ‘數(shù)據(jù)發(fā)送完畢,撤消請(qǐng)求發(fā)送信號(hào)
          End Sub
          Public Sub MSComml_OnComm() ‘中斷事件
          Select Case MSComml.CommEvent 
          Case comEvReceive ‘在發(fā)生接受到數(shù)據(jù)事件時(shí)執(zhí)行以下命令:
          MSComm1.Rthreshold=0 ‘不準(zhǔn)后續(xù)接受字節(jié)引起中斷事件
          …… ‘可以根據(jù)具體的問(wèn)題,在此處添加相應(yīng)的處理程序
          End Select
          End Sub
          3.2 AT89C51單片機(jī)通信程序的設(shè)計(jì)
          AT89C51 采用匯編語(yǔ)言編程。AT89C51內(nèi)有一個(gè)標(biāo)準(zhǔn)的串行口,有4種工作方式,其中方式1是標(biāo)準(zhǔn)的10位異步通信方式,1位啟始位,8位數(shù)據(jù)位,1位停止位, 10位數(shù)據(jù)和PC機(jī)的標(biāo)準(zhǔn)串口相對(duì)應(yīng),由串行口控制寄存器SCON設(shè)置狀態(tài),其字節(jié)地址為98H。如下式所示:
          SM0 SM1 SM2 REN TB8 RB8 T1 R1

          本系統(tǒng)中AT89C51串口控制器SCON設(shè)置為50H,SM0、SM1為0、1,即為串行工作方式1,REN為1,即允許串口接收。另外,使 AT89C51的中斷允許寄存器IE的開(kāi)放或禁止所有中斷位EA為1,開(kāi)放或禁止串行通道中斷位ES為1,即允許串行口中斷。程序簡(jiǎn)介如下:

          串行口初始化
          MOV TH1,# XXH ,設(shè)定波特率
          MOV TL1, #XXH
          MOV SCON, #50H ,串行工作方式為1
          MOV PCON, #80H
          SETB TR1 ,允許定時(shí)器1計(jì)數(shù)
          SETB EA ,允許所有中斷
          SETB ES ,允許串行中斷
          串口中斷入口
          PUSH ACC
          PUSH PSW
          CLR EA
          CLR RI
          MOV A, SBUF
          MOV R0,A
          CJNE R0, #0FEH, LH1 ,判斷是否為本AT89C51的標(biāo)志,不是則跳出串行中斷,是則處理相應(yīng)的程序
          …… ,可以根據(jù)具體的問(wèn)題,在此處添加相應(yīng)的處理程序
          LH1: POP PSW
          POP ACC
          SETB EA
          RETI

          4 結(jié)束語(yǔ)

          該系統(tǒng)目前已成功地應(yīng)用在山東風(fēng)光電子有限公司的JD-BP37系列高壓變頻調(diào)速系統(tǒng)中對(duì)23個(gè)AT89C51的串行通信,運(yùn)行良好。對(duì)于目前廣泛應(yīng)用的Windows環(huán)境下PC機(jī)與多個(gè)單片機(jī)之間的通信問(wèn)題,希望本文能夠提供一點(diǎn)有用的參考價(jià)值。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();