📄 com.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include "define.h"
unsigned char idata pint_buf[MAX_RINTL]; /* 串口接收缓冲区 */
unsigned char idata pint_buf1[MAX_RINTL];
unsigned char data pint_read; /* 串口缓冲区读指针 */
unsigned char data pint_write; /* 串口缓冲区写指针 */
unsigned char data psend_int; /* 串口发送允许标志 */
unsigned char psend_int;
unsigned char flag;
unsigned char rece_flag;
unsigned char flag_axes;
unsigned char start;
unsigned char enter;
unsigned char back;
bit rece_time;
bit rece_axes;
bit rece_start;
/********************************************************************
函 数 名: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==3)
{
rece_start=1;
}
if(rece_start)
{
rece_start=0;
switch(temp1)
{
case 0x12:
rece_time=1;
break;
case 0x37:
rece_axes=1;
break;
default:
break;
}
}
if(rece_time)
{
pint_buf[pint_write] = temp1; /* 读取数据 */
}
if(rece_axes)
{
pint_buf1[pint_write] = temp1; /* 读取数据 */
}
pint_write = temp;
if(temp1==0xA5)
{
rece_flag++;
}
if((temp1==0xF0)&&(rece_flag==1))
{
if(rece_flag)
{
flag_axes++;
}
rece_flag = 0;
pint_write = 0;
rece_time = 0;
rece_axes = 0;
flag = 1;
}
}
}
//串口发送一个字节
void com_send_command(unsigned char onebyte)
{
psend_int = 0;
SBUF = onebyte;
while (psend_int != 1);
}
//初始化子程序
void system_init(void)
{
EA = 0; /* CPU关中断 */
SCON = 0x48;
PCON = 0x00;
TMOD = 0x20;
TCON = 0x50;
TH1 = 0xFD; /* 波特率为9600 晶振22.1184MHZ,11.0592MHZ的TH1=TL1=0xFD*/
TL1 = 0xFD;
TR1 = 1; /* 定时器1启动计数*/
ES = 1; /* 串口开中断 */
PX1 = 1; /* 串口低优先级 */
REN = 1; /* 串口接收允许 */
EX1 = 1;
EA = 1; /* 开CPU中断 */
start = 1;
enter = 1;
back = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -