⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_10_4_echo_int.c

📁 * Use 10 MHz crystal frequency. * Use Timer0 for ten millisecond looptime. * Blink "Alive" LED e
💻 C
字号:

#include "config.h"

#include "serial.c"

// use interrupts to read character from serial port, 
// increment, echo it back 

//prototypes
char getch (void);
void putch (char c);

// return 8 bit char from Recieve port 
char getch ()
{
  // check RCIF bit 
 while (!RCIF); 
 return(RCREG);
}

// send 8 bit char to Recieve port 
void putch (char c)
{
  // wait until transmit reg empty 
  while (!TXIF);
  TXREG = c;
}

volatile char received_char;
volatile unsigned int got_char_flag;

// interrupt service routine
#if defined(HI_TECH_C)
void interrupt pic_isr(void)
#endif
#if defined(__18CXX)
#pragma interrupt pic_isr
void pic_isr(void)
#endif
{
  // see if this interrupt was generated 
  // by a receive character 
   if (RCIF) {
     // reading RCREG clears interrupt bit
    received_char = RCREG;  
    got_char_flag = 1;
  }
}



void main(void)
{
  unsigned char	c;

  // init serial port
  // 19200 in HSPLL mode, crystal = 7.3728 MHz 
  serial_init(95,1); 

  // enable interrupts
  IPEN = 0; // priorities disabled 
  RCIE = 1; // receive interrupt enable 
  PEIE = 1; // perpherial interrupts enabled 
  GIE = 1;  // global interrupts enabled
  while(1) {
    // wait for interrupt 
    while (!got_char_flag);
    c = received_char;
    got_char_flag =0;  // clear flag 
    c++;               // increment Char 
    putch (c);         // send the char 
  }
}

//for MCC18, place the interrupt vector goto
#if defined(__18CXX)
#if defined(HIGH_INTERRUPT)
#pragma code HighVector=HIGH_INTERRUPT
#else
#pragma code HighVector=0x0008  
#endif
void HighVector (void)
{
    _asm goto pic_isr _endasm
}
#pragma code
#endif




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -