亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2308 | 回復(fù): 2
打印 上一主題 下一主題

請教:串口編程問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2004-11-01 15:00 |只看該作者 |倒序?yàn)g覽
大家好,老板前兩天教我做串口方面的編程,以前沒有接觸過,我在網(wǎng)上看到了這個(gè)頁面http://www.gjwtech.com/vcandc/scommassistantcode.htm
是gjw的主頁上的,我按照步驟進(jìn)行到第6步執(zhí)行之后,系統(tǒng)通知我關(guān)閉對話框,應(yīng)該是程序不好用,希望能得到大家的幫助
附:我已經(jīng)安裝了串口調(diào)試助手,并且按著要求將串口改為COM2

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2004-11-01 21:05 |只看該作者

請教:串口編程問題

我大概是這么執(zhí)行的,代碼中應(yīng)該肯定有錯誤,但是我實(shí)在找不出來,希望各位朋友幫助了
1.建立項(xiàng)目:打開VC++6.0,建立一個(gè)基于對話框的MFC應(yīng)用程序SCommTest;
2.在項(xiàng)目中插入MSComm控件   選擇Project菜單下Add To Project子菜單中的 Components and Controls…選項(xiàng),在彈出的對話框中雙擊Registered ActiveX Controls項(xiàng)。 選擇Microsoft Communications Control, version 6.0,,單擊Insert按鈕將它插入到我們的Project中來,接受缺省的選項(xiàng)
這時(shí)在ClassView視窗中就可以看到CMSComm類了,并且在控件工具欄Controls中出現(xiàn)了電話圖標(biāo)(如圖1所示),現(xiàn)在要做的是用鼠標(biāo)將此圖標(biāo)拖到對話框中。
3.利用ClassWizard定義CMSComm類控制對象  打開ClassWizard->;Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_MSCOMM1添加控制變量:m_ctrlComm
4.在對話框中添加控件  向主對話框中添加兩個(gè)編輯框,一個(gè)用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDATA,另一個(gè)用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA,再添加一個(gè)按鈕,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次,將其ID設(shè)為IDC_BUTTON_MANUALSEND。別忘記了將接收編輯框的Properties->;Styles中把Miltiline和Vertical Scroll屬性選上
再打開ClassWizard->;Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類, 為IDC_EDIT_RXDATA添加CString變量m_strRXData, 為IDC_EDIT_TXDATA添加CString變量m_strTXData。說明: m_strRXData和m_strTXData分別用來放入接收和發(fā)送的字符數(shù)據(jù)。
5.添加串口事件消息處理函數(shù)OnComm() 打開ClassWizard->;Message Maps,選擇類CSCommTestDlg,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對話框中將函數(shù)名改為OnComm。
這個(gè)函數(shù)是用來處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,剛才添加的函數(shù)就會執(zhí)行,在OnComm()函數(shù)加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了。在函數(shù)中加入如下代碼:

void CSCommTestDlg::OnComm()
{
    // TODO: Add your control notification handler code here
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符
    {             ////////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼
        variant_inp=m_ctrlComm.GetInput(); //讀緩沖區(qū)
        safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
        len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長度
        for(k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組
        for(k=0;k<len;k++) //將數(shù)組轉(zhuǎn)換為Cstring型變量
        {
            BYTE bt=*(char*)(rxdata+k); //字符型
            strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放
            m_strRXData+=strtemp; //加入接收編輯框?qū)?yīng)字符串
        }
    }
    UpdateData(FALSE); //更新編輯框內(nèi)容
}


到目前為止還不能在接收編輯框中看到數(shù)據(jù),因?yàn)槲覀冞沒有打開串口
6.打開串口和設(shè)置串口參數(shù)  可以在需要的時(shí)候打開串口,例如在程序中做一個(gè)開始按鈕,在該按鈕的處理函數(shù)中打開串口。現(xiàn)在我在主對話框的CSCommTestDlg::OnInitDialog()打開串口,加入如下代碼:

// TODO: Add extra initialization here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);

m_ctrlComm.SetCommPort(1); //選擇com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打開串口
else
AfxMessageBox("cannot open serial port";

m_ctrlComm.SetSettings("9600,n,8,1"; //波特率9600,無校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位

m_ctrlComm.SetInputModel(1); //1:表示以二進(jìn)制方式檢取數(shù)據(jù)
m_ctrlComm.SetRThreshold(1);
//參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)接收數(shù)據(jù)的OnComm事件
m_ctrlComm.SetInputLen(0); //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0
m_ctrlComm.GetInput();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)


將串口線接好后,打開串口調(diào)試助手,并將串口設(shè)在com2,選上自動發(fā)送,也可以等會手動發(fā)送。再執(zhí)行編寫的程序

文中指出,這個(gè)時(shí)候應(yīng)該看到程序執(zhí)行,可是并沒有任何結(jié)果,如果朋友們看到哪里有代碼錯誤的話,請?jiān)敿?xì)指出,萬分感謝!!

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2004-11-02 09:26 |只看該作者

請教:串口編程問題

Mscomm控件共有27個(gè)屬性,其中經(jīng)常用到的有
屬性            描述
CommPort    設(shè)置或返回通信端口號
Settings       以字符串的形式設(shè)置或返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位
PortOpen     設(shè)置或返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口
Input            返回和刪除接收緩沖區(qū)中的字符
Output         將字符串寫入發(fā)送緩沖區(qū)

第6步中是對這些屬性進(jìn)行設(shè)置,我想大概是第5步的處理代碼有問題
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP