Professional Documents
Culture Documents
Để nhận dữ liệu từ vi điều khiển gửi lên máy tính, có thể dùng MATLAB hoặc RealTerm.
Nối dây COM to USB: đầu COM đực nối với cổng COM cái trên board Easy PIC và đầu USB nối
với máy vi tính.
2. Cách sử dụng MATLAB để nhận và truyền dữ liệu qua cổng COM
Trong MATLAB, sử dụng các lệnh sau để tiến hành giao tiếp đơn giản với máy tính
1
Thứ tự thực hiện nhận/truyền dữ liệu trong MATLAB (nhớ truyền tham số vào hàm):
1. luôn luôn gán biến cổng COM trước,
2. kiểm tra các thông số của cổng đã đúng chưa bằng lệnh get(),
3. mở cổng với lệnh fopen() và cuối cùng
4. nhận/truyền dữ liệu bằng lệnh fgets() hoặc fwrite().
2
PHẦN 2: CHƯƠNG TRÌNH MẪU
1. Cấu hình phần cứng chung cho cả hai chương trình.
Nối chân RX của cổng COM với chân RX của PIC và nối chân TX của cổng COM với chân TX
của PIC;
Nối dây của nút nhấn tuỳ ý với chân A0;
Nối Port B của PIC16F877A với phần LED đơn trên board EASY PIC.
2. Chương trình mẫu
Chương trình 1: Gửi dữ liệu lên máy tính
Chương trình thực hiện công việc sau: Nếu nhấn nút nhấn nối với chân A0 thì gửi một tín hiệu ở dạng
ký tự có nội dung Hello lên máy tính.
#include <16f877a.h>
#fuses HS, PUT, NOWDT, NOPROTECT, BROWNOUT, NOLVP
#use delay(clock=8M)
#use RS232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, Errors)
void main()
{
set_tris_a(0xff);
delay_ms(1000);
while (TRUE){
if(input(PIN_A0)==0)
{
delay_ms(250);
puts("Hello\n");
}
while (input(PIN_A0)==0)
{}
}
3
Chương trình 2: Đọc dữ liệu gửi từ máy tính đến PIC 16F877A và thực hiện một công việc nào đó
Chương trình thực hiện công việc sau: nếu vi điều khiển nhận được một tín hiệu ở dạng ký tự có nội
dung là:
‘0’ thì tắt toàn bộ LED;
‘1’ thì bật các LED sáng xen kẽ nhau.
Hàm getch() có nhiệm vụ đọc tín hiệu gửi đến chân RX của PIC 16F877A.
#include <16f877a.h>
#fuses HS, PUT, NOWDT, NOPROTECT, BROWNOUT, NOLVP
#use delay(clock=8M)
#use rs232(baud=9600, UART1, bits=8, parity=N, Errors)
void main()
{
set_tris_b(0x00);
output_b(0xff);
char c;
while(true)
{
c = getch();
if (c=='0')
{
output_b(0xff);
}
if (c=='1')
{
output_b(0b10101010);
}
}
}
4
PHẦN 3: BÀI TẬP ÁP DỤNG
1. Viết chương trình thực hiện công việc sau: cứ mỗi một giây thì gửi một tín hiệu có nội dung
“Ho va ten sinh vien” từ vi điều khiển lên máy vi tính (sử dụng RealTerm để đọc nội dung).
2. Viết chương trình thực hiện các công việc sau:
a. Nếu nhấn một nút nhấn trên Board Easy PIC thì gửi một tín hiệu có nội dung “TH VDK”
lên máy tính. Sử dụng MATLAB để đọc nội dung đã gửi có đúng không.
b. Nếu gửi một tín hiệu có nội dung “A” về PIC 16F877A thì LCD hiển thị nội dung là “Ho
va ten sinh vien” ở cột 1, dòng 1 (nếu họ và tên sinh viên nhiều hơn 16 ký tự thì viết
tên và từ đệm); nếu gửi một tín hiệu có nội dung “B” về PIC 16F877A thì xoá toàn bộ
nội dung trên LCD.
5
PHẦN 4: PHỤ LỤC - GPIO, STANDARD I/O VÀ FAST I/O TRONG
PIC 16F877A
GPIO là viết tắt của General Purpose Input/Output (có nhiều cách dịch khác nhau cho thuật ngữ này:
cổng vào/ra vạn năng, cổng vào/ra cơ bản, cổng vào/ra mục đích chung). Hiểu một cách chung nhất
thì GPIO là các chân vào/ra của vi điều khiển có thể sử dụng cho nhiều mục đích khác nhau tuỳ thuộc
vào yêu cầu thực tế. GPIO trong PIC16F877A ngoài các chức năng cơ bản là input và output còn có
một số chức năng đặc biệt khác như:
chân giao tiếp UART;
ngõ vào timer;
bus địa chỉ;
ngõ vào ngắt ngoài…
Trong CCS có hai chế độ lập trình chính cho các chân GPIO là chế độ Standard I/O và chế độ Fast I/O:
Trong chế độ Standard I/O thì khi xuất hay nhập chân I/O ta không cần quan tâm đến hướng
của nó mà chỉ đơn giản là dùng luôn hàm input, output tương ứng của nó. Nếu chú ý kỹ thì
nhiều chương trình cũ chúng ta viết hoàn toàn không có hàm set_tris_x() nhưng chương
trình vẫn chạy bình thường vì chân I/O đang ở chế độ Standard. Tuy nhiên khi sử dụng chế độ
này thì mỗi lệnh mất khoảng 3-4 chu kỳ lệnh.
Trong chế độ Fast I/O thì mỗi lệnh Input, output sẽ chỉ mất một chu kỳ lệnh, nhưng ta phải chỉ
rõ hướng hiện tại của nó là cổng vào hay cổng ra (tức là cần hàm set_tris_x()). Với những
chương trình cần tốc độ đọc/ghi cao như quét LED, đọc ADC thì chúng ta có thể sử dụng chế
độ Fast I/O để giảm độ trễ của chương trình.