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

📄 qvdong2.txt

📁 嵌入式串口程序,主要是初学者适合看,请大家认真看一下啊
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#if USEUART0
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC 
void uart0_rx_isr(void)
{
uint8 status,data;
siocirqueue *RTbuf;
RTbuf=&RTbuf_UART0;
// CLI();
status=UCSR0A;
data=UDR0;
WDR(); //喂狗
if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
  {
  if(RTbuf->R_count<RBUF_SIZE){
    RTbuf->R_count++;
    RTbuf->R_buf[RTbuf->R_rear]=data;
    RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
    }
  else 
    {
    RTbuf->R_overflow=1;
    }
  }
//SEI();
}
  
#pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
void uart0_tx_isr(void)
{
//CLI();
siocirqueue *RTbuf;
WDR(); //喂狗
RTbuf=&RTbuf_UART0;
if (RTbuf->T_count>0){
  UDR0=RTbuf->T_buf[RTbuf->T_front];
  RTbuf->T_count--;
  RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
  }
else RTbuf->T_disabled=1;
//SEI();
}
#endif

#if USEUART1
#pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC 
void uart1_rx_isr(void)
{
uint8 status,data;
siocirqueue *RTbuf;
RTbuf=&RTbuf_B;
// CLI();
WDR(); //喂狗
status=UCSR1A;
data=UDR1;
if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
  {
  if(RTbuf->R_count<RBUF_SIZE){
    RTbuf->R_count++;
    RTbuf->R_buf[RTbuf->R_rear]=data;
    RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
    }
  else 
    {
    RTbuf->R_overflow=1;
    }
  }
//SEI();
}
  
#pragma interrupt_handler uart1_tx_isr: iv_USART1_TXC
void uart1_tx_isr(void)
{
//CLI();
siocirqueue *RTbuf;
WDR(); //喂狗
RTbuf=&RTbuf_B;
if (RTbuf->T_count>0){
  UDR1=RTbuf->T_buf[RTbuf->T_front];
  RTbuf->T_count--;
  RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
  }
else RTbuf->T_disabled=1;
//SEI();
}
#endif
 
 
[楼 主] Posted:10-25 17:59|   
 
 
starnewtech
 

   
 
级别: 运营团队
精华: 9
发帖: 349
威望: 477 点
金钱: 3779 VI
贡献值: 0 点
技术积分: 27 点
在线时间:106(小时)
注册时间:2006-10-16
         

对应的头文件

/*********************************************************************************************************
**                                  serial   driver 头文件
**                       (c) Copyright 2005-2006, limaokui
**                             All Rights Reserved
**
**                                 V1.0.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:sio.h
**创   建   人: 李茂奎
**最后修改日期: 2005年7月13日
**描     述: serial   driver 头文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 李茂奎
** 版 本: V1.00
** 日 期: 2005年7月13日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:李茂奎
** 版 本: V1.01
** 日 期:2005年8月1日
** 描 述:对AVR的移植
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
#ifndef __sio_H__
#define __sio_H__ 1




#define USEUART0 TRUE
#define USEUART1 FALSE


#define RBUF_SIZE    10
#define TBUF_SIZE   10
typedef struct{
uint8 R_front;
uint8 R_rear;
uint8 R_count;
uint8 R_overflow;
uint8 R_buf[RBUF_SIZE];
uint8 T_front;
uint8 T_rear;
uint8 T_count;
uint8 T_buf[TBUF_SIZE];
uint8 T_disabled;
}siocirqueue;

#if USEUART0
extern siocirqueue RTbuf_UART0;
#endif
#if USEUART1
extern siocirqueue RTbuf_UART1;
#endif

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR     3
#define FE     4
#define UDRE 5
#define RXC     7

#define    FRAMING_ERROR (1<<FE)
#define    PARITY_ERROR (1<<UPE)
#define    DATA_OVERRUN (1<<OVR)
#define    RX_COMPLETE (1<<RXC)


#if USEUART1         
#define REV_EN()         \
    {UCSR0B|=BIT(RXCIE0); \    
       UCSR1B|=BIT(RXCIE1); \
       }
#else
#define REV_EN()   UCSR0B|=BIT(RXCIE0)    
#endif    

#if USEUART1    
#define REV_DIS()         \
    {UCSR0B&=~BIT(RXCIE0); \
       UCSR1B&=~BIT(RXCIE1); \
       }
#else
#define REV_DIS()         \
    {UCSR0B&=~BIT(RXCIE0); \
       }
#endif    


#if USEUART1    
#define TXC_EN()           \
    {UCSR0B|=BIT(TXCIE0); \
       UCSR1B|=BIT(TXCIE1); \
       }
#else
#define TXC_EN()           \
    {UCSR0B|=BIT(TXCIE0); \
       }
#endif
   
#if USEUART1        
#define TXC_DIS()         \
    {UCSR0B&=~BIT(TXCIE0); \
       UCSR1B&=~BIT(TXCIE1); \
       }
#else
#define TXC_DIS()         \
    {UCSR0B&=~BIT(TXCIE0); \
       }    
#endif        
   
//定义延时定时器序号        
#define Delay_Comget 2
#define MaxLimit_Comget_Delay 5        
       
       
extern    void Rbuf_init(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Rbuf_init
** 功能描述: 接收缓冲区初始化
** 输 入: 
** 输出     : 
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Rbuf_empty(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Rbuf_empty
** 功能描述: 接收缓冲区判空
** 输 入: 
** 输出     : TRUE 空 FALSE 非空
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    uint8 Rbuf_full(void);
/*********************************************************************************************************
** 函数名称: Rbuf_full
** 功能描述: 接收缓冲区判满
** 输 入: 
** 输出     : TRUE 满 FALSE 非满
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    void Rbuf_putchar (uint8 x);
/*********************************************************************************************************
** 函数名称: Rbuf_putchar
** 功能描述: 把一个字符放入接收缓冲区
** 输 入: 
** 输出     : 
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Rbuf_getchar(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Rbuf_putchar
** 功能描述: 从接收缓冲区读一个字符
** 输 入: 
** 输出     : 读字符
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    uint8 * Rbuf_getstring(void);
/*********************************************************************************************************
** 函数名称: Rbuf_getstring
** 功能描述: 从接收缓冲区返回当前子串指针
** 输 入: 
** 输出     : 当前子串指针
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/


extern    void Tbuf_init(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Tbuf_init
** 功能描述: 发送缓冲区初始化
** 输 入: 
** 输出     : 
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    uint8 Tbuf_empty(void);
/*********************************************************************************************************
** 函数名称: Tbuf_empty
** 功能描述: 发送缓冲区判空
** 输 入: 
** 输出     : TRUE 空 FALSE 非空
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Tbuf_full(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Tbuf_full
** 功能描述: 发送缓冲区判满
** 输 入: 
** 输出     : TRUE 满 FALSE 非满
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    void Tbuf_putchar(uint8 x,siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Tbuf_putchar
** 功能描述: 把一个字符放入发送缓冲区
** 输 入: 
** 输出     : 
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    uint8 Tbuf_getchar(void);
/*********************************************************************************************************
** 函数名称: Tbuf_getchar
** 功能描述: 从发送缓冲区读一个字符
** 输 入: 
** 输出     : 读字符
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
//extern    uint8 *Tbuf_getstring(void);
/*********************************************************************************************************
** 函数名称: Tbuf_getstring
** 功能描述: 从发送缓冲区返回当前子串指针
** 输 入: 
** 输出     : 当前子串指针
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/



extern    void Com_init (void);    
/*********************************************************************************************************
** 函数名称: Com_init
** 功能描述: 初始化串行口
** 输 入: 
** 全局变量: 无
** 调用模块: Com_baudrate
** 说明:
** 注意:
********************************************************************************************************/
extern    void Com_baudrate (uint16 baudrate);    
/*********************************************************************************************************
** 函数名称: Com_baudrate
** 功能描述: 利用定时器T1产生由参数baudrate指定的波特率
** 输 入: baudrate指定的波特率
** 全局变量: 无
** 调用模块: 无
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Com_putchar (uint8 c,siocirqueue *RTbuf);    
/*********************************************************************************************************
** 函数名称: Com_putchar
** 功能描述: 从串行口输出一个字符c
** 输 入: c:输出字符
** 输出     : 0:失败 1:成功
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Com_getchar (uint8 mode,siocirqueue *RTbuf);        
/*********************************************************************************************************
** 函数名称: Com_getchar
** 功能描述: 从串行口输入一个字符
** 输 入: mode:0不需等待,在调用函数前检测Com_R_count的值
**         1 等待数据到来
** 输出     : 读入的字符
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    uint8 Com_R_count(siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Com_R_count
** 功能描述: 返回接收缓冲区字符个数函数
** 输 入: 
** 输出     : 字符个数
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/
extern    void Com_putstring (uint8 *p,uint8 len,siocirqueue *RTbuf);
/*********************************************************************************************************
** 函数名称: Com_putstring
** 功能描述: 从串行口输出一个字符串
** 输 入: p:指向输出字符串 len:输出长度
** 输出     : 
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************************************************************************************************/

extern uint8 Com_getstring (uint8 *p,uint8 len,siocirqueue *RTbuf);
extern void Com_Rbuf_Clear(siocirqueue *RTbuf);


#endif
 
 

⌨️ 快捷键说明

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