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

📄 uart0.c

📁 UART I2C驱动
💻 C
字号:
/****************************************************************************
* 文件名:DATARET.C
* 功能:使用串口UART0接收上位机发送的数据,当接收到8个连续数据后,将接收计数值加一后输
*      出LED1--LED8显示,并将数据原封不动地发送回上位机。
* 说明:将跳线器JP8短接。
*      通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
****************************************************************************/
#include  "config.h" 

#define  UART_BPS	9600			/* 定义通讯波特率 9600*/

extern unsigned char  data_buf[8];       	// UART0数据接收缓冲区
extern unsigned char  rcv_new;     			// 接收新数据标志

/****************************************************************************
* 名称:IRQ_UART0()
* 功能:串口UART0接收中断。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void   __irq IRQ_UART0(void)
{  unsigned char  i;
     
   if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;// 设置接收到新的数据标志
   for(i=0; i<8; i++)
   { data_buf[i] = U0RBR;              	// 读取FIFO的数据,并清除中断标志
   }
   
   VICVectAddr = 0x00;              	// 中断处理结束
}               


/****************************************************************************
* 名称:SendByte()
* 功能:向串口UART0发送字节数据。
* 入口参数:data                要发送的数据
* 出口参数:无
****************************************************************************/
void  SendByte(unsigned char data)
{  U0THR = data;                      	// 发送数据
}


/****************************************************************************
* 名称:ISendBuf()
* 功能:将缓冲区的数据发送回主机(使用FIFO),并等待发送完毕。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  ISendBuf(void)
{  unsigned char  i;
  
   for(i=0; i<8; i++) SendByte(data_buf[i]);
   while( (U0LSR&0x20)==0 );         	// 等待数据发送
}               
                 
        
/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置其工作模式及波特率。
* 入口参数:baud                波特率
*          set          模式设置(UARTMODE数据结构)
* 出口参数:返回值为1时表示初化成功,为0表除参数出错
****************************************************************************/
void  UART0_Ini(void)
{  
   unsigned int  baud;
   PINSEL0 = (PINSEL0&0xFFFFFFF0) | 0x05;	// 设置I/O连接到UART0
   
   U0LCR = 0x80;                        	// DLAB位置1
   baud = (Fpclk >> 4) / UART_BPS;
   U0DLM = baud >> 8;
   U0DLL = baud & 0xff;
   
   U0LCR = 0x03;							// 8位数据位,1位停止位,无奇偶校验,
   U0FCR = 0x81;                        	// 使能FIFO,并设置触发点为8字节
   U0IER = 0x01;                        	// 允许RBR中断,即接收中断
   
   VICIntSelect = 0x00000000;           	// 设置所有通道为IRQ中断
   VICVectCntl1 = 0x26;                 	// UART0中断通道分配到IRQ slot 1
   VICVectAddr1 = (int)IRQ_UART0;       	// 设置UART0向量地址
   VICIntEnable = VICIntEnable | 0x40;      // 使能UART0中断
   
}

⌨️ 快捷键说明

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