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 25-04-2009, 12:59 AM   #136
chinh_coc
Nhập môn đệ tử
 
Tham gia ngày: Apr 2009
Bài gửi: 3
:
Mình đã xử lý được rồi. thanks các bạn đã giúp đỡ

Chỉ cần tách các kí tự nhận được ra rồi hiển thị lên là OK.
chinh_coc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 12:23 PM   #137
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Wink

Vẫn là vấn đề giao tiếp qua RS 232. Hôm trước đệ có làm giao tiếp PC - RS 232 -PIC theo một chiều từ PC - PIC, phần giao tiếp với cổng COM trên máy tình thì dùng C# và đã gửi được tín hiệu qua PIC rồi, tuy nhiên đoạn chương trình ở PIC đệ viết bằng CCS và nó chạy không theo ý đồ của đệ 'ý của đệ là sau khi check được LED nào thì LED đó sẽ sáng cho đến khi nào không check nữa' Vậy nhờ các huynh chỉ giáo!
Đây là đạn code:

Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define may1  RD0
#define may2  RD1
#define may3  RD2
#define may4  RD3
#define may5  RD4
#define on    1
#define off   0

char ch;

#INT_RDA
Receive_isr() 
{
   if (kbhit())
   {
      ch = getc();
      
      if (ch=='a') may1 = on;
      if (ch=='b') may2 = on;
      if (ch=='c') may3 = on;
      if (ch=='d') may4 = on;
      if (ch=='e') may5 = on;
      
      if (ch=='f') may1 = 0;
      if (ch=='g') may2 = 0;
      if (ch=='h') may3 = 0;
      if (ch=='i') may4 = 0;
      if (ch=='j') may5 = 0;
      
   }
}
void main()
{
set_tris_d(0);
portd=0b00000000;
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
while (1)
   {
   }
}

và kèm theo C# and protues:
File Kèm Theo
File Type: rar Tam.rar (31.9 KB, 143 lần tải)

thay đổi nội dung bởi: namqn, 26-04-2009 lúc 03:56 PM. Lý do: định dạng code
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 03:58 PM   #138
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 TANDEM View Post
Vẫn là vấn đề giao tiếp qua RS 232. Hôm trước đệ có làm giao tiếp PC - RS 232 -PIC theo một chiều từ PC - PIC, phần giao tiếp với cổng COM trên máy tình thì dùng C# và đã gửi được tín hiệu qua PIC rồi, tuy nhiên đoạn chương trình ở PIC đệ viết bằng CCS và nó chạy không theo ý đồ của đệ 'ý của đệ là sau khi check được LED nào thì LED đó sẽ sáng cho đến khi nào không check nữa' Vậy nhờ các huynh chỉ giáo!
Đây là đạn code:
...
Vậy hiện thời thì chương trình của bạn chạy ra sao?

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 26-04-2009, 04:11 PM   #139
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Em mô phỏng bởi Protues với cổng COMPIM, trên PC em tạo giao diện viết bởi C#, chương trình đã chạy và truyền tín hiệu qua PIC, nhưng khi check các boxcheck trên giao diện thì không theo ý muốn. Ví dụ: khi em check box 1 thì tương ứng với LED1 sáng sau đó chuyển sang check Box2 thì LED2 sáng [nhưng] LED1 lại tắt mất tương tự với các LED khác cũng vậy. Em đã nghiên cứu rất nhiều rồi!!!???
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 04:20 PM   #140
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 TANDEM View Post
Em mô phỏng bởi Protues với cổng COMPIM, trên PC em tạo giao diện viết bởi C#, chương trình đã chạy và truyền tín hiệu qua PIC, nhưng khi check các boxcheck trên giao diện thì không theo ý muốn. Ví dụ: khi em check box 1 thì tương ứng với LED1 sáng sau đó chuyển sang check Box2 thì LED2 sáng [nhưng] LED1 lại tắt mất tương tự với các LED khác cũng vậy. Em đã nghiên cứu rất nhiều rồi!!!???
Bạn đang thao tác trực tiếp trên các bit của thanh ghi PORTD, điều này có thể dẫn đến hiện tượng như bạn đã thấy, do hiệu ứng read-modify-write của các lệnh thao tác bit trong PIC.

Bạn nên dùng một thanh ghi đệm, khởi tạo giá trị của nó bởi giá trị của PORTD, sau đó cập nhật các bit của thanh ghi đệm này và ghi vào PORTD, mỗi khi bạn muốn cập nhật 1 bit nào đó của PORTD.

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 03-05-2009, 10:49 PM   #141
Nin
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 16
:
chương trinh dùng ngắt RDA rồi còn dùng kbhit() chi nữa... cái này dùng VB6 thấy dễ lắm mà.
Nin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2009, 05:08 PM   #142
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Đây là code trong C# của đệ:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public bool open = true;
        public Form1()
        {
            InitializeComponent();
            Com4.DataReceived += new SerialDataReceivedEventHandler(Com4_DataReceived);
        }

        private void button_open_Click(object sender, EventArgs e)
        {
            if (open)
            {
                open = false;
                button_open.Text = "Đóng cổng";
                label3.Text = "Cổng Com đang mở";
                Com4.Open();
            }
            else
            {
                open = true;
                button_open.Text = "Mở cổng";
                label3.Text = "Cổng Com đang đóng";
                Com4.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Com4.Close();
            Close();
        }

        private void Com4_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            String nhan = "";                                                        // Luu du lieu nhan
            if (sender == Com4)
            {
               nhan = Com4.ReadExisting().ToString();
               tBox_Recei.Text = tBox_Recei.Text +nhan;              //Lỗi xuất hiện ở dòng này
            }
        }

        private void button_trans_Click(object sender, EventArgs e)
        {
            if (Com4.IsOpen)
            {
                Com4.WriteLine(tBox_trans.Text);
                tBox_trans.Clear();
            }
            else   MessageBox.Show("Cổng COM chưa mở! Hãy mở cổng COM");
         }   
     }
}
Khi đệ dùng Terminal để gửi-nhận dữ liệu. Chiều từ C# đến Terminal thì rất tốt, chiều ngược lại thì C# báo lỗi. Đệ không biết là lỗi gì? Rất mong được các huynh chỉ giáo!
File Kèm Theo
File Type: rar COMC_sap.rar (100.8 KB, 148 lần tải)

thay đổi nội dung bởi: TANDEM, 17-05-2009 lúc 09:36 AM.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2009, 09:38 AM   #143
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Sao không thấy huynh nào giúp mình vậy??!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2009, 01:10 PM   #144
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Đến bây giờ đệ vẫn chưa tìm ra C# báo lỗi là do đâu? Khi đệ gửi chuỗi ký tự từ PIC lên nó cũng báo lỗi tương tự? Mong các huynh chỉ giáo!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-05-2009, 04:48 PM   #145
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
:
Hi bạn TANDEM!
Mình đã xem Form truyền nhận dữ liệu viết bằng C# của bạn.
Mình có một vài góp ý nhỏ như sau:

- Để có một Form truyền nhận dữ liệu tối ưu hơn thì bạn nên viết thêm phần cho phép người dùng lựa chọn cổng COM. Ở đây có thể máy tính của bạn là COM4 nên mình thấy bạn chỉ để là COM4.
- Hàm truyền bạn dùng là Writeline, vậy thì hàm nhận cũng nên dùng là Readline.
Ở đây có lẽ mục đích truyền nhận chắc cũng không quá phức tạp (chưa cần đến chuyển đổi cơ số) nên dùng hai lớp này là cũng OK rồi.

Mình Test thử với Serial Port Monitor của CCS thì phần mềm của bạn vẫn ko thấy truyền nhận được.
Bạn xem lại nhé! Có j ta trao đổi tiếp
__________________
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
Old 28-05-2009, 11:50 PM   #146
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Cám ơn bạn Delfy_Coltech! Hiện mình vẫn đang vật lộn với việc truyền nhận đó.
- Cho phép lựa chọn nhiều cổng COM cũng như các thông số khác thì mình đã viết được rồi.
- Khi giao tiếp với Serial Port Monitor của CCS thì việc truyền nhận diễn ra hoàn toàn suôn sẻ, hai bên đều truyền và nhận đúng các số và ký tự.
Khi truyền từ PIC đến thì cả Serial Port Monitor của CCS và C# đều hiện các ký tự lạ. Mình không hiểu lý do tại sao??
File Kèm Theo
File Type: rar ComCsap.rar (68.8 KB, 94 lần tải)

thay đổi nội dung bởi: TANDEM, 29-05-2009 lúc 12:14 AM.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-05-2009, 08:30 PM   #147
thienkien
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 7
:
có lẽ bạn xem lại khai báo baurate
mình cũng đang gặp vấn đề khi dung hspll để nhân xung thạch anh (10M*4) thì truyền nhận bị sai, có ký tự lạ ( nếu khai báo 10M thì truyền nhận chính xác) , có lẽ là sai baurate( ko biết có cần phải tính lại baurate ko nhỉ, ví dụ :nhân 4, hoặc chia 4 chăng hạn??)
thienkien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 12:09 AM   #148
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Mình chưa hiểu hết ý bạn thienkien. Mình đã thay đổi tần số bằng 10M rồi nhưng vẫn không đạt được kết quả truyền chính xác.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 06:55 AM   #149
thienkien
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 7
:
hi TanDem! hôm qua mình chưa xem kỹ câu hỏi của bạn,bạn dùng thạch anh thực bao nhiêu thì khai báo bấy nhiêu thôi!! theo mình bạn nên thêm 1 ký tự để nhận biết kết thúc chuỗi :ví dụ ký tự '\13' chăng hạn: Com4.WriteLine(tBox_trans.Text+(char)13);

ban thử đoạn code dưới PIC này xem:
#include<16f877a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20M)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8,pari ty=N)
#use fast_io(b)
int8 dodai,dem=0;
int input_ready;
char mang[50];

#int_rda
void nhan()
{
//disable_interrupts(int_timer0);
//if(kbhit())
mang[dem]=getc();
putc(mang[dem]);

if(mang[dem]==0x0d)
{
dodai=dem;
mang[dem]='\0';
input_ready=1;
dem=0;

}
dem++;


// enable_interrupts(int_timer0);

}

void main()
{
int16 i,j;

input_ready=0;
set_tris_b(0);
enable_interrupts(global);
enable_interrupts(int_rda);
output_b(0);
while(1)
{
if(input_ready==1)
{

printf("CHUOI=%s",mang);
input_ready=0;
dem=0;
}

//co the xuat ra portB de kiem tra bang led ne
for(j=0;j<dodai-1;j++)
{
output_b(mang[j]);
delay_ms(500);

}
}
}



nếu ko được bạn tải cái rs232tester về kiểm tra nhé
File Kèm Theo
File Type: rar RS232Tester.rar (170.2 KB, 300 lần tải)

thay đổi nội dung bởi: thienkien, 30-05-2009 lúc 07:30 AM.
thienkien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2009, 03:44 PM   #150
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Hi thienkien, dù sao cũng cám ơn bạn. Nhưng hình như tôi thì ở trái đất còn bạn thì ở sao hỏa rồi cả hai đều ngồi trên chiếc cân.... Sau đó thì thế nào nhỉ?
TANDEM 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Cho hỏi về giao tiếp RS232 của PIC16F877A enti Giao tiếp cổng COM và LPT 31 25-03-2016 10:14 PM
Giao tiếp RS232 trên PC qua Matlab ngohaibac Giao tiếp cổng COM và LPT 47 18-11-2015 03:51 PM
giao tiep RS232 voi C dangngoc Giao tiếp cổng COM và LPT 9 26-02-2012 02:25 AM
cần mua bộ thu GPS có giao tiếp RS232 kienvq Tìm mua sản phẩm 15 17-03-2011 11:25 PM
Help! Dùng C để giao tiếp RS232 dandiennang Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 6 15-03-2009 06:41 PM


Múi giờ GMT. Hiện tại là 04:04 PM.


Đượ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