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 cách làm led Hao Quang.có pro nào biết k nhỉ ???bởi StatusHello! I'm from Kazakhstan. Can anyone share the HEX file with me? The download link in post 50 doesn't work.
-
Channel: Vi điều khiển họ 8051
hôm nay, 00:05 -
-
bởi mylinhattChào anh em cơ khí,
Trong quá trình tư vấn đầu tư thiết bị cho xưởng, mình gặp rất nhiều câu hỏi kiểu: “Nên mua máy phay CNC cũ để tiết kiệm, chọn máy mới phổ thông cho yên tâm, hay cố gắng lên máy chất lượng cao để làm hàng khó?”. Thực tế, đây không phải câu hỏi chỉ về...-
Channel: Máy công cụ
Hôm qua, 13:38 -
-
Trả lời cho Vấn đề về tốc độ quaybởi nguyendinhvanSử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
-
Channel: Điện tử truyền hình
14-12-2025, 19:50 -
-
bởi Andrea14Chào mọi người,
Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...-
Channel: Điện tử truyền hình
12-12-2025, 12:42 -

Comment