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 Form1Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim Ports As Array'Part 1 : Get all available serialportsPorts = IO.Ports.SerialPort.GetPortNames()'Add to ComboBox1For i = 0 To UBound(Ports)ComboBox1.Items.Add(Ports(i))Next'Part 2 : Select the first available serialportComboBox1.Text = ComboBox1.Items.Item(0)End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim wait As LongDim B(2) As ByteDim D, I As IntegerDim 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ự 127SerialPort1.Open()SerialPort1.BaudRate = 2400SerialPort1.Write(TextBox1.Text)wait = 0Do Until wait > 6000000wait = wait + 1LoopD = SerialPort1.Read(B, 0, 0)For I = 0 To D - 1If B(I) = 13 ThenStr = Str + vbCrLfElseStr = Str + Chr(B(I))End IfNextTextBox2.Text = StrSerialPort1.Close()End SubEnd 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