VĐK PIC “Truyền Thông Nối Tiếp RS232 – Xử Lý Chuỗi Trong CCS”

+ Phần này sẽ giúp bạn viết chương trình có sử dụng giao tiếp với máy tính (PC) . Điều này rất cần thiết khi bạn muốn VĐK khi hoạt động có thể truyền dữ liệu cho PC xử lý , hoặc nhận giá trị từ PC để xử lý và điều khiển ( dùng PC điều khiển động cơ , nhiệt độ , hay biến PC thành dụng cụ đo các đại lượng điện, Oscilocope , . . .) .
+ Viết chương trình lập trình cho VĐK để giao tiếp máy tính là công việc rất phức tạp khi viết bằng ASM , rất khó hiểu đối với những người mới bắt đầu lập trình . Đặc biệt là khi viết cho những con VĐK không hỗ trợ từ phần cứng ( 8951 thì phải (?) ) . Thật may là phần lớn PIC hiện nay đều hỗ trợ phần này nên việc lập trình có dễ dàng hơn . Nhưng nếu chương trình của bạn yêu cầu truyền hay nhận nhiều loại dữ liệu ( số 8 , 16 ,32 bit , dương , âm , chuỗi , . . .) thì việc viết chương trình xử lý và phân loại chúng là điều “ kinh dị “ .
+ Nếu bạn đã lập trình ASM cho vấn đề này rồi thì bạn sẽ thấy sao dễ dàng quá vậy khi giải quyết vấn đề này với C khi dùng CCS . Rất đơn giản ! CCS cung cấp rất nhiều hàm phục vụ cho giao tiếp qua cổng COM và vô số hàm xử lý chuỗi . Chương này sẽ giải quyết điều đó .

+ Một yếu tố quan trọng là khi nào thì VĐK biết PC truyền data => có thể lập trình bắt tay bằng phần mềm hay đơn giản là dùng ngắt . Các ví dụ về ngắt , xem phần ngắt .

 

 

 

I / TRUYỀN THÔNG VỚI PC QUA CỔNG COM :

+ Để sử dụng giao thức này , phải có 2 khai báo như ví dụ sau :

#use delay (clock = 40000000 ) // nếu VDK đang dùng OSC 40Mhz

#use rs232 (baud=19200 , parity=n , xmit=pin_C6 , rcv=pin_C7 )

// baud= 19200 , không chẵn lẻ , chân truyền C6 , chân nhận C7

 

+Các hàm liên quan :

Printf ( )

Getc ( ) putc ( )

Getch ( ) putchar ( )

Getchar ( ) fputc ( )

Fgetc ( ) puts ( )

Gets ( ) fputs ( )

Fgets ( )

Kbhit ( )

Assert ( ) => mới trên CCS 3.222

Perror ( ) => mới trên CCS 3.222

Set_uart_speed ( )

Setup_uart ( )

 

+ Tất cả các hàm trên đòi hỏi phải khai báo chỉ thị tiền xử lý #use RS232 ( . . . . .) . Chi tiết chỉ thị này xem phần Chỉ thị tiền xử lý .

+ Hàm perror ( ) đòi hỏi thêm #include<errno.h > . Hàm assert() đòi hỏi thêm #include<assert.h> .

 

1 / printf ( string )

Printf ( cstring , values . . . )

+ Dùng xuất chuỗi theo chuẩn RS232 ra PC .

+ string là 1 chuỗi hằng hay 1 mảng ký tự ( kết thúc bởi ký tự null ) .

+ value là danh sách các biến , cách nhau bởi dấu phẩy .

+ Bạn phải khai báo dạng format của value theo kiểu %wt .Trong đó w có thể có hoặc không, có giá trị từ 1-9 chỉ rõ có bao nhiêu ký tự được xuất ra ( mặc định không có thì có bao nhiêu ra bấy nhiêu ), hoặc 01-09 sẽ chèn thêm 0 cho đủ ký tự hoặc 1.1-1.9 cho trường hợp số thực . còn t là kiểu giá trị .

+ t có thể là :

C : 1 ký tự

S : chuỗi hoặc ký tự

U : số 8 bit không dấu

x : số 8 bit kiểu hex ( ký tự viết thường ,VD : 1ef )

X : số 8 bit kiểu hex ( ký tự viết hoa ,VD : 1EF )

D : số 8 bit có dấu

e : số thực có luỹ thừa VD : e12

f : số thực

Lx : số hex 16 /32 bit ( ký tự viết thường )

LX : hex 16 /32 bit ( ký tự viết hoa )

Lu : số thập phân không dấu

Ld : số thập phân có dấu

% : ký hiệu %

VD :

Specifier Value=0x12 Value=0xfe

%03u 018 254

%u 18 254

%2u 18 *

%5 18 254

%d 18 -2

%x 12 Fe

%X 12 FE

%4X 0012 00FE

* Result is undefined – Assume garbage.

VD :

Int k =6 ;

Printf ( “ hello “ );

Printf ( “ %u “ , k );

 

2 / KBHIT ( ) :

+ Thường thì chúng ta dùng RC6 và RC7 cho RX và TX trong giao tiếp cổng COM , VDK PIC trang bị phần cứng phục vụ việc này với thanh ghi gởi và nhận và các bit bào hiệu tương ứng . Do đó khi dùng RS232 hỗ trợ từ phần cứng thì KHBIT ( ) trả về TRUE nếu 1 ký tự đã được nhận ( trong bộ đệm phần cứng ) và sẵn sàng cho việc đọc , và trả về 0 nếu chưa sẵn sàng .

+ Hàm này có thể dùng hỏi vòng xem khi nào có data nhận từ RS232 để đọc .