PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   CCS C for PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=357)

auto_control 22-03-2008 01:16 AM

làm phiền trưởng lão lần nữa.nếu dùng CCs thì việc xử lý kiểu bảng này ra sao,chẳng hạn đệ muốn cho led7 hiển thị đếm ,thì khi dùng truy nhập bảng có vẻ nhanh hơn(thiển ý)
thanks!

namqn 22-03-2008 06:40 PM

Trích:

Nguyên văn bởi auto_control (Post 15083)
làm phiền trưởng lão lần nữa.nếu dùng CCs thì việc xử lý kiểu bảng này ra sao,chẳng hạn đệ muốn cho led7 hiển thị đếm ,thì khi dùng truy nhập bảng có vẻ nhanh hơn(thiển ý)
thanks!

Mời bạn download tài liệu hướng dẫn của CCS C ở link sau:
http://www.ccsinfo.com/downloads/CReferenceManual.pdf

Ở trang 268 có ví dụ về bảng hằng số trong flash (ROM) của PIC, bạn có thể dựa vào đó để làm bảng giải mã hiển thị cho LED 7 đoạn chẳng hạn.

Thân,

bean984 24-03-2008 02:48 PM

cho em hoi câu này
ý nghĩa của khai báo #fuses PUT là gì ?
nó ảnh hưởng đến timer như thế nào?(kết quả timer hoạt động thay đổi như thế nào khi có và không có khai báo trên)
em cảm ơn nhìu!

bien_van_khat 24-03-2008 04:36 PM

Trích:

Nguyên văn bởi bean984 (Post 15131)
cho em hoi câu này
ý nghĩa của khai báo #fuses PUT là gì ?
nó ảnh hưởng đến timer như thế nào?(kết quả timer hoạt động thay đổi như thế nào khi có và không có khai báo trên)
em cảm ơn nhìu!

PUT = Power Up Timer (bạn xem trong view/valid fuses của PCW)

Nói đơn giản là khi PIC đc cấp nguồn, Power Up Timer sẽ chờ 1 khoảng thời gian mới cho PIC chạy (thực thi code), khoảng thời gian chờ này nhằm đảm bảo nguồn cấp cho PIC ổn định.

Power Up Timer ko liên quan gì đến các timer của PIC.

LeDuc 24-03-2008 06:19 PM

Trích:

Nguyên văn bởi bien_van_khat (Post 15134)
PUT = Power Up Timer (bạn xem trong view/valid fuses của PCW)

Nói đơn giản là khi PIC đc cấp nguồn, Power Up Timer sẽ chờ 1 khoảng thời gian mới cho PIC chạy (thực thi code), khoảng thời gian chờ này nhằm đảm bảo nguồn cấp cho PIC ổn định.

Power Up Timer ko liên quan gì đến các timer của PIC.

Cho em hỏi câu này hơi chuối ? làm sao để nạp vào eeprom của 16f887 ? nạp qua đường nào? qua chân nào của Pic ?
Em cần nạp một mảng giá trị vào eeprom trước.cũng khoản 210 byte . Và sau này chường trình chính chỉ việc sử dụng các giá trị trong các ô nhớ của eeprom để xử lý mà thôi ....
Mong các huynh giúp đỡ !!
Thanks for all !

namqn 24-03-2008 06:21 PM

Trích:

Nguyên văn bởi LeDuc (Post 15139)
Cho em hỏi câu này hơi chuối ? làm sao để nạp vào eeprom của 16f887 ? nạp qua đường nào? qua chân nào của Pic ?
Em cần nạp một mảng giá trị vào eeprom trước.cũng khoản 210 byte . Và sau này chường trình chính chỉ việc sử dụng các giá trị trong các ô nhớ của eeprom để xử lý mà thôi ....
Mong các huynh giúp đỡ !!
Thanks for all !

Bạn nạp thông tin cho EEPROM cùng lúc với nạp chương trình cho PIC, tất nhiên là thông qua ICSP. Chương trình của bạn cũng có thể tự ghi vào EEPROM, nếu bạn viết chương trình để cung cấp các chức năng đó.

Thân,

ha_vy_cson 26-03-2008 08:27 PM

các bác ơi! cho em hỏi một tý...
em đang lập trình giao tiếp giữa pc và pic 16f877a, em muon truyen một chuổi từ máy tính bằng vb6 đến pic thi nên viết code trên VB như thế nào và viết hàm nhận trong ccs như thế nào........

LeDuc 26-03-2008 09:12 PM

Trích:

Nguyên văn bởi namqn (Post 15140)
Bạn nạp thông tin cho EEPROM cùng lúc với nạp chương trình cho PIC, tất nhiên là thông qua ICSP. Chương trình của bạn cũng có thể tự ghi vào EEPROM, nếu bạn viết chương trình để cung cấp các chức năng đó.

Thân,

Vấn đề là em muốn nap độc lập , mà kô ảnh hường đến chương trình chính có được ko anh ?
Vì một yêu cầu đặt ra là kô thay đổi chương trình chính mà chỉ việc thay đổi giá trị trong các ô nhớ của eeprom . Chương trình chính làm việc khác nhau ứng với các giá trị khác nhau trong vùng nhớ eeprom....
Mong các huynh giúp đỡ .
Thanks for all !

namqn 26-03-2008 10:19 PM

Trích:

Nguyên văn bởi LeDuc (Post 15183)
Vấn đề là em muốn nap độc lập , mà kô ảnh hường đến chương trình chính có được ko anh ?
Vì một yêu cầu đặt ra là kô thay đổi chương trình chính mà chỉ việc thay đổi giá trị trong các ô nhớ của eeprom . Chương trình chính làm việc khác nhau ứng với các giá trị khác nhau trong vùng nhớ eeprom....
Mong các huynh giúp đỡ .
Thanks for all !

Đây chỉ là vấn đề bạn sử dụng phần mềm nạp chương trình ra sao. Đa số các phần mềm đều cho phép bạn chọn lựa vùng nhớ được cập nhật. Lấy ví dụ WinPic800, bạn vào menu Setting, chọn Software, sau đó nhấn nút ICSP Mode. Bạn sẽ thấy phía dưới có những check box cho các vùng nhớ khác nhau. Nếu bạn uncheck tất cả các vùng nhớ, chỉ để lại Data, thì WinPic800 sẽ chỉ cập nhật Data EEPROM khi bạn ra lệnh nạp cho PIC.

Một số phần mềm thì có lệnh ghi vào từng vùng nhớ riêng, và 1 lệnh để ghi tất cả các vùng nhớ. Nói chung, bạn tìm hiểu kỹ phần mềm đang dùng để nạp chip thì sẽ làm được điều bạn muốn.

Thân,

LeDuc 27-03-2008 02:07 AM

Trích:

Nguyên văn bởi namqn (Post 15186)
Đây chỉ là vấn đề bạn sử dụng phần mềm nạp chương trình ra sao. Đa số các phần mềm đều cho phép bạn chọn lựa vùng nhớ được cập nhật. Lấy ví dụ WinPic800, bạn vào menu Setting, chọn Software, sau đó nhấn nút ICSP Mode. Bạn sẽ thấy phía dưới có những check box cho các vùng nhớ khác nhau. Nếu bạn uncheck tất cả các vùng nhớ, chỉ để lại Data, thì WinPic800 sẽ chỉ cập nhật Data EEPROM khi bạn ra lệnh nạp cho PIC.

Một số phần mềm thì có lệnh ghi vào từng vùng nhớ riêng, và 1 lệnh để ghi tất cả các vùng nhớ. Nói chung, bạn tìm hiểu kỹ phần mềm đang dùng để nạp chip thì sẽ làm được điều bạn muốn.

Thân,

Dạ , em hiểu rồi .
Em đã nạp được rồi .rất cảm ơn anh .
Nhưng em vẫn còn một vướng mắc ,hiện giờ mình chỉ nạp data vào riêng vùng eeprom .
Giả sử em muốn nạp giá tri 1-->255, tương ứng với ô nhớ từ 1-->255, vậy giá trị nạp này mình phải viết làm sao để có được file hex nạp riêng vào vùng nhớ eeprom đây?( chương trình chính là mình ko đụng đến rồi ...
Mong các anh chỉ giúp ..
Thanks for all !!

namqn 27-03-2008 02:44 AM

Trích:

Nguyên văn bởi LeDuc (Post 15189)
Dạ , em hiểu rồi .
Em đã nạp được rồi .rất cảm ơn anh .
Nhưng em vẫn còn một vướng mắc ,hiện giờ mình chỉ nạp data vào riêng vùng eeprom .
Giả sử em muốn nạp giá tri 1-->255, tương ứng với ô nhớ từ 1-->255, vậy giá trị nạp này mình phải viết làm sao để có được file hex nạp riêng vào vùng nhớ eeprom đây?( chương trình chính là mình ko đụng đến rồi ...
Mong các anh chỉ giúp ..
Thanks for all !!

Bạn đọc tài liệu hướng dẫn của CCS C, mục nói về #rom (trong phần Preprocessor Directives). Ở đó đã có ví dụ cách đặt các giá trị cho EEPROM.

Thân,

ha_vy_cson 30-03-2008 08:06 PM

các bác ơi! cho em hỏi một tý...
em đang lập trình giao tiếp giữa pc và pic 16f877a, em muon truyen một chuổi từ máy tính bằng vb6 đến pic thi nên viết code trên VB như thế nào và viết hàm nhận trong ccs như thế nào........

bean984 23-04-2008 05:42 PM

cho mình hỏi
port c của con 16f877a này có gì đặc biệt không vậy?
mình dùng 3 chân RC0,RC1,RC2 để nối đến 3 chân điều khiển LCD.nhưng tại sao khi mình không set_tris cổng này mà vẫn điều khiển được LCD.
mình hỏi một câu nữa nhé.
khi dùng các chân RC6,RC7 để truyền nhận thì không được set_tris cổng C? nếu vậy muốn dùng các chân khác với mục đích I/O thì làm ntn?
mình cảm ơn nhiều!!!

thaithienanh 23-04-2008 07:04 PM

Trích:

Nguyên văn bởi bean984 (Post 15729)
cho mình hỏi
port c của con 16f877a này có gì đặc biệt không vậy?
mình dùng 3 chân RC0,RC1,RC2 để nối đến 3 chân điều khiển LCD.nhưng tại sao khi mình không set_tris cổng này mà vẫn điều khiển được LCD.
mình hỏi một câu nữa nhé.
khi dùng các chân RC6,RC7 để truyền nhận thì không được set_tris cổng C? nếu vậy muốn dùng các chân khác với mục đích I/O thì làm ntn?
mình cảm ơn nhiều!!!

Port C của 16f877a tích hợp các modul truyền nhận dữ liệu theo các chuẩn khác nhau như I2C, SPI, .... chứ cũng chẳng có gì đặc biệt cả :o
- Bạn không set_tris nhưng vẫn điều khển được LCD là vì trình dịch CCS hỗ trợ, nó sẽ set_tris giùm bạn ở mỗi câu lệnh liên quan đến I/O => tốc độ xử lý và bộ nhớ giảm đi đáng kể do hành động set_tris lập đi lập lại nhiều lần dẫn đến dài dòng thừa thải :o code đơn giản thì không sao chứ nếu code đòi hỏi tốc độ và dung lượng bộ nhớ lớn thì mình khuyên nên dùng set_tris.
- Bạn dùng lệnh set_tris thì không giao tiếp đuợc với PC qua chuẩn 232, mình cũng chưa để ý cái này, nhưng mình nghĩ chắc chắn là đuợc chứ :o, bạn nên xem lại set i/o của bạn cho hai chân RC6 và RC7 đã đúng chưa :o, lưu ý lại với bạn ở đây chân RC6 là chân truyền (tranmister) tức ngõ ra và chân RC7 là chân nhận (Receiver) tức ngõ vào. Với lại trong câu lệnh set tris để set ngõ vào thì dùng bit (1), và ngõ ra tương ứng với bit (0).

Còn bạn gì ở trên kia muốn tìm hiểu giao tiếp với PC thì tìm lại trên diễn đàn nhé, có quá nhiều bài viết hướng dẫn và cả ví dụ mẫu về nó rồi đấy :o

Chúc các bạn thành công.
Thân.

bean984 24-04-2008 10:13 AM

Trích:

Nguyên văn bởi thaithienanh (Post 15731)
- Bạn không set_tris nhưng vẫn điều khển được LCD là vì trình dịch CCS hỗ trợ, nó sẽ set_tris giùm bạn ở mỗi câu lệnh liên quan đến I/O => tốc độ xử lý và bộ nhớ giảm đi đáng kể do hành động set_tris lập đi lập lại nhiều lần dẫn đến dài dòng thừa thải :o code đơn giản thì không sao chứ nếu code đòi hỏi tốc độ và dung lượng bộ nhớ lớn thì mình khuyên nên dùng set_tris.

nhưng mình đã thử lại I/O của port C bằng cách nháy led. Hoàn toàn không được nếu không set_tris. và với các port khác cũng vậy????


Múi giờ GMT. Hiện tại là 02:43 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam