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 Bài Trong Ngày 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...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-11-2007, 08:39 PM   #31
hoan_spkt
Nhập môn đệ tử
 
Tham gia ngày: Nov 2007
Bài gửi: 3
:
Mỉnh cũng tạo giao diện Cổng Com nhưng dùng visual 2005.net.Mình truyền đc data (dạng text) rùi nhưng nếu dùng lisbox để nhận & hiện thị data thì chỉ hiện đc 1/2 thôi.
nếu mình muốn truuyền 1 file thì có đc ko ? Xin các bác chỉ giáo nha......thanks !
hoan_spkt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2007, 04:22 PM   #32
hovanminh
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 5
:
Send a message via MSN to hovanminh Send a message via Yahoo to hovanminh
Talking chuoi

Chao cac bao , no chang khac chi Terminal cua Win ca. Upload code len cho anh e, dung co le tot hon
hovanminh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2007, 10:47 AM   #33
rmitoday
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 27
:
Chương trình của Bắc có xài overlapped I/O không? Có sử dụng multithread để xử lý riêng biệt không? Mình cũng hay viết chương trình giao tiếp bằng VC nay muốn chuyển qua .NET nên quan rất quan tâm vấn đề này. Còn chuyện tự động detect COM (physical or virtual) plug/unplug thì cũng đơn giản thui hè. Tốt nhất nên share source code để anh em cùng đóng góp kinh nghiệm.
rmitoday vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2007, 10:54 AM   #34
rmitoday
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 27
:
Trích:
Nguyên văn bởi dotuanphong View Post
Chào các bạn!
Tôi có chương trình cân lấy dữ liệu từ đồng hồ cân qua công com máy tính, chương trình viêt bằng fox 2.6 win chạy trên Win 98, nay tôi cài upgrade win XP thì chương trình không còn đọc được dữ liệu qua cổng com nữa. Như vây mình có thể khắc phục được không, xin các bạn giúp dùm nhé!
Trong window 95/97/98 cho phép chương trình truy xuất phần cứng trực tiếp bằng các hàm in/out port. Còn từ windows 2000/XP trở đi việc truy xuất phần cứng phải thông qua driver hoặc hàm API của windows. Chương trình cân viết bằng Foxpro 2.6 của bạn có lẽ phải viết lại phần giao tiếp với cổng COM.
rmitoday vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2008, 03:12 AM   #35
dangtq84
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 7
:
Bác Bắc giúp em với !

Em đang làm đồ án về mobile robot. Em muốn viết một chương trình điều khiển để điều khiển robot thực hiện một số chức năng đơn giản như: tiến,lùi,rẽ trái,rẽ phải. Trên giao diện điều khiển chỉ cần các nút button để thực hiện các chức năng trên. Em thông qua cổng COM để giao tiếp với vi xử lý . Nhưng giờ em không biết xuất tín hiệu điều khiển như thể nào cả. Xuất các string thi em làm được rồi còn cái điều khiển thì chịu. Em đang dùng VC++ để viết code. Bác giúp em đi ạ, mail của em là: dangtq84@gmail.com
dangtq84 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2008, 11:24 PM   #36
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi dangtq84 View Post
Em đang làm đồ án về mobile robot. Em muốn viết một chương trình điều khiển để điều khiển robot thực hiện một số chức năng đơn giản như: tiến,lùi,rẽ trái,rẽ phải. Trên giao diện điều khiển chỉ cần các nút button để thực hiện các chức năng trên. Em thông qua cổng COM để giao tiếp với vi xử lý . Nhưng giờ em không biết xuất tín hiệu điều khiển như thể nào cả. Xuất các string thi em làm được rồi còn cái điều khiển thì chịu. Em đang dùng VC++ để viết code. Bác giúp em đi ạ, mail của em là: dangtq84@gmail.com
Điều khiển là nhiệm vụ của cấp dưới ở phần mạch chịu trách nhiệm chứ. Còn ở trên PC cậu chỉ phải gửi code lệnh thôi.

Ví dụ: thằng PIC chẳng hạn nhận dc kí tự A thì tiến chẳng hạn. Thế thôi.

Đó là bắt tay của 2 phần mà.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 12:57 AM   #37
katadfg
Nhập môn đệ tử
 
Tham gia ngày: May 2008
Bài gửi: 3
:
Cậu có thể cho mình xin tài liệu về vấn đề này mà viết bang VC++ ko Bắc, nếu có thì mình cảm ơn. Email của minh: hanhkhucbachkhoa@gmail.com
katadfg vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2008, 03:22 PM   #38
phucvinh885
Đệ tử 1 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 16
:
bó tay
lúc thì VC++ 6, lúc thì VC++.net, lúc thì basic...
em chả hiểu là nên dùng caí nào
cái nào có thể truyền và nhận dữ liệu qua PIC 16f877a và điều khiển thông qua PIC
em thấy các anh nói triền miêm ,
mà cái nào cũng dở dang
bọn em đã gà thì chớ
chả hiểu gì hết
phucvinh885 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-12-2008, 11:14 AM   #39
Billinstructor
Nhập môn đệ tử
 
Tham gia ngày: Dec 2008
Bài gửi: 1
:
Cậu có thể hướng dẫn mình cách làm chương trình thường trú trong windows với Visual Basic 6.0 không? vì mình muốm viết một chương trình thường trú đọc dữ liệu từ RS232. Chi tiết đoạn code càng tốt. Cảm ơn nhiều

thay đổi nội dung bởi: Billinstructor, 24-12-2008 lúc 11:16 AM. Lý do: thiếu ý tưởng
Billinstructor vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-04-2009, 12:04 PM   #40
nhuhuynhcd
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 5
:
anh ơi có phần mạch test ko? e dang làm phần giao tiếp rs232 dùng VC++ a có thể gửi cho e phần mạch test mach nguyên lý với hướng dẫn k? mail của e là thienduongxanh836@yahoo.com thank
nhuhuynhcd vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-04-2009, 06:39 PM   #41
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
Em đang làm giao tiếp RS232 sử dụng C#. Nhưng chương trình không xử lý lệnh serialport1.close(). Mong mọi người chỉ giáo.
Đây là code C#.
Code:
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace viduRS232
{
    public partial class Form1 : Form
    {
        public string s;
        public ArrayList arr = new ArrayList();
        public int id;
        public Form1()
        {
            InitializeComponent();
            id = 0;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.Close();
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            this.Invoke(new EventHandler(display));
        }
        private void display(object sender, EventArgs e)
        {
            int flag;
            int c; 
            c = serialPort1.ReadChar();
            //string s1 = "";
            s = "";
            flag = 0;
            if (c == 's')
            {
                flag = 1;
                while (flag == 1)
                {
                    c =serialPort1.ReadChar();
                    if (c == 'S')
                    {
                        //textBoxdisplay.Text = s1;
                        flag = 0;
                    }
                    else
                        s += Convert.ToChar(c);
                }
                arr.Add(s);
                id++;
                if (id == 2)
                {
                    serialPort1.Write("S");
                }
                //serialPort1.Write("s");
                
                //this.textBoxdisplay.Text = s;
            }
        }

        private void buttonRead_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            serialPort1.DataReceived +=new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
            serialPort1.Write("s");
            //id = 1;
            //while (id == 1) ;
        }

        private void buttonClose_Click(object sender, EventArgs e)
        {
            //this.Dispose();
            //this.serialPort1.Close();
            this.Close();
        }

        private void buttondisplay_Click(object sender, EventArgs e)
        {
            this.textBoxdisplay.Text = Convert.ToString(arr[0]);
            this.textBox1.Text = Convert.ToString(arr[1]);
            this.textBox2.Text = Convert.ToString(id);
            //serialPort1.Write("s");
            this.serialPort1.Close();
        }
    }
}
Còn đây là code PIC
Code:
#include <18f4331.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud = 9600,parity = n,xmit = pin_C6,rcv=pin_C7)
#include <LMB162A.c>
int flag;
void lcd_putstr(char *buffer);
#int_rda
void ngat_rs232()
{
   if(flag==0)
   {
      printf("sxyzS");
   }
   if(flag==1)
   {
      printf("sabcS");
   }
   if(flag==2)
   {
      printf("s123S");
   }
   if(flag==3)
   {
      printf("s456S");
   }
   putc('\0');
   flag++;
}
void main()
{
   int id;
   char c;
   char s[] = "hello";
   //char s1[] ="s123456789S";
   //char s2[] = "s987654321";
   enable_interrupts(global);
   enable_interrupts(int_rda);
   delay_ms(50);
   lcd_init();
   delay_ms(10);
   printf(lcd_putc,"hello");
   flag = 0;
   //while(flag==0)
   //{
     // printf("s123456S");
   //}
   //lcd_putc('\f');
   id = 1;
   while(id==1)
   {
      c = getc();
      if(c=='S')
      {
         id = 0;
         //sable_interrupts(int_rda);
      }
   }
   //able_interrupts(int_timer1);
   printf(lcd_putc,"xong");
}
void lcd_putstr(char *buffer)
{
    unsigned int i = 0;
    while (buffer[i] != '\0')
    {
        lcd_putc(buffer[i]); /* calling another function */
                                /* to write each char to the lcd module */
        i++;
        delay_us(10);
        
    }
}
Cho em hỏi thêm là hàm ngắt RDA hình như ngắt liên tục không dừng. Em disable_interrupts(int_rda) thì nó không chạy được hàm lcd_putc(), hình như nó tắt timer gì đó. Các cao thủ giải thích vấn đề này giúp em với, và khắc phục nó như thế nào?
tinhgiac_vp vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-04-2009, 07:14 PM   #42
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tinhgiac_vp View Post
...
Cho em hỏi thêm là hàm ngắt RDA hình như ngắt liên tục không dừng. Em disable_interrupts(int_rda) thì nó không chạy được hàm lcd_putc(), hình như nó tắt timer gì đó. Các cao thủ giải thích vấn đề này giúp em với, và khắc phục nó như thế nào?
Câu hỏi giống như thế này đã được tôi trả lời ở một luồng khác, nhưng tôi sẽ nói lại. Với PIC 8-bit, khi có ngắt nhận dữ liệu từ USART, bạn cần đọc thanh ghi RCREG để giải phóng nó và xóa cờ ngắt RCIF (đây là cách duy nhất để xóa cờ ngắt này). Nếu bạn không thực hiện việc đọc RCREG (đọc vào một biến tạm nào đó nếu không cần dùng giá trị thanh ghi) thì cờ ngắt RCIF sẽ không được xóa, dẫn đến ngắt nhận dữ liệu từ USART liên tục như bạn đã thấy.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-04-2009, 06:49 PM   #43
tinhgiac_vp
Đệ tử 2 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 42
:
cám ơn trưởng lão nhiều. Còn vấn đề lệnh Serialport1.close() không được thực hiện khi đặt lệnh đó trong hàm ngắt sự kiện data_receive, trưởng lão và các cao thủ có thể chỉ em nguyên nhân không ạ?
tinhgiac_vp vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-05-2009, 04:46 AM   #44
tannocdt06
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 1
:
các bác có file.dll nào mà khi add vào thanh toolbox thì visual C++.net có thể giao tiếp ra bên ngoài qua cổng USB. có thì share cho mình nghen ,cám ơn rất nhiều .
tannocdt06 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-05-2009, 01:14 PM   #45
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Chương trình của Bắc rất hay! Tuy nhiên cũng còn nhiều trường hợp cần bắt lỗi!
Đúng là ta nên thử nghiệm viết các ứng dụng trên các công cụ mới hơn.
Mình thấy hỗ trợ lớp Serial Port Communication của bộ Visual Studio 2005 là rất mạnh!
Hi vọng là sẽ được học hỏi nhiều ở các bạn và các A đi trước!

To tinhgiac_vp:
Ở đây mình thấy mấy chỗ bạn sử dụng lệnh serialPort1.close()
Không biết là chương trình mắc lỗi ở chỗ nào
- Mình cũng ko hiểu tại sao bạn lại close luôn kết nối khi load form vậy?

private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Close();
}

Bạn nên gửi kèm file chương trình để mọi người cùng test thì tốt hơn!
Và một điều lưu ý khi lập trình đó là các câu lệnh được dịch theo thứ tự từ trên xuống dưới. Do vậy, có khi cả đoạn code là đúng nhưng chỉ là cái cần làm trước lại đặt ở sau thì chương trình cũng không cho kết quả chính xác!
Hihi! Thân chào.
Delfy
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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à 07:21 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