谘詢電話

ENGLISH0755-88840386
新聞中心

谘詢電話

0755-88840386
您的位置:首頁 > K8凯发大酒店天生赢家專題 > 專業技術專題 > 工業自動化稱重儀表>詳情頁

MSComm控件稱重儀表與計算機的串行通信

發布時間:2021-04-27 11:33:07 |來源:網絡轉載

本文介紹了單片機與PC機之間的串行通信和RS232串行通信總線標準,以稱重儀表作為下位機,以計算機作為上位機,以RS232作為兩者之間的通信總線。利用VC++的MSComm控件開發上位機程序,實現了稱重儀表與計算機的串行通信。

稱重儀表是人們生活中所見的最為廣泛的一種儀表,隨著電子科技,稱重技術等各門學科的發展,現在的稱重儀表已不僅僅是將重量顯示出來,而增加了許多新的功能,如串行通信、打印等。該文主要介紹稱重儀表的串行通信,在儀表與計算機的通信中,主要是利用單片機的串行口來實現串行通信,將單片機與計算機相連構成上下位機的結構,以擴展控製界麵,實現人機交互。稱重控製器所用的單片機是SYNCMOS-SM8958A,屬於8052係列單片機的派生產品。

1稱重儀表串行通信
1.1RS232電平轉換接口電路

單片機有一個串行通信接口,其接口標準為TTL標準,而計算機串口的接口標準為RS232C接口標準。它適合於數據傳輸率0~115200b/s範圍內的通信。係統中串行通信在硬件上采用3線製RxD、TxD、GND軟握手的零MODEM方式,僅需要3根線就可在兩個數字設備之間實現全雙工的數據傳送,即將PC機和單片機的發送數據線TxD與接收數據RxD交叉連接,二者的地線GND直接相連,其他信號線可以不用,而采用軟件握手方式。這樣既可以實現預定的任務,又可以簡化電路設計節約成本。但是計算機通過串行接口芯片,發送和接收的都是TTL電平表示的數字信息。它與TTLMOS邏輯電平完全不同,邏輯0電平規定為5~15V之間,邏輯1是電平為-5~-15V之間。因此在將計算機和單片機的RxD和TxD交叉連接時,必須進行電平轉換,采用MAXIM公司的MAX232來做電平轉換。MAX232屬於MAXIM公司的通用串行接收/發送驅動芯片。其外圍電路簡單,隻需外接4個0.1μF的電容即可,MAX232將計算機的TxD端輸出的TTL電平信號轉換為RS232C電平,輸出到單片機的RxD引腳。

00方式0同步移位寄存器foso/1201方式110位異步收發由定時器控製10方式211位異步收發foso/32或foso/6411方式311位異步收發由定時器控製 SMO,SM1為串行口工作方式選擇位,在文中SM0、SM1為0、1,即串口工作在方式1,該方式為10位一幀的異步串行通信方式,其波特率是可變的,由定時器控製,1位起始位,8位數據位,1位停止位,無奇偶校驗位。

1.2單片機串行通信

SM8958A係列單片機通過外部引腳RxD(P3.0,串行數據接收端)、TxD(P3.1,串行數據發送端)向用戶提供一個可編程的全雙工串行通信接口。發送緩衝器和接收緩衝器都是以8031內部特殊功能寄存器SBUF的名義存在的,兩個緩衝寄存器公用一個地址99H,可以用讀/寫指令區分。要發送數據時隻需使用“MOV

SBUF,A”寫指令,CPU把累加器A的內容寫入發送的SBUF(99H),再由TxD引腳一位一位地向外發送;串行接收數據時,接收端RxD一位一位地接收數據再通過“MOVA,SBUF”讀指令,CPU從接收的SBUF(99H)讀出數據,送到累加器A中。發送和接,直到收到一個完整的字符數據後通知CPU,

收數據過程采用中斷方式,從而可以大大提高CPU的利用效率。

單片機的UART接口是一個全雙工的串行接口,它能同時發送和接收數據。單片機的UART接口有4種工作方式,需要對串行口控製寄存器SCON的設置來定義串行口的工作方式和控製它的功能。

SM0和SM1為工作方式選擇位

;RI為接收中斷標誌;TI為發送中斷標誌;RB8為接收數據第9位;TB8為發送數據第9位;REN為接收控製;SM2為多極通信。串行口的控製寄存器SCON控製串行口的工作方式和波特率,發送和接收過程采用中斷方式。

SCON的TI或RI引發內部串行口中斷或通過內部查詢完成中斷功能,波特率發生器可用定時器T/C1或T/C2設置。SM8958A有一個標準的串行口,有4種工作方式。通過對串口控製寄存器SCON進行編程完成串口的初始化。單片機可以采用匯編或者C語言,通過對單片機的串口編程,從串口把數據發送給計算機。

SMO,SM1為串行口工作方式選擇位,在文中SM0、SM1為0、1,即串口工作在方式1,該方式為10位一幀的異步串行通信方式,其波特率是可變的,由定時器控製,1位起始位,8位數據位,1位停止位,無奇偶校驗位。[page]

1.3單片機串行通信程序設計

稱重控製器儀表的單片機程序是在KeilC51編譯器下編寫,串行口輸入采用查詢方式,輸出采用中斷方式。voidIRQ_UartSio(void){if(SSR0_PER==1){SET_PARITY_ERROR; /3產生奇偶檢驗錯誤標誌3/SSR0&=0x03;}/3奇偶檢驗錯誤標誌位清零3/elseif(SSR0_OVE==1){SET_OVERRUN_ERROR; /3產生溢出位錯誤標誌3/SSR0&=0x03;}/3溢出錯誤標誌位清零3/elseif(SSR0_FER==1){SET_FRAMING_ERROR; /3產生數據幀位出錯標誌3/SSR0&=0x03;00方式0同步移位寄存器foso/1201方式110位異步收發由定時器控製10方式211位異步收發foso/32或foso/6411方式311位異步收發由定時器控製

SM0SM1相應工作方式說明所用波特率

}/3繼續接收數據}/3數據幀標誌位清零3/

else

if((SSR0_RDRF==1)&&(!IS_RCVEND))

/3開始接收數據3/

{

temp=RDR0;

if((++uart.rbuf_len>40)||(temp==0x0A))

/3數據接收完畢3/

{

uart.rbuf_len--;

SET_RCVEND;

}

else

}

else

if(SSR0_TDRE==1)/3發送數據3/if((3uart.tbuf_index==’\0’)||((uart.tbuf_index-uart.tbuffer)>49)){SMC20_TXE=0;/3發送結束3/SET_SEDEND;}else{TDR0=3uart.tbuf_index;uart.tbuf_index++;}/3繼續發送數據3/}

上位機串行通信程序設計
利用MSComm控件進行上位機串口編程。

串行通信控件MSComm32.OCX是Windows下串行通信編程的32位ActiveX控件。事件驅動法是MSComm處理通信問題的一種方法。OnComm事件還可以檢查和處理通信錯誤。每當有新的字符到達,或端口狀態改變或發生錯誤時,MSComm控件觸發OnComm事件,從而獲取並處理這些通信事件。同時CPU無需不斷測試串口,這種方式的優點是程序響應及時,可靠性高。

1)初始化並打開串口。對串口的初始化主要包括以下幾個屬性的設置:通過CommPort屬性設置通信端口號;通過HandShaking屬性設置通信協議;通過Setings屬性設置傳輸速率等參數;再根據具體需要設置其他一些相關屬性。在初始化完串口後通過將PortOpen屬性設為True即打開了串口。

2)捕捉串口事件。采取比較廣泛使用的事件驅動的方式,在OnComm事件裏捕捉通信事件並進行相應的處理。3)串口數據的讀寫。串口的讀寫主要通過In2{put和Output屬性。從串口讀入的數據在Input裏,3uart.rbuf_index=temp;直接調用即可讀取,而把要發送的數據賦值給Out2uart.rbuf_index++;3/put即可。注意這裏的數據分兩種情況,字符串和二進製。

[page]4)串口的關閉。將PortOpen屬性設置為False即可關閉串口。控件的主要屬性設置如下:m_MSComm.SetCommPort(1);//選擇COM1m_MSComm.SetInBufferSize(1024);//接收緩衝區m_MSComm.SetOutBufferSize(1024);//發送緩衝區m_MSComm.SetInputLen(0);//設置當前接收區的數據長度,為0表示全部讀取m_MSComm.SetInputMode(1);//以二進製方式讀寫數據m_MSComm.SetRThoushold(1);//接收緩衝區有一個及一個以上字符時,將引發OnComm事件m_MSComm.SetSettings(“9600,n,8,1”);//波特率9600,無奇偶校驗,8個數據位,1個停止位

voidCCommTestDlg::OnSend()

{

if(!m_Comm.GetPortOpen())

m_Comm.SetPortOpen(TRUE);//打開串口

UpdateData(TRUE);

m_Comm.SetOutput(COleVariant(m_SendDa2

ta));

//發送數據}voidCCommTestDlg::OnClear()

{m_ReceiveData.Empty();//清除接收對話框中的數據m_SendData.Empty();//清除發送對話框中的數據

UpdateData(FALSE);

}voidCCommTextDlg::OnComm(){

VARIANTm_Input1;COleSafeArraym_Input2;longlength,i;BYTEdata[1024];CStringstr;if(m_Comm.GetCommEvent()==2)

length=m_Input2.GetOneDimSize();

//確定數據長度

for(i=0;i

{

m_Input2.GetElement(&i,data+i);//將數據轉換為BYTE型數組

}

for(i=0;i

//將數組轉換為CString型變量

{

BYTEa=3(char3)(data+i);

str.Format("%c",a);

}

}

UpdateData(FALSE);//更新編輯框內容

}

m//讀取緩衝區內的數據_Input1=m_Comm.GetInput();

 

//接收緩衝區有字符m_Input2=m_Input1;//將Variant型變量轉換為COleSafeArray變量信。

{

3結論
該文以稱重儀表與計算機進行數據通信為例,著重介紹了單片機與計算機之間的串行通信和RS232串行通信總線標準,利用VisualC++的MSComm控件實現了雙方的串行通信。

 

本文源於網絡轉載,如有侵權,請聯係刪除

 

深圳市k8凯发版官网儀器有限公司是一家專門從事稱重儀表和全自動包裝碼垛生產線的研發及生產的高新技術企業,所生產的JY500係列稱重顯示控製器(包括配料秤儀表、皮帶秤儀表、包裝秤儀表、重量變送器等)高速高精度,使用壽命長。k8凯发版官网儀器有十數年的現場校驗經驗,在業內有良好的口碑,且有專門的售後工程師幫忙解決產品使用過程中遇到的技術問題,客戶可以放心省心順心的使用我司的產品。如果對我司的產品感興趣,歡迎谘詢。

分享到
網站地圖凱發K8凱發K8凱發K8凱發K8凱發K8凱發K8