![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
lỗi viết chương trình CCS
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)" Code:
#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); } } thay đổi nội dung bởi: falleaf, 24-12-2008 lúc 12:28 AM. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 6 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
: |
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.
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
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 đã
|
![]() |
![]() |
![]() |
#4 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
http://www.picvietnam.com/forum/show...rant#post14652
Bạn tham khảo thêm ở đây về re-entrant Nhớ dùng công cụ search trước khi hỏi! |
![]() |
![]() |
![]() |
#5 | |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
Trích:
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 |
|
![]() |
![]() |
![]() |
#6 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
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.
|
![]() |
![]() |
![]() |
#7 | |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
![]() Trích:
... E khai báo thêm "ap" + "dong" trong chương trình trên, nó chạy bình thường ạ.../ |
|
![]() |
![]() |
![]() |
#8 |
Đệ tử 5 túi
Tham gia ngày: Oct 2008
Bài gửi: 95
: |
bạn nói khai báo thêm "ap" va "dong".vậy còn U và I để làm gì
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
|
![]() |
![]() |
![]() |
#10 | |
Đệ tử 2 túi
|
Trích:
http://www.picvietnam.com/forum/show...ed=1#post23159 |
|
![]() |
![]() |
![]() |
#11 | |
Đệ tử 1 túi
Tham gia ngày: Jun 2009
Bài gửi: 20
: |
bác coi giup e doạn chương trình này cái.
Trích:
Code:
#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 } } thay đổi nội dung bởi: phamminhtuan, 04-08-2009 lúc 04:54 PM. Lý do: Định dạng code |
|
![]() |
![]() |
![]() |
#12 |
Đệ tử 2 túi
Tham gia ngày: Mar 2007
Bài gửi: 29
: |
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 |
![]() |
![]() |
![]() |
#13 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Bài gửi: 25
: |
![]() 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...
|
![]() |
![]() |
![]() |
|
|