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 interrupt( void )
{
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