Chủ Nhật, 21 tháng 9, 2014

Giao tiếp giữa vi xử lý AT 89S52 và cổng com máy tính bằng VB.NET


                             
Có thể nhảy cóc nhưng  tiếp theo bài cơ bản này 
http://diyvietnam.blogspot.com/2014/08/tu-hoc-lap-trinh-at-89s52-ho-vi-mach.html  thay vì vài bài nữa nhưng do nhu cầu bữa nay  tôi làm luôn giao tiếp giữa vi xử lý  và cổng  COM  chuẩn nối tiếp RS232 máy tính viết bằng VB.NET (có thể sử dụng VisualBasic 6 'VB6' nhưng hay chạy bị lỗi )

Vẫn sử dụng bo của chipn24.com  



Vi xử lý AT 89S52
   
Đèn led chỉ thị cắm tại PORT2 


Cổng COM máy tính 






Bảng chân trị COM


Dùng IC Max232 để kết nối giữa UART trên AT 89S52 và cổng COM của PC.
   Trong IC AT 89S52 mức 1 tương ứng điện áp cao (5V, TTL) trong khi đối với RS232 ( COM ) thì mức 1 tương ứng với điện áp thấp (điện áp âm, có thể -12V) do đó cần một giao tiếp chuyển MAX 232. Chân 11  MAX232 nối qua điển trở  tới chân 1 Cổng 3 IC AT 89S52., chân 12 MAX 232  nối qua điện trở tới chân 0 Cổng 3 IC AT 89S52



Sơ đồ giao tiếp
IC Max232

IC MAX232



xong phần chuẩn bị phần "cứng" giờ chuyển qua mềm cho IC và cho máy tính viết bằng VB.NET

*
RX hay RtD hay RD có nghĩa Reseived Data (tra từ điển Google nhận dữ liệu)
TX hay TtD hay TD có nghĩa Transmitted Data (chắc là cũng tra Google nốt)



Để đơn giản tôi viết như sau:(nói cho oai là tôi viết nhưng chủ yếu ăn cắp trên mạng tống vô ic)


Code:
// Program to test serial communication of controller with PC using hyper terminal
#include<reg51.h>
void ini()     // Khởi tạo thời gian cho cổng nối tiếp
{
TMOD=0x20;  //Timer1, mode 2, baud rate 9600 bps
TH1=-13; // Baud rate 2400
SCON=0x50;
TR1=1;
}
void recieve()  //Hàm nhận dữ liệu từ cổng nối tiếp
{
unsigned char value;
while(RI==0);
value=SBUF;
P1=value;
RI=0;
}
void transmit()  //Hàm truyền dữ liệu từ chân P1 sang chân P2 nhìn cho đã ở đó có dàn  8 led  sau đó 
{
P2=P1;
SBUF=P2;
while(TI==0);
TI=0;
SBUF=P1; // truyển dữ liệu sang hàng đợi chờ xuất ngược trở ra
while(TI==0);
TI=0;
}
void main()
{
while(1)
{
  ini();
  recieve();
  transmit();
}
}
}

Mở VB.NET lập Form như  hình dưới đây


Nhồi luôn đoạn code như sau vô


Code:
Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim Ports As Array 
        'Part 1 : Get all available serialports 
        Ports = IO.Ports.SerialPort.GetPortNames() 
        'Add to ComboBox1 
        For i = 0 To UBound(Ports) 
           ComboBox1.Items.Add(Ports(i))
        Next 
         'Part 2 : Select the first available serialport 
        ComboBox1.Text = ComboBox1.Items.Item(0) 
    End Sub 
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
        Dim wait As Long 
        Dim B(2) As Byte
        Dim D, I As Integer
        Dim Str As String = "" 
        SerialPort1.PortName = ComboBox1.Text
        'Open the SerialPort 
        SerialPort1.Encoding = System.Text.Encoding.GetEncoding(1252) '' Không có dòng  này VB.Net chỉ truyền được đến ký tự 127
        SerialPort1.Open()
        SerialPort1.BaudRate = 2400 
        SerialPort1.Write(TextBox1.Text)
        wait = 0 
        Do Until wait > 6000000
           wait = wait + 1 
        Loop 
           D = SerialPort1.Read(B, 0, 0) 
        For I = 0 To D - 1 
        
                 If B(I) = 13 Then 
                     Str = Str + vbCrLf 
                 Else 
                     Str = Str + Chr(B(I)) 
                 End If 
       Next 
       TextBox2.Text = Str 
       SerialPort1.Close() 
       End Sub 
 End Class

Bấm chạy chương trình test thử chạy ok như hình dưới





Không có nhận xét nào:

Đăng nhận xét