📄 com.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 + -