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

[Lập trình PIC] Truyền Thông Nối Tiếp RS232 - Xử Lý Chuỗi Trong CCS


Bài trước:

Bài sau:
+[Lập trình PIC] Giao Tiếp SPI


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)

ads

Người đăng : Newbie1 Vào lúc: 21:45 Chủ đề:

2 nhận xét:

  1. bài viết quá bổ ích, cám ơn tác giả rất nhiều!!!!!!!!!!!!!!!

    Trả lờiXóa
  2. Bai viet rat chi tiet, thanks tac gia rat nhieu

    Trả lờiXóa

 

Người theo dõi

Tổng số lượt xem trang

Thống kê truy cập