Truyền Thông Nối Tiếp RS232 – Xử Lý Chuỗi Trong CCS

0
3209

+ 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 . Hàm assert() đòi hỏi thêm #include .
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 .

Leave a Reply