PDA

View Full Version : xem giúp mình đoạn code này lỗi ở đâu


vuthien86
18-02-2009, 11:20 AM
#include <16F84A.h>
#include <def_84a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT
#use delay(clock=10000000)
int8 i; //khai bao bien chay vong lap i
int8 temp;
//khai bao cac chuong trinh con ()
void chuong_trinh_1();//nhap nhay cong B
void chuong_trinh_2();//led sang tu trai qua phai
void chuong_trinh_3();//led sang tu phai qua trai
void chuong_trinh_4();//nhap nhay xen ke
void chuong_trinh_5();//led tat chay tu ngoai vao trong,roi chay ra ngoai
void chuong_trinh_6();//
void chuong_trinh_7();
void chuong_trinh_8();


void main()
{
trisb=0x00;//cong b xuat du lieu


while(1)
{
chuong_trinh_1();delay_ms(250);
chuong_trinh_3();delay_ms(250);
chuong_trinh_4();delay_ms(250);
chuong_trinh_5();delay_ms(250);
chuong_trinh_6();delay_ms(250);
chuong_trinh_7();delay_ms(250);
chuong_trinh_8();delay_ms(250);
}
}

void chuong_trinh_1()
{
portb=0x00;
delay_ms(1000);
portb=0xFF;
delay_ms(1000);
}
void chuong_trinh_2()
{//led nhay sang tu trai qua phai ,tao tre 250ms)
temp=0xFF;
for(i=0;i<=8;i++)
{
portb=temp;
delay_ms(250);
temp>>=1;//
}
}
void chuong_trinh_3()
{//led sang dich tu phai sang trai
temp=0xFF;
for(i=0;i<=8;i++)
{
portb=temp;
delay_ms(250);
temp<<=1;
}
}
void chuong_trinh_4()
{
portb=0xAA;
delay_ms(500);
portb=0x55;
delay_ms(500);
}
void chuong_trinh_5()
{
portb=0x7E;delay_ms(150);
portb=0xBD;delay_ms(150);
portb=0xDB;delay_ms(150);
portb=0xE7;delay_ms(150);
portb=0xDB;delay_ms(150);
portb=0xBD;delay_ms(150);
portb=0x7E;delay_ms(150);
}
void chuong_trinh_6()
{
temp=0xFF;
for(i=0;i<=8;i++)
{
portb=temp;
delay_ms(250);
temp=temp>>1;
}
}
void chuong_trinh_7()
{
portb=0xFE;delay_ms(150);
portb=0xFD;delay_ms(150);
portb=0xFB;delay_ms(150);
portb=0xF7;delay_ms(150);
portb=0xEF;delay_ms(150);
portb=0xDF;delay_ms(150);
portb=0xBF;delay_ms(150);
portb=0x7F;delay_ms(150);
}
void chuong_trinh_8()
{
portb=0x7F;delay_ms(150);
portb=0xBF;delay_ms(150);
portb=0xDF;delay_ms(150);
portb=0xEF;delay_ms(150);
portb=0xF7;delay_ms(150);
portb=0xFB;delay_ms(150);
portb=0xFD;delay_ms(150);
portb=0xFE;delay_ms(150);
}

=======================
mình dùng pic 16f84a ,thạch anh ngoài 10Mhz để đièu khiển nháy 8 led cổng B0->b7
mình định nghĩa chương trình con và gọi nó sao ko được vậy .xin các anh em chỉ giúp mình ,kiến thức C còn hạn chế lắm

nguyennam8888
18-02-2009, 03:48 PM
mình nghĩ bạn nên viết main sau các chương trình con.
Chúc bạn thành Công

xuanhiendk2
18-02-2009, 04:20 PM
#include "C:\Program Files\PICC\Devices\h.h"
int8 i; //khai bao bien chay vong lap i
int8 temp;
//khai bao cac chuong trinh con ()
void chuong_trinh_1();//nhap nhay cong B
void chuong_trinh_2();//led sang tu trai qua phai
void chuong_trinh_3();//led sang tu phai qua trai
void chuong_trinh_4();//nhap nhay xen ke
void chuong_trinh_5();//led tat chay tu ngoai vao trong,roi chay ra ngoai
void chuong_trinh_6();//
void chuong_trinh_7();
void chuong_trinh_8();
#byte port_B=0x06


void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_B(0x00);//cong b xuat du lieu


while(1)
{
chuong_trinh_1(); delay_ms(250);
chuong_trinh_3();delay_ms(250);
chuong_trinh_4();delay_ms(250);
chuong_trinh_5();delay_ms(250);
chuong_trinh_6();delay_ms(250);
chuong_trinh_7();delay_ms(250);
chuong_trinh_8();delay_ms(250);
}

}

void chuong_trinh_1()
{
port_b=0x00;
delay_ms(50);
port_b=0xFF;
delay_ms(50);
}
void chuong_trinh_2()
{//led nhay sang tu trai qua phai ,tao tre 250ms)
temp=0xFF;
for(i=0;i<=8;i++)
{
port_b=temp;
delay_ms(50);
temp>>=1;//
}
}
void chuong_trinh_3()
{//led sang dich tu phai sang trai
temp=0xFF;
for(i=0;i<=8;i++)
{
port_b=temp;
delay_ms(50);
temp<<=1;
}
}
void chuong_trinh_4()
{
port_b=0xAA;
delay_ms(50);
port_b=0x55;
delay_ms(50);
}
void chuong_trinh_5()
{
port_b=0x7E;delay_ms(150);
port_b=0xBD;delay_ms(150);
port_b=0xDB;delay_ms(150);
port_b=0xE7;delay_ms(150);
port_b=0xDB;delay_ms(150);
port_b=0xBD;delay_ms(150);
port_b=0x7E;delay_ms(150);
}
void chuong_trinh_6()
{
temp=0xFF;
for(i=0;i<=8;i++)
{
port_b=temp;
delay_ms(250);
temp=temp>>1;
}
}
void chuong_trinh_7()
{
port_b=0xFE;delay_ms(50);
port_b=0xFD;delay_ms(50);
port_b=0xFB;delay_ms(50);
port_b=0xF7;delay_ms(50);
port_b=0xEF;delay_ms(50);
port_b=0xDF;delay_ms(50);
port_b=0xBF;delay_ms(50);
port_b=0x7F;delay_ms(50);
}
void chuong_trinh_8()
{
port_b=0x7F;delay_ms(50);
port_b=0xBF;delay_ms(50);
port_b=0xDF;delay_ms(50);
port_b=0xEF;delay_ms(50);
port_b=0xF7;delay_ms(50);
port_b=0xFB;delay_ms(50);
port_b=0xFD;delay_ms(50);
port_b=0xFE;delay_ms(50);
}

vmt.dttt
18-02-2009, 06:13 PM
====>> bạn dùng trình dịch CCS
Chắc là file thư viện của bạn chưa khai báo:
#byte portb=0x06 ///// Tra datasheet

và: dùng set_tris_b(0x00); //// Not use: "trisb"

Trong chương trình main:
khai báo while (true) //// not use: "while(1)"

picpen
18-02-2009, 07:57 PM
mình định nghĩa chương trình con và gọi nó sao ko được vậy .xin các anh em chỉ giúp mình ,kiến thức C còn hạn chế lắm

Bạn đã mắc một lỗi trong trương trình , khi bạn khai báo nguyên mẫu các chương trình con . Vì vậy khi bạn nhấn phím F9 để dịch thì chương trình sẽ báo lỗi


//khai bao cac chuong trinh con ()
void chuong_trinh_1();//nhap nhay cong B
void chuong_trinh_2();//led sang tu trai qua phai
void chuong_trinh_3();//led sang tu phai qua trai
void chuong_trinh_4();//nhap nhay xen ke
void chuong_trinh_5();//led tat chay tu ngoai vao trong,roi chay ra ngoai
void chuong_trinh_6();//
void chuong_trinh_7();
void chuong_trinh_8();


Bạn phải khai báo như sau mới đúng :


//khai bao cac chuong trinh con ()
void chuong_trinh_1(void);//nhap nhay cong B
void chuong_trinh_2(void);//led sang tu trai qua phai
void chuong_trinh_3(void);//led sang tu phai qua trai
void chuong_trinh_4(void);//nhap nhay xen ke
void chuong_trinh_5(void);//led tat chay tu ngoai vao trong,roi chay ra ngoai
void chuong_trinh_6(void);//
void chuong_trinh_7(void);
void chuong_trinh_8(void);

................... CHÚC BẠN THÀNH CÔNG ..................

xuanhiendk2
19-02-2009, 10:15 AM
Mình đã sửa cho bạn rồi và mình đã chạy thử thấy ok. Các ý kiến của vmt.dttt và picpen theo mình nghĩ ko đúng lắm.
while(1) vẫn được. void chuong_trinh_1(); vẫn được. Bạn có thể xem lại code mình đã gửi cho bạn. Chúc may mắn

vuthien86
19-02-2009, 07:37 PM
mình sủa dc rồi .cảm ơn các bạn nhiều

picpen
20-02-2009, 12:35 AM
Mình đã sửa cho bạn rồi và mình đã chạy thử thấy ok. Các ý kiến của vmt.dttt và picpen theo mình nghĩ ko đúng lắm.
while(1) vẫn được. void chuong_trinh_1(); vẫn được. Bạn có thể xem lại code mình đã gửi cho bạn. Chúc may mắn

Uh , cám ơn bạn đã nhắc nhở , đúng là mình đã nhầm thật . Chết thật , lâu không vào diễn đàn lên " kiếm pháp " bị mai một dần . Đúng là " văn ôn võ luyện "

xuanhiendk2
20-02-2009, 11:31 AM
Uh , cám ơn bạn đã nhắc nhở , đúng là mình đã nhầm thật . Chết thật , lâu không vào diễn đàn lên " kiếm pháp " bị mai một dần . Đúng là " văn ôn võ luyện "
Bạn picpen có câu châm ngôn nghe hay thế! Là man hay woman mà nghe....

picpen
20-02-2009, 12:13 PM
Bạn picpen có câu châm ngôn nghe hay thế! Là man hay woman mà nghe....

Bạn học lớp DK2 à ?? vậy thì mình cùng trường rồi nha . Bạn vừa ra trường , giờ làm ở đâu vậy ??

xuanhiendk2
20-02-2009, 12:38 PM
Okie thế chắc bạn biết mình rồi! Bạn tên gì và học lớp nào thế? Mình thì vẫn đang thất nghiệp đây! Hi hi! Xem có chỗ nào giới thiệu cho mình với!!!

vmt.dttt
06-03-2009, 12:48 PM
Mình đã sửa cho bạn rồi và mình đã chạy thử thấy ok. Các ý kiến của vmt.dttt và picpen theo mình nghĩ ko đúng lắm.
while(1) vẫn được. void chuong_trinh_1(); vẫn được. Bạn có thể xem lại code mình đã gửi cho bạn. Chúc may mắn


Ấy ấy... đừng vội kết luận như thế;
Một bài toán có nhiều cách giải quyết...
- while(1) // vẫn được <-- tớ có bảo ko được đâu

----------
Tớ xài TRUE trong TH trên là có lý do;
Ấy có biết không ????

PhamDucHung87
06-03-2009, 01:11 PM
anh Xuan Hien a.em dang muốn tim hiểu về PIC ứng dụng cụ thể là đo độ ẩm và báo cháy anh có tài liệu gì liên quan thì gửi cho em với.em cam ơn anh.hòm thư của em là Phạm Đức Hung220987@gmail.com

xuanhiendk2
06-03-2009, 01:36 PM
Ấy ấy... đừng vội kết luận như thế;
Một bài toán có nhiều cách giải quyết...
- while(1) // vẫn được <-- tớ có bảo ko được đâu

----------
Tớ xài TRUE trong TH trên là có lý do;
Ấy có biết không ????

Hì! Mình mới học Pic nên kiến thức còn hạn chế! Mình không biết bạn định dùng While(true) để làm gì cả. Mình thấy chương trình của bạn vuthien viết while(1) và cần sửa để nó chạy được thì mình chỉ có vài lời khuyên đó thôi. Nói chung khi sửa cho người khác thì nên giữ nguyên Code. He he!!!!