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

📄 uart0_main_receive1.c

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

// *********************************
// LPC2000 SYSTEM WITHOUT OS
// FILE:     Uart0_main_receive1
// MODIFIED: ZY 2007-5-10 10:34
// *********************************
//串口将接受的字符发送给PC,8个BYTE以内
#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[];
 volatile unsigned char renew;//1,有新数据;0,无新数据
 unsigned char r;
// #define a  F_OSC]
 unsigned char irqTime = 0;//进入中断次数,用于调试 
 #define UART_BPS 9600;	 //波特率
 unsigned char SEND_STRING[] = "Hello World!\n";
 unsigned char RECIEVE_CHAR = 'a'; 
 unsigned char RECIEVE_STRING[16];//string received that causes the RDA
 unsigned char receiveLenth = 0;
 unsigned char RECIEVE_STRINGEXTRA[8] = "abcdefgh";//string received that causes the DTI
 void  DelayNS(int  dly);
 void  UART0_SendByte(unsigned char data);
/****************************************************************************
* 名称:IRQ_Time0()
* 功能:接收数据中断处理函数
* 入口参数:无
* 出口参数:无
****************************************************************************/
 void  /*__irq*/   UART0_Receive(void)

{
 		unsigned char u0iir;
		int irqState;
		int i;
		irqTime++;
		/*******
		这段程序针对的是发送字符串
		*******/
		/*
	  	if( (U0IIR & 0x0f) == 0x04 )//是否接受到新数据
		{
			renew = 1;
			for( i = 0;i < 8;i ++)
			{
				RECIEVE_STRING[i] = U0RBR;
			}
		}
		irqState = U0IIR;
		*/
		i = 0;
		 while (((u0iir = U0IIR) & 0x01) == 0)// Still have request
		 {
		 	switch (u0iir & 0x0e) 
       		{

      			case 0x04:                            // RDA
      				renew = 1;
					for( i = 0;i < 8;i ++)
					{
						RECIEVE_STRING[i] = U0RBR;
					}
					break;
      			case 0x0C:                            // CTI
        			renew = 1;
					while ((U0LSR & 0x01) != 0) 
        			{
          				RECIEVE_STRING[i] = U0RBR;
          				i++;
          				
        			}
        			//receiveLenth = i;
        		break;
    	   }
		 }
		 receiveLenth = i;
		
		/*******
		这段程序针对的是发送单个字符
		*******/
		/*
		if( (U0IIR & 0x0f) ==0x04 )//是否接受到新数据
		{
			renew = 1;
		}
		
		RECIEVE_CHAR =  U0RBR;
		irqState = U0IIR;
		*/
	  //规范化的中断处理函数	
}


/****************************************************************************
* 名称: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; 
   for(i = 0;i < receiveLenth;i ++)
   {
   		UART0_SendByte(RECIEVE_STRING[i]);
   	    while( (U0LSR & 0x20)==0 );	    // 等待数据发送完毕
   }
}


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

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



int main(void) 
{

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

   //init_serial_0();
   UART0_Ini();
	while(1)
	{
		//renew = 1;
		if(renew == 1)//接收到
		{
			UART0_SendBack();
			//UART0_SendByte(RECIEVE_CHAR);
			renew = 0;
		}
		//renew = 0;
		DelayNS(1000);
	}	
   return(0);

	
}   
  

⌨️ 快捷键说明

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