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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-07-2011, 03:07 AM   #1
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   #2
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
Trả lời

Ð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à 12:57 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