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 31-05-2011, 01:42 AM   #31
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Thay đổi cường độ sáng không hề đơn giản chút nào (theo mình nghĩ) cái này dùng PWM để điều chỉnh độ sáng..với việc điều chỉnh được độ sáng thì người ta làm ra bảng led ma trận đa sắc...vì tất cả các màu đều được phối từ 3 màu cơ bản (R-G-B) mà...bạn lên google với từ khoá bảng led ma trận đa sắc ,có nhiều cho bạn tham khảo lắm...
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2011, 08:56 AM   #32
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
ok !!! .

mình củng đã từng làm bằng xung nhưng chưa thấy kết quả gì hết .mình thấy có một số phần mềm có thể quet led thay đổi cường độ sáng luôn như ledimm pro nhưng dành cho 89. nạp trực tiếp vào mạch không cần mạch nạp .
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2011, 03:07 AM   #33
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
Pantovi: Máy hiểu đúng nhưng chương trình của bạn thì có vấn đề.
Ví dụ nhé, khi máy vừa thực hiện xong cái lệnh so sánh thứ nhất mà ngắt RDA xuất hiện, lúc đó data bị thay đổi thì hai câu so sánh đó chẳng có ý nghĩa lắm. -> chương trình xử lý nên nằm luôn trong hàm ngắt thì hơn.
Trong vòng while bạn nên sử dụng cấu trúc switch --case, và thực tế là nên làm vừa tắt vừa mowe, ví dụ như A là tắt, a là mở. Nễu như bạn viết thì role =0 được lần đầu, lần sau có so sánh đi nữa thì giá trị nó vẫn bằng 0 mà.
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-08-2011, 10:09 PM   #34
hoanglangtu
Nhập môn đệ tử
 
Tham gia ngày: Dec 2007
Bài gửi: 4
:
Chào các bạn, minh đang làm giao tiếp PC và PIC sử dụng com ảo, nhưng giá trị gửi từ máy tính 4 số 0, 1, 2, 3, 4 chỉ nhận đúng 0 và 1, còn 3 thì nhận được 1, 4 thì nhận được 0, nói chung số chẫn nhân 0, số lẻ nhận được 1. Nhờ các bạn giải thích và sửa dúp dùm mình.
Chương trình VB
Dim i As Byte
Private Sub CmdSend_Click()
i = 0
MSComm1.Output = Chr(i)
End Sub

Private Sub Command1_Click()
i = 1
MSComm1.Output = Chr(i)
End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
i = 2
MSComm1.Output = Chr(i)
End Sub

Private Sub Command4_Click()
i = 3
MSComm1.Output = Chr(i)
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 5
MSComm1.PortOpen = True
'i = 0
Text1.Text = "DKM"
Text1.Enabled = False
End Sub

Chương trình CSS
#include <16F877A.h>
#FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000)
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)
#include <DEFS_16F877A.h>
char value;
#int_RDA
void RDA_isr(void)
{
value = getc();
switch(value)
{
case 0:
{
PORTB = 0x0f;
break;
}
case 1:
{
PORTB = 0x07;
break;
}
case 2:
{
PORTB = 0x08;
}
case 3:
{
PORTB = 0x09;
break;
}
}
}

void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
set_tris_B(0);
PORTB = 0;
while(true)
{
;
}
}
hoanglangtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-10-2011, 09:35 PM   #35
student_dtvt
Nhập môn đệ tử
 
Tham gia ngày: Aug 2011
Bài gửi: 2
:
Mấy bác cho em hỏi cái này. Em truyền nhận dữ liệu giữa 16f877 và VB6 đã nhận đc nhưng chỉ với thạch anh 4000000Hz, khi thay đổi cái này thì lại không nhận được. Em làm với kit thạch anh 24Mhz ko thể nhận dữ liệu được. Mong các bác chỉ giáo giùm em với.

VB:

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




PIC:
#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7)
#include <stdlib.h>
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte porte = 0x09
int8 y,i,a,b,c,d,e;
int16 x;
char string[5];
BYTE CONST maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

void nhan_rs232()
{

for(i=0;i<=4;i++)
{
string[i]=getc();
}
printf("%s",string);
y=0;
x=atol(string);
a=x/10000;
x=x%10000;
b=x/1000;
x=x%1000;
c=x/100;
x=x%100;
d=x/10;
x=x%10;
e=x;

a=maled[a];
b=maled[b];
c=maled[c];
d=maled[d];
e=maled[e];

for(i=0;i<=200;i++)
{
output_A(0b01111);
output_D(a);
delay_ms(1);
output_A(0b11111);

output_A(0b10111);
output_D(b);
delay_ms(1);
output_A(0b11111);

output_A(0b11011);
output_D(c);
delay_ms(1);
output_A(0b11111);

output_A(0b11101);
output_D(d);
delay_ms(1);
output_A(0b11111);

output_A(0b11110);
output_D(e);
delay_ms(1);
output_A(0b11111);
}


}
/*void xoa()
{
for(i=0;i<=4;i++)
{
string[i]=0;
}
}*/
void main()
{
set_tris_b(0);
set_tris_e(0);
while(true)
{
if(y==0)
{
nhan_rs232();
delay_ms(100);

}
}
}


Em làm nhận một số 5 chữ số hiển thị led 7 đoạn

đây là file mô phỏng: http://www.mediafire.com/?d4g26cwn4bx4g8y
student_dtvt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-10-2011, 01:21 AM   #36
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
Trích:
Nguyên văn bởi student_dtvt View Post
Mấy bác cho em hỏi cái này. Em truyền nhận dữ liệu giữa 16f877 và VB6 đã nhận đc nhưng chỉ với thạch anh 4000000Hz, khi thay đổi cái này thì lại không nhận được. Em làm với kit thạch anh 24Mhz ko thể nhận dữ liệu được. Mong các bác chỉ giáo giùm em với.

VB:

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




PIC:
#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7)
#include <stdlib.h>
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte porte = 0x09
int8 y,i,a,b,c,d,e;
int16 x;
char string[5];
BYTE CONST maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

void nhan_rs232()
{

for(i=0;i<=4;i++)
{
string[i]=getc();
}
printf("%s",string);
y=0;
x=atol(string);
a=x/10000;
x=x%10000;
b=x/1000;
x=x%1000;
c=x/100;
x=x%100;
d=x/10;
x=x%10;
e=x;

a=maled[a];
b=maled[b];
c=maled[c];
d=maled[d];
e=maled[e];

for(i=0;i<=200;i++)
{
output_A(0b01111);
output_D(a);
delay_ms(1);
output_A(0b11111);

output_A(0b10111);
output_D(b);
delay_ms(1);
output_A(0b11111);

output_A(0b11011);
output_D(c);
delay_ms(1);
output_A(0b11111);

output_A(0b11101);
output_D(d);
delay_ms(1);
output_A(0b11111);

output_A(0b11110);
output_D(e);
delay_ms(1);
output_A(0b11111);
}


}
/*void xoa()
{
for(i=0;i<=4;i++)
{
string[i]=0;
}
}*/
void main()
{
set_tris_b(0);
set_tris_e(0);
while(true)
{
if(y==0)
{
nhan_rs232();
delay_ms(100);

}
}
}


Em làm nhận một số 5 chữ số hiển thị led 7 đoạn

đây là file mô phỏng: http://www.mediafire.com/?d4g26cwn4bx4g8y
bạn quả nhiên lợi hại, cho mình hỏi 1 câu hơi ngớ ngẩn là bạn đã đọc datasheet của con 16f877a chưa vậy? nếu đọc rồi thì cho mình hỏi tần số thạch anh cao nhất con pic này có thể chạy là bao nhiêu thê? bạn bắt nó chạy ở 24mhz có mà nó chạy bằng niềm tin à?
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-10-2011, 07:56 PM   #37
cho87
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 4
:
đây là đồ án giao tiếp máy tính mình làm vừa xong , mình chia sẽ cho cac bạn cùng tham khảo
http://www.mediafire.com/?xz5d77h57x9bkql
cho87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-10-2011, 08:02 PM   #38
cho87
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 4
:
thao khảo nè
http://www.mediafire.com/?xz5d77h57x9bkql
cho87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-12-2011, 01:27 PM   #39
vudiepdh1
Nhập môn đệ tử
 
Tham gia ngày: Sep 2009
Bài gửi: 9
:
Trích:
Nguyên văn bởi cho87 View Post
Mình vẫn chưa rõ đề tài của bạn về cái gì ? vs lại chạy bằng proteus ko thấy xi nhê gì cả ! Thân
vudiepdh1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-01-2012, 11:59 PM   #40
acestartn
Nhập môn đệ tử
 
Tham gia ngày: Oct 2010
Bài gửi: 2
:
Arrow mong các bạn giúp mình với

mình đang làm đề tài giao tiếp máy tính,điều khiển thiết bị và đo nhiệt độ.
mình có tham khảo chương trình của Stupid11.Mình làm theo,kết nói được nhưng đèn trên vb ko sáng.các bạn có thể giúp mình gửi nhiệt độ lên vb được ko?
File Kèm Theo
File Type: rar gui.rar (21.3 KB, 18 lần tải)
acestartn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2012, 12:54 PM   #41
hoangson_200529
Nhập môn đệ tử
 
Tham gia ngày: Mar 2012
Bài gửi: 7
:
lập trình Vb 6.0 tren laptop thì làm sao giao tiếp được qua cổng Com. các anh giúp em cho này.
theo em bit thì VB không hổ trợ giao tiếp cổng USB
hoangson_200529 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2012, 01:04 PM   #42
hoangson_200529
Nhập môn đệ tử
 
Tham gia ngày: Mar 2012
Bài gửi: 7
:
Vb 6.0 không hổ trợ giao tiếp quan cổng USB, nhưng Laptop không có cổng Com, Z phải làm thế nào các anh
hoangson_200529 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à 05:33 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