Maker Pro
Maker Pro

PIC Coding !!!

Frank3point14

Sep 6, 2013
10
Joined
Sep 6, 2013
Messages
10
Hello
Check out this code and tell me what i am doing wrong>..
Code:
//******************************************************************************
//LCD connections
sbit LCD_RS at RD5_bit;
sbit LCD_EN at RD4_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB0_bit;
sbit LCD_D4 at RD6_bit;
 
sbit LCD_RS_Direction at TRISD5_bit;
sbit LCD_EN_Direction at TRISD4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB0_bit;
sbit LCD_D4_Direction at TRISD6_bit;
//******************************************************************************
//functions
void timer1_init();             // initialize TIMER1
void inbuiltF_init();           // initialize inbuilt functions
void interrupts_init();         // initialize interrupts
void interrupt();
void display_lcd();
//******************************************************************************
// global variables
int calpid = 0;                 // pid loop run command
int ledon  = 0;
int x      = 0;
   
//******************************************************************************
void interrupt(){            
     if(PIR1.TMR1IF==1){                            
          calpid = 1;           // run PID loop
          TMR1L         = 181;  //// preload timer1
          TMR1H         = 179;  ////                          
          PIR1.TMR1IF = 0;                                            
     }  
     if(INTCON.INT0IF==1){
          ledon = 1;                
          INTCON.INT0IF = 0;
     }
     if(INTCON3.INT1IF==1){
          ledon = 1;                                
          INTCON3.INT1IF==0;
     }    
     if(INTCON3.INT2IF==1){      
          ledon = 1;                                          
          INTCON3.INT2IF==0;
     }              
}
//******************************************************************************
void main(){
 
     TRISC.F7 = 0;
     PORTC.F7 = 0;
     inbuiltF_init();  
     interrupts_init();      
     timer1_init();            
//******************************************************************************
     while(1) {
          while(ledon==1){
               Lcd_Out(1,1,"led on");
               Delay_ms(100);
               Lcd_Out(1,1,"      ");
               ledon = 0;
          }          
          while(calpid==1){
               x = x + 1;
               if(x<128){            
                    PORTC.F7 = 1;                  
               }
               else if(x<512){
                    PORTC.F7 = 0;
               }
               else if(x==512){
                    x = 0;
               }              
               calpid = 0;                            
          }
     }
}
//******************************************************************************
void timer1_init(){                // initialized to give 256Hz interrupt for PID loop execution
     TMR1L         = 181;          // preload timer1
     TMR1H         = 179;
     
     T1CON.RD16    = 1;          // enable register read/write of TIMER1 in two 16-bit operations[7](1)
     T1CON.T1RUN   = 0;          // system clock is derived from another source                  [6](0)
     T1CON.T1CKPS1 = 0;          // ##increments with 1:2 prescale value                         [5](0)
     T1CON.T1CKPS0 = 1;          // ##                                                           [4](1)
     T1CON.T1OSCEN = 0;          // TIMER1 oscillator is shut-off                                [3](0)
     T1CON.TMR1CS  = 0;          // TIMER1 uses internal clock (FOSC/4)                          [1](0)
     T1CON.TMR1ON  = 1;          // enable TIMER1                                                [0](1)
}
//******************************************************************************
void inbuiltF_init(){
     Lcd_Init();
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Cmd(_LCD_CURSOR_OFF);
}
//******************************************************************************
void interrupts_init(){
     RCON.IPEN   = 0;           // disable priority levels on interrupts         (0)
     
     INTCON.GIE  = 1;           // global interrupts enabled                     (1)
     INTCON.PEIE = 1;           // enable all unmasked peripheral interrupts     (1)
     
     PIE1.TMR1IE = 1;           // TIMER1 overflow interrupt enabled             (1)
     IPR1.TMR1IP = 0;           // TIMER1 overflow interrupt set to low priority (0)
     PIR1.TMR1IF = 0;           // clear TIMER1 overflow interrupt flag          (0)    
     
     
     INTCON.INT0IE   = 1;       // RC3 external interrupt enable                 (1)
     INTCON2.INTEDG0 = 1;       // external interrupt0 RC3 on rising edge        (1)
     INTCON.INT0IF   = 0;       // clear RC3 INT0 interrupt flag    
     
     INTCON3.INT1IP  = 0;       // INT1 external interrupt priority - low        (0)
     INTCON2.INTEDG1 = 1;       // external interrupt1 RC4 on rising edge
     INTCON3.INT1IF  = 0;       // clear RC4 INT1 interrupt flag
     INTCON3.INT1IE  = 1;       // RC4 external interrupt enable      
     
     INTCON3.INT2IP  = 0;       // INT2 external interrupt priority - low         (0)
     INTCON2.INTEDG2 = 1;       // external interrupt2 RC5 on rising edge
     INTCON3.INT2IF  = 0;       // clear RC5 INT2 interrupt flag
     INTCON3.INT2IE  = 1;       // RC5 external interrupt enable                              
}

I am using PIC18F4331
I am trying to configure the external interrupts int1 and int2
 

p.erasmus

Jul 18, 2013
60
Joined
Jul 18, 2013
Messages
60
I do not see in your code that you set the INTx pins as inputs ?
could be the problem
 
Top