PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 24-05-2013, 10:07 PM   #1
boylojthoj
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 3
:
Giao tiếp VC# 2010 với PIC16F887

Mình đang làm đề tài giao tiếp vi điều khiển với PC bằng VC# 2010. Tình hình là đã gửi và nhận dữ liệu được rồi, nhưng ở phần xử lý dữ liệu mình còn kém, mong các bạn trên 4rum giúp đỡ mình.
Vấn đề như sau :
1/ Mình gửi 1 dãy số từ 0-255 từ PIC16f887 lên VC# 2010, nhưng khi lên VC# 2010 thì lại hiển thị ra mã ACII, vậy làm sao để chuyển chúng thành dạng số để xử lý.
2/ Mình cũng muốn gửi 1 vài số từ VC# 2010 xuống PIC16f887 để xử lý cơ cấu chấp hành, vậy làm sao để gửi dữ liệu dạng số. Nếu không gửi được dữ liệu số thì ở PIC16f887 mình phải xử lý thế nào để chuyển dữ liệu thành số.

Hình ảnh giao diện



Code của VC# 2010:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
/////////////////////////////////
using System.IO;
using System.IO.Ports;
using System.Xml;
 
namespace testrs232
{
    public partial class Form1 : Form
    {
        SerialPort P = new SerialPort(); //khai bao 1 object serial port moi
        string InputData = string.Empty; //khai bao string buff de hien thi du lieu
        delegate void SetTextCallback(string text); //khai bao delagate SetTextCallback voi tham so string
        public Form1()
        {
            InitializeComponent();
            //cai dat cac thong so cho COM
            //mang string ports de luu tat ca cac cong COM co tren may
            string[] ports = SerialPort.GetPortNames();
            //them tat ca cac COM tren may vao cbCom
            cbCom.Items.AddRange(ports);
            P.ReadTimeout = 1000;
            //khai bao ham delagate bang phuong thuc DataReceived cua Object SerialPort
            //khi co su kien nhan du lieu se nhay den phuong thuc DataReceived
            P.DataReceived += new SerialDataReceivedEventHandler(DataReceive);
            //cai dat baud rate
            string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };
            cbRate.Items.AddRange(BaudRate);
            //cai dat databits
            string[] DataBits={"6","7","8"};
            cbBits.Items.AddRange(DataBits);
            //cai dat parity
            string[] Parity = { "None", "Odd", "Even" };
            cbParity.Items.AddRange(Parity);
            //cai dat stop bit
            string[] Stopbit = { "1", "1.5", "2" };
            cbBit.Items.AddRange(Stopbit);
 
        }
 
      private void DataReceive(object obj, SerialDataReceivedEventArgs e)
                {
              string InputData=P.ReadExisting();
              //try { InputData = P.ReadTo("\r"); }
              //catch {return;}
              P.DiscardInBuffer();
                    if (InputData != String.Empty)
                    {
                    // txtIn.Text = InputData; // Ko dùng đc như thế này vì khácthreads .
                    SetText(InputData); // Chính vì vậy phải sử dụng ủy quyền tạiđây. Gọi delegate đã khai báo trước đó.
                    }
                }
        private void SetText(string text)
                {
                        if (this.txtkq.InvokeRequired)
                        {
                        SetTextCallback d = new SetTextCallback(SetText); // khởi tạo 1 delegate mới gọi đến SetText
                        this.Invoke(d, new object[] { text}); 
                        }
                        else this.txtkq.Text += text;
                }
 
 
      private void btGui_Click(object sender, EventArgs e)
          {
                      if (P.IsOpen)
            {
                if (txtSend.Text == "") MessageBox.Show("Chưa có dữ liệu!", "Thông Báo");
                else
                {
                    P.Write(txtSend.Text);
                 
                }
            }
            else MessageBox.Show("COM chưa mở.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            txtSend.Clear();
            }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            cbCom.SelectedIndex = 0; // chọn COM được tìm thấy đầu tiên
            cbRate.SelectedIndex = 3; // 9600
            cbBits.SelectedIndex = 2; // 8
            cbParity.SelectedIndex = 0; // None
            cbBit.SelectedIndex = 0; // None
            // Hiện thị Status cho Pro tí
            status.Text = "Hãy chọn 1 cổng COM để kết nối.";
        }
 
        private void btKetnoi_Click(object sender, EventArgs e)
        {
                  try
                {
                P.Open();
                btNgat.Enabled = true;
                btKetnoi.Enabled = false;
                // Hiện thị Status
                status.Text = "Đang kết nối với cổng " + cbCom.SelectedItem.ToString();
                }
                catch (Exception aa)
                {
                MessageBox.Show("Không kết nối được.","Thử lại",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
        }
 
        private void btNgat_Click(object sender, EventArgs e)
        {
            P.Close();
            btKetnoi.Enabled = true;
            btNgat.Enabled = false;
            // Hiện thị Status
            status.Text = "Đã ngắt kết nối";
        }
 
        private void btThoat_Click(object sender, EventArgs e)
        {
            DialogResult kq = MessageBox.Show("Bạn thực sự muốn thoát", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (kq == DialogResult.Yes)
            {
            MessageBox.Show("Chúc bạn thành công","CĐCĐT10A");
            this.Close();
            }
        }
 
        private void btXoa_Click(object sender, EventArgs e)
        {
            txtkq.Text = "";
            txtSend.Text = "";
        }
 
        private void tácGiảToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.ShowDialog();
        }
 
        private void cbCom_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (P.IsOpen)
            {
                P.Close();
            }
            P.PortName = cbCom.SelectedItem.ToString(); //gan portname bang COM da chon
 
        }
 
        private void cbRate_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (P.IsOpen)
            {
                P.Close();
            }
            P.BaudRate = Convert.ToInt32(cbRate.Text);
        }
 
        private void cbBits_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (P.IsOpen)
            {
                P.Close();
            }
            P.DataBits = Convert.ToInt32(cbBits.Text);
        }
 
        private void cbParity_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (P.IsOpen)
            {
                P.Close();
            }
            switch (cbParity.SelectedItem.ToString())
            {
                case "Odd":
                    P.Parity = Parity.Odd;
                    break;
                case "None":
                    P.Parity = Parity.None;
                    break;
                case "Even":
                    P.Parity = Parity.Even;
                    break;
            }
        }
 
        private void cbBit_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (P.IsOpen)
            {
                P.Close();
            }
            switch (cbBit.SelectedItem.ToString())
            {
                case "1":
                    P.StopBits = StopBits.One;
                    break;
                case "1.5":
                    P.StopBits = StopBits.OnePointFive;
                    break;
                case "2":
                    P.StopBits = StopBits.Two;
                    break;
            }
        }
 
 
   
      }
    }
Mong mọi người giúp đỡ !!!
boylojthoj vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:12 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam