inter3.c

PIC16F877 sample program that outputs a character to serial line using interrupts.


#include "p16F877x.inc"

//This sample program shows how to use interrupts.
//Each second, an 'A' char will be sent interruptively
//to serial line.

// Author : Joan Ilari - e-mail: c2c@ilari.org

#pragma CLOCK_FREQ 4000000

char sscounter=15;

//------------------------------------------------
void interruptvoid )
{
  if ((_INTCON & _T0IF) != 0)
  {        // ========== TMR0 interrupt ==========
   if (--sscounter == 0) {
     sscounter = 15;
     set_bit(_PIE1,TXIE);        // enable transmit interrupts
   }
   clear_bit(_INTCON,T0IF);        // clear TMR0 overflow flag
  }
  
  if (((_PIR1 & _TXIF) != 0) && ((_PIE1 & _TXIE) != 0))
  {        // ========== TXIF interrupt ==========
    _TXREG = 'A';                        // send 'A' character
    clear_bit(_PIE1,TXIE);        // disable transmit interrupts
  }
}
//------------------------------------------------

main()
{
  // --- TMR 0 inits
  _OPTION_REG = 7;                // set TMR0 prescaler to 1:256
  
  // --- serial line inits
  set_bit(_RCSTA,SPEN);                // set serial port enable
  set_bit(_RCSTA,CREN);                // set continuous receive enable
  set_bit(_TXSTA,TXEN);                // set transmit enable
  set_bit(_TXSTA,BRGH);                // set high baud rate speed
  _SPBRG = 25;                        // baud rate = 9600
  
  // --- interrupt inits
  enable_interrupt(T0IE);                // enable TMR0 interrupts
  set_bit(_PIE1,TXIE);                // enable serial transmit interrupts
  enable_interrupt(PEIE);                // enable peripheral interrupts
  enable_interrupt(GIE);                // enable interrupts
  
  while(1) 
  {
    clear_wdt();
  }

}




Copyright© 2002 Pavel Baranov