Lập trình giao tiếp máy tính PC điềukhiển thiết bị ngoại vi sử dụng phần

Một phần của tài liệu Bài giảng điều khiển bằng máy tính (Trang 109 - 127)

mềm Visual tạo ứng dụng và lập trình cho 8051.

Sơ đồ giao tiếp VĐK với máy tính truyền thông qua cổng COM ( Serial Port ).

Ta cần sử dụng vi mạch chuyển đổi MAX232 để chuyển thành vào ra TTL cho các chân RD và TD vì vi điều khiển tương thích mức TTL , giao tiếp với PC qua hai chân đó là RXD (nhận ) và TXD ( phát ).

Ta xét một bài tập cụ thể như sau:

Thiết lập giao diện giao tiếp máy tính qua cổng truyền thông nối tiếp và viết chương trình cho VĐK 8051 nhận dữ liệu nối tiếp từ một giao diện trên máy tính và hiển thị ký tự nhận được ra các led đơn nối với PORT2 như hình vẽ biết:

- Khung dữ liệu có 10 bít: 1 bit start, 8 bit data, 1 bít stop. - Tốc độ truyền là 1200

- Truyền thông nối tiếp qua cổng COM1. TD RD L 8 L7 L6 L5 L4 L3 L2 L1 L1 L2 L3 L4 L5 L6 L7 L8 8051 AND PC INTERFACE 1 6 2 7 3 8 4 9 5 TO PC CONN-D9F T1IN 11 R1OUT 12 T2IN 10 R2OUT 9 T1OUT 14 R1IN 13 T2OUT 7 R2IN 8 C2+ 4 C2- 5 C1+ 1 C1- 3 VS+ 2 VS- 6 U1 MAX232 C1 1uF C2 1uF C3 1uF C4 1uF X1 CRYSTAL XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U2 AT89C51 IN C5 1u R1 10k D1 LED-RED R2 100 D2 LED-RED R3 100 D3 LED-RED R4 100 D4 LED-RED R5 100 D5 LED-RED R6 100 D6 LED-RED R7 100 D7 LED-RED R8 100 D8 LED-RED R9 100 OUT INDICATOR IN TEST

Hình 4.8Sơ đồ giao tiếp máy tính qua cổng truyền thông nối tiếp với VĐK 8051

Trước tiên ta cần phải tạo một giao diện trên máy tính. Để tạo giao diện ta có thể sử dụng nhiều phầnmềm khác nhau như: Delphi, Visual Basic, C++...ở đây ta tạo ra giao diện trên Visual Basic.

* Tạo giao diện.

- Khởi động Visual Basic mở dự án mới

- Lấy Label, Text box, Command button để tạo ra giao diện như sau:

Hình 4.9 Khởi động Visual Basic và thiết lập thông số

Để thay đổi tên các đối tượng trên giao diện ta chọn vào đối tượng đó sau đó chọn caption trong hộp thoại Properties ở bên phải của phần mềm.

Thay đổi cỡ chữ, Font chữ ta chọn Font trong Properties. * Viết lệnh cho các đối tượng trên giao diện.

- Để viết lệnh cho các đối tượng trên ta nháy đúp chuột vào đối tượng đó. Private Sub Command1_Click()

'su kien khi nhan nut truyen

MSComm1.Output = Text1.Text 'gui gia tri tai text1 ra cong com End Sub

Private Sub Command2_Click() 'su kien khi nhan nut thoat

MSComm1.PortOpen = False 'dong cong com End 'ket thuc chuong trinh

End Sub

Private Sub Form_Load() ' Su kien khi load form

MSComm1.CommPort = 1 'chon cong com 1

MSComm1.Settings = "1200,n,8,1" 'chon toc do truyen la 1200, khong kiem tra chan le ‘ mot bit dung

MSComm1.PortOpen = True 'chon mo cong

Text1.Text = "" 'gan text1 bang mot khoang trang End Sub

- Sau đó ta chọn File/Make project1.exe la có được một file chạy như sau:

* Viết chương trình cho VĐK.

;chuong trinh viet cho VDK 8051 nhan du lieu noi tiep tu may tinh ;va gui ra cac led don noi voi port2

;tan so thanh anh su dung la 11.0592 ;khung du lieu la: 1200,n,8,1

;chuong trinh su dung ngat noi tiep de nhan ;--- org 0

;--- khai bao dia chi vec to ngat noi tiep org 23h

mov a,sbuf ;doc du lieu tu bo dm noi tiep vao A mov p2,a ;dua A ra port2

clr ri ;xoa co nhan reti

;--- start:

mov ie,#10010000b ;cho phep ngat noi tiep

mov scon,#01010000b ;du lieu noi tiep 8bit UART va cho phep nhan mov tmod,#00100000b ;chon timer1 mode 8 bit tu dong nap lai

mov th1,#0e8h ;to do la 1200 voi crystal=11.0592Mhz setb tr1 ;khoi dong timer1

mov p2,#0 ;tat led jmp $ ;dung tai cho end

* Lúc này ta nạp chương trình cho VĐK và kết nối với máy tính để chạy thử nghiệm. Khi ta truyền một ký tự nào đó thì trên các led đơn nối với Port 2 sẽ có mã ASCII của ký tự đó.

- Ví dụ 1: Viết chương trình trên Visual Basic tạo một ứng dụng để truyền các ký tự gõ vào từ bàn phím ra led đơn thông qua vi điều khiển 89c51 để điều khiển các LED đơn gắn ở Port 0 sáng tắt theo mã ASSCII của phím được nhấn.

* Tạo ứng dụng trên Visual Basic.

+ Khởi động phần mềm Visual Basic. và tạo ra giao diện như sau:

Hình 4.10 Tạo giao diện trên Visual Basic.

Để tạo được giao diện như trên ta cần lấy trong thư viện Visual Basic gồm:

+ 1 textbox để hiển thị có ký hiệu Memo1 như trên hình đồng thời ta có thể dán nhãn cho textbox đó bằng cách lấy label trong thư viện và gán tên cho chúng là “dữ liệu cần truyền”

+ 2 nút bấm lấy được bằng cách vào Commandbutton trong thư viện và gán tên lần lượt là “truyền”và “thoát”

+Ta cần lấy biểu tượng chiếc điện thoại bàn như trên hình vẽ để thiết lập cổng COM.Trước khi lấy được biểu tượng này ta phải chọn Component trên menu của chương trình sau đó chọn Import Actix X lúc này chương trình hiện ra một hộp thoại cho phép ta lựa chọn các đối tượng cần nhập vào. Ta tiến hàn kéo thanh cuốn dọc và lựa chọn Microsoft Comm Control 6.0 sau đó chọn Install. Sau bước này ta sẽ thấy xuất hiện biểu tượng chiếc điện thoại trong thư viện và

chỉ việc lấy ra sử dụng.

Sau khi tạo được giao diện như trên ta sẽ phải thiết lập cho các sự kiện( viết chương trình cho các sự kiện) để chúng hoạt động đáp ứng theo yêu cầu bằng cách khi viết cho sự kiện nào ta sẽ nháy đúp chuột vào sự kiện đó rồi viết chương trình cho chúng.

Thiết lập thông số cho Mscomm1 như sau:

MSComm1.CommPort:= 1; // chọn cổng Com 1 MSComm1.PortOpen:= True; // mở cổng

MSComm1.Settings:= '9600,n,8,1'; // chọn tốc đọ truyền là 9600, không kiểm tra chẵn lẻ, 8 bit dữ liệu, 1 bit stop.

+ Viết mã nguồn cho các sự kiện như sau:

//CHUONG TRINH TRUYEN DU LIEU QUA CONG COM1 //THONG QUA 89C51 DIEU KHIEN LED DON

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;

type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; MSComm1: TMSComm; MEMO1: TMemo;

procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private

public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject); begin

MSComm1.PortOpen:= false; // CHON DONG CONG close; // DONG UNG DUNG

end;

procedure TForm1.FormCreate(Sender: TObject); begin

// THIET LAP THUOC TINH CHO CONG COM MSComm1.CommPort:= 1; // CONG COM1

MSComm1.PortOpen:= True; // CHON MO CONG MSComm1.Settings:= '9600,n,8,1';

MEMO1.Text:=''; // XOA CAC KY TU TRONG MEMO1 end;

procedure TForm1.Button1Click(Sender: TObject); begin

// DAP UNG SU KIEN KHI NHAN NUT TRUYEN mscomm1.output:=memo1.Text; //TRUYEN DI end;

end.

+ Sau khi thiết kế và viết mã nguồn xong ta hợp dịch và tạo ra được ứng dụng chạy trên Windows có giao diện như sau:

Hình 4.11 Ứng dụng chạy trên WINDOW

* Viết chương trình cho VĐK 89C51.

;Chuong trinh nhan du lieu tu PC

;Tan so thanh anh su dung la 11.0592Mhz ;************************

mov scon,#50h ;

MOV TMOD,#20h ;Timer 1 tu dong nap lai MOV TH1,#0FDh ;toc do truyen la 9600 SETB TR1 ;khoi dong timer1

;************************ MOV P0,#00H ;tat het cac led port0 loop:

jnb ri,$ ;kiem tra co nhan

clr ri ;xoa co nhan de nhan ki tu ke tiep

mov p0,sbuf ;dua du lieu tai bo dem noi tiep ra port0 jmp loop ;cho nhan

end ;ket thuc chuong trinh

+ Hợp dịch nội dung chương trình vừa soạn thảo và nạp vào vi điều khiển. +Kết nối phần cứng để chạy ứng dụng và quan sát kết quả.

+ Kết nối Com1 với hệ Kit thực tập

+ Chọn truyền thông nối tiếp với khối VĐK + Dùng bus để nối đầu ra của Port 0 với Led đơn.

+ Chạy ứng dụng và nhập ký tự cần truyền từ bànphím và nhấn truyền sau đó quan sát Led đơn.

- Ví dụ 2: Viết chương trình trên Visual tạo một ứng dụng để truyền các ký tự gõ vào từ bàn phím ra led đơn thông qua vi điều khiển 89c51 để điều khiển các LED đơn gắn ở Port 0 sáng tắt theo mã ASSCII của phím được nhấn đồng thời hiển thị ký tự được nhấn từ bên ngoài trên ứng dụng.

* Tạo ứng dụng trên Visual.

Hình 4.12 Thiết lập giao diện dùng Visual Basic

Để tạo được giao diện như trên ta cần lấy trong thư viện Visual Basic gồm:

+ 2 textbox để hiển thị có ký hiệu Memo1 và Memo2 như trên hình đồng thời để phân biệt rõ 2 textbox đó ta có thể dán nhãn cho chúng bằng cách lấy 2 label trong thư viện và gán tên cho chúng lần lượt là “dữ liệu cần truyền” và “dữ liệu nhận được”

+ 3 nút bấm lấy được bằng cách vào Commandbutton trong thư viện và gán tên lần lượt là “truyền”, “nhận” và “thoát”

+ Viết mã nguồn cho các sự kiện như sau: unit TRUYENNHAN;

//CHUONG TRINH TRUYEN NHAN DU LIEU NOI TIEP TU PC THONG QUA VDK VOI THIET BI NGOAI VI

// SU DUNG CONG COM1, TOC DO TRUYEN 9600B/S interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;

type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Label1: TLabel; Label2: TLabel; MSComm1: TMSComm; Button1: TButton; Button2: TButton; Button3: TButton;

procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject); begin

MSComm1.PortOpen:= false; //DONG CONG close //DONG UNG DUNG

end;

procedure TForm1.FormCreate(Sender: TObject); begin

//TRHIET LAP THUOC TINH CONG COM

MSComm1.CommPort:= 1; //CHONG CONG COM1 MSComm1.PortOpen:= True; //MO CONG

MSComm1.Settings:= '9600,n,8,1';

MEMO1.Text:=''; //XOA CAC MEMO MEMO2.Text:='';

end;

procedure TForm1.Button1Click(Sender: TObject); begin

//SU KIEN KHI NHAN NUT TRUYEN

mscomm1.output:=memo1.Text; //TRUYEN DI end;

procedure TForm1.Button2Click(Sender: TObject); begin

//SU KIEN KHI NHAN NUT NHAN

memo2.Text:=memo2.Text+mscomm1.Input; // NHAN VAO end;

+ Sau khi thiết kế và viết mã nguồn xong ta hợp dịch và tạo ra được ứng dụng chạy trên Windows có giao diện như sau:

Hình 4.13 Ứng dụng chạy trên Window

* Viết chương trình cho VĐK 89C51. (Chương trình viết trên Pinnacle 52 hoặc KEIL C).

+ Khởi động phần mềm lập trình soạn thảo chương trình như sau: ;Chuong trinh truyen va nhan du lieu tu PC

;Tan so thanh anh su dung la 11.0592Mhz ;************************

mov scon,#52h ;

MOV TMOD,#20h ;Timer 1 tu dong nap lai MOV TH1,#0FDh ;toc do truyen la 9600 SETB TR1 ;khoi dong timer1

;************************

mov p2,#0ffh ;dat p2 lam dau vao MOV P1,#00H ;tat het cac led port0 loop: jnb ti,$ clr ti mov a,p2 mov sbuf,a jnb ti,$ jnb ri,loop clr ri mov p1,sbuf jmp loop

end ;ket thuc chuong trinh

+Kết nối phần cứng để chạy ứng dụng và quan sát kết quả. + Kết nốiCom1 với hệ Kit thực tập

+ Chọn truyền thông nối tiếp với khối VĐK + Dùng bus để nối đầu ra của Port 1 với Led đơn. + Nối Port 2 với bàn phím hexa

+ Chạy ứng dụng và nhập ký tự cần truyền từ bàn phím và nhấn truyền sau đó quan sát Led đơn và trên ứng dụng .

4.2.4. Lập trình giao tiếp PC với Arduino dùng VB.NET và cổng COM(USB)

Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng tương tác với nhau hoặc với môi trường được thuận lợi hơn. Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM Atmel 32- bit. Những Model hiện tại được trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác nhau.

Hình 4.14 Board arduino

- Được giới thiệu vào năm 2005, Những nhà thiết kế của Arduino cố gắng mang đến một phương thức dễ dàng, không tốn kém cho những người yêu thích, sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có khả năng tương tác với môi trường thông qua các cảm biến và các cơ cấu chấp hành. Những ví dụ phổ biến cho những người yêu thích mới bắt đầu bao gồm các robot đơn giản, điều khiển nhiệt độ và phát hiện chuyển động. Đi cùng với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy tính cá nhân thông thường và cho phép người dùng viết các chương trình cho Aduino bằng ngôn ngữ C hoặc C++.

Hình 4.15 Cấu tạo Arduino

Một board Arduino đời đầu gồm một cổng giao tiếp RS-232 (góc phía trên-bên trái) và một chip vi xử lý Atmel ATmega8 (màu đen, nằm góc phải-phía dưới); 14 chân I/O số nằm ở phía trên và 6 chân analog đầu vào ở phía đáy.

Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác. Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, cho phép người dùng kết nối với CPU của board với các module thêm vào có thể dễ dàng chuyển đổi, được gọi là shield. Vài shield truyền thông với board Arduino trực tiếp thông qua các chân khách nhau, nhưng nhiều shield được định địa chỉ thông qua serial bus I²C-nhiều shield có thể được xếp chồng và sử dụng dưới dạng song song. Arduino chính thức thường sử dụng các dòng chip megaAVR, đặc biệt là ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560.

Một vài các bộ vi xử lý khác cũng được sử dụng bởi các mạch Aquino tương thích. Hầu hết các mạch gồm một bộ điều chỉnh tuyến tính 5V và một thạch anh dao động 16 MHz (hoặc bộ cộng hưởng ceramic trong một vài biến thể), mặc dù một vài thiết kế như LilyPad chạy tại 8MHz và bỏ qua bộ điều chỉnh điện áp onboard do hạn chế về kích cỡ thiết bị. Một vi điều khiển Arduino cũng có thể được lập trình sẵn với một boot loader cho phép đơn giản là upload chương trình vào bộ nhớ flash on-chip, so với các thiết bị khác thường phải cần một bộ nạp bên ngoài. Điều này giúp cho việc sử dụng Arduino được trực tiếp hơn bằng cách cho phép sử dụng 1 máy tính gốc như là một bộ nạp chương trình.

- Theo nguyên tắc, khi sử dụng ngăn xếp phần mềm Arduino, tất cả các board được lập trình thông qua một kết nối RS-232, nhưng cách thức thực hiện lại tùy thuộc vào đời phần cứng. Các board Serial Arduino có chứa một mạch chuyển đổi giữa RS232 sang TTL. Các board Arduino hiện tại được lập trình thông qua cổng USB, thực hiện

thông qua chip chuyển đổi USB-to-serial như là FTDI FT232. Vài biến thể, như Arduino Mini và

Boarduino không chính thức, sử dụng một board adapter hoặc cáp nối USB-to-serial có thể tháo rời được, Bluetooth hoặc các phương thức khác. (Khi sử dụng một công cụ lập trình vi điều khiển truyền thống thay vì ArduinoIDE, công cụ lập trình AVR ISP tiêu chuẩnsẽ được sử dụng.)

Board Arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sử dụng cho

Một phần của tài liệu Bài giảng điều khiển bằng máy tính (Trang 109 - 127)

Tải bản đầy đủ (PDF)

(155 trang)