PDA

View Full Version : giúp em cái code này


conchocon
26-11-2009, 09:34 PM
Mình đang làm bài tập đếm số = con PIC 16f877A (dem 0-99)
mà nó chạy ko đúng mong các bạn giúp đỡ.
được viết =chương trình Pic C compler 4.08
#use delay(clock=20000000)
#fuses LP, XT, HS , WDT, NOWDT, PROTECT, NOPROTECT, PUT, NOPUT, BROWNOUT, NOBROWNOUT
int16 a=0;
int8 i, hang_chuc, donvi;
void dem()
{
a++;

}
void bcd()
{
donvi=a%10;
hang_chuc=a/10;
}
void display()
{
while(1)
{
output_b(donvi);
output_high(PIN_A0);///noi voi transitor
delay_ms(100);
output_low(PIN_A0);
delay_ms(100);
output_high(PIN_A1);
delay_ms(100);
output_b(hang_chuc);
delay_ms(100);
output_low(PIN_A1);
}
}

void main()
{
set_tris_b(0x00);
delay_ms(2000);
while(1)
{
dem();
bcd();
display();
}

}

conchocon
26-11-2009, 10:15 PM
mình muốn nó đếm từ 0-99 thôi . ban nào có code đã test share cho mình với. viết = ngôn ngữ C ấy. thanks

conchocon
26-11-2009, 10:25 PM
no ko chạy bạn ah .

dung h
26-11-2009, 11:31 PM
ct của bạn có những vấn đề sau:
khai báo #fuses LP, XT, HS
ban khai báo HS khi sử dụng thạch anh >= 4MHZ và XT với thạch anh <4MHz
và chỉ khai báo HS hoặc XT chứ o viết cả 2 như bạn vì bạn dùng thạch anh 20MHZ nên sẽ khai báo HS
- bạn không được dùng vòng lắp while(1) trong ct con khi đó nó sẽ không thoát ra được khỏi ct con
- ct của bạn sẽ thực hiện ct dem() ,bcd() và luôn thực hiện ct con dislay() vì có vòng lặp vô hạn trong dislay()
- khi bạn thực hiện đếm thì bạn nên sử dụng timer để định sau bao lâu thì đếm hoặc sử dụng timer ở chế độ counter đếm xung clock bền ngoài hoặc dùng ngắt
còn ở ct của cậu nếu bỏ while(1) ở dislay() thì nó sẽ chạy rấtnhanh cỡ khoảng vài trăm ms nên số đếm tăng lên rất nhanh bạn không thể kiểm soát được
-vấn đề thứ 3 đó là bạn xuất dữ liệu ra port A nhưng ban chưa định cho nó là đầu ra
set_tris_a(0x00);

conchocon
27-11-2009, 12:32 AM
mình đã suẳ code và mo phỏng bằng protues.
http://megashare.vn/download.php?uid=5502&id=128100&bn=eee.rar