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

📄 uart.c

📁 用AVR编写的点阵显示屏
💻 C
字号:
/*****************************************************
** 文件:uart.c
** 功能:串口操作
** 作者:韦坚
** 修改:韦坚
** 开始日期:2008-1-2
** 完成日期:2008-1-2
/***************************************************/


/**********************************************************************
**  函 数 名: void initial(void)
**  功    能: 串口初始化
**  入口参数: 无
**  返 回 值: 无
**	日    期: 2007-11-22
**  说    明: 晶振12MHz
***********************************************************************/
void initial(void)
  {
    TMOD = 0x20;    /*设定定时器/计数器1为方式2*/
    PCON = 0x80;    /*SMOD=0,波特率=定时器1溢出率/16*/
	SCON = 0x50;    /*串行接口工作于方式1*/
	TH1  = 0xF3;    /*设置波特率为4800的定时器1的初始值*/
	TL1  = 0xF3;    /*设置波特率为4800的定时器1的加载值*/
	EA   = 1;		/*开总中断*/
	ES   = 1;		/*允许串口中断*/
	TR1  = 1;       /*启动定时器/计数器1*/
  }	
  
/************************************************************************* 
**  函 数 名: uart_send()
**  功    能: 串口送数
**  入口参数: 无
**  返 回 值: 无
**	日    期: 2007-12-22
***************************************************************************/
void  uart_send(void)
{
   ES = 0;            //先关闭串口中断

   SBUF=0xFF;         /*发送温度命令,供上位机识别用*/
   while(TI==0);      /*等待发送完*/
   TI=0;              /*清除TI标志*/ 

   SBUF=(uchar)(temp/10000);        
   while(TI==0);      /*等待发送完*/
   TI=0;              /*清除TI标志*/

   SBUF=(uchar)(temp%10000/100);        
   while(TI==0);      /*等待发送完*/
   TI=0;              /*清除TI标志*/

   /******************************************************************
   **  因为需要同上位机同步,需将BCD码转换成10进制数
   ******************************************************************/
   //SBUF=0x20;         /*发送年*/
   //while(TI==0);      /*等待发送完*/
   //TI=0;              /*清除TI标志*/ 

   SBUF=0xFE;         /*发送时间命令,供上位机识别用*/
   while(TI==0);      /*等待发送完*/
   TI=0;              /*清除TI标志*/ 

   SBUF=(year&0x0F)+((year&0xF0)>>4)*10;  /*发送年*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 

   SBUF=(mon&0x0F)+((mon&0xF0)>>4)*10;    /*发送月*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/

   SBUF=(day&0x0F)+((day&0xF0)>>4)*10;    /*发送日*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 
    

   SBUF=(hou&0x0F)+((hou&0xF0)>>4)*10;    /*发送小时*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 

   SBUF=(min&0x0F)+((min&0xF0)>>4)*10;    /*发送分钟*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 

   SBUF=(sec&0x0F)+((sec&0xF0)>>4)*10;    /*发送秒*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/


   SBUF=0xFC;                             /*发送星期命令,供上位机识别用*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 
                    
   SBUF=week;                             /*发送星期*/
   while(TI==0);                          /*等待发送完*/
   TI=0;                                  /*清除TI标志*/ 

   ES = 1;  //打开串口中断                
}

/************************************************************************* 
**  函 数 名: void uart_change_8563(void)
**  功    能: 串口接收需修改的8563数据
**  入口参数: 无
**  返 回 值: 无
**	日    期: 2007-12-22
***************************************************************************/
void uart_change_8563(void) 
{
  uchar i;

  for ( i=0;i<7;i++)
  {
    while(RI==0);                
    RI=0;

    Ini_8563[i] = SBUF ;
  }
  set_8563();
} 

/************************************************************************* 
**  函 数 名: void uart_receive(void)
**  功    能: 串口接收
**  入口参数: 无
**  返 回 值: 无
**	日    期: 2007-12-22
***************************************************************************/
void uart_receive(void) interrupt 4
{               
  RI = 0;
  ES = 0;            //先关闭串口中断
  if ( 0xFF == SBUF )  //如果接收到修改时间的命令,则把接下来的7个数据作为所要改的时间
  {
  	uart_change_8563();
  } 
  
  else				   //否则显示数据
  {
  	dis_uart_receive( SBUF );
  }
  ES = 1;  //打开串口中断
}

⌨️ 快捷键说明

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