
/* global variables */
char a;
bit b1, b2;

/* assign names to port pins */
bit in  @ PORTB.0;
bit out @ PORTB.1;

void sub( void)
{
    char i;      /* a local variable */

    /* generate 20 pulses */
    for ( i = 0; i < 20; i++)  {
        out = 1;
        nop();
        out = 0;
    }
}



void main( void)
{
    // if (TO == 1 && PD == 1 /* power up */)  {
    //   WARM_RESET:
    //     clearRAM(); // clear all RAM
    // }

    /* NOTE 1: some devices have a comparator module
       that have to be switched off to use certain
       pins as digital IO */
    //CMCON = 0x07;  // switch comparators off

    /* NOTE 2: devices having AD converter may need to
       configure the pins assigned to 'in' and 'out' as
       digital IO */
    //ADCON1 = ..

    /* First decide the initial output level on the
       output port pins, and then define the input/
       output configuration. This avoids spikes at the
       output pins. */

    PORTB = 0b.0000.0010;  /* out = 1 */
    TRISB = 0b.1111.0001;  /* xxxx 0001 */

    a = 9;  /* value assigned to global variable */

    do  {
        if (in == 0)  /* stop if 'in' is low */
             break;
        sub();
    } while ( -- a > 0);  /* 9 iterations */

    // if (some condition)
    //    goto WARM_RESET;

    /* main is terminated by a SLEEP instruction */
}
