inter4.c

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


#include "p16F877x.inc"

//This sample program shows how to use interrupts.
//Each second a char string ("Hello, World !")
//will be sent interruptively to serial line.

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

#pragma CLOCK_FREQ 4000000

char sscounter=15;
char ind=0;
char str[] = {'H','e','l','l','o',' ',',','W','o','r','l','d',' ','!',0x0D,0x0A,0x00};

//------------------------------------------------
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 = str[ind++];                // send character
   if (str[ind] == 0x00) {        // end of string ?
     ind = 0;
     clear_bit(_PIE1,TXIE);        // disable transmit interrupts
   }
   clear_bit(_PIR1,TXIF);        // clear TXINT interrupt flag  
  }
}
//------------------------------------------------

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