View Full Version : cấu hình như thế nào để pic16f54 là cổng vào ra số
kiemkhach10
27-07-2010, 12:01 PM
nếu dong 16f87x thì chỉ cần tác động nên thanh ghi
OPTION=0x00;
TRISA=0x00;
TRISB=0x00;
TRISC=0x00;
TRISD=0x00;
là có thể sử dụng các cổng là đầu vào ra số.
thế còn pic16f54 thì khai báo như thế nào để sử dụng các cổng là đầu vào ra số các bạn nhỉ?
cám ơn!
kiemkhach10
27-07-2010, 01:51 PM
mình viết một đoạn chương trình nhỏ dùng pic16f54 để nháy led sao PIC ko chạy nhỉ?
#include <htc.h>
__CONFIG(HS & WDTDIS );
int main()
{
TRISA=0x00;
TRISB=0x00;
while(1)
{
PORTB=0b11110000;
}
return 0;
}
ai đã từng làm viết với con này góp ý cho mình chút
cám ơn!
namqn
27-07-2010, 02:05 PM
mình viết một đoạn chương trình nhỏ dùng pic16f54 để nháy led sao PIC ko chạy nhỉ?
#include <htc.h>
__CONFIG(HS & WDTDIS );
int main()
{
TRISA=0x00;
TRISB=0x00;
while(1)
{
PORTB=0b11110000;
}
return 0;
}
ai đã từng làm viết với con này góp ý cho mình chút
cám ơn!
Như thế nào là không chạy? Code của bạn có đổi trạng thái các chân ở PORTB đâu mà thấy nhấp nháy. Hơn nữa, để việc nhấp nháy là có thể thấy được đối với mắt người, bạn cần làm trễ giữa các lần đổi trạng thái của PORTB.
Thân,
kiemkhach10
27-07-2010, 03:10 PM
Như thế nào là không chạy? Code của bạn có đổi trạng thái các chân ở PORTB đâu mà thấy nhấp nháy. Hơn nữa, để việc nhấp nháy là có thể thấy được đối với mắt người, bạn cần làm trễ giữa các lần đổi trạng thái của PORTB.
Thân,
bác nam à? em viết sai chủ đề (pic16f54 chứ ko phải pic16f854)
ở đây ko chạy có nghĩa là ko có tín hiệu gì ở mạch cả.
em nối tất cả porb với led đơn anot chung và đầu kia nối đất.
nhẽ ra với chương trình như trên thì ít nhất phải có 4 led sáng và 4 led tối.
đằng này ko thấy hiện tượng gì cả.đo điện áp ở các chân PIC cũng ko thấy gì.
VẬY CÓ NGHĨA LÀ MÌNH ĐÃ CẤU HÌNH SAI CHO PIC.KHI MỚI SỬ DUNG CON 16F877A MÌNH CŨNG GẶP HIỆN TƯỢNG NHƯ VẬY DO CẤU HÌNH CÁC CỔNG VÀO RA KO ĐÚNG.
bác nào đã làm với con PIC16F54 ruì thì cho ý kiến với!
à cách sửa chủ đề ở đâu vậy bác nam,em muốn sửa lại cho đúng con pic16f54.
cám ơn!
namqn
31-07-2010, 08:58 PM
bác nam à? em viết sai chủ đề (pic16f54 chứ ko phải pic16f854)
ở đây ko chạy có nghĩa là ko có tín hiệu gì ở mạch cả.
em nối tất cả porb với led đơn anot chung và đầu kia nối đất.
nhẽ ra với chương trình như trên thì ít nhất phải có 4 led sáng và 4 led tối.
đằng này ko thấy hiện tượng gì cả.đo điện áp ở các chân PIC cũng ko thấy gì.
VẬY CÓ NGHĨA LÀ MÌNH ĐÃ CẤU HÌNH SAI CHO PIC.KHI MỚI SỬ DUNG CON 16F877A MÌNH CŨNG GẶP HIỆN TƯỢNG NHƯ VẬY DO CẤU HÌNH CÁC CỔNG VÀO RA KO ĐÚNG.
bác nào đã làm với con PIC16F54 ruì thì cho ý kiến với!
à cách sửa chủ đề ở đâu vậy bác nam,em muốn sửa lại cho đúng con pic16f54.
cám ơn!
PIC16F54 khá đơn giản để bạn gặp trục trặc khi viết code. Do đó, bạn nên xem lại mạch thử nghiệm. Tôi cũng có một nhận xét về code của bạn: về nguyên tắc thì chương trình chính của vi điều khiển là chương trình duy nhất sẽ chạy trong vi điều khiển, do đó main() sẽ không cần phải trả về giá trị gì. Tôi vẫn dùng void main(void) { ... } với HI-TECH C Compiler mà không gặp vấn đề gì, bạn thử chỉnh lại hàm main() của bạn xem.
Việc sửa chủ đề của luồng chỉ có mod hoặc cấp cao hơn mới thực hiện được. Tôi đã sửa chủ đề của luồng dựa vào thông tin mà bạn cung cấp ở trên.
Thân,
kiemkhach10
01-08-2010, 12:00 AM
PIC16F54 khá đơn giản để bạn gặp trục trặc khi viết code. Do đó, bạn nên xem lại mạch thử nghiệm. Tôi cũng có một nhận xét về code của bạn: về nguyên tắc thì chương trình chính của vi điều khiển là chương trình duy nhất sẽ chạy trong vi điều khiển, do đó main() sẽ không cần phải trả về giá trị gì. Tôi vẫn dùng void main(void) { ... } với HI-TECH C Compiler mà không gặp vấn đề gì, bạn thử chỉnh lại hàm main() của bạn xem.
Việc sửa chủ đề của luồng chỉ có mod hoặc cấp cao hơn mới thực hiện được. Tôi đã sửa chủ đề của luồng dựa vào thông tin mà bạn cung cấp ở trên.
Thân,
đúng như bác nampn nói mạch thí nghiệm của mình có vấn đề thật,sử lại 1 chút là chạy được rùi.
bác cho em hỏi? vậy dùng hàm
int main()
{
return 0;
}
là đúng hay là dùng hàm
void main(void)
{
}
mới là đúng.
hàm int main() mình làm theo và tham khảo trên diễn đàn http://forum.htsoft.com
ko biết có đúng ko nhỉ?
cám ơn!
namqn
01-08-2010, 12:31 AM
đúng như bác nampn nói mạch thí nghiệm của mình có vấn đề thật,sử lại 1 chút là chạy được rùi.
bác cho em hỏi? vậy dùng hàm
int main()
{
return 0;
}
là đúng hay là dùng hàm
void main(void)
{
}
mới là đúng.
hàm int main() mình làm theo và tham khảo trên diễn đàn http://forum.htsoft.com
ko biết có đúng ko nhỉ?
cám ơn!
Bạn tham khảo trên diễn đàn cũng tốt, nhưng đa số thành viên trên diễn đàn là người dùng, chứ không phải là nhân viên trong nhóm phát triển trình dịch của hãng.
Trong tài liệu hướng dẫn sử dụng của trình dịch và trong các chương trình ví dụ nằm trong thư mục con "samples" của thư mục cài đặt trình dịch đều dùng void main(void) { ... }. Chọn dùng kiểu nào là quyền của bạn. Tôi không cho rằng cách nào đúng hơn, mà chỉ muốn đưa ý kiến về cách viết gần với bản chất của hệ thống hơn.
Thân,
nbb3i
01-08-2010, 12:43 AM
Trong C chuẩn người ta vẫn dùng int main, hiện tại mấy chương trình dùng C30, C32 vẫn phải dùng int main. Nói chung cái đó cũng không ảnh hưởng nhiều lắm.
Còn về mạch của bạn không chạy thì bạn nên post sơ đồ nguyên lý lên đây. Mình nghĩ có thể bạn khai báo fuse chưa đúng, hoặc biết đâu nối ngược chân LED thì sao:D
phankieu32k0515
24-04-2015, 08:01 PM
nếu viết bằng ccs thì sao nhỉ: như thế này có được ko?
#include<16F54A.h>
#include<def_54a.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=20000000)
main()
{
TRISA=0x00;
TRISB=0x00;
while(1)
{
PORTB=0b11110000;
}
return 0;
}
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.