Mình đang làm đồ án nhưng gặp rắc rối ở việc truyền và nhận 1 số 10bit qua cổng COM, giao tiếp với Pic 16f877a bạn nào có cách giải quyết xin giúp đỡ mình nhe!??
Thông báo
Collapse
No announcement yet.
truyền thông qua cổng COM
Collapse
X
-
trước hết bạn phải truyền, nhận được gói dữ liệu qua cổng COM. Sau đó với số 10 bit thì đơn giản nhất là chia thành bit thấp và bit cao. Quy luật truyền, nhận do bạn tự lựa chọn. Sau đó lại ghép bit thấp, bit cao lại thì sẽ nhận được số đã truyền, nhậnRễ của sự học tập thì đắng
Quả của sự học tập thì ngọt
Comment
-
Mình cũng có nghĩ sẽ tách số 10bit ra, mình chỉ cần truyền số <=500 thôi, mình có viết đoạn code truyền như sau các bạn xem và góp ý cho mình nhe!Nguyên văn bởi trimen Xem bài viếtsao bạn không chia nó thành phần chục và phần đơn vị để truyền, hoặc chia nó thành byte cao và byte thấp để truyền, sau đó PC sẽ xử lí dữ liệu truyền lên
Private Sub cmdsend_Click()
Dim bytestosend(0 To 2) As Byte
Dim buffer As Variant
bytestosend(0) = Val(TXTCAIDAT.Text) \ 100
bytestosend(1) = (Val(TXTCAIDAT.Text) \ 10) Mod 10
bytestosend(2) = Val(TXTCAIDAT.Text) Mod 10
buffer = bytestosend()
MSComm1.Output = buffer
End Sub
Private Sub Form_Load()
Form1.Caption = "DO AN TOT NGHIEP 2009 - 2012"
MSComm1.CommPort = 3
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferSize = 1024
MSComm1.InputLen = 0
MSComm1.RThreshold = 1
MSComm1.SThreshold = 0
MSComm1.OutBufferSize = 512
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
Comment
-
bạn nhầm khúc này :
phải như vầy thì nó mới lấy đúng số hàng chục và hàng đơn vị:Nguyên văn bởi thanhtung914 Xem bài viếtbytestosend(0) = Val(TXTCAIDAT.Text) \ 100
bytestosend(1) = (Val(TXTCAIDAT.Text) \ 10) Mod 10
bytestosend(2) = Val(TXTCAIDAT.Text) Mod 10
hoặc bạn có thể truyền byte cao và byte thấp của số đó vậy bạn chỉ phải truyền 2 byte.Ví dụ:Nguyên văn bởi thanhtung914 Xem bài viếtbytestosend(0) = Val(TXTCAIDAT.Text) \ 100
bytestosend(1) = (Val(TXTCAIDAT.Text) Mod 100) / 10
bytestosend(2) = (Val(TXTCAIDAT.Text) Mod 100)Mod 10
bytetosend(0)=(Val(TXTCAIDAT.Text)&(0xf0))>>8 //byte cao
bytetosend(1)=(Val(TXTCAIDAT.Text))&(0x0f)
Mình ko rành VB lắm bạn xem rồi sửa lại nha.
Comment
-
Cảm ơn bạn trimen nhiều nhe, mình sẽ kế nối thử xem, nếu có vấn đề khác mình sẽ tham khảo ý kiến của các bạn nữa nha!Nguyên văn bởi trimen Xem bài viếtbạn nhầm khúc này :
phải như vầy thì nó mới lấy đúng số hàng chục và hàng đơn vị:
hoặc bạn có thể truyền byte cao và byte thấp của số đó vậy bạn chỉ phải truyền 2 byte.Ví dụ:
bytetosend(0)=(Val(TXTCAIDAT.Text)&(0xf0))>>8 //byte cao
bytetosend(1)=(Val(TXTCAIDAT.Text))&(0x0f)
Mình ko rành VB lắm bạn xem rồi sửa lại nha.
Comment
-
bạn đưa dữ liệu nhận vào 1 mảng, với 1 biến i khi có dữ liệu đến xảy ra ngắt, khi đó đưa dữ liệu vào phần tử thứ i của mảng và tăng i lên. Sau đó chuơng trình chính chỉ cần truy xuất vào mảng để lấy dữ liệu từ máy tính thôi. Ví dụ như sau:
int i=0;
byte buffer[100];
void nhan(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
{
if(RI)
{
RI=0;
buffer[i]=SBUF;
i=i+1;
}}
Comment
-
các bạn oi giúp mình vấn đề này nhe!
trong ccs mình có đoạn code như sau:
doc_adc();
tam = read_adc();
tam = tam/2.048;
tram = tam/100;
tram = tram + 48;
tam = tam%100;
chuc = tam/10;
chuc = chuc + 48;
donvi = tam%10;
donvi = donvi + 48;
portb = tram;
hienthi();
portb = chuc;
hienthi();
portb = donvi;
hienthi(); //hthi LCD
giờ mình muốn ghép biến tram,chuc,donvi đưa vào một mảng để gửi lên máy tính (VB6), mình đã truyền từng byte nhưng khi VB6 nhận được thì 3byte bị chồng lên nhau (vd tram=1,chuc=2,donvi=3 thi khi lên VB nó hiển thị ra lable thì 1 chồng lên 2 chồng lên 3 giống mình quét led z đó)
đây là code VB6 của mình:
Private Sub Form_Load()
Form1.Caption = "DO AN TOT NGHIEP 2009 - 2012"
MSComm1.CommPort = 6
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferSize = 1024
MSComm1.InputLen = 0
MSComm1.RThreshold = 3
MSComm1.SThreshold = 0
MSComm1.OutBufferSize = 512
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim bytetoread() As Byte
Dim buffer2 As Variant
If MSComm1.CommEvent = comEvReceive Then
buffer2 = MSComm1.Input
bytetoread() = buffer2
LBLHIENTHI.Caption = Val(bytetoread())
End If
End Sub
Các bạn xem giúp mình nha??!!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92GIỚI THIỆU CA KHÚC VỀ CHA MẸ:
Nặng Nghĩa Mẹ Cha
Sáng tác: Hoàng Đình Thường
Giọng hát: AI
Công cha cao tựa như Thái Sơn
Nghĩa mẹ sâu nước biếc xanh trong
Mong con khôn lớn đời hạnh phúc
Mẹ cha...-
Channel: Tâm tình dân kỹ thuật
12-05-2026, 16:22 -
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
11-05-2026, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -
-
bởi dinhthuong92Chào bác. Đã là công thức phải tổng quát chứ, nó phải thể hiện cả quá trình, rối thì quá độ hay xác lập tính sau vì tùy điều kiện. Cũng như công thức tính diện tích chả hạn, phải là tích phân....
-
Channel: Nguồn!
08-05-2026, 10:49 -

Comment