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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 22-09-2015, 09:11 AM   #11
teemo
Nhập môn đệ tử
 
Tham gia ngày: Nov 2014
Bài gửi: 9
:
Unhappy

Trích:
Nguyên văn bởi tungbka View Post
Em đang viết chương trình nhận dữ liệu từ máy tính xuống để điều khiển cái động cơ. Nhưng sau khi biên dịch thì xuất hiện cảnh báo sau:
Interrupts disabled during call to prevent re-entrancy: (@MUL1616).
Em có tham khảo các nguồn thì được biết là do trong hàm ngắt và ngoài hàm ngắt em sử dụng lặp lại 1 hàm hay 1 biến gì đó, nhưng em tìm mãi không thấy sai chỗ nào. Mong các pro chỉ giúp. Em cám ơn nhìu.
Chương trình của em như sau:
(Sorry vì em không biết đưa code vào trong ô code ^^!)

Code:
#include <16f877a.h>
#include <def_877a.h>
#include <stdlib.h>
#fuses  NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT 
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) 
#include <lcd_lib_4bit.c>
/*#define enter RA2
#define s_t   RA3
#define f_r   RA5
#define up    RE0
#define down  RE1
*/
void ht(int16 a);
//void ht1(int16 a);
void init();
void pid();
void nhapheso();
//void up_down();
int16 count, tocdo, C, temp, temp1, k, tocdodat ;
signed int16 e2=0;
signed int16 e1=0;
int16 e_sum;
int16 e_del;
int16 duty;
float Kp=0;
float Ki=0;
float Kd=0;
int flag=0;
float u, T=0.01;

unsigned char text[30], text2[5] ;
unsigned char a1[5], dem=0, i=0, j=0,i1;

#INT_RDA
void Receive_isr() 
{
text[dem]=getc();
if(text[dem]=='@') //kiem tra dieu kien ket thuc
   {
   flag =1;    //ket thuc nhan, bat co bao
   dem=0;
   }
else dem++;
}
#INT_EXT
void ngatR0()  {
        count++;//set_timer0(0);
      }
#int_timer1
void Timer11_isr() {                // Ham duoc goi khi TImer1 tran (65535->0)
                                   // Chu ky trich mau 0.01
    
      set_timer1(53036);
      tocdo= 30*(count + get_timer0());
     // printf("%ld\t",tocdo);
      count = 0;
      set_timer0(0);

   
    }
void main(){
init();
lcd_putcmd(0x01);
while(true){
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
      pid();
if(RC1==0) set_PWM1_duty(duty);
if(RC1==1) set_PWM1_duty(1023 - duty);  
lcd_putcmd(0x80);
ht(tocdo);
printf("n%4Lu",tocdo);


//lcd_putchar("hi");


}
}
void init()
{
   lcd_init();
   nhapheso();
   disable_interrupts(int_rda);
   disable_interrupts(global);
   setup_timer_0 (RTCC_DIV_1|RTCC_EXT_L_TO_H);  // Timer0 is Counter
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_4, 255, 1);//4*4*256*1/20000000=204.8us=4.8khz
   set_timer0(0);
   set_timer1(53036);
   enable_interrupts(INT_RTCC);
   enable_interrupts(int_timer1);
   enable_interrupts(int_ext);
   ext_int_edge(L_TO_H);
   enable_interrupts(GLOBAL);
   lcd_putcmd(0x80);
   count=0;
   trisc=0;
   trisd=0;
   trisa=255;
   trisb=1;
   RC1=0;
   if(C==1) RC1=1;
   If(C==0) RC1=0;
   }
void pid(){
   e2 = tocdodat - tocdo;
   e_sum += e2;
//   e_del = e2 - e1;
//   e1 = e2;
   u = u + Kp*e2 + Ki*e_sum*T;
   if (u>24){
   u=24;
   e_sum -=e2;
   }
   if (u<0){
   u = 0;
   e_sum -=e2;
   }
  duty = u*1023/24;
}
void ht(long a) {
     int nghin,tram,chuc,dvi;
     nghin=a/1000;
     tram=(a%1000)/100;
     chuc=(a%100)/10;
     dvi=(a%10);
     lcd_putchar(nghin+48);
     lcd_putchar(tram+48);
     lcd_putchar(chuc+48);
     lcd_putchar(dvi+48);
}
void nhapheso(){
   lcd_putchar("nhap tu PC");
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);
while(!flag) ;
if(flag){

              //if ((strchr(text,'T')) && (strrchr(text, '@')))
         
                text2[0] = text[0];
                text2[1] = text[1];
                text2[2] = text[2];
                text2[3] = text[3];
                text2[4] = text[4];
                tocdodat = atol(text2);
               
                //----------------------------------------
                  while (text[i] != 'P')
                    i++;
                  while (text[j] != 'I')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Kp = atof(a1);
                 
                  printf("P%f",Kp);
                   delay_ms(100);   
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != 'D')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Ki = atof(a1);
                  printf("I%f",Ki);
                     delay_ms(100);
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != 'C')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  Kd = atof(a1);
                  printf("D%f",Kd);
                     delay_ms(100);
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                  i = j;
                  while (text[j] != '@')
                    j++;
                  i1 = i;
                  temp = j - i;                  
                  for (i = 0; i < temp; i++)
                    a1[i] = text[i1 + i + 1];
                    
                  C = atol(a1);
                  printf("C%Lu",C);
                  flag=0;
                  i=0; j=0;
                  dem=0;
 
                  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
                                                
          } 

}
Không ai trả lời vấn đề này sao???
teemo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 05:05 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