• Không có kết quả nào được tìm thấy

I. Phần cứng:

N/A
N/A
Protected

Academic year: 2022

Chia sẻ "I. Phần cứng: "

Copied!
7
0
0

Loading.... (view fulltext now)

Văn bản

(1)

Ghi chép Sơ lược về giao tiếp với máy tính

qua cổng COM với VĐK PIC

Duy Thái

wonbinbk@gmail.com

(2)

I. Phần cứng:

Phần cứng đơn giản là mạch vi điều khiển PIC hỗ trợ UART (ví dụ PIC 16F877A), có đầy đủ bộ dao động, nguồn, mạch reset,…, cổng COM cắm board và IC chuyên dụng hỗ trợ RS232 (MAX232A).

Ghi chép này chỉ bàn về giao tiếp đồng bộ (Synchronous – không có bắt tay) nên cổng COM chỉ cần sử dụng 3 chân Rx,Tx và GND là đủ.

II. Phần mềm:

Trên máy tính, chúng ta dùng Visual Basic (VB) để viết giao tiếp.

VB hỗ trợ Component (module add-in) Mscomm. Component này không enabled mặc định. Để sử dụng, trong VB, nhấn Ctrl + T (Project -> Components), kéo chuột xuống, và tick vào Microsoft Comm Control 6.0.

(3)

Nhấn OK, ngoài thanh công cụ xuất hiện thêm một icon . Tiếp theo, add 1 Mscomm vào Form. Nó tự động có tên, chẳng hạn Mscomm1.

Mscomm1 có những properties sau đây:

CommPort:

1 = Sử dụng COM 1.

Handshaking:

0- comNone = Không dùng bắt tay.

InBufferSize:

1024 = Bộ đệm nhận (để càng lớn thì càng tốt).

InputLen:

=chiều dài (tính bằng Byte) của giá trị gán cho Input Property.

(ví dụ: =1 , data=mscomm1.input (data là số Int hoặc Str). Nếu InputLen =0: Input sẽ có chiều dài bằng số byte hiện có trong Buffer.

Thường do VĐK chỉ có thể send 1 Byte mỗi đợt nên thường set thuộc tính này bằng 1.

InputMode:

0 = Text mode, byte nhận được chuyển sang ASCII tương ứng trước khi gán.

1 = Binary mode.

OutBufferCount:

số Byte đang nằm chờ gửi đi trong Buffer.

OutBufferLen:

chiều dài Buffer tính theo Byte.

(4)

Rthreshold:

số Byte phải nhận trước khi Mscomm1 tạo ra 1 event (là event OnComm, khi đó CommEvent = comEvRcv). Có thể hiểu là “số Byte phải nhận trước khi Mscomm1 tạo ra 1 ngắt, ngay khi có ngắt, VB nhảy vào làm việc ở event OnComm.

Sthreshold:

tương tự Rthreshold nhưng là dành cho Xmit module. Nó là số Byte nhỏ nhất có thể truyền đi trong bộ đệm truyền trước khi

Mscomm1 tạo ra event OnComm, CommEvent=ComEvSend. Thường cái này ít khi sử dụng, không cần quan tâm đến nó cũng có thể send data to PIC.

Settings:

set Frame truyền. Có dạng sau: Settings=”BBBB,P,D,S” với BBBB là

BaudRate(110,300,600,1200,2400,4800,9600(default),14400,19200,2880 0,38400,56000,115200, 128000,256000) ; P là Parity bits

(Even,Mark,None,Odd,Space); D là số data bits (4,5,6,7,8 (default)); S là Stopbits (1,1.5,2).

Để sử dụng Component Mscomm này đọc data từ VĐK, ta thực hiện theo trình tự sau:

Trong Form_load():

Dim Sinput as String ‘ Ki tu nhan vao Mscomm1.settings=9600,N,8,1 Mscomm1.commPort=1

Mscomm1.PortOpen = 1 Mscomm1.rthreshold=1 Mscomm1.inbuffersize=1024

Vừa rồi là đoạn khởi tạo Port.

Sau đó, bất cứ khi nào có Event OnComm, chương trình sau đây được thực hiện:

Trong mscomm1_OnComm():

If mscomm1.commEvent = ComEvReceive then sInput = mscomm1.Input

(5)

label1.caption = label1.caption + sInput ‘hiên thị những gì nhận được lên Form.

End If

Nếu muốn gửi data cho VĐK, thí dụ đang ở trong Command1_click():

Mscomm1.output = data_to_be_send

‘lưu y’ : ví dụ data_to_be_send=’A’ kiểu String, thì PIC nhận được mã ASCII của ‘A’

(chẳng hạn 0d123). Ở chỗ này hay bị nhầm lẫn.

(6)

III. Phần mềm trên PIC (firmware):

Sử dụng Compiler CCS C với những lệnh hỗ trợ sẵn, ta không cần quan tâm nhiều đến phần cứng của PIC (Registers, Protocol,…) mặc dù như vậy có vẻ không chuyên nghiệp. CCS C không hỗ trợ tác động đến thanh ghi một cách rõ ràng như HT-PICC, mặc dù vẫn có thể làm được.

Để tác động đến thanh ghi, ta khai báo #locate tên_thanh_ghi địa chỉ thanh ghi.

Tên thanh ghi không cần giống trong datasheet cũng được, địa chỉ thanh ghi thì bắt buộc phải giống. Ví dụ: khai báo PORTA: #locate PORTA=0x80, sau khi khai báo rồi, thay vì gõ lệnh dài dòng output_a(0xFF);, ta chỉ cần PORTA=0xFF; Như vậy rõ ràng là tiện và quen thuộc với người từng dùng ASM. Nếu cần, có thể #locate nhiều thanh ghi của con PIC nào đó, lưu lại với tên 16F877A_regs.h, từ lần sau trở đi, chỉ cần

#include <16F877A_regs.h> là thoải mái tác động đến thanh ghi.

Sau đây là code ví dụ đơn giản.

#include <16F877A.h>

#fuses HS, NOWDT,PUT,NOLVP,NODEBUG,NOBROWNOUT

#use delay(clock=20000000) //bắt buộc phải có Directive này trước…

#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7) //…rồi mới viết Directive này. Directive này thiết lập PIC trong chế độ baud bao nhiêu, chân xmit va rcv, có thể có databits, stopbit,…nhưng ít khi cần.

/* Khai báo biến*/

Int Input;

Int num;

Void main (void) {

Num=123;

Set_tris_c(0x80);

Printf(“/n/r Hello World, this is Wonbinbk from VIETNAM”);

Printf(“/n/r This is the number %d”,num);

Printf(“/n/r Type in a key, just one key a time, man!”);

While(1) {

Input=Getc(); //waiting for a key input from PC, then assign it to Input.

Printf(“/n/r You typed %c, didn’t you?”,input);

} }

Nếu dùng ngắt nhận, ta không cần chờ trong loop, mà có thể làm việc khác.

#include <16F877A.h>

#fuses HS, NOWDT,PUT,NOLVP,NODEBUG,NOBROWNOUT

(7)

#use delay(clock=20000000)

#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7) Int input;

#INT_RDA

Void ngat_232(void) {

Input=getc();

Printf(“/n/rYou typed %c,didn’t you?”,input);

}

Void main(void) {

Set_tris_c(0x80);

Enable_interrupts(INT_RDA);

Enable_interrupts(GLOBAL);

While(1) {

Do_Something_else(); // blah,blah,blah…

} }

Thông tin thêm về các hàm, các lệnh hỗ trợ, đặc biệt lệnh printf() có thể đọc kỹ trong Help của CCSC 3.249 (newest version).

Tài liệu tham khảo

Tài liệu liên quan

Đang làm việc trên trang tính, để mở thêm một bảng tính mới ta làm sao1. Mở

- Các thanh ghi (Registers): được dùng như những bộ nhớ nhanh, có thể tương tác trực tiếp với các mạch xử lý của CPU; gồm các thanh ghi ghi địa chỉ lệnh sắp thực

Luyện tập Luyện tập II... Luyện tập Luyện

Khi cần có sự linh hoạt trong hướng nghiên cứu để phát hiện những vấn đề mới và khám phá sâu một chủ đề nào đó Khi khả năng tiến hành lại sự đo lường là quan trọng

Cây cối um tùm. Cả làng thơm. b) Dấu (?) và (!) đặt trong ngoặc đơn để thể hiện thái độ nghi ngờ hoặc châm biếm đối với nội dung của một từ ngữ đứng trước hoặc với nội

Miền nghiệm của bất pt nào sau đây được biểu diễn bởi nửa mặt phẳng không bị gạch trong hình vẽ (kể cả bờ là đường thẳng)A. Bảng xét dấu sau là bảng xét

- Ghép mắt: lấy mắt ghép ghép vào một cây khác (gốc ghép). * Phạm vi áp dụng: sản xuất giống cây trồng bằng nhân giống vô tính thường áp dụng cho các cây ăn quả,

 Mỗi quan hệ được đặt tên và theo sau là tên các thuộc tính của quan hệ được ghi trong hai dấu ngoặc đơn.. 