View Full Version : Cần giúp lỗi delay với ccs!
CarrotMonster
05-01-2013, 11:34 AM
Mình đang lập trình chạy 6 led nối với RC0 - RC5! Dùng thạch anh 20mhz, chương trình như sau:
#INCLUDE <16F887.H>
#INCLUDE <STDIO.H>
#FUSES NOWDT,HS,PUT,NOLVP
#USE DELAY(CLOCK=20000000)
INT T;
VOID MAIN()
{
SET_TRIS_C(0X00);
T=1000;
WHILE(1)
{
OUTPUT_C(0B00000011);
DELAY_MS(T);
OUTPUT_C(0B00000110);
DELAY_MS(T);
OUTPUT_C(0B00001100);
DELAY_MS(T);
OUTPUT_C(0B00011000);
DELAY_MS(T);
OUTPUT_C(0B00110000);
DELAY_MS(T);
OUTPUT_C(0B00100001);
DELAY_MS(T);
}
}
Nhưng đến khi chạy thì nó ko delay 1 giây mà nhanh hơn, giống như là 300ms!
Đến khi thay DELAY_MS(T); bằng DELAY_MS(1000); thì lại chạy đúng?! Pro nào xin chỉ giáo! Thanks!
pstin
05-01-2013, 12:31 PM
Mình đang lập trình chạy 6 led nối với RC0 - RC5! Dùng thạch anh 20mhz, chương trình như sau:
#INCLUDE <16F887.H>
#INCLUDE <STDIO.H>
#FUSES NOWDT,HS,PUT,NOLVP
#USE DELAY(CLOCK=20000000)
INT T;
VOID MAIN()
{
SET_TRIS_C(0X00);
T=1000;
WHILE(1)
{
OUTPUT_C(0B00000011);
DELAY_MS(T);
OUTPUT_C(0B00000110);
DELAY_MS(T);
OUTPUT_C(0B00001100);
DELAY_MS(T);
OUTPUT_C(0B00011000);
DELAY_MS(T);
OUTPUT_C(0B00110000);
DELAY_MS(T);
OUTPUT_C(0B00100001);
DELAY_MS(T);
}
}
Nhưng đến khi chạy thì nó ko delay 1 giây mà nhanh hơn, giống như là 300ms!
Đến khi thay DELAY_MS(T); bằng DELAY_MS(1000); thì lại chạy đúng?! Pro nào xin chỉ giáo! Thanks!
Hàm delay_ms (time )
Time = 0-255 nếu là biến số hay = 0-65535 nếu là hằng số.
==> Phải trui luyện lại CCS cơ bản!!.
Bạn muốn lên 1000, thì đổi thành T=100 và lặp 10 lần!!!.
for(i=1;i<=10;i++)
{delay_ms(T);}
CarrotMonster
05-01-2013, 11:01 PM
Hàm delay_ms (time )
Time = 0-255 nếu là biến số hay = 0-65535 nếu là hằng số.
==> Phải trui luyện lại CCS cơ bản!!.
Bạn muốn lên 1000, thì đổi thành T=100 và lặp 10 lần!!!.
for(i=1;i<=10;i++)
{delay_ms(T);}
Mình tìm ra vấn đề rồi! không cần lặp 10 lần, Mình thay khai báo INT T; thành INT16 T; chạy ngon ơ! :)
pthien0288
08-01-2013, 12:07 PM
nếu muốn delay 1s sao không viết thẳng là delay_ms(1000).Nếu không ra đúng 1s thì bạn nên xem lại thạch anh của bạn vì mình đã bị vấn đề này rồi , còn không thích thì ta có thể dùng timer 0 cũng được.
pstin
08-01-2013, 05:19 PM
nếu muốn delay 1s sao không viết thẳng là delay_ms(1000).Nếu không ra đúng 1s thì bạn nên xem lại thạch anh của bạn vì mình đã bị vấn đề này rồi , còn không thích thì ta có thể dùng timer 0 cũng được.
Đúng là cái vụ delay 16 bit này cũng chạy được!...
Viết delay_ms() theo biến số nó cũng có ý nghĩa riêng của nó!,...một ví dụ đơn giản như bạn chỉnh "thời gian báo động" bằng cách chỉnh biến trở bên ngoài!,...đọc giá trị ADC của biến trở và delay theo đó!...
Chỉnh thời gian delay theo nút nhấn thì nhiều khi rắc rối và không cần thiết vì nó cần phải có màn hình hiển thị mới được!!!..
CarrotMonster
09-01-2013, 02:07 PM
Đúng là cái vụ delay 16 bit này cũng chạy được!...
Viết delay_ms() theo biến số nó cũng có ý nghĩa riêng của nó!,...một ví dụ đơn giản như bạn chỉnh "thời gian báo động" bằng cách chỉnh biến trở bên ngoài!,...đọc giá trị ADC của biến trở và delay theo đó!...
Chỉnh thời gian delay theo nút nhấn thì nhiều khi rắc rối và không cần thiết vì nó cần phải có màn hình hiển thị mới được!!!..
Chính xác nè! Hàm delay mình làm delay theo biến số, ví dụ như xuất xung điều chỉnh tốc độ cho động cơ bước dùng delay nè (lười dùng timer), mình dùng int nó cho có 255, gán 1000 nên bị tràn nên chạy có 255 ms thôi! Chuyển qua int16 cho ko bị tràn!
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.