PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   Giao tiếp RS232 trên PC (http://www.picvietnam.com/forum/showthread.php?t=274)

tpasterisk 21-03-2009 04:08 AM

Em chào các bác, em thấy mọi người thảo luận xôn xao về giao tiếp cổng COM, cÓ rất nhìu bài hay luôn, nhưng em chưa thấy bác nào nói về tập lệnh AT.
Chẳng dấu là : em đang tìm hiểu tập lệnh AT, sau khi thiết lập giao tiếp với cổng COM, em muốn gửi, nhận tin nhắn bằng tập lệnh AT qua GSM modem G2403R .
Bác nào đã từng nghiên cứu về tập lệnh AT, cũng như là gửi nhận tin nhắn dùng tập lệnh AT xuất ra cổng COM -> GSM modem G2403R thì giúp em với.
Hiện tại em chưa biết viết câu lệnh như thế nào để xuất những câu lệnh AT ra cổng COM........................

chinh_coc 03-04-2009 11:55 AM

Nếu viết bằng VB thì mình có xử lý được hiển thị giá trị thực không. đầu vời ccomms là int còn hiển thị ra giá trị cstring

nguyennam8888 03-04-2009 02:13 PM

bài tập truyền nhận cơ bản đầu tiên
 
các bác giúp em với, nghĩ mãi mà chưa làm được , chương trình của em nó chỉ nhận thôi, nhưng khi nhận xong thì PIC lại không thấy hiển thị, còn truyển ngược lại thì chưa đươc
code trong Pic:
#include <16F877a.h>
#include <DEFS_16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=n, xmit=PIN_C6, rcv=PIN_C7)
unsigned char dulieu;
#INT_RDA
void data_receive(void)
{
dulieu = getc();
putc(dulieu);
}
void main()
{
set_tris_a(0);
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_RDA);
while(true)
{
output_a(dulieu);

delay_ms(2000);
}
}
code trong VB:

Private Sub cmdClear_Click()
Text1.Text = ""

End Sub

Private Sub cmdExit_Click()
Unload Me
End Sub

Private Sub cmdSend_Click()
MSComm1.Output = Text2.Text
End Sub

Private Sub Form_Load()
cmdSend.Caption = "&Send"
Text1.Text = ""
Text2.Text = ""
Text1.Enabled = False
cmdExit.Caption = "&Exit"
With MSComm1
.Settings = "9600,N,8,1"
.CommPort = 4
.RThreshold = 1
.SThreshold = 0
.InputMode = comInputModeText
.InputLen = 0
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 1024
If .PortOpen = False Then
.PortOpen = True
End If

End With
End Sub

Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
Text1.Text = Text1.Text + Asc(MSComm1.Input)
End If
End Sub
(em tìm mãi mà không thấy chỗ nào để viết code.)

sinhthai 03-04-2009 04:00 PM

Pak hải ơi !cho em hỏi về rs232 cái:em muốn bít về nó mà em thì chưa bít j cả.pak có thể giúp em hỉu đôi chút về nó ko.có tài liệu nào bằng tiếng việt nói về nó ko pak.cám ơn pak nhìu

sinhthai 03-04-2009 04:18 PM

pak nao co tài liệu tiếng việt về cổng com ko.em đang rất cần.thanks các pak nhìu,

trinhminhson86 06-04-2009 04:37 PM

Em đang tìm hiểu cách giao tiếp cổng COM bằng VC++ bằng cách sử dụng thư viện inpout32 qua win 32.Bác nào biết về cái này thì hướng dẫn e với.

digan 13-04-2009 10:40 PM

Xin chào! Mình thử giao tiếp mãi mà ko dc không biết sai sót ở đâu. mình dùng cachs bật các led ở Port b để báo là có truyền thông
#include <16f877a.h>
#include <def_877a.h>
//#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)
char buf;
int a;
// Ngat Truyen thong
#INT_RDA
Receive_isr()
{

buf=getc();
putc(buf);
PORTB=0x00;

Các cao thủ KT hộ với. tôi nghi là sai phần khai báo(đánh dấu), nhưng mục này thường copy nên ko rõ bản chất

ThaoBinh90 16-04-2009 04:14 PM

Mình cũng đang làm RS232, đang gặp khó khăn về buffer của RS232. Khi chương trình PIC gởi lên một chuổi nào đó, trình ứng dụng đọc chuỗi này chưa hết thì nó vẫn còn trog bộ đệm làm ảnh hưởng đến lệnh sau đó. Có ai đó chỉ mình xóa bộ đệm của RS232 giúp mình với.

tucn87 20-04-2009 11:25 AM

anh Hải ơi, em làm theo cái TUT của anh nhưng đến đoạn thêm điều khiển AxtiveX Microsoft Communications 6 thì bị lỗi "don't send". Em dùng bản Visual Studio 6 Enterprise Edition.

mtuankct 20-04-2009 12:22 PM

Bạn cài lại VS :D

tucn87 20-04-2009 12:32 PM

Trích:

Nguyên văn bởi mtuankct (Post 24998)
Bạn cài lại VS :D

em cài lại rồi vẫn không được :((

mtuankct 20-04-2009 12:59 PM

Nếu khôg được thì cài lại win đi haha hoặc có thể thử kiếm cái đĩa cài VS khác xem sao

tucn87 22-04-2009 07:20 PM

sau bước 1 của TUT, xóa 2 nút OK, CANCEL và dòng văn bản tĩnh TODO thì VC báo lỗi don't send và thoát ra ngoài, vậy là lỗi gì vậy các anh?

chinh_coc 24-04-2009 02:51 PM

Mình đang làm cái VB để làm giao diện với VXL.
Mình đã thiết kế như các bạn nói ở trên nhưng không hiểu sao khi VXL của mình gửi ra một giá trị kiểu INT (là số 15 chẳng hạn) thì trên giao diện không hiển thị đúng số 15 mà nó hiển thị một kiểu khác. Làm thế nào để hiển thị giá trị thực từ VXL gửi ra.
Mong các bạn giúp đỡ . đây là code VB của mình

Private Sub Command1_Click()
On Error GoTo OpenFalse
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Exit Sub
OpenFalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, khong the mo cong. Hay dong cac ung dung dang su dung cong COM"

End Sub

Private Sub Command2_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End
End Sub

Private Sub Command3_Click()
On Error GoTo sendfalse
MSComm1.Output = Text1.Text
Exit Sub
sendfalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, Cong COM chua duoc mo, nhan Connect"
End Sub

Private Sub Form_Load()
With MSComm1
.Settings = cmbBaudRate.Text + "N,8,1"
.RThreshold = 1
.SThreshold = 0
.InBufferSize = 1024
.OutBufferSize = 1024
.InputMode = comInputModeText
.ParityReplace = ""
.CommPort = Switch(cmbComPort.Text = "COM 1", 1, cmbComPort.Text = "COM 2", 2, cmbComPort.Text = "COM 3", 3, cmbComPort.Text = "COM 4", 4)
End With
End Sub

Private Sub MSComm1_OnComm()
Dim StringIn As String
If MSComm1.CommEvent = comEvReceive Then
StringIn = MSComm1.Input 'Nhan chuoi du lieu to VCOM
Text2.Text = StringIn
End If
End Sub

phandinh 24-04-2009 05:53 PM

dữ liệu mà VB nhận ở dạng internal number , để hiển thị ra màn hình bạn phải chuyển về dạng text string :
bạn thử thay Text2.Text = Cstr(StringIn)
hoặc Text2.Text = Asc(StringIn) xem

chinh_coc 25-04-2009 12:59 AM

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.

TANDEM 26-04-2009 12:23 PM

1 Attachment(s)
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:

namqn 26-04-2009 03:58 PM

Trích:

Nguyên văn bởi TANDEM (Post 25252)
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,

TANDEM 26-04-2009 04:11 PM

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!!!???

namqn 26-04-2009 04:20 PM

Trích:

Nguyên văn bởi TANDEM (Post 25259)
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,

Nin 03-05-2009 10:49 PM

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à.

TANDEM 16-05-2009 05:08 PM

1 Attachment(s)
Đâ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!

TANDEM 17-05-2009 09:38 AM

Sao không thấy huynh nào giúp mình vậy??!

TANDEM 18-05-2009 01:10 PM

Đế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!

Delfy_Coltech 26-05-2009 04:48 PM

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

TANDEM 28-05-2009 11:50 PM

1 Attachment(s)
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??

thienkien 29-05-2009 08:30 PM

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??)

TANDEM 30-05-2009 12:09 AM

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.

thienkien 30-05-2009 06:55 AM

1 Attachment(s)
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é

TANDEM 31-05-2009 03:44 PM

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ỉ?

Delfy_Coltech 02-06-2009 02:02 PM

1 Attachment(s)
Trích:

Nguyên văn bởi TANDEM (Post 26176)
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??

Nếu như bạn nói thì chắc là do chương trình CCS của bạn rồi!
Đầu tiên bạn cứ thử truyền các mã hex xem nó nhận thế nào đã!
Rồi mới truyền số hoặc string.
Thử với cái Terminal C# này xem sao.
Good luck!

hoangnguyen_qn 02-06-2009 06:54 PM

3 Attachment(s)
các bạn xem thư chương trình này giúp mình nha:chỉ cần truyền 1 ký tự từ pc xuống pic và phản hồi lại ký tự đó.nhưng có chút vấn đề ko biet phần cứng hay mềm nữa:
Code:

#include <16f877a.h>
#include <de_16f877a.h>
#fuses nowdt,noprotect,noput
#device *=16
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7)
char c;
#int_rda
void receive()
{c=getc();
putc(c);
}
void main()
{enable_interrupts(global);
enable_interrupts(int_rda);
while(true)
{
}
}


nam228 02-06-2009 10:09 PM

xin chào hoangnguyen_qn
mình nghĩ đoạn code của bạn không có vấn đề,ban nên kiểm tra lại mạch con MAX232
dùng đồng hồ đo chân 2 và 6 nếu được khoảng +-7v trở lên la ok

nam228 02-06-2009 10:34 PM

chào mọi người
mình muốn dùng Matlab truyền dãy số xuống Pic 16f877a
nhưng mình chỉ truyền được dãy số 2 bytes ,từ 3 bytes trở lên PIc chỉ nhận được số đầu tiên.Theo mình hiểu trong PIC6f877a thanh ghi đệm RCREG chỉ có 2 bytes,vậy có cách nào tạo ra một bộ đệm lớn hơn (khoảng 4 bytes) bằng phần mềm không?

minhtrung2002dn 21-06-2009 11:14 AM

kính gửi anh ngohaibac
em đang viết chương trình giao tiếp cổng com giửa máy tính và đầu cân DIOMAT S bằng vb. nhưng do ko biết khung truyền như thế nào. Có 1 phần mềm củ của nhà cung cấp nhưng do ko thích nghi với thời điểm hiện tại, phần mềm này chủ yếu nhận dử liệu cân về máy tính. Em đã dùng phương pháp nối hai máy tính với nhau qua cổng com rs232 và dùng phần mềm terminal để text xem phầm mềm củ của nhà cung cấp gửi dử liệu gì qua đầu cân. Lúc này em nhận được dử liệu HEX trên terminal như thế này:02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 và vòng lặp cứ tiếp tục như vậy.Em ko hiểu họ dùng ký tự nào để gửi qua đầu cân . Mong anh giúp em cảm ơn

ngohaibac 21-06-2009 05:08 PM

Trích:

Nguyên văn bởi minhtrung2002dn (Post 26980)
kính gửi anh ngohaibac
em đang viết chương trình giao tiếp cổng com giửa máy tính và đầu cân DIOMAT S bằng vb. nhưng do ko biết khung truyền như thế nào. Có 1 phần mềm củ của nhà cung cấp nhưng do ko thích nghi với thời điểm hiện tại, phần mềm này chủ yếu nhận dử liệu cân về máy tính. Em đã dùng phương pháp nối hai máy tính với nhau qua cổng com rs232 và dùng phần mềm terminal để text xem phầm mềm củ của nhà cung cấp gửi dử liệu gì qua đầu cân. Lúc này em nhận được dử liệu HEX trên terminal như thế này:02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 02 30 31 23 54 47 23 03 11 và vòng lặp cứ tiếp tục như vậy.Em ko hiểu họ dùng ký tự nào để gửi qua đầu cân . Mong anh giúp em cảm ơn

Chào bạn.

Ở đây theo mình nghĩ thì họ gửi theo kiểu binary, mỗi lần gửi 1 byte có giá trị tương ứng với các byte mà bạn đã xem đó. Bạn viết lại chương trình bằng VB hoặc là dùng chính Terminal để gửi các byte này xem (save các giá trị vào text file rồi gửi 1 phát).

Chúc bạn thành công.

minhtrung2002dn 24-06-2009 02:10 PM

cảm ơn anh đã hồi âm cho em.
Để truyền dử liệu qua đầu cân DISOMAT S em đã viết code như sau:
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.InputLen = 500
'MSComm1.Handshaking = False
MSComm1.InputMode = comInputModeText
MSComm1.RTSEnable = True
MSComm1.DTREnable = True
MSComm1.PortOpen = True
MSComm1.ParityReplace = ""
MSComm1.NullDiscard = True

End Sub
Sub delay(ByVal giay As Double)
Dim star As Double
star = Timer
While (Timer < star + giay / 1000)
DoEvents
Wend
End Sub
Private Sub Timer3_Timer()
Dim BytesToSend(0 To 17) As Byte ' khai báo m?t m?ng 2 ph?n t?
Dim Buffer As Variant
' l?u tr? d? li?u vào m?ng ki?u byte ? trên
BytesToSend(0) = &H2
BytesToSend(1) = &H30
BytesToSend(2) = &H31
BytesToSend(3) = &H23
BytesToSend(4) = &H54
BytesToSend(5) = &H47
BytesToSend(6) = &H23
BytesToSend(7) = &H3
BytesToSend(8) = &H11
BytesToSend(9) = &H2
BytesToSend(10) = &H30
BytesToSend(11) = &H31
BytesToSend(12) = &H23
BytesToSend(13) = &H54
BytesToSend(14) = &H47
BytesToSend(15) = &H23
BytesToSend(16) = &H3
BytesToSend(17) = &H11
' cho vào m?t bi?n Variant
Buffer = BytesToSend()
'ghi vào c?ng n?i ti?p
MSComm1.Output = Buffer
delay 600

End Sub
em đã truyền được rồi và dử liệu đầu từ đầu cân cũng đã gửi lại máy tính. nhưng em thấy cách viết code như trên của em chưa tốt lắm mong anh nào có cách hay hơn chỉ giúp.

thinh001 15-09-2009 03:22 PM

chào các bác em định làm bài tập là LCD giao tiếp máy tính, tức là mình xuất 1 ký tự trên máy tính xuống LCD nhưng lại không có tài liệu
ai có thì cho em xin với
Cám ơn trước

timtoihochoi 26-09-2009 12:23 AM

Trích:

Nguyên văn bởi ngohaibac (Post 5975)
Đây là tài liệu Serial_Complete của Jan Axelson, (38.5MB)
http://www.tailieuvietnam.net/downlo...20Complete.pdf

Mọi người down về để lấy làm tài liệu cho mình nhé.

sao không được vậy bạn. Bạn xem lại link được ko. thank

thanhhuyen87 08-10-2009 11:46 AM

Trích:

Nguyên văn bởi motconmeo (Post 6829)
Anh Bắc ơi, đúng là VC nhà em có vấn đề :D
Sau khi chỉnh sửa lại thì chạy ngon lành rồi anh ạ . Cám ơn anh nhiều

bạn ơi! bạn sửa kiểu gì vậy. máy của mình cũng bị lỗi như thế. chạy các bài vc++ khác thì ngon ơ. riêng bài này lại bị lỗi như thế :(


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam