View Full Version : lỗi viết chương trình CCS
nms48
23-12-2008, 05:49 PM
mình viết chương trình này nhưng nó bảo lỗi như thế này: có ai biết sửa lỗi này kô.help me
"Interrupts disabled during call to prevent re-entrancy: (kich)"
#include <18f4520.h>
#DEVICE ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STOP=1)
int16 U=0,I=0;
// ngat ngoai
#int_EXT
void kich(int16 a=0) //a goc kich
{
set_timer0(a);
}
//ngat timer0
#int_timer0
void timer0_isr()
{
set_timer1(15534); //10ms thi tran
output_high(pin_D0);
delay_us(10);
output_low(pin_D0);
}
#int_timer1
void timer1_isr()
{
output_high(pin_D0);
delay_us(10);
output_low(pin_D0);
}
//doc ADC
void doc_ADC()
{
set_ADC_channel(0);
delay_us(10);
ap=read_ADC();
set_ADC_channel(1);
delay_us(10);
dong=read_ADC();
}
// chuong trinh chinh
void main()
{
setup_ADC(All_Analog);
setup_ADC(ADC_CLOCK_INTERNAL);
enable_interrupts(int_EXT);
EXT_int_edge(L_TO_H);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
enable_interrupts(int_timer0);
setup_timer_1(T1_INTERNAL|T1_DIV_by_1);
enable_interrupts(int_timer1);
enable_interrupts(global);
while(1)
{
doc_ADC();
kich(ap);
U=U*220/512;
I=I*200/1024;
printf("%lu %lu \n\r",U,I);
}
}
nguyenquoctoan
23-12-2008, 07:38 PM
lỗi này mình cũng thường gặp, nhưng ở dạng cảnh báo và chương trình vẫn chạy bình thường, do sắp xếp các chuơng trình con chưa hợp lý, đặc biệt là sử dụng ngắt, bạn hãy sắp xếp lại thử coi.
nms48
23-12-2008, 11:35 PM
em cũng thấy nó cảnh báo chứ kô phải là lỗi.nhung tại em sợ nó chạy kô đúng.hôm nay em mới làm cháy con pic18 nên chưa đi mua mới để nạp chaỵ thử.cam ơn anh nhiều,để ngày mai em mua pic thử lại đã
bien_van_khat
24-12-2008, 02:48 PM
http://www.picvietnam.com/forum/showthread.php?p=14652&highlight=reentrant#post14652
Bạn tham khảo thêm ở đây về re-entrant
Nhớ dùng công cụ search trước khi hỏi!
mình viết chương trình này nhưng nó bảo lỗi như thế này: có ai biết sửa lỗi này kô.help me
"Interrupts disabled during call to prevent re-entrancy: (kich)"
#include <18f4520.h>
#DEVICE ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STOP=1)
int16 U=0,I=0;
// ngat ngoai
#int_EXT
void kich(int16 a=0) //a goc kich
{
set_timer0(a);
}
//ngat timer0
#int_timer0
void timer0_isr()
{
set_timer1(15534); //10ms thi tran
output_high(pin_D0);
delay_us(10);
output_low(pin_D0);
}
#int_timer1
void timer1_isr()
{
output_high(pin_D0);
delay_us(10);
output_low(pin_D0);
}
//doc ADC
void doc_ADC()
{
set_ADC_channel(0);
delay_us(10);
ap=read_ADC();
set_ADC_channel(1);
delay_us(10);
dong=read_ADC();
}
// chuong trinh chinh
void main()
{
setup_ADC(All_Analog);
setup_ADC(ADC_CLOCK_INTERNAL);
enable_interrupts(int_EXT);
EXT_int_edge(L_TO_H);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
enable_interrupts(int_timer0);
setup_timer_1(T1_INTERNAL|T1_DIV_by_1);
enable_interrupts(int_timer1);
enable_interrupts(global);
while(1)
{
doc_ADC();
kich(ap);
U=U*220/512;
I=I*200/1024;
printf("%lu %lu \n\r",U,I);
}
}
trước khi thoát khỏi chương trình con ngắt bạn phải xoá cờ ngắt đi đã . Nếu không đảm bảo chương trình sẽ không trở về được chương trình chính khi ngắt xảy ra
bien_van_khat
25-12-2008, 09:16 AM
trước khi thoát khỏi chương trình con ngắt bạn phải xoá cờ ngắt đi đã . Nếu không đảm bảo chương trình sẽ không trở về được chương trình chính khi ngắt xảy ra
Công việc này là bắt buộc nếu bạn xài Assembler, HTPIC C, C18, C30, nhưng với CCS thì không cần thiết, và không nên. CCS tự sinh mã để xóa cờ ngắt tương ứng khi vào ngắt.
vmt.dttt
02-02-2009, 07:23 AM
trước khi thoát khỏi chương trình con ngắt bạn phải xoá cờ ngắt đi đã . Nếu không đảm bảo chương trình sẽ không trở về được chương trình chính khi ngắt xảy ra
Hjjj.. Anh Hoàng hay dùng MPLAP nên xài CCS vẫn chưa quen...
...
E khai báo thêm "ap" + "dong" trong chương trình trên, nó chạy bình thường ạ.../
dientudong
02-02-2009, 11:32 AM
bạn nói khai báo thêm "ap" va "dong".vậy còn U và I để làm gì
vmt.dttt
03-02-2009, 08:33 AM
bạn nói khai báo thêm "ap" va "dong".vậy còn U và I để làm gì
Hjj... cái quan trọng là người ta khai báo U, I những người ta có sử dụng các biến này đâu..
ap=read_ADC();
dong=read_ADC();
.....
bạn xem lại code của họ nhé
tranhuyky
11-03-2009, 09:49 PM
em dang lam thuc hanh ve ngat RB4:7 nhung khong biet cach xoa co ngat
bac nao biet chi dum em voi .vi chuong trinh viet ra no khong thoat ra khoi ngat
Bạn thử xem link này có giúp ích được gì không nhe.
http://www.picvietnam.com/forum/showthread.php?p=23159&posted=1#post23159
sonduy1
04-08-2009, 04:06 PM
lỗi này mình cũng thường gặp, nhưng ở dạng cảnh báo và chương trình vẫn chạy bình thường, do sắp xếp các chuơng trình con chưa hợp lý, đặc biệt là sử dụng ngắt, bạn hãy sắp xếp lại thử coi.
#INT_TIMER0
void ngat_timer0()
{ int dem;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(15536); //mac dinh gia tri ban dau cho TMR0
dem=0;
dem++;
if(dem==20) //20*50000=1s
{ dem=0;
sec++;
}
if(sec==60)
{ sec=0;
min++;
}
if(min==60)
{ min=0;
h++;
}
if(h==24)
{ h=0;
}
enable_interrupts(int_timer0);
enable_interrupts(global);
}
//quet led
//khao bao TMR1
#INT_TIMER1
void ngat_timer1()
{ int time=0,count=0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(24280);
time==0;
count==0;
time++; // timer 1 tràn sau ==> 500 000 us = 0.5s
if(time==2) // 2* 500 000 =1s
{
count++;
if(count==1)
{ portb=bang_ma[n1];
output_low(pin_d0);
}
if(count==2)
{ portb=bang_ma[n2];
output_low(pin_d1);
}
if(count==3)
{ portb=bang_ma[n3];
output_low(pin_d3);
}
if(count==4)
{ portb=bang_ma[n4];
output_low(pin_d4);
}
count=0;
}
enable_interrupts(int_timer1);
enable_interrupts(global);
}
void main(void)
{ trisb=0x00;
portb=0xff;
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
n1=n2=1;
n3=4;
n4=5;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(15536); //mac dinh gia tri ban dau cho TMR0
/////////////////////////////////////
////////////////////////////////////
while(1)
{
n1=h/10;
n2=h%10;
n3=min/10;
n4=min%10;
.......//ko biet làm sao để hiển thị led 7 doạn và clock
}
}
ngoducbinh1987
24-08-2009, 11:57 PM
tui xem qua thi co nhan xet
o phan ngat timer0 ban chua xoa bit tran cua timer0 0xb2
khong can setup_timer0 lai, chi fai dat lai gia tri thoi gian thui
con hien led 7doan thi ban dung ma tran hang cung duoc,cho nhanh
thienlong
25-08-2009, 11:32 AM
em dang dinh lam mach thu phat hong ngoai de dk dong co. Bac nao co kinh nghiem ve cai nay hoac co tai lieu thi gui cho em xin...
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.