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

📄 com.c

📁 Ljd sy 5100s 串口通讯示例程序
💻 C
字号:
/*******************************************************************************
*  标题:  蓝海微芯LJD-SY-5200单片机开发系统演示程序                            *
*  文件:  COM_INT.C                                                            *
*  日期:  2006-8-12                                                            *
*  版本:  1.0                                                                  *
*  作者:  蓝海微芯                                                             *
*  网站: http://www.ljd-2008.com                                              *
********************************************************************************
*  描述:                                                                       *
*         串口收发测试程序                                                     *     
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>

#define MAX_RINTL        8          /* 串口接收缓冲区长度   */
typedef unsigned char uchar;
typedef unsigned int  uint;
uchar  data  pint_buf[MAX_RINTL];   /* 串口接收缓冲区       */
uchar  data  pint_read;             /* 串口缓冲区读指针     */
uchar  data  pint_write;            /* 串口缓冲区写指针     */
uchar  data  psend_int;             /* 串口发送允许标志     */

char pdata str_test[25]  = ":0106001100153D";
char pdata str_hello[14] = " BLUE MCU";
char pdata str_world[30] = " WELCOME TO USE BLUE MCU";
/********************************************************************
函 数 名:com_int_proc()
功    能:串口中断服务程序
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void com_int_proc(void) interrupt 4 using 3
{
  uchar temp;
  uchar temp1;

  if (TI == 1)                      /* 是发送中断       */
  {
    TI = 0;
    psend_int = 1;                  /* 可以发送         */
  }

  if (RI == 1)                      /* 是接收中断       */
  {
    RI = 0;                         /* 清串口接收中断   */
    temp1 = SBUF;
    temp  = pint_write + 1;         /* 判断是否可以写入 */
    if (temp == MAX_RINTL)
    {
      temp=0;
    }

    if (temp != pint_read)
    {
      pint_buf[pint_write] = temp1; /* 读取数据 */
      pint_write = temp;
    }
  }
}
/********************************************************************
函 数 名:com_send_command()
功    能:串口发送一个字节
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void com_send_command(char onebyte)
{
  psend_int = 0;
  SBUF = onebyte;
  while (psend_int != 1);
}
/********************************************************************
函 数 名:com_command_receive()
功    能:串口接收数据处理
说    明:若收到数据0x0A,则发送字符串"BLUE MCU",若收到数据0x0D,
          则发送字符串"WELCOME TO USE BLUE MCU"。
调    用:
入口参数:
出口参数:
***********************************************************************/
void com_command_receive(void)
{
  uchar var1,var2;
  uchar i;

  var2 = pint_read;
  if (var2 != pint_write)
  {
    var1=pint_buf[var2];
    var2=var2+1;

    if (var2 >= MAX_RINTL)
    var2=0;
    pint_read=var2;
    if (var1 == 0x0A)                     /* 收到0x0A */
    {
      for (i=0; i<strlen(str_hello); i++)
      {
        com_send_command(str_hello[i]);   /* 发送字符串HELLO */
      }
      com_send_command(0x0D);
      return;
    }
    if (var1 ==0x0D)                      /* 收到0x0D */
    {
      for (i=0; i<strlen(str_world); i++)
      {
        com_send_command(str_world[i]);   /* 发送字符串WORLD */
      }
      com_send_command(0x0D);
      return;
    }
  }
}
/********************************************************************
函 数 名:system_init()
功    能:初始化子程序
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void system_init()
{
  uchar loop;

  EA = 0;         /* CPU关中断      */
  pint_read  = 0; /* 串口缓冲读指针 */
  pint_write = 0; /* 串口缓冲写指针 */

  SCON = 0x48;
  PCON = 0x80;
  TMOD = 0x20;
  TCON = 0x50;
  TH1  = 0xFD;    /* 波特率为19200  */
  TL1  = 0xFD;
  TR1  = 1;       /* 定时器1启动计数*/
  ES   = 1;       /* 串口开中断     */
  PS   = 0;       /* 串口低优先级   */
  REN  = 1;       /* 串口接收允许   */
  EA   = 1;       /* 开CPU中断      */

  loop = SBUF;    /* 清串口缓冲区   */
  for (loop=0; loop<MAX_RINTL; loop++)
  {
    pint_buf[loop] = 0;
  }
}

main()
{
  uchar i = 0;

  system_init();

  for (i=0; i<strlen(str_test); i++)
  {
    com_send_command(str_test[i]); /* 发送字符串 */
  }
  com_send_command(0x0D);
    
  while(1)
  {
    com_command_receive();
  }
}

⌨️ 快捷键说明

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