PIC16F877A Code ERROR

Discussion in 'Embedded Systems and Microcontrollers' started by nalakan2, Dec 18, 2013.

  1. nalakan2

    Thread Starter New Member

    Nov 20, 2013
    4
    0
    Dear friends, I had made a program to control lab reaction hood function using PIC. In the code there is a timer part and keypad to control a blower,tube light,UV lamp,power socket and door. code is working perfectly until I add error handling statements. If I add one line to the code it reset the program when I simulate the program in Proteus. please help to get rid of this problem.

    Here is the code in mikroC:
    When this code is simulated in Proteus it restart to beginning if I added the last part of the code..


    Code ( (Unknown Language)):
    1.  
    2. // LCD module connections
    3. sbit LCD_RS at RB2_bit;
    4. sbit LCD_EN at RB3_bit;
    5. sbit LCD_D4 at RB4_bit;
    6. sbit LCD_D5 at RB5_bit;
    7. sbit LCD_D6 at RB6_bit;
    8. sbit LCD_D7 at RB7_bit;
    9. sbit LCD_RS_Direction at TRISB2_bit;
    10. sbit LCD_EN_Direction at TRISB3_bit;
    11. sbit LCD_D4_Direction at TRISB4_bit;
    12. sbit LCD_D5_Direction at TRISB5_bit;
    13. sbit LCD_D6_Direction at TRISB6_bit;
    14. sbit LCD_D7_Direction at TRISB7_bit;
    15. // End LCD module connections
    16.  
    17. // Variable declaration
    18. bit Unit_Button,Start_Button,Stop_Button,System_Start,fanSW,lightSW,socketSW,uvSW;
    19.  
    20. unsigned short i, j, unit=0, ten=0, time,System_Ready = 0, keypad = 0;
    21. // End variable declaration
    22.  
    23. // Messages
    24. char Message1[]="Timer by NALAKA";
    25. char Message2[]="SYSTEM READY IN";
    26. char Message3[]="SYSTEM READY";
    27. char Message4[]="Set Time:    min";
    28. char Message5[]="nalakan2@gmail.com";
    29. char Message6[]="iGnat Troniks";
    30. char Message7[]="Please set time";
    31. char Message8[]="& press START";
    32. char *digit = "00";
    33. // End messages
    34.  
    35. // Display digits function
    36. void Display_Digits()
    37. {
    38.  digit[1] = unit + 48;
    39.  Lcd_Out(2,11,digit);
    40. }
    41.  
    42. // Beep tone
    43. void Beep()
    44. {
    45.  Sound_Play(500, 50);
    46.  Delay_ms(100);
    47.  Sound_Play(500, 50);
    48. }
    49.  
    50. // Timer function
    51. void start_timer(unsigned short MinVal)
    52. {
    53.  unsigned short temp1,temp2,temp3,temp4;
    54.  //Transsision();
    55.  Beep();
    56.  RC0_bit = 1;
    57.  Lcd_Cmd(_LCD_CLEAR);                        // Clear LCD
    58.  Lcd_Out(1,1,Message2);                      // Show msg1 on LCD
    59.  OPTION_REG = 0x80;                          // Enable PORTB Pull Up
    60.  INTCON = 0x90;                              // Enable Globle Interrupt(GIE) & RB0/INT External Interrupt
    61.  
    62.  for (i=0; i<MinVal; i++)
    63.  {
    64.       temp1 = (MinVal-i)%10 ;
    65.       temp2 = (MinVal-i)/10 ;
    66.       Lcd_Chr(2, 7, temp2+48);
    67.       Lcd_Chr(2, 8, (temp1-1)+48);
    68.       j=60;
    69.  
    70.       do
    71.          {
    72.            if (j>=10)
    73.               {
    74.                temp3 = (j%10);
    75.               }
    76.            else
    77.                {
    78.                 temp3 = j;
    79.                }
    80.            if (j>=10)
    81.               {
    82.                 temp4 = (j/10);
    83.               }
    84.            else
    85.               {
    86.                temp4 = 0;
    87.               }
    88.            j--;
    89.            Lcd_Chr(2,9,':');
    90.            Lcd_Chr(2,10,temp4+48);
    91.            Lcd_Chr(2,11,temp3+48);
    92.            Delay_ms(1000);
    93.  
    94.          } while(j<=60 && Stop_Button ==0);
    95.  
    96.   if (i==MinVal)
    97.      {
    98.       goto stop;
    99.      }
    100.  
    101.   if (Stop_Button == 1)
    102.      {
    103.       INTCON = 0x00;
    104.       goto stop;
    105.      }
    106.  
    107.  }
    108.  
    109.  stop:
    110.  
    111.       Beep();
    112.       Lcd_Cmd(_LCD_CLEAR);
    113.       Lcd_out(1,3,Message3);
    114.       RC0_bit = 1;
    115.       RC1_bit = 1;
    116.       unit = 0;
    117.       ten = 0;
    118.       Stop_Button = 0;
    119.       System_Ready = 1;
    120.  
    121.  
    122. }
    123.  
    124. //Interrupt
    125. void interrupt(void)
    126.  {
    127.       if (INTCON.INTF == 1)
    128.          {
    129.           Stop_Button = 1;
    130.           INTCON.INTF = 0;
    131.          }
    132.  }
    133.  
    134. //Error beep
    135. void Error()
    136. {
    137.  Sound_Play(500, 100);
    138.  RC5_bit = 1;                              
    139.  Delay_ms(500);                          
    140.  RC5_bit = 0;
    141. }
    142.  
    143. //Main function
    144. void main()
    145. {
    146.  
    147.   TRISB = 0x03;
    148.   TRISC = 0x00;
    149.   TRISD = 0xFF;
    150.   PORTB = 0x00;
    151.   PORTC = 0x00;
    152.   PORTD = 0x00;
    153.   Start_Button = 0;
    154.   System_Start = 1;
    155.   fanSW = 0;
    156.   lightSW = 0;
    157.   uvSW = 0;
    158.   socketSW = 0;
    159.   Lcd_Init();
    160.   Sound_Init(&PORTC,6);
    161.  
    162.   Startup_Display();
    163.   Lcd_Cmd(_LCD_CLEAR);
    164.   Lcd_Cmd(_LCD_CURSOR_OFF);
    165.   Lcd_Out(1,1,Message1);
    166.   Lcd_Out(2,1,Message4);
    167.   Display_Digits();
    168.  
    169. // Timer control buttons
    170. do
    171.  {
    172.      if (Button(&PORTB,1,1,1))
    173.          Unit_Button = 1;
    174.      if (Unit_Button && Button(&PORTB,1,1,0))
    175.         {
    176.           unit ++;
    177.           if(unit==10)
    178.           unit=0;
    179.           Display_Digits();
    180.           Unit_Button = 0;
    181.          }
    182.  
    183.       if (Button(&PORTB,0,1,1))
    184.          Start_Button = 1;
    185.       if (Start_Button && Button(&PORTB,0,1,0))
    186.          {
    187.           time = unit;
    188.           if(time > 0)
    189.           {
    190.            start_timer(time);
    191.            Start_Button = 0;
    192.           }
    193.           goto aaa;
    194.          }
    195.  
    196.  
    197.  } while(System_Start == 1);
    198.  
    199.  
    200.    aaa:
    201.        System_Start = 0;
    202.  
    203.  
    204. // Key pad
    205.    if (System_Ready == 1)
    206.    {
    207.        do
    208.        {
    209.  
    210.         if (RC3_bit == 0)                                // When UV off;
    211.            {
    212.               if (Button(&PORTD,0,1,1))            
    213.                  fanSW = 1;                              
    214.               if (fanSW && Button(&PORTD,0,1,0))   // Turn on fan
    215.                  {                                
    216.                   RC0_bit = ~RC0_bit;              
    217.                   fanSW = 0;                      
    218.                  }
    219.  
    220.          //------------------------------------------------
    221.               if (Button(&PORTD,1,1,1))            //
    222.                  lightSW = 1;                      //
    223.               if (lightSW && Button(&PORTD,1,1,0)) // Turn on lights
    224.                  {                                 //
    225.                   RC1_bit = ~RC1_bit;              //
    226.                   lightSW = 0;                     //
    227.                  }
    228.             }
    229.  
    230.          //------------------------------------------------
    231.            
    232.               if (RC0_bit == 0 && RC1_bit == 0)                // When fan AND lights off;
    233.               if (RD4_bit == 1)                                // if slash closed;
    234.                  {
    235.                   if (Button(&PORTD,3,1,1))            //
    236.                      uvSW = 1;                         //
    237.                   if (uvSW && Button(&PORTD,3,1,0))    // Turn on UV
    238.                      {                                 //
    239.                       RC3_bit = ~RC3_bit;              //
    240.                       uvSW = 0;                        //
    241.                      }
    242.                   }
    243.  
    244.  //------------------------------------------------
    245.               if (Button(&PORTD,2,1,1))                        //
    246.                  socketSW = 1;                                 //
    247.               if (socketSW && Button(&PORTD,2,1,0))            // Turn on internal power socket
    248.                  {                                             //
    249.                   RC2_bit = ~RC2_bit;                          //
    250.                   socketSW = 0;                                //
    251.                  }
    252.  //------------------------------------------------
    253.               if (RD4_bit == 1)                                // if slash is closed
    254.                  {
    255.                   RC4_bit = 1;                                 // Turn on slash indicator
    256.                  }
    257.               else                                             // if slash is open
    258.                   {
    259.                    RC4_bit = 0;                                // Turn off slash indicator
    260.                   }
    261.  
    262.   //------------------------------------------------
    263.               if (RC3_bit == 1)                                // When UV is on;
    264.                  {
    265.                   if (RD4_bit == 0)                            // if slash opened,
    266.                   RC3_bit = 0;                                 // Turn off UV
    267.                  }
    268.  
    269.  //------------------------------------------------
    270.  
    271.            if (RC3_bit == 1)                                 // When UV on AND slash closed;
    272.            {
    273.  
    274.                   if (Button(&PORTD,0,1,1))                     // if fan switch pressed
    275.  
    276.                      {
    277.                       Error();                              //
    278.                      }
    279.  
    280.  
    281.                 if (Button(&PORTD,1,1,1))                     // if lights switch pressed
    282.                      {
    283.                       Error();                              //
    284.                      }        
    285.                      
    286.             }
    287.  
    288.  //------------------------------------------------
    289.            if (RC0_bit == 1 || RC1_bit == 1 )               // When fan OR lights on;
    290.            {
    291.                   if (Button(&PORTD,3,1,1))                     // if UV switch pressed
    292.                      {
    293.                       Error();                              //
    294.                      }
    295.            }
    296.  
    297.  
    298.            if (RD4_bit == 0)                           // or when slash open;
    299.            {
    300.             if (uvSW == 1)
    301.                                                       // if UV switch pressed
    302.                {
    303.                 Error();                              //
    304.                }
    305.            }
    306.  
    307.  
    308.        } while (System_Ready == 1);
    309.    }
    310. }
    311.  
     
    Last edited by a moderator: Dec 20, 2013
  2. nerdegutta

    Moderator

    Dec 15, 2009
    2,515
    785
    Oh... Please use code-tags around your code. Much easier to read. It's the #-symbol in the menuline to the message editor. :)
     
    nalakan2 likes this.
  3. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,386
    1,605
    Say what?


    (Pardon me, sir. Would you please elaborate on your description of symptoms?)
     
  4. Art

    Distinguished Member

    Sep 10, 2007
    785
    61
    and what is the last part of your code?
    Everything after the first line, or everything before the last line?
     
  5. MrSoftware

    Member

    Oct 29, 2013
    497
    122
    Are you sure you're not running out of memory? I'm not familiar with the chip that you're using, but I used an Arduino for a recent project and when we ran out of memory the behaviors got really odd.
     
Loading...