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

📄 uart0_main_receive.c

📁 周立功arm7(lpc2104)的工程模板
💻 C
字号:

// *********************************
// LPC2000 SYSTEM WITHOUT OS
// FILE:     MAIN.C
// MODIFIED: ZPCYP 2005-3-16 20:16
// *********************************
//串口将接受的字符发送给PC

#include <stdio.h>
#include "lpc22xx.h"
#include "init_c.h"
#include "vic.h"
#include "eint.h"
#include "main.h"
#include "config.h"


//extern short adc_data[];
 unsigned int renew;//1,有新数据;0,无新数据
 unsigned char r;
// #define a  F_OSC
 #define UART_BPS 19200;	 //波特率
 unsigned char SEND_STRING[] = "Hello World!\n";
 unsigned char RECIEVE_CHAR = 'a'; 
 unsigned char RECIEVE_STRING[8] = "abcdefgh";
 void  DelayNS(int  dly);
 void  UART0_SendByte(unsigned char data);
/****************************************************************************
* 名称:IRQ_Time0()
* 功能:接收数据中断处理函数
* 入口参数:无
* 出口参数:无
****************************************************************************/
 void  __irq   UART0_Receive(void)

{
		int irqState;
		int i;
		
	  	if( (U0IIR & 0x0f) ==0x04 )//是否接受到新数据
		{
			renew = 1;
			r = 1;
			for( i = 0;i < 8;i ++)
			{
				RECIEVE_STRING[i] = U0RBR;
			}
		}
		irqState = U0IIR;
		//RECIEVE_CHAR =  U0RBR;
		
		
		/*while(1)
		{
		UART0_SendByte(RECIEVE_STRING);
		DelayNS(10);
        }*/
       VICVectAddr = 0x00;//通知VIR中断处理结束
}


/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(int  dly)
{  int  i;

   for(; dly>0; dly--) 
      for(i=0; i<5000; i++);
}


/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Ini(void)
{
 

  //串口设置    
  U0LCR = 0x83;                             // DLAB = 1
  U0DLM = (F_PCLK / 16 / 9600) >> 8;  // Set baud rate
  U0DLL = (F_PCLK / 16 / 9600) & 0xff;                            // N, 8, 1
  U0LCR = 0x03;

  //U0FCR = 0X01;      //使能FIFO中断,并设置触发字节为1
  U0FCR = 0X81;      //使能FIFO中断,并设置触发字节为8
  U0IER = 0X01;   	 //允许RBR中断
  

  //中断设置
 
  VICIntSelect = 0x00;//所有中断通道设置为IRQ中断
  VICVectCntl0 = 0x26;//定时器0中断通道分配最高优先级(向量控制器0)
  VICVectAddr0 = (unsigned int)UART0_Receive;//中断入口地址
  VICIntEnable = 0x00000040 ;//使能UART0中断

   
}
 
				

/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/
void  UART0_SendByte(unsigned char data)
{  
   while( (U0LSR & 0x20)==0 );	    // 等待数据发送完毕
   U0THR = data;
}


/****************************************************************************
* 名称:UART0_SendByte()
* 功能:将数据发还给主机
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_SendBack(void)
{  
   int i; 
   while( (U0LSR & 0x20)==0 );	    // 等待数据发送完毕
   for(i = 0;i < 8;i ++)
   {
   		UART0_SendByte(RECIEVE_STRING[i]);
   }
}


/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt		要发送的字符串的指针
* 出口参数:无
****************************************************************************/

void  UART0_SendStr(unsigned char *str)
{  while(1)
   {  if( *str == '\0' ) break;
      UART0_SendByte(*str++);	    // 发送数据
   }
}



int main(void) 
{

	renew = 0;
	r = 0;
   target_init();

   //init_serial_0();
   UART0_Ini();  
 /*  while((U0LSR&0x01)==0)
   {
   RECIEVE_STRING = U0RBR;
   	}	*/
  
  while(1) 
   {
   		if(r == 1)
   		{
   			//UART0_SendByte(RECIEVE_CHAR);
   			UART0_SendBack();
   			renew = 0;
   		}
   		
		DelayNS(10);		
	}	
   return(0);

	
}   
  

⌨️ 快捷键说明

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