|
24-06-2008, 10:46 AM | #1 |
Super Moderator
Tham gia ngày: Feb 2006
Bài gửi: 150
: |
Vài thủ thuật với CCS C
Mình thấy rất nhiều bạn đã viết chương trình cho PIC bằng C, cụ thể là CCS-C nhưng vẫn không thể tận dụng được ưu thế của ngôn ngữ cấp cao mà thay vào đó là sử dụng C như ASM, chỉ tận dụng được các lệnh rẽ nhánh cơ bản. Trong quá trình viết chương trình cho PIC bằng CCS-C, mình rút ra vài kinh nghiệm khá hay, chia sẻ cho các bạn nào quan tâm. Tất nhiên là chương trình không đòi hỏi tốc độ tốt như viết cho ASM.
[1] F1 Phím này cực kỳ lợi hại, nhấn thử là biết ngay. [2] Tận dụng tối đa các thư viện dựng sẵn của CCS C cho việc giao tiếp với IC ngoại vi, vì cơ bản việc giao tiếp này không khó, và chỉ có 1 cách duy nhất theo như hoạt động của IC đó, việc gì phải viết lại nhỉ, trong khi người ta đã viết tốt lắm rồi. Tuy nhiên, nếu muốn nâng cao khả năng lập trình cũng nên xem qua người ta viết cái gì nhé . Các thư viện này ở thử mục [C:\Program Files\PICC\Drivers] [3] Tận dụng các hàm như bit_test(), bit_set(),bit_clear(), input(), output_x(), output_bit(), setup_...() và các chỉ dẫn setup, lệnh setup mà không cần phải quan tâm nhiều đến thanh ghi, các hàm này sử dụng với các định nghĩa sẵn có, được định nghĩa trong các file header, ví dụ nếu #include<16f877a.h> thì file đó nằm ở thử mục [C:\Program Files\PICC\Devices\16f877a.h] [4] Sử dụng hàm printf và hàm sprintf [*] Hàm printf có thể xuất 1 chuỗi ký tự có định dạng ra UART, tuy nhiên nó có chức năn buffer ra 1 hàm, có nghĩa là xuất các ký tự ascii ra 1 hàm. Ví dụ như sau, ta có hàm lcd_putc() trong thư viện LCD.C của CCS như sau: PHP Code:
Vậy để xuất ra LCD giá trị của ADC vừa đọc được trong biến adcresult (kiểu int16), nếu theo phương pháp thông thường, phải chuyển đổi biến này sang ascii rồi dùng lcd_putc() gởi từng ký tự đó ra. Vậy sử dụng hàm printf thì sao: PHP Code:
[*] Hàm sprintf() cũng tương tự, nhưng buffer cho chuỗi, ví dụ: PHP Code:
PHP Code:
[6] Sử dụng nhiều cổng RS232, SPI hay I2C CCS C cung cấp khả năng tạo ra số lượng các cổng RS232, SPI hay I2C trên bất kỳ I/O nào của PIC nhờ thư viện phần mềm. Vậy khi nào thì các bạn có thể sử dụng phần cứng của PIC cho các cổng đó, hay nhận diện các cổng trên PIC như thế nào. Đó là định nghĩa stream, và FORCE_HW. Một vài ví dụ cụ thể, ví dụ sau về sử dụng 3 cổng RS232, trong đó 1 cổng sử dụng phần cứng, 2 cổng tạo ra bởi thư việc của CCS C PHP Code:
[7] ADC của PIC và con trỏ dữ liệu. nếu *=16 thì trình dịch sẽ tự cấu hình con tror là 16 bit nếu truy xuất đến vùng RAM ngoài 0xFF Nếu bạn muốn sử dụng ADC của PIC như ADC 8 bit, thì có thể thêm chỉ dẫn như sau, để ý, mặc định adc của PIC sử dụng 8 bit thôi nhé: PHP Code:
PHP Code:
thay đổi nội dung bởi: phamminhtuan, 30-06-2008 lúc 03:47 AM. |
24-06-2008, 11:15 AM | #2 |
Đệ tử 4 túi
Tham gia ngày: Aug 2006
Bài gửi: 81
: |
Chưa có gì mới cả !
|
24-06-2008, 11:19 AM | #3 |
Super Moderator
Tham gia ngày: Feb 2006
Bài gửi: 150
: |
|
24-06-2008, 06:43 PM | #4 |
Đệ tử 4 túi
Tham gia ngày: Dec 2006
Bài gửi: 79
: |
Em đang tìm hiểu CCSC. Biết hỏi câu này chắc ko đúng chủ đề lắm nhưng anh Phamminhtuan có thể nói qua cho em về chức năng Serial port monitor trong thanh công cụ tool của CCSC 4.069 được ko? Đọc Help nhưng chưa hiểu lắm.
|
26-06-2008, 11:30 PM | #5 |
Đệ tử 1 túi
Tham gia ngày: May 2008
Bài gửi: 13
: |
các bác cho em mạn phép hỏi có sách nói về ngôn ngữ ccs này ko ?cảm ơn các bác nhiều
|
27-06-2008, 01:29 AM | #6 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
28-06-2008, 03:36 PM | #7 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Từ phiên bản 4.068, thằng PCW của CCS cho phép debug/program = ICD2 của microchip, phamminhtuan có thời gian viết tut về cái này cho anh em tham khảo luôn.
|
29-06-2008, 06:57 PM | #8 |
Super Moderator
Tham gia ngày: Feb 2006
Bài gửi: 150
: |
|
30-06-2008, 01:59 AM | #9 | |
PIC Bang chủ
|
Trích:
NTC, em cho Tuấn mượn một cái ICD2 LE nhé. Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
30-06-2008, 03:50 AM | #10 | |
Super Moderator
Tham gia ngày: Feb 2006
Bài gửi: 150
: |
Trích:
|
|
13-07-2008, 03:18 PM | #11 |
Đệ tử 5 túi
|
-Nếu gặp ký tự '\f' thì xóa lcd, '\n' thì xuống dòng, '\b' trở về đầu dòng.
-Cho em hỏi nếu gặp '\r' thì sẽ làm gì? |
17-11-2008, 02:09 AM | #12 |
Nhập môn đệ tử
Tham gia ngày: Dec 2007
Bài gửi: 2
: |
|
22-11-2012, 04:36 PM | #13 |
Đệ tử 1 túi
Tham gia ngày: Mar 2010
Bài gửi: 20
: |
thanks các thánh!
|
30-06-2008, 01:39 AM | #14 |
Đệ tử 5 túi
Tham gia ngày: Jun 2008
Bài gửi: 112
: |
các bác cho em hỏi ??? để mở rộng cổng (tăng số cổng) của pic 16f877a ,em kết nối phần cứng như sau :
- port_D của pic nối với cổng đầu vào của ic 8255 - dùng ic định địa chỉ là 74hc138n ,3 chân điều khiển A,B,c của 74hc138n được nối với các chân , RC5,RC6,RC7 - chân ra Y4 của 74hc138 nối với chân CS của 8255 Em không biết sử dụng những lệnh nào ? để giao tiếp với 8255 và sử dụng các cổng PA,PB,PC của 8255 ,các bác chỉ em phần này nhé , em dùng ccs để soạn thảo THANKS................... |
13-07-2008, 07:36 PM | #15 |
Đệ tử 4 túi
Tham gia ngày: Aug 2006
Bài gửi: 81
: |
\r là để kết thúc chuỗi ký tự,mã ASCII của nó là 0x0D
|