_Chương này sẽ giúp bạn viết chương trình có sử dụng giao tiếp 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 , . . .) .
đ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ị “ .
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ị “ .
_Nhưng nếu 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 RS232 ( cổng COM ) và vô số hàm xử lý chuỗi . Chương này sẽ giải quyết điều đó .
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 RS232 ( 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.
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ư VD sau :
_Để sử dụng giao thức này , phải có 2 khai báo như VD sau :
- #use delay (clock = 40000000 ) // 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 ( . . . . .) .
_Hàm perror ( ) đòi hỏi thêm #include<errno.h > . Hàm assert() đòi hỏi thêm #include<assert.h> .
_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à :
_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 );
Int k =6 ;
Printf ( “ hello “ );
Printf ( “ %u “ , k );
2 / KBHIT ( ) :
_Thường thì chúng ta dùng RC6 và RC7 cho RX và TXtrong 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 .
_Thường thì chúng ta dùng RC6 và RC7 cho RX và TXtrong 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 .
sao không có giải thích các hàm còn lại vậy ad
Trả lờiXóa