![]() |
|
Tài trợ cho PIC Vietnam |
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... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ 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à. |
![]() |
![]() |
![]() |
#2 |
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) { ; } } |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|