📄 bput.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 + -