www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]在工業(yè)檢測及自動控制系統(tǒng)中,微機與微機、微機與單片機之間經(jīng)常需要進行數(shù)據(jù)交換,串行通信是主要的通信手段,它高效、方便,并遵循統(tǒng)一的國家標(biāo)準(zhǔn)。 Visual C++ 6.0作為一種強大的開發(fā)工具幾乎在Windows軟件開發(fā)的

在工業(yè)檢測及自動控制系統(tǒng)中,微機與微機、微機與單片機之間經(jīng)常需要進行數(shù)據(jù)交換,串行通信是主要的通信手段,它高效、方便,并遵循統(tǒng)一的國家標(biāo)準(zhǔn)。 Visual C++ 6.0作為一種強大的開發(fā)工具幾乎在Windows軟件開發(fā)的任何領(lǐng)域都得到廣泛的應(yīng)用。一般用Visual C++ 6.0開發(fā)串行通信程序有二種方法:一是利用Windows的通信 API函數(shù);另一種是采用Visual C++  6.0標(biāo)準(zhǔn)控件MSComm來實現(xiàn)。第一種方法需要聲明及調(diào)用許多API函數(shù),十分煩瑣。第二種方法實現(xiàn)簡便,且可滿足一般情況下通信要求。本文利用Visual C++ 6.0提供的MSComm通信控件編寫較簡單的VC程序, 完成了微機與單片機之間的 RS-232串行口通信。

1、硬件結(jié)構(gòu)

PC微機的COM口接口電平為RS-232標(biāo)準(zhǔn),若兩臺微機間通信,只需簡單地直接連接(TXD RXD)及地(GND)三根線。若微機與單片機通信,由于單片機UART為TTL電平,故需將RS-232電平與TTL電平轉(zhuǎn)換,可直接使用 MAX232,MC1489等實現(xiàn)電平轉(zhuǎn)換功能。

2、串行通信控件MSComm

在VC環(huán)境下單擊Project菜單,從中選擇Add to Project,在彈出的對話框中單擊Components and Controls選項,然后在彈出的對話框中再單擊Registered ActiveX Controls選項。在列表中選擇Microsoft Communications Control (version6.0),形狀為帶有紅色底座的黃色電話機。單擊Insert按鈕,確認(rèn)后,會出現(xiàn)一個Confirm Classes對話框,其中列出了該控件的類名(CMSComm)、頭文件名(MSComm.h)、執(zhí)行文件名(MSComm.cpp)。關(guān)閉此對話框,在程序主界面的控件列表中,可以看到該通信控件已被加入,拖動該控件就可以將其放入程序中。

MSComm控件提供了功能完善的串口數(shù)據(jù)的發(fā)送和接收功能, MSComm控件具有兩種處理方式: 1、事件驅(qū)動方式:由MSComm控件的OnComm事件捕獲并處理通信錯誤及事件;2、查詢方式:通過檢查CommEvent屬性的值來判斷事件和錯誤。

MSComm控件的通信功能實現(xiàn),實際上是調(diào)用了API函數(shù),而API函數(shù)是由Comm.drv解釋并傳給設(shè)備驅(qū)動程序執(zhí)行的,對于VC程序開發(fā)者只需知道MSComm控件的屬性和事件的用法即可以實現(xiàn)串口的操作。

以下是MSComm控件的主要屬性和方法:
  1) CommPort:設(shè)置或返回串行端口號,其取值范圍為1~99,缺省為1。
  2) Setting:設(shè)置或返回串行端口的波特率、奇偶校驗位、數(shù)據(jù)位數(shù)、停止位。如:M scomm.Setting="9600,N,8,1"。
  3) PortOpen:打開或關(guān)閉串行端口,格式為:MSComm.PortOpen={T RUE|FALSE}。
  4) InBufferSize:設(shè)置或返回接收緩沖區(qū)的大小,缺省為1024字節(jié)。
  5) InBufferCount:返回接收緩沖區(qū)內(nèi)的等待讀取的字節(jié)個數(shù),可通過設(shè)置該屬性為0來清除接收緩沖區(qū)。
  6) Rthreshold:該屬性為一閥值,它確定當(dāng)接收緩沖區(qū)內(nèi)字節(jié)個數(shù)達到或超過該值后就產(chǎn)生代碼為MSCOMM_EV_RECEIVE的OnComm事件 。
  7) InputLen::設(shè)置或返回接收緩沖區(qū)內(nèi)用Input讀入的個數(shù)。若取0,則INPUT讀取整個緩沖區(qū)的內(nèi)容。
  8) Input: 該屬性表示從接收緩沖區(qū)移走一串字符。 類型:VARIANT。
  9) OutBufferSize:設(shè)置或返回發(fā)送緩沖區(qū),缺省為512字節(jié)。
  10) OutBufferCount:返回發(fā)送緩沖區(qū)內(nèi)等待發(fā)送的字符數(shù),可用來清空緩沖區(qū)。
  11) Output:向發(fā)送緩沖區(qū)傳送一字符串。類型:VARIANT。

如果在通信過程中發(fā)生錯誤或事件,就會引發(fā)OnComm事件并且改 變屬性值,由CommEvent屬性代碼反映錯誤類型,在通信程序的設(shè)計中 可根據(jù)該屬性值來執(zhí)行不同的操作,以下是部分屬性常數(shù)值及其含義:
  1) ComEvSend: 其值為1,發(fā)送緩沖區(qū)的內(nèi)容少于SThreshold指定 的值。
  2) ComEvReceive: 其值為2,接收緩沖區(qū)內(nèi)字符數(shù)達到 RThreshold 值,該事件在緩沖區(qū)中數(shù)據(jù)被移走前將持續(xù)產(chǎn)生。
  3) ComEventFrame: 其值為1004,硬件檢測到幀錯誤。
  4) ComEventRxOver:其值為1008,接收緩沖區(qū)溢出。
  5) ComEventTxFull: 其值為1010,發(fā)送緩沖區(qū)溢出。
  6) ComEventRxParity:其值為1009,奇偶校驗。
  7) ComEvEOF: 其值為7,接收數(shù)據(jù)中出現(xiàn)文件結(jié)束(ASCII 碼為 2 6)字符。

3、串口通信微機程序設(shè)計

下面程序可實現(xiàn)簡單通信,程序主要有兩個編輯框,一為發(fā)送,用戶在此編輯框內(nèi)鍵入字符將通過串口發(fā)送出去;另一為接收,顯示串口接收到字符。如在兩臺微機相連,分別運行此程序,即可實現(xiàn)兩機之間通信。具體實現(xiàn)步驟如下:

1)啟動Visual C++ 6.0,創(chuàng)建一名為Chat應(yīng)用程序項目,程序類型為Dialog based。

2)如2所述在應(yīng)用程序中插入通信控件。

 3)MFC的ClassWizard 對話框的Member Variables選項卡如下所示

控件ID 類型 數(shù)據(jù)成員
IDC_EDIT1_SEND Cstring m_send
IDC_EDIT2_RECV Cstring m_recv
IDC_MSCOMM1 CMSComm m_comm
IDCANCEL 

4)部分源程序代碼如下:
BOOL CChatDlg::OnInitDialog(  )
{
 CDialog::OnInitDialog( );
// TODO: Add extra initialization here
   m_comm.SetCommPort(1);        //選擇串口1
   if(!m_comm.GetPortOpen( ))
   m_comm.SetPortOpen(TRUE);     //打開串口1
   m_comm.SetSettings("9600,n,8,1");  //串口參數(shù)設(shè)置
   m_comm.SetRThreshold(1);      //當(dāng)串口接收緩沖區(qū)內(nèi)接收字符多于或等于1將觸發(fā)一關(guān)于comEvReceive的OnComm事件。
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}
void CChatDlg::OnChangeEdit1Send(  )
{  // TODO: Add your control notification handler code here
 int count;
 CString temp;
 UpdateData(TRUE);           //獲取用戶輸入數(shù)據(jù)
 count=m_send.GetLength( );    //獲取編輯框內(nèi)字符數(shù)
 temp=m_send.GetAt(count-1);   //取最新輸入字符
 if(!m_comm.GetPortOpen( ))
    m_comm.SetPortOpen(TRUE);
 m_comm.SetOutput(COleVariant(temp));    //發(fā)送數(shù)據(jù)
 if(count= =40)                  //如輸入字符超過40,清空發(fā)送編輯框
 { m_send.Empty( );
      UpdateData(FALSE);          //更新編輯框
 }
}
void CChatDlg::OnOnCommMscomm 1(  )
{
 // TODO: Add your control notification handler code here
 VARIANT temp;
 int count;
     if(m_comm.GetCommEvent( )= =2)       //串行口數(shù)據(jù)接收處理;
 { count=m_comm.GetInBufferCount( );
  m_comm.SetInputLen(count);      //利用Input接收字符數(shù)為count
  temp=m_comm.GetInput( );       //接收字符
  m_recv+=temp.bstrVal;           //將接收字符添加到接收框變量中
  if(m_recv.GetLength( )= =40)      //如輸入字符超過40,清空發(fā)送編輯框
  m_recv.Empty( );
       UpdateData(FALSE);           //更新編輯框
 }
}

4、串行通信單片機程序設(shè)計

在此作為演示,此單片機程序功能只是簡單將所收字符再發(fā)送出去,類似可實現(xiàn)各種復(fù)雜通信協(xié)議。將微機與單片機相連后,微機運行chat.exe,單片機運行此程序即可實現(xiàn)兩機通信。

下面是MC68HC908GP32為例的程序清單。


 *==========Registers===========
SCCR1  equ $0013
b_ENSCI  equ 6
SCCR2  equ $0014
b_TE  equ 3
b_RE  equ 2
BAUD  equ $0019
SCS1 equ $0016
SCS2 equ $0017
SCDR equ $0018
CONFIG2  equ $001e
CONFIG1  equ $001f
PCTL  equ $0036
b_PLLON  equ 5
b_BCS  equ 4
PBWC  equ $0037
b_AUTO  equ 7
PMSH  equ $0038
PMSL  equ $0039
PMRS  equ $003a
*==========Initial Codes========
           ORG $8000
RESET_INIT:
   SEI
   LDHX #$023F
   TXS
        LDA   #$01
        STA   CONFIG2
        LDA   #$3D
        STA   CONFIG1
*========== Initial CGMC=========
       CLR     PCTL
       MOV     #$01,PCTL
       MOV #$01,PMSH
       MOV #$2C,PMSL
       MOV #$80,PMRS
       BSET    b_PLLON,PCTL    ;32.768khz --2.4576Mhz
       BSET    b_AUTO,PBWC
       BSET    b_BCS,PCTL
*========= Initial SCI==========*
       LDA #$02
       STA    BAUD            ;9600baud
       BSET   b_ENSCI,SCCR1   ;ENABLE SCI
       MOV #$0C,SCCR2         ;ENABLE TRANSMITTER AND RECEIVER
*==========Main program========*
START:CLI
      JSR GETDATA
      JSR SENDATA
      JMP START
GETDATA:BRCLR 5,SCS1,GETDATA
        LDA SCDR
        RTS
SENDATA:BRCLR 7,SCS1,SENDATA
        STA SCDR
        RTS
*===========Vector=============*
         ORG  $FFFE
         DW  RESET_INIT

若要實現(xiàn)一臺微機(主機)與多臺GP32通信,可用SCI接收器喚醒功能(空閑線或地址位)。主機與從機通信時,發(fā)送信息的開頭一般為從機地址,各從機接收信息開頭的地址,如發(fā)現(xiàn)地址與自己的地址相同,則準(zhǔn)備接收后面的數(shù)據(jù),負(fù)責(zé)不予理睬。至此我們用Visual C++ 6.0實現(xiàn)了微機與微機以及微機與單片機之間的串行通信,通過更復(fù)雜的通信協(xié)議,完全可滿足工業(yè)測控系統(tǒng)中的一般數(shù)據(jù)通信要求。

參考文獻:
[1]劉慧根等. MC68HC08原理及其嵌入是應(yīng)用. 清華大學(xué)出版社,2001.
[2]劉瑜. Windows環(huán)境下串行通信程序設(shè)計. 計算機應(yīng)用與研究,1999.
 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

舍弗勒以"專注驅(qū)動技術(shù)的科技公司"為主題亮相IAA MOBILITY 2025(B3館B40展臺) 合并緯湃科技后首次亮相IAA MOBILITY,展示拓展后的汽車產(chǎn)品組合 憑借在軟件、...

關(guān)鍵字: 電氣 軟件 驅(qū)動技術(shù) BSP

香港2025年 9月12日 /美通社/ -- 全球領(lǐng)先的互聯(lián)網(wǎng)社區(qū)創(chuàng)建者 - 網(wǎng)龍網(wǎng)絡(luò)控股有限公司 ("網(wǎng)龍"或"本公司",香港交易所股票代碼:777)欣然宣布,其子公司My...

關(guān)鍵字: AI 遠(yuǎn)程控制 控制技術(shù) BSP

深圳2025年9月11日 /美通社/ -- 2025 年 9 月 10 日,第 26 屆中國國際光電博覽會(簡稱 "CIOE 中國光博會")在深圳盛大開幕。本屆展會吸引力再創(chuàng)新高,全球超3800家優(yōu)質(zhì)...

關(guān)鍵字: 自動化 光電 CIO BSP

天津2025年9月11日 /美通社/ -- 國際能源署(IEA)數(shù)據(jù)顯示,2024 年全球數(shù)據(jù)中心電力消耗達 415 太瓦時,占全球總用電量的 1.5%,預(yù)計到 2030 年,這一數(shù)字將飆升至 945 太瓦時,近乎翻番,...

關(guān)鍵字: 模型 AI 數(shù)據(jù)中心 BSP

北京2025年9月11日 /美通社/ -- 國際9月11日上午,2025年中國國際服務(wù)貿(mào)易交易會(以下簡稱"服貿(mào)會")—體育賽事經(jīng)濟高質(zhì)量發(fā)展大會現(xiàn)場,北京經(jīng)濟技術(shù)開發(fā)區(qū)工委委員、管委會副主...

關(guān)鍵字: 5G BSP GROUP MOTOR

全新原生集成方案實現(xiàn)企業(yè)短信服務(wù)的簡化、強化與規(guī)模化升級 馬來西亞吉隆坡2025年9月11日 /美通社/ -- 全球云通信平臺Infobip宣布擴展與微軟Azure通信服務(wù)的集成合作,通過其先進的短信接口,助力企業(yè)與全...

關(guān)鍵字: 微軟 通信 IP AZURE

柏林2025年9月9日 /美通社/ -- 2025年9月5日,納斯達克上市公司優(yōu)克聯(lián)集團(NASDAQ: UCL)旗下全球互聯(lián)品牌GlocalMe,正式亮相柏林國際消費電子展(IFA 2025),重磅推出融合企...

關(guān)鍵字: LOCAL LM BSP 移動網(wǎng)絡(luò)

深圳2025年9月9日 /美通社/ -- PART 01活動背景 當(dāng)技術(shù)的鋒芒刺穿行業(yè)壁壘,萬物互聯(lián)的生態(tài)正重塑產(chǎn)業(yè)疆域。2025年,物聯(lián)網(wǎng)產(chǎn)業(yè)邁入?"破界創(chuàng)造"與"共生進化"?的裂變時代——AI大模型消融感知邊界,...

關(guān)鍵字: BSP 模型 微信 AIOT

"出海無界 商機無限"助力企業(yè)構(gòu)建全球競爭力 深圳2025年9月9日 /美通社/ -- 2025年8月28日, 由領(lǐng)先商業(yè)管理媒體世界經(jīng)理人攜手環(huán)球資源聯(lián)合主辦、深圳?前海出海e站通協(xié)辦的...

關(guān)鍵字: 解碼 供應(yīng)鏈 AI BSP

柏林2025年9月9日 /美通社/ -- 柏林當(dāng)?shù)貢r間9月6日,在2025德國柏林國際電子消費品展覽會(International Funkausstellung...

關(guān)鍵字: 掃地機器人 耳機 PEN BSP
關(guān)閉