![]() |
|
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Bạn có thể cho mọi người xem code của bạn, sẽ dễ góp ý hơn.
Mình ko hiểu rõ ý bạn lắm, nhưng theo cách mình hay làm, nếu phải truyền 2 giá trị từ 2 cảm biến lên, thì ứng với mỗi cảm biến, cần có một ký tự đi trước để báo hiệu. Ví dụ thay vì truyền 1 byte của cảm biến 1, mình sẽ truyền 2 byte, byte đầu là '@' chẳng hạn, báo hiệu giá trị sắp nhận được là của cảm biến 1, sau đó truyền byte giá trị, với cảm biến 2 thì truyền '#' + giá trị, như vậy trên máy tính sẽ nhận biết dễ dàng giá trị nào của cảm biến nào thôi. |
![]() |
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Jul 2009
Bài gửi: 7
: |
Trích:
" Private Sub MSComm1_OnComm() Dim a As Variant If MSComm1.InBufferCount Then a = MSComm1.Input End If Text2.Text = a End Sub " Nhưng bây giờ bên VDK truyền byte bao hieu + byte gia tri thi ben VB em tách làm sao được chỉ lấy được byte gia tri thôi? |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Bạn truyền sao cũng được ! Nó tùy vào quy định của bạn thôi.
Thí dụ bạn muốn truyền số 3 lên máy tính, bạn có thể truyền giá trị 3 tức là putc(3), lúc đó nó sẽ truyền chuổi bit 00000011. Còn nếu bạn truyền mã ascii thì bạn phải truyễn mã 33H tức là putc(0x33), lúc đó nó sẽ truyền chuổi bit 00110011. Như vậy truyền bằng cách nào đi nữa thì cũng chỉ có một chuổi bit mà thôi. Do đó trên máy tính bạn phải viết chương trình thu nhận cho đúng. Thí dụ bên dưới bạn putc(3) thì trên máy tính bạn nhận số 3, nhưng nếu bạn truyền theo ascii putc(0x33) thì trên máy tính bạn lại nhận 33H, muốn ra giá trị 3 thì bạn có thể làm một phép trừ 33H-30H chẳng hạn. Nói chung hoàn toàn do bạn quy định, truyền thế nào thì phải có cách nhận thích hợp thế đó. Còn việc chuyển từ số sang ký tự hay chuổi như bạn nói là không có ý nghĩa. Vì dù ký tự hay số thì đều là một chuổi bit hết . Putc() là 1 byte lên máy tính. thay đổi nội dung bởi: uydanh, 06-05-2008 lúc 10:46 AM. |
![]() |
![]() |
![]() |
#4 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 22
: |
![]() Thanks anh nhiều nhiều
Ah trao đổi với anh lâu rồi nhưng vẫn chưa biết anh ở đâu nhỉ ? Nếu có thể rất vui được gặp anh! |
![]() |
![]() |
![]() |
#5 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Nói về cái mạch : mạch dùng ICMax232, các chân nguồn, chân nối tụ bạn nối giống y hết như trên. Hai chân RC6 và RC7 là 2 chân truyền nhận của PIC6f877a, bạn cứ vẽ layout nối vào 2 chân 9 10 của MAX232 giống như hình trên là được hoặc bạn nối jupm cũng OK.
Về layout : mình thường vẽ trực tiếp trên layout luôn chứ vẽ trên capture cis rồi chuyển qua nó hay báo lỗi do kiểu chân khai báo bên capture cis ko có bên layout. Nên mình vẽ trực tiếp bên layout luôn. Cần chân linh kiện nào thì lấy nó ra. Bạn đọc thêm các tài liệu hướng dẫn để vẽ layout. Bạn tải file bên dưới về rồi add vào thư viện layout, nó có gần như đầy đủ các linh kiện thông dụng. Chúc bạn thành công. thay đổi nội dung bởi: uydanh, 07-05-2008 lúc 01:48 PM. Lý do: Upload file |
![]() |
![]() |
![]() |
#6 | |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 22
: |
Code:
Trích:
Anh ơi , với code này nếu em nạp vào pic và sau đó em cho vào mạch tét như hôm trước anh gừi thì khi mình gõ ký tự từ bàn phím thì máy tính (chương trình giao tiếp) sẽ nhận và hiển thị đc ký tự mình gửi đúng không anh? Nhưng khi em mô phỏng trên Protues thì nó hiển thị không giống như ký tự mình gửi anh ạ, anh xem dùm em Cảm ơn anh! thay đổi nội dung bởi: tyhon, 09-05-2008 lúc 02:51 AM. |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 22
: |
Anh ở đâu rồi, lâu không thấy anh lên diễn đàn
Anh cố xem hộ em đi ạ Rất mong thư! |
![]() |
![]() |
![]() |
#8 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Mình không có viết kiểu này. Mình dùng ngắt để nhận ký tự trên máy tính truyền xuống. Với đoạn code trên , nếu là mình thì sẽ viết như sau :
Code:
#include <16f877a.h> #include <def_877a.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, bits=9) char t; #INT_RDA void rda_isr() { t=getc() ; } void main() { enable_interrupts(INT_RDA) ; enabled_interrupts(GLOBALS) ; while(1) { putc(t) ; } } Bạn thử viết kiểu này được không. |
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 22
: |
Anh ơi cho em hỏi
EM có đoạn code đơn giản sau và em test bằng chuơng trình của anh NHB đã gửi cho nhưng sao không đúng , em không biết do lổi gì nhờ anh xem hộ em Rất mong thư! |
![]() |
![]() |
![]() |
#10 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Cái này thì mình cũng pó tay thôi. Chương trình của bạn thiếu parity, bạn thêm vào thử có được không ? Một điều nữa : bạn xem lại thạch anh của bạn có đúng là 20Mhz như khai báo không ?
Bạn truyền thử 1 ký tự xem có OK không? Sau đó mới truyền chuổi. Chúc thành công. |
![]() |
![]() |
![]() |
#11 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
giao tiếp cổng Com bằng VB
bạn nào rành giao tiếp cổng com bảng VB thì giúp mình với.
mình tập viết chương trình VB giao tiếp với cổng com. chương trình truyền và nhận chuỗi kiểm string thì bình thường. nhưng khi gửi kiểu byte (0 -> 255) hay kiểm interger thì chương trình chỉ gửi mã dạng ASCII của số đó. ví dụ mình gửi số 1 xuống VDK thì nó phản hồi lại mã ASCII lã9 , gủi số 12 thì phản hồi lại 67, gủi 115 thì phản hồi lại 2 số là 50 và 51. mình muốn chương trình gửi xuống số 1 thì phản hồi lên số 1, gửi 115 thì phản hồi lên 115 bạn nào biết giúp mình với nhé thanh you! |
![]() |
![]() |
![]() |
#12 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Trong VB, khi giao tiếp thì mặc định là gởi mã accii của ký tự, nếu bạn muốn gởi số như bạn nói, ví dụ bạn muốn gởi số 115(1 byte) bạn có thể viết như sau:
MSComm1.output=chr(115) hàm chr() đổi 1 byte từ số sang ký tự có mã accii là số đó, như vậy, bạn sẽ gởi được số 115. Nếu bạn giao tiếp với PIC, gởi 1 số lên lại máy tính, bạn có thể viết như sau (CCS): printf('%u',115); Chúc bạn thành công. |
![]() |
![]() |
![]() |
#13 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
//Nếu bạn giao tiếp với PIC, gởi 1 số lên lại máy tính, bạn có thể viết như sau (CCS):
printf('%u',115);// ủa chứ không phải là lệnh : putc(x); hả bạn? nếu không phải thì sẳn bạn cho mình hỏi luôn là lệnh putc() dùng để làm gì? Bác nào rành phần cứng thì xem giúp phần mạch bên dưới có đúng không ? sao mà mình chỉ truyền được dữ liệu từ máy tính xuống còn từ pic lên thì không được(không thấy sự kiện on_comm() ![]() các bác mod cho mình hỏi muốn post trực tiếp file hình lên thì làm như thế nào ? thank. thay đổi nội dung bởi: lequocbao, 24-03-2009 lúc 12:57 PM. |
![]() |
![]() |
![]() |
#14 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Lệnh putc() theo mình hiểu là gởi ký tự.
Gởi bạn mạch mình đã làm và chạy thành công, mạch đơn giản lắm, bạn tham khảo nhé. thay đổi nội dung bởi: npbaoduy, 24-03-2009 lúc 10:14 PM. |
![]() |
![]() |
![]() |
#15 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
printf(); // là để gửi một chuỗi hay số lên PC
putc(c); // tức là khi máy tính gửi xuống 1 byte nào đó thì lệnh này sẽ phản hồi lại byte đó cho máy tính. lệnh printf(); có thể dùng ở bất cứ vị trí nào trong chương trình còn lệnh putc(c); chỉ dùng trong ngắt sau dòng lệnh c = getc(); |
![]() |
![]() |