Hiện nay mình đang học về ghép nối máy tính với vi điều khiển qua RS232 và VB, tuy nhiên khi làm thì chương trình lại không chạy. Haizzzzzzz!
*****Đây là code C (keil C)
#include <stdio.h>
#include <REGX51.H>
unsigned int i;
unsigned char M[10];
unsigned int sp;
///////
void ngat_int0 (void) interrupt 0
{
unsigned int j;
for(j=0;j<500;++j)
++sp;
}
////////////
void main(void)
{
unsigned char x;
SCON=0x52; //Port noi tiep che do 1, REN=TI=1
TMOD=0x20; //Timer 1 che do 2
TH1=TL1=-3; //Toc do Baud=9600
TR1=1; //Cho phep timer 1 hoat dong
x=_getkey(); //Doi tin hieu tu cong may tinh
while(x!='@');
for(i=1;i<=3;i++) //Nhan 3 byte tu may tinh
M[i]=_getkey();
if((M[1]=='I')&&(M[2]=='R')&&(M[3]=='0')) //3 byte la IR0
{
IE=0x81; //Khoi tao thanh ghi cho phep ngat IE thiet lap ngat ngoai 0
IT0=1; //Cho phep ngat ngoai INT0
while(1)
{
putchar('a');
putchar(sp%256);
putchar(sp/256);
}
}
}
*****Còn đây là code VB
Private Sub Form_Load()
Dim kt As String
Text1.Text = " "
MSComm1.CommPort = 5 'cong com 5
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 3 'moi lan doc 3 byte
MSComm1.InputMode = 0 'mode text
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim x, y, z As String
Dim a, b, c As Integer
x = y = z = " "
If MSComm1.CommEvent = comEvReceive Then
x = MSComm1.Input
If Left(x, 1) = "a" Then
If Len(x) = 3 Then
y = Left(Right(x, 2), 1) 'byte thap
z = Right(Right(x, 2), 1) 'byte cao
c = Asc(y) + Asc(z) * 256
Text1.Text = c
End If
End If
x = y = z = " "
End If
End Sub
Sub send(buffer As String)
If MSComm1.PortOpen = True Then
MSComm1.Output = buffer
End If
End Sub
Private Sub Cmd_start_Click()
kt = "@IR0"
send (kt)
End Sub
Private Sub Cmd_exit_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End
End Sub
*****Đây là mạch mô phỏng
Khi mình chạy chương trình thì cổng Com ảo báo là VB đã gửi dữ liệu và Proteus cũng nhận. Thế nhưng lại không có dữ liệu gửi ngược lại => chả đếm được cái gì cả. Nản!!!!
Đây là cổng com ảo:
Còn đây là giao diện chương trình VB
******Đó là tất cả tim gan phèo phổi của chương trình mình đang làm, các bạn cố gắp giúp mình tìm ra bệnh của nó nhá! Thank trước.
Mình chỉ mới tìm hiểu cái này thôi. Những thứ trên kia cũng là đi cóp nhặt chứ đã hiểu hết được đâu. Vậy rất mong được sự giúp đỡ của mọi người!
*****Đây là code C (keil C)
#include <stdio.h>
#include <REGX51.H>
unsigned int i;
unsigned char M[10];
unsigned int sp;
///////
void ngat_int0 (void) interrupt 0
{
unsigned int j;
for(j=0;j<500;++j)
++sp;
}
////////////
void main(void)
{
unsigned char x;
SCON=0x52; //Port noi tiep che do 1, REN=TI=1
TMOD=0x20; //Timer 1 che do 2
TH1=TL1=-3; //Toc do Baud=9600
TR1=1; //Cho phep timer 1 hoat dong
x=_getkey(); //Doi tin hieu tu cong may tinh
while(x!='@');
for(i=1;i<=3;i++) //Nhan 3 byte tu may tinh
M[i]=_getkey();
if((M[1]=='I')&&(M[2]=='R')&&(M[3]=='0')) //3 byte la IR0
{
IE=0x81; //Khoi tao thanh ghi cho phep ngat IE thiet lap ngat ngoai 0
IT0=1; //Cho phep ngat ngoai INT0
while(1)
{
putchar('a');
putchar(sp%256);
putchar(sp/256);
}
}
}
*****Còn đây là code VB
Private Sub Form_Load()
Dim kt As String
Text1.Text = " "
MSComm1.CommPort = 5 'cong com 5
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 3 'moi lan doc 3 byte
MSComm1.InputMode = 0 'mode text
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim x, y, z As String
Dim a, b, c As Integer
x = y = z = " "
If MSComm1.CommEvent = comEvReceive Then
x = MSComm1.Input
If Left(x, 1) = "a" Then
If Len(x) = 3 Then
y = Left(Right(x, 2), 1) 'byte thap
z = Right(Right(x, 2), 1) 'byte cao
c = Asc(y) + Asc(z) * 256
Text1.Text = c
End If
End If
x = y = z = " "
End If
End Sub
Sub send(buffer As String)
If MSComm1.PortOpen = True Then
MSComm1.Output = buffer
End If
End Sub
Private Sub Cmd_start_Click()
kt = "@IR0"
send (kt)
End Sub
Private Sub Cmd_exit_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End
End Sub
*****Đây là mạch mô phỏng
Khi mình chạy chương trình thì cổng Com ảo báo là VB đã gửi dữ liệu và Proteus cũng nhận. Thế nhưng lại không có dữ liệu gửi ngược lại => chả đếm được cái gì cả. Nản!!!!
Đây là cổng com ảo:
Còn đây là giao diện chương trình VB
******Đó là tất cả tim gan phèo phổi của chương trình mình đang làm, các bạn cố gắp giúp mình tìm ra bệnh của nó nhá! Thank trước.
Mình chỉ mới tìm hiểu cái này thôi. Những thứ trên kia cũng là đi cóp nhặt chứ đã hiểu hết được đâu. Vậy rất mong được sự giúp đỡ của mọi người!
Comment