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)
-   -   xem giúp mình đoạn code này lỗi ở đâu (http://www.picvietnam.com/forum/showthread.php?t=3552)

vuthien86 18-02-2009 11:20 AM

xem giúp mình đoạn code này lỗi ở đâu
 
#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

Trích:

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

Code:

//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

Trích:

Nguyên văn bởi xuanhiendk2 (Post 22734)
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

Trích:

Nguyên văn bởi picpen (Post 22770)
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

Trích:

Nguyên văn bởi xuanhiendk2 (Post 22791)
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

Trích:

Nguyên văn bởi xuanhiendk2 (Post 22734)
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

Trích:

Nguyên văn bởi vmt.dttt (Post 23285)
Ấ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!!!!


Múi giờ GMT. Hiện tại là 12:57 PM.

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