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

📄 serial.c

📁 这是一个关于ARM7的实时时钟的C源代码
💻 C
字号:
/*******************************************************************************
*File: main.c
*功能: 处理用户输入的命令 
*******************************************************************************/
#include <string.h>
#include <ctype.h>
#include "config.h"

uint8 t_buf[30];			// 接收缓冲区 
uint8 r_buf[30];			// 接发送冲区 
uint8 rcv_buf;              // UART0数据接收缓冲区 
uint8 rcv_new;              // 接收新数据标志 
int r_length=0;				// 输入数组长度 

uint8 str1[]="Current Time: ";
uint8 str2[]="New Time: ";
uint8 str3[]="Error Command! ";
uint8 str4[]="MyRTClock V1.0";
uint8 str5[]="(C) Copyright 2008 Chen Tuo";

void IRQ_UART0(void) __attribute__ ((interrupt));    // Generate Interrupt 

/*******************************************************************************
*名称: SendByte() 
*功能: 向串口发送字节数据 
*入口参数:data       要发送的数据 
*******************************************************************************/
void SendByte(uint8 data)
{ U0THR=data;
  while((U0LSR&0x20)==0);               //等待数据发送
}

/*******************************************************************************
*名称: ISendBuf() 
*功能: 将缓冲区的数据发送回主机,并等待发送完毕 
*******************************************************************************/
void ISendBuf(void)
{ 
  SendByte(rcv_buf);
}

void Send_t_Buf(void)
{ uint8  i,l;
  l=strlen(t_buf);
  for(i=0;i<l;i++)SendByte(t_buf[i]);
}

// 发送回车换行 
void SendRN (void)
{
  rcv_buf=0x0D;
  ISendBuf();      		    //显示回车 
  rcv_buf=0x0A;
  ISendBuf();      		    //显示换行 
}

/*******************************************************************************
*名称: UART0_Ini() 
*功能: 初始化串口0. 设置其工作模式及波特率 
*入口参数: baud      波特率 
           set       模式设置 (UARTMODE数据结构) 
*出口参数:返回值为1时表示初始化成功,为0表示参数出错 
*******************************************************************************/
uint8 UART0_Ini(uint32 baud)
{ uint32  bak;
  /*设置串口波特率 */
  U0LCR=0x80;                         //DLAB位置1
  bak=(Fpclk>>4)/baud;
  U0DLM=bak>>8;
  U0DLL=bak&0xff;
  /*设置串口模式 */
  U0LCR=0x03;
  return(1);
}

/*******************************************************************************
*名称: IRQ_UART0(void)
*功能: 串口UART0接收中断 
*******************************************************************************/
void  IRQ_UART0(void)
{ int i,j,l;
  int newH,newM,newS;
  if(0x04==(U0IIR&0x0F))rcv_new=1;    //设置接收到新的数据标志 
  rcv_buf=U0RBR;                //读取FIFO的数据,并清除中断标志 

  if(1==rcv_new)
  { 
    if (rcv_buf==0x0D)			// 处理回车 
	{
  	  SendRN();  // 回车换行 
	  if (!strcmp(r_buf,"time"))
	  {
	    l=strlen(str1);
		for (i=0;i<l;i++)
		  t_buf[i]=str1[i];		// Current Time:  提示 
		for (j=i;j<l+6;j++){
   		  if (send_buf[j-i]=='\0')
		    t_buf[j]='0';
		  else 
		    t_buf[j]=send_buf[j-i]+'0';		// 当前时间,转换为ASCII码 
		}   
		Send_t_Buf();
		
        SendRN();  // 回车换行 

	    for (i=0;i<30;i++) t_buf[i]=0;	// 清零 t_buf; 
	    l=strlen(str2);		
		for (i=0;i<j+l;i++)
		  t_buf[i]=str2[i];			// New Time:  提示 
  		Send_t_Buf();
	  } else {
	    newH=10*(r_buf[0]-48)+(r_buf[1]-48);	// ASCII先转数字 
		HOUR=newH;
	    newM=10*(r_buf[2]-48)+(r_buf[3]-48);
		MIN=newM;
	    newS=10*(r_buf[4]-48)+(r_buf[5]-48);
		SEC=newS;

  	    rcv_buf='>';				//显示提示符 
   	 	ISendBuf();

	  }
	  for (i=0;i<30;i++) r_buf[i]=0;	// 清零 r_buf; 
	  for (i=0;i<30;i++) t_buf[i]=0;	// 清零 t_buf; 
	  r_length=0;
	  l=0;
	}
	else
	{
	  ISendBuf();             //将接收到的数据发送回主机 
      if (rcv_buf==0x08){			// 处理退格键 
	    r_buf[r_length] = 0;
		r_length--;
	  }	  
	  else {
	    r_buf[r_length] = tolower(rcv_buf);					// 输入的字符转换为小写,存入r_buf 
	    r_length++;
	  }
	}
    
    rcv_new=0;
  }


  VICVectAddr=0x00;                   //中断处理结束 
}


// 显示版权 
void Disp_CopyRight(void)
{ int i,l;
  l=strlen(str4);		
  for (i=0;i<l;i++)
    t_buf[i]=str4[i];		// MyRTClock V1.0 提示 
  Send_t_Buf();
  for (i=0;i<30;i++) t_buf[i]=0;	// 清零 t_buf; 

  SendRN();  // 回车换行 

  l=strlen(str5);		
  for (i=0;i<l;i++)
    t_buf[i]=str5[i];		// (C) Copyright 2008 Chen Tuo  提示 
  Send_t_Buf();
  for (i=0;i<30;i++) t_buf[i]=0;	// 清零 t_buf; 

  SendRN();  // 回车换行 
  SendRN();  // 回车换行 

  rcv_buf='>';				//显示提示符 
  ISendBuf();
}

⌨️ 快捷键说明

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