Chủ Nhật, 26 tháng 2, 2012

Hướng Dẫn CCS Cho PIC - Bài 5: Truyền Thông Nối Tiếp RS232 - Xử Lý Chuỗi Trong CCS


Bài trước: 
+Bài 4: Chuyển Đổi ADC - Các Hàm Vào/Ra trong CCS
Bài sau: +Bài 6: Giao Tiếp SPI


Bài 5: 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ị . 
có thể là : 
C :  1 ký tự 
S : chuỗi hoặc ký tự  
: số 8 bit không dấu 
: 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 ) 
: số 8 bit có dấu 
: số thực có luỹ thừa VD : e12
: 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 .








(Nguồn :  TRẦN XUÂN TRƯỜNG)

0 nhận xét:

Đăng nhận xét