Connect with us

PIC Coding !!!

Discussion in 'Microcontrollers, Programming and IoT' started by Frank3point14, Sep 15, 2013.

  1. Frank3point14

    Frank3point14

    10
    0
    Sep 6, 2013
    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
     
  2. p.erasmus

    p.erasmus

    60
    0
    Jul 18, 2013
    I do not see in your code that you set the INTx pins as inputs ?
    could be the problem
     
  3. Frank3point14

    Frank3point14

    10
    0
    Sep 6, 2013
    Thanks...
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-