PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-12-2009, 11:16 AM   #1
npbaoduy
Đệ 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.
npbaoduy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-12-2009, 12:07 AM   #2
mua_sao_bang
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 7
:
Trích:
Nguyên văn bởi npbaoduy View Post
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.
em cũng nghĩ như vậy, nhưng mà bên phía VB em không biết xử lý như thế nào.bình thường em nhận dữ liệu từ VDk bằng doan code:
"
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?
mua_sao_bang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-05-2008, 10:39 AM   #3
uydanh
Đệ 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.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-05-2008, 05:52 PM   #4
tyhon
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 22
:
Wink

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!
tyhon vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-05-2008, 01:42 PM   #5
uydanh
Đệ 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.
File Kèm Theo
File Type: rar LAYOUT LIBRARY MANUAL.rar (47.0 KB, 267 lần tải)

thay đổi nội dung bởi: uydanh, 07-05-2008 lúc 01:48 PM. Lý do: Upload file
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-05-2008, 10:04 PM   #6
tyhon
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 22
:
Code:

Trích:
#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;
void main()
{
printf("danh vao ky tu de hien thi");
do
{
t=getc();
putc(t);
}while(1);
}.

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!
File Kèm Theo
File Type: rar rs232.rar (11.8 KB, 158 lần tải)

thay đổi nội dung bởi: tyhon, 09-05-2008 lúc 02:51 AM.
tyhon vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2008, 02:42 AM   #7
tyhon
Đệ 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ư!
tyhon vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2008, 09:53 AM   #8
uydanh
Đệ 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)                                  ;
}
}
Khi trên máy tính truyền xuống hết 1 byte thì ngắt INT_RDA xảy ra. Chương trình ngắt được thực hiện, biến t sẽ nhận 1 byte truyền xuống đó. Sau đó nó thoát ra chương trình ngắt và lặp vòng trong lệnh while(1).
Bạn thử viết kiểu này được không.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 07:58 AM   #9
tyhon
Đệ 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ư!
File Kèm Theo
File Type: rar New Folder.rar (282.3 KB, 236 lần tải)
tyhon vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2008, 02:53 PM   #10
uydanh
Đệ 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.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2009, 04:54 PM   #11
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
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!
File Kèm Theo
File Type: rar comm.rar (1.8 KB, 102 lần tải)
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-03-2009, 07:31 PM   #12
npbaoduy
Đệ 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.
npbaoduy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2009, 12:35 PM   #13
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
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.
Hình Kèm Theo
File Type: bmp a.bmp (48.5 KB, 46 lần tải)

thay đổi nội dung bởi: lequocbao, 24-03-2009 lúc 12:57 PM.
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2009, 10:07 PM   #14
npbaoduy
Đệ 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é.
File Kèm Theo
File Type: rar RS232.rar (9.7 KB, 320 lần tải)

thay đổi nội dung bởi: npbaoduy, 24-03-2009 lúc 10:14 PM.
npbaoduy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-04-2009, 05:50 PM   #15
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
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();
tungtot_vl 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à 08:29 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