PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-09-2010, 05:39 PM   #1
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
tại sao 16f57 khi viết mấy dòng lệnh nhỏ đã hết dung lượng nhỉ?

#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!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-09-2010, 09:28 PM   #2
stargreen1001
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 9
:
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
stargreen1001 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-09-2010, 09:48 PM   #3
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi stargreen1001 View Post
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!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-09-2010, 10:31 AM   #4
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi kiemkhach10 View Post
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;
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:37 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam