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 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 = 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