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

📄 usart.c

📁 基于中断实现的串口通信程序
💻 C
字号:
/*                ****ROBOCON 2009 | BUPT TEAM*******
 * ------------------------------------------------------------------------
 * FileName   : usart.c
 * Version    : 0.1
 * Biref      : USART Driver(use queue)
 * Code by    : Leaf
 * Date       : Dec.08 2008
 * Dependence : Queue
 * Note       :
 *
 *
 * ------------------------------------------------------------------------
 */


#include "config.h"

Queue u0send;
char u0sendbuf[U0_SENDBUF_SIZE];

void inline uart0_tx_isr(void)
{
  if(!q_empty(&u0send))
    UDR0 = q_popfront(&u0send);
}
void inline uart0_init(UINT16 baud)
{
   UCSR0B = 0x00;
   UCSR0A = 0x00;
   UCSR0C = 0x06;
   UBRR0L = baud & 0x00ff;
   UBRR0H = baud >> 8;
   UCSR0B = 0x48;
   q_init(&u0send, u0sendbuf, U0_SENDBUF_SIZE);
}

void inline u0_sendstart(void)
{
   if((UCSR0A&(1<<UDRE0)))
      UDR0 = q_popfront(&u0send);
}

void u0_putc(char c)
{
   while(q_full(&u0send));
   q_pushback(&u0send, c);
   u0_sendstart();
}

void u0_puts(char *buf)
{
   while(*buf)
   {
      while(q_full(&u0send));
      q_pushback(&u0send, *buf);
	  ++ buf;
   }
   u0_putc(0x0d);
}


Queue u1send;
char u1sendbuf[U1_SENDBUF_SIZE];

void inline uart1_tx_isr(void)
{
  if(!q_empty(&u1send))
    UDR1 = q_popfront(&u1send);
}
void inline uart1_init(UINT16 baud)
{
   UCSR1B = 0x00;
   UCSR1A = 0x00;
   UCSR1C = 0x06;
   UBRR1L = baud & 0x00ff;
   UBRR1H = baud >> 8;
   UCSR1B = 0x48;
   q_init(&u1send, u1sendbuf, U1_SENDBUF_SIZE);
}

void inline u1_sendstart(void)
{
   if((UCSR1A&(1<<UDRE1)))
      UDR1 = q_popfront(&u1send);
}

void u1_putc(char c)
{
   while(q_full(&u1send));
   q_pushback(&u1send, c);
   u1_sendstart();
}

void u1_puts(char *buf)
{
   while(*buf)
   {
      while(q_full(&u1send));
      q_pushback(&u1send, *buf);
	  ++ buf;
   }
   u1_putc(0x0d);
}



⌨️ 快捷键说明

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