Custom Search



Nơi bạn đến là nơi tôi bắt đầu, nơi tôi qua sẽ là nơi bạn đến...

Friday, October 19, 2012

[Lập trình 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 .
Post a Comment