PDA

View Full Version : tại sao 16f57 khi viết mấy dòng lệnh nhỏ đã hết dung lượng nhỉ?


kiemkhach10
14-09-2010, 05:39 PM
#include <htc.h>//PIC16F57
__CONFIG(HS & WDTDIS );
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif
unsigned char i;
int main()
{
TRISA=0X00;
TRISB=0X00;
TRISC=0X00;
while(1)
{
RA0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA0=0;
RA1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA1=0;
RA2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA2=0;
RA3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA3=0;
RB0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB0=0;
RB1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB1=0;
RB2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB2=0;
RB3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB3=0;
RB4=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB4=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB4=0;

RB5=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB5=0;
RB6=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB6=0;
RB7=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB7=0;
RC0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC0=0;
RC1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC1=0;
RC2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC2=0;
RC3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC3=0;
RC4=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC4=0;
RC5=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC5=0;
RC6=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC6=0;
RC7=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC7=0;
}
}
khi dịch thì báo lỗi như thế này:
Error [1347] ; 0. can't find 0x2BC words (0x2bc withtotal) for psect "maintext" in segment "CODE" (largest unused contiguous range 0x200)

lạ thật đấy mới có cho nháy led các port mà đã hết bộ nhớ vậy làm sao mà làm được biển quảng nhấp nháy:(

liệu có con nào có Ram lớn hơn nhưng cùng chân cẳng thay thế con này ko các bác nhỉ?
cám ơn!

stargreen1001
14-09-2010, 09:28 PM
ko phải là hết bộ nhớ mà là do cách viết của bạn ( dài, cùng một kiểu trong một chuơng trình) mình cũng đã từng bị như thế, viết một loạt khoảng 20 câu lệnh if thì bị....bạn tách ra thành nhiều đoạn chuơng trình con thì sẽ hết

kiemkhach10
14-09-2010, 09:48 PM
ko phải là hết bộ nhớ mà là do cách viết của bạn ( dài, cùng một kiểu trong một chuơng trình) mình cũng đã từng bị như thế, viết một loạt khoảng 20 câu lệnh if thì bị....bạn tách ra thành nhiều đoạn chuơng trình con thì sẽ hết

tách ra như nào vậy?
đúng là mình đang viết 17 câu lệnh if else liền nhau, và nó cũng báo như trên?
bạn có thể chỉ rõ hơn cách tách ra để ko bị báo hết bộ nhớ như trên được ko?
cám ơn!

tdm
15-09-2010, 10:31 AM
tách ra như nào vậy?
đúng là mình đang viết 17 câu lệnh if else liền nhau, và nó cũng báo như trên?
bạn có thể chỉ rõ hơn cách tách ra để ko bị báo hết bộ nhớ như trên được ko?
cám ơn!
tách ra như sau:
#include <htc.h>//PIC16F57
__CONFIG(HS & WDTDIS );
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif
unsigned char i;
void kieu_1(void);
void kieu_2(void);
void kieu_3(void);
int main()
{
TRISA=0X00;
TRISB=0X00;
TRISC=0X00;
while(1)
{
kieu_1();
kieu_2();
kieu_3();
}
}
void kieu_1()
{
RA0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA0=0;
RA1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA1=0;
RA2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA2=0;
RA3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RA3=0;
RB0=1;
}
void kieu_2()
{
for(i=0;i<5;i++)
__delay_ms(20);
RB0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB0=0;
RB1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB1=0;
RB2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB2=0;
RB3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB3=0;
RB4=1;
}
void kieu_3()
{
for(i=0;i<5;i++)
__delay_ms(20);
RB4=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB4=0;

RB5=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB5=0;
RB6=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB6=0;
RB7=1;
for(i=0;i<5;i++)
__delay_ms(20);
RB7=0;
RC0=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC0=0;
RC1=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC1=0;
RC2=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC2=0;
RC3=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC3=0;
RC4=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC4=0;
RC5=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC5=0;
RC6=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC6=0;
RC7=1;
for(i=0;i<5;i++)
__delay_ms(20);
RC7=0;
}