亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C#實現(xiàn)PC機(jī)與單片機(jī)(89C51)的串行通訊

        2008-12-31 00:00:00夏春飛
        網(wǎng)絡(luò)與信息 2008年9期

        摘要:本文主要論述PC機(jī)與單片機(jī)之間實現(xiàn)異步串行通訊需要解決的問題以及如何利用C#提供的串行通訊SerialPort類來實現(xiàn)PC機(jī)與51單片機(jī)的通訊。

        關(guān)鍵詞: SerialPort;串行通訊;波特率

        1 引言

        PC機(jī)具有強(qiáng)大的監(jiān)控和管理功能,而單片機(jī)則具有快速及靈活的控制特點,通過PC機(jī)的RS-232串行接口與外部設(shè)備進(jìn)行通訊,是許多測控系統(tǒng)中常用的一種通信解決方案。

        在Microsoft.Net技術(shù)廣泛應(yīng)用的今天人們采用了許多方法在Visual Studio.Net中來編寫串口通訊程序:第一種方法是通過采用Visual Studio 6.0中原來的MSComm控件,這是最簡單、最方便的方法,但需要注冊;第二種方法是自己用API寫串口通信;第三種方法是采用微軟推出的最新版本Visual Studio 2005開發(fā)工具,NET Framework 2.0類庫中包含的SerialPort類,方便地實現(xiàn)了所需要串口通訊的多種功能。本文著重討論了Visual Studio 2005開發(fā)工具中SerialPort類的設(shè)計方法。

        2 SerialPort類常用屬性、方法和事件

        2.1 命名空間

        System.IO.Ports命名空間包含了控制串口重要的SerialPort類,該類提供了同步I/O 和事件驅(qū)動的I/O、對管腳和中斷狀態(tài)的訪問以及對串行驅(qū)動程序?qū)傩缘脑L問。

        2.2 串口的通訊參數(shù)

        ①通訊端口號:

        [PortName]屬性獲取或設(shè)置通信端口,包括但不限于所有可用的COM端口,該屬性返回類型為String。

        ②通訊格式:

        SerialPort類分別用[BaudRate]、[Parity]、[DataBits]、[StopBits]屬性設(shè)置通訊格式中的波特率、校驗位、數(shù)據(jù)位和停止位。

        2.3 串口的打開和關(guān)閉

        SerialPort類中打開關(guān)閉串口相應(yīng)的是調(diào)用類的Open()和Close()方法。

        2.4 數(shù)據(jù)的發(fā)送和讀取

        SerialPort類調(diào)用重載的Write和WriteLine方法發(fā)送數(shù)據(jù),其中WriteLine可發(fā)送字符串并在字符串末尾加入換行符。讀取串口緩沖區(qū)的方法有許多,其中除了ReadExisting和ReadTo,其余的方法都是同步調(diào)用,線程被阻塞直到緩沖區(qū)有相應(yīng)的數(shù)據(jù)或大于ReadTimeOut屬性設(shè)定的時間值后,引發(fā)ReadExisting異常。

        2.5 DataReceived事件

        DataReceived事件在接收到了[ReceivedBytesThreshold]設(shè)置的字符個數(shù)或接收到了文件結(jié)束字符并將其放入了輸入緩沖區(qū)時被觸發(fā)。

        3 PC機(jī)與8051實現(xiàn)串行通訊需要解決的問題

        3.1 TTL電平與RS232電平的轉(zhuǎn)換

        89C51單片機(jī)采用的是TTL電平且采用正邏輯[1],而PC機(jī)采用RS232與外部設(shè)備進(jìn)行通訊,RS232采用負(fù)邏輯,因此MCS51單片機(jī)串行口與PC機(jī)的RS232接口相連進(jìn)行通訊時必須進(jìn)行電平的轉(zhuǎn)換。通常采用MAX232電平轉(zhuǎn)換芯片。

        3.2 單片機(jī)與PC機(jī)通訊時波特率的設(shè)定

        PC機(jī)與51單片機(jī)雙方進(jìn)行通訊時必須采用相同的波特率,PC機(jī)的波特率默認(rèn)為9600b/s, 51系列單片機(jī)有兩個定時/計數(shù)器,四種工作方式,一般用定時器工作于方式2(可重新裝載的8位定時器/計數(shù)器)作為定時波特率發(fā)生器。因此單片機(jī)與PC機(jī)進(jìn)行異步通訊時的波特率可由公式3.1得出:

        其中SMOD是單片機(jī)電源控制寄存器(PCON)中的位7,開機(jī)(RESET)時,SMOD的設(shè)定值為0,亦可用指令“ANL PCON,#7FH”清除為0。fosc為單片機(jī)的晶振頻率。根據(jù)需要的波特率即可得計數(shù)初值TH1。

        4 單片機(jī)與PC機(jī)通訊時通訊協(xié)議的約定及部分初始化程序

        在單片機(jī)與PC機(jī)的通訊中,單片機(jī)一般作為下位機(jī)負(fù)責(zé)從控制對象采集數(shù)據(jù)(如壓力、流量等),上位機(jī)則進(jìn)行現(xiàn)場可視化檢測。傳輸數(shù)據(jù)采用二進(jìn)制數(shù)據(jù),上位機(jī)與下位機(jī)之間采用主從式通訊。以下給出單片機(jī)和VC# 環(huán)境下部分的通訊程序。

        4.1 串口通訊協(xié)議約定

        波特率為9600b/s,無奇偶校驗位,傳輸?shù)臄?shù)據(jù)位為8位,停止位為1位,用串行口工作于方式1。單片機(jī)的晶振頻率fosc=11.059MHz,定時器T1工作于方式2作為波特率發(fā)生器,根據(jù)計數(shù)初值的計算公式(3.1)可得計數(shù)初值TH1為0FDH 。

        4.2 單片機(jī)的串行通訊程序

        單片機(jī)串行通訊程序,給出了初始化程序:

        ORG0000H

        AJMP START;轉(zhuǎn)到初始化程序

        ORG0023H

        AJMP PGUART ;轉(zhuǎn)到串行中斷服務(wù)子程序

        START: MOVSP,#60H ;堆棧指針初始化

        MOVP0,#0FFH ;端口初始化

        MOVP1,#0FFH

        MOVP2,#0FFH

        MOVP3,#0FFH

        MOVTMOD,#20H;定時器T1工作于模式2,自動重裝載

        MOVTH1,#0FDH;TH1、TL1初值為\"0FDH\",9600bps

        MOVTL1,#0FDH

        MOVSCON,#50H;串行口工作于方式1,允許接收

        SETB TR1 ;啟動定時器T1

        SETB ES ;允許串行口中斷

        SETB EA ;開總中斷

        MAIN:...... ;主程序處理其他任務(wù),等待串口中斷

        AJMP MAIN

        PAUSE:...... ;串口中斷服務(wù)子程序,接收處理數(shù)據(jù)

        RETI

        END

        4.3 上位機(jī)的串行通訊程序

        例:發(fā)送及接收數(shù)據(jù)的程序:

        private void button1_Click(object sender, EventArgs e)

        {

        string a;

        SerialPort Ser1 = new SerialPort(\"com1\", 9600, Parity.None, 8, StopBits.One);

        Try

        {

        Ser1.Open();

        }

        catch (InvalidOperationException ex)

        {

        MessageBox.Show(ex.ToString());

        }

        if (textBox1.Text == \"\")

        {

        MessageBox.Show(\"Err\");

        Ser1.Close();

        }

        else

        {

        a=textBox1.Text;

        try

        {

        //p.WriteLine(a);

        p.Write(a);

        }

        catch(InvalidOperationException ex)

        {

        MessageBox.Show(ex.ToString());

        }

        textBox2.Text = Ser1.ReadByte().ToString();

        Ser1.Close();

        }

        }

        5 結(jié)束語

        單片機(jī)與上位機(jī)的通訊在工業(yè)現(xiàn)場中應(yīng)用的比較廣泛,本文對C#提供的串行通訊SerialPort類來實現(xiàn)PC機(jī)與51單片機(jī)的通訊進(jìn)行了探討。實踐證明,這種方案是可行的,能保證雙方通訊正常。

        參考文獻(xiàn)

        [1]蔡朝洋.單片機(jī)控制實習(xí)與專題制作.北京航空航天大學(xué)出版社.

        [2]張洪潤,易濤.單片機(jī)應(yīng)用技術(shù)教程.清華大學(xué)出版社.

        国产女精品| 精品伊人久久大线蕉色首页| 麻神在线观看免费观看| 在线免费观看黄色国产强暴av| 人妻中文字幕无码系列| 欧美精品免费观看二区| 亚洲色图视频在线| 欧洲日韩视频二区在线| 欧美成人a视频免费专区| 日本在线视频二区一区| 美女被内射中出在线观看 | 少妇高潮在线精品观看| 亚洲国产精品成人精品无码区在线| 熟女少妇精品一区二区| 国产成+人+综合+亚洲 欧美| 久久精品韩国日本国产| 手机在线观看av资源| 性猛交╳xxx乱大交| 欧美亚洲综合另类| 中文字幕中文一区中文字幕| 五月婷婷开心五月激情| 人妻少妇中文字幕在线观看| 中文字幕+乱码+中文字幕一区 | 91久久精品国产91久久| 中文字幕成人精品久久不卡| 久久精品国产色蜜蜜麻豆国语版| 桃花影院理论片在线| 无码人妻专区免费视频| 亚洲一区二区三区18| 成人试看120秒体验区| 国产精品揄拍100视频| 国产av综合一区二区三区最新| 日产一区二区三区的精品| 人妻在卧室被老板疯狂进入| 俺来也俺去啦久久综合网| 久久精品国产亚洲av桥本有菜| 国产手机在线观看一区二区三区| 看av免费毛片手机播放| 91spa国产无码| 麻豆久久久国内精品| 亚洲成人av在线蜜桃|