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

📄 bput.c

📁 利用ccs编译器编写的usart通讯函数
💻 C
字号:
#include <16f877.h>
#fuses hs,nowdt
#use delay(clock=4000000)
#use rs232(baud=4800,parity=n,xmit=pin_c6,rcv=pin_c7,bit=8)

#define rx_buffer_size 24
char rx_buffer[rx_buffer_size+1];
char rx_wr_index = 0;
char rx_rd_index = 0;
char rx_counter = 0;
int1 rx_buffer_overflow = 0;

#define tx_buffer_size 24
char tx_buffer[tx_buffer_size+1];
char tx_rd_index = 0;
char tx_wr_index = 0;

#int_rda
void serial_rx_isr()
{
  rx_buffer[rx_wr_index] = getc();
  if(++rx_wr_index > rx_buffer_size)
  {
    rx_wr_index = 0;  
  }
  if(++rx_counter > rx_buffer_size)
  {
    rx_counter = rx_buffer_size;
    rx_buffer_overflow = 1;
  }
}

char bgetc(void)
{
  char c;
  while(rx_counter == 0);
  c = rx_buffer[rx_rd_index];
  if(++rx_rd_index > rx_buffer_size)
  {
    rx_rd_index = 0;
  }
  if(rx_counter)
  {
    rx_counter--;
  }
  return c;
}

#int_tbe
void serial_tx_isr()
{
  if(tx_counter != 0)
  {
    putc(tx_buffer[tx_rd_index]);
    if (++tx_rd_index > tx_buffer_size)
    {
      tx_rd_index = 0;
    }
    tx_counter--;
    if(tx_counter ==0)
    {
      disable_interrupts(int_tbe)
    }  
  }
}

void bputc(char c)
{
  char restart = 0;
  while(tx_counter > (tx_buffer_size-1));
  if(tx_counter == 0)
  {
    restart = 1;
  }
  tx_buffer[tx_wr_index++] = c;
  if (tx_wr_index > tx_buffer_size)
  {
    tx_wr_index = 0;
  }
  tx_counter++;
  if(restart == 1)
  {
    enable_interrupts(int_tbe);
  }
}

void main(void)
{
  unsigned char k;
  enable_interrupts(global);
  enable_interrupts(int_rda);
  
  printf(bputc,"hello world!! \r\n")
  while(1)
  {
    if(rx_counter > 4)
    {
      while(rx_counter > 0)
      {
        k = bgetc();
        bputc(k);
      }
    }
  }
}

⌨️ 快捷键说明

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