This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to call a function after a specific clock period

hi
I am using 89c51. for using serial port I am using these commands

SCON  = 0x50;                  /* SCON: mode 1, 8-bit UART, enable rcvr    */
TMOD  = 0x20;                  /* TMOD: timer 1, mode 2, 8-bit reload      */
TH1   = 0xfd;                  /* TH1:  reload value for 9600 baud         */
TR1   = 1;                     /* TR1:  timer 1 run                        */

these are working correctly
------------
but in main function i am calling 2 functions

for example
---------------------

void main()
{
    while(1)
    {
        if(RI)
        {
            GetData();
        }
        if(??????????)
        {
            DisplayData();
        }
    }
}


At the location "??????????" I want to call the DisplayData() after a specific clock period, for example after every 1000 clocks. is it possible to set the timer0 of 89c51 for this purpose.

Parents
  • Set up a timer to generate an interrupt at the required rate;

    In the timer's Interrupt Service Routine, set a flag;

    In the main loop, test this flag

    void main()
    {
        while(1)
        {
            if(RI)
            {
                GetData();
            }
    
            if( time_to_display_data )
            {
                // The flag is set - it's time to display the data
                DisplayData();
    
                // Clear the flag ready for next time...
                time_to_display_data = 0;
            }
        }
    }
    


    Simples!

Reply
  • Set up a timer to generate an interrupt at the required rate;

    In the timer's Interrupt Service Routine, set a flag;

    In the main loop, test this flag

    void main()
    {
        while(1)
        {
            if(RI)
            {
                GetData();
            }
    
            if( time_to_display_data )
            {
                // The flag is set - it's time to display the data
                DisplayData();
    
                // Clear the flag ready for next time...
                time_to_display_data = 0;
            }
        }
    }
    


    Simples!

Children