日本少妇被爽到高潮动态图,国产jjzzjjzz视频全部免费,亚洲精品国产精品制服丝袜,精品免费一区二区三区在

? ? ? ?

咨詢電話

ENGLISH0755-88840386
新聞中心

咨詢電話

0755-88840386
您的位置:首頁(yè) > 學(xué)習(xí)專題 > 專業(yè)技術(shù)專題 > 工業(yè)自動(dòng)化稱重儀表>詳情頁(yè)

MSComm控件稱重儀表與計(jì)算機(jī)的串行通信

發(fā)布時(shí)間:2021-04-27 11:33:07 |來源:網(wǎng)絡(luò)轉(zhuǎn)載

本文介紹了單片機(jī)與PC機(jī)之間的串行通信和RS232串行通信總線標(biāo)準(zhǔn),以稱重儀表作為下位機(jī),以計(jì)算機(jī)作為上位機(jī),以RS232作為兩者之間的通信總線。利用VC++的MSComm控件開發(fā)上位機(jī)程序,實(shí)現(xiàn)了稱重儀表與計(jì)算機(jī)的串行通信。

稱重儀表是人們生活中所見的最為廣泛的一種儀表,隨著電子科技,稱重技術(shù)等各門學(xué)科的發(fā)展,現(xiàn)在的稱重儀表已不僅僅是將重量顯示出來,而增加了許多新的功能,如串行通信、打印等。該文主要介紹稱重儀表的串行通信,在儀表與計(jì)算機(jī)的通信中,主要是利用單片機(jī)的串行口來實(shí)現(xiàn)串行通信,將單片機(jī)與計(jì)算機(jī)相連構(gòu)成上下位機(jī)的結(jié)構(gòu),以擴(kuò)展控制界面,實(shí)現(xiàn)人機(jī)交互。稱重控制器所用的單片機(jī)是SYNCMOS-SM8958A,屬于8052系列單片機(jī)的派生產(chǎn)品。

1稱重儀表串行通信
1.1RS232電平轉(zhuǎn)換接口電路

單片機(jī)有一個(gè)串行通信接口,其接口標(biāo)準(zhǔn)為TTL標(biāo)準(zhǔn),而計(jì)算機(jī)串口的接口標(biāo)準(zhǔn)為RS232C接口標(biāo)準(zhǔn)。它適合于數(shù)據(jù)傳輸率0~115200b/s范圍內(nèi)的通信。系統(tǒng)中串行通信在硬件上采用3線制RxD、TxD、GND軟握手的零MODEM方式,僅需要3根線就可在兩個(gè)數(shù)字設(shè)備之間實(shí)現(xiàn)全雙工的數(shù)據(jù)傳送,即將PC機(jī)和單片機(jī)的發(fā)送數(shù)據(jù)線TxD與接收數(shù)據(jù)RxD交叉連接,二者的地線GND直接相連,其他信號(hào)線可以不用,而采用軟件握手方式。這樣既可以實(shí)現(xiàn)預(yù)定的任務(wù),又可以簡(jiǎn)化電路設(shè)計(jì)節(jié)約成本。但是計(jì)算機(jī)通過串行接口芯片,發(fā)送和接收的都是TTL電平表示的數(shù)字信息。它與TTLMOS邏輯電平完全不同,邏輯0電平規(guī)定為5~15V之間,邏輯1是電平為-5~-15V之間。因此在將計(jì)算機(jī)和單片機(jī)的RxD和TxD交叉連接時(shí),必須進(jìn)行電平轉(zhuǎn)換,采用MAXIM公司的MAX232來做電平轉(zhuǎn)換。MAX232屬于MAXIM公司的通用串行接收/發(fā)送驅(qū)動(dòng)芯片。其外圍電路簡(jiǎn)單,只需外接4個(gè)0.1μF的電容即可,MAX232將計(jì)算機(jī)的TxD端輸出的TTL電平信號(hào)轉(zhuǎn)換為RS232C電平,輸出到單片機(jī)的RxD引腳。

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

1.2單片機(jī)串行通信

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

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

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

單片機(jī)的UART接口是一個(gè)全雙工的串行接口,它能同時(shí)發(fā)送和接收數(shù)據(jù)。單片機(jī)的UART接口有4種工作方式,需要對(duì)串行口控制寄存器SCON的設(shè)置來定義串行口的工作方式和控制它的功能。

SM0和SM1為工作方式選擇位

;RI為接收中斷標(biāo)志;TI為發(fā)送中斷標(biāo)志;RB8為接收數(shù)據(jù)第9位;TB8為發(fā)送數(shù)據(jù)第9位;REN為接收控制;SM2為多極通信。串行口的控制寄存器SCON控制串行口的工作方式和波特率,發(fā)送和接收過程采用中斷方式。

SCON的TI或RI引發(fā)內(nèi)部串行口中斷或通過內(nèi)部查詢完成中斷功能,波特率發(fā)生器可用定時(shí)器T/C1或T/C2設(shè)置。SM8958A有一個(gè)標(biāo)準(zhǔn)的串行口,有4種工作方式。通過對(duì)串口控制寄存器SCON進(jìn)行編程完成串口的初始化。單片機(jī)可以采用匯編或者C語(yǔ)言,通過對(duì)單片機(jī)的串口編程,從串口把數(shù)據(jù)發(fā)送給計(jì)算機(jī)。

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

1.3單片機(jī)串行通信程序設(shè)計(jì)

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

SM0SM1相應(yīng)工作方式說明所用波特率

}/3繼續(xù)接收數(shù)據(jù)}/3數(shù)據(jù)幀標(biāo)志位清零3/

else

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

/3開始接收數(shù)據(jù)3/

{

temp=RDR0;

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

/3數(shù)據(jù)接收完畢3/

{

uart.rbuf_len--;

SET_RCVEND;

}

else

}

else

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

上位機(jī)串行通信程序設(shè)計(jì)
利用MSComm控件進(jìn)行上位機(jī)串口編程。

串行通信控件MSComm32.OCX是Windows下串行通信編程的32位ActiveX控件。事件驅(qū)動(dòng)法是MSComm處理通信問題的一種方法。OnComm事件還可以檢查和處理通信錯(cuò)誤。每當(dāng)有新的字符到達(dá),或端口狀態(tài)改變或發(fā)生錯(cuò)誤時(shí),MSComm控件觸發(fā)OnComm事件,從而獲取并處理這些通信事件。同時(shí)CPU無需不斷測(cè)試串口,這種方式的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。

1)初始化并打開串口。對(duì)串口的初始化主要包括以下幾個(gè)屬性的設(shè)置:通過CommPort屬性設(shè)置通信端口號(hào);通過HandShaking屬性設(shè)置通信協(xié)議;通過Setings屬性設(shè)置傳輸速率等參數(shù);再根據(jù)具體需要設(shè)置其他一些相關(guān)屬性。在初始化完串口后通過將PortOpen屬性設(shè)為True即打開了串口。

2)捕捉串口事件。采取比較廣泛使用的事件驅(qū)動(dòng)的方式,在OnComm事件里捕捉通信事件并進(jìn)行相應(yīng)的處理。3)串口數(shù)據(jù)的讀寫。串口的讀寫主要通過In2{put和Output屬性。從串口讀入的數(shù)據(jù)在Input里,3uart.rbuf_index=temp;直接調(diào)用即可讀取,而把要發(fā)送的數(shù)據(jù)賦值給Out2uart.rbuf_index++;3/put即可。注意這里的數(shù)據(jù)分兩種情況,字符串和二進(jìn)制。

[page]4)串口的關(guān)閉。將PortOpen屬性設(shè)置為False即可關(guān)閉串口??丶闹饕獙傩栽O(shè)置如下:m_MSComm.SetCommPort(1);//選擇COM1m_MSComm.SetInBufferSize(1024);//接收緩沖區(qū)m_MSComm.SetOutBufferSize(1024);//發(fā)送緩沖區(qū)m_MSComm.SetInputLen(0);//設(shè)置當(dāng)前接收區(qū)的數(shù)據(jù)長(zhǎng)度,為0表示全部讀取m_MSComm.SetInputMode(1);//以二進(jìn)制方式讀寫數(shù)據(jù)m_MSComm.SetRThoushold(1);//接收緩沖區(qū)有一個(gè)及一個(gè)以上字符時(shí),將引發(fā)OnComm事件m_MSComm.SetSettings(“9600,n,8,1”);//波特率9600,無奇偶校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位

voidCCommTestDlg::OnSend()

{

if(!m_Comm.GetPortOpen())

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

UpdateData(TRUE);

m_Comm.SetOutput(COleVariant(m_SendDa2

ta));

//發(fā)送數(shù)據(jù)}voidCCommTestDlg::OnClear()

{m_ReceiveData.Empty();//清除接收對(duì)話框中的數(shù)據(jù)m_SendData.Empty();//清除發(fā)送對(duì)話框中的數(shù)據(jù)

UpdateData(FALSE);

}voidCCommTextDlg::OnComm(){

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

length=m_Input2.GetOneDimSize();

//確定數(shù)據(jù)長(zhǎng)度

for(i=0;i

{

m_Input2.GetElement(&i,data+i);//將數(shù)據(jù)轉(zhuǎn)換為BYTE型數(shù)組

}

for(i=0;i

//將數(shù)組轉(zhuǎn)換為CString型變量

{

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

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

}

}

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

}

m//讀取緩沖區(qū)內(nèi)的數(shù)據(jù)_Input1=m_Comm.GetInput();

 

//接收緩沖區(qū)有字符m_Input2=m_Input1;//將Variant型變量轉(zhuǎn)換為COleSafeArray變量信。

{

3結(jié)論
該文以稱重儀表與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信為例,著重介紹了單片機(jī)與計(jì)算機(jī)之間的串行通信和RS232串行通信總線標(biāo)準(zhǔn),利用VisualC++的MSComm控件實(shí)現(xiàn)了雙方的串行通信。

 

本文源于網(wǎng)絡(luò)轉(zhuǎn)載,如有侵權(quán),請(qǐng)聯(lián)系刪除

 

深圳市卓禾儀器有限公司是一家專門從事稱重儀表和全自動(dòng)包裝碼垛生產(chǎn)線的研發(fā)及生產(chǎn)的高新技術(shù)企業(yè),所生產(chǎn)的JY500系列稱重顯示控制器(包括配料秤儀表、皮帶秤儀表、包裝秤儀表、重量變送器等)高速高精度,使用壽命長(zhǎng)。卓禾儀器有十?dāng)?shù)年的現(xiàn)場(chǎng)校驗(yàn)經(jīng)驗(yàn),在業(yè)內(nèi)有良好的口碑,且有專門的售后工程師幫忙解決產(chǎn)品使用過程中遇到的技術(shù)問題,客戶可以放心省心順心的使用我司的產(chǎn)品。如果對(duì)我司的產(chǎn)品感興趣,歡迎咨詢。

分享到