📄 serial.h
字号:
//头略
#ifndef __SERIAL_H__
#define __SERIAL_H__
/************************************变量定义*******************************/
xdata uchar temp[256]; //数据缓冲区数组
idata uchar receive0[128]; //接收数据缓冲区数组
idata uchar receive1[1]; //接收数据缓冲区数组
idata uchar receive2[1]; //接收数据缓冲区数组
uchar send[]={0xaa,0x03,0x31,0x33,0x39,0x31,0x33,0x39,0x39,0x31,0x36,0x34,0x39,0x03,0x41,0x5a,0x00,0xff};
bit charendf=0; //发送数据结束标志
uchar usemark=0; //使用eep区标志
uchar datacounter=0; //缓冲区接收计数
uchar secondcopy; //最后接收时间标志
extern bit tiaoshi; //调试程序标志
extern bit slimitf; //
extern uchar timer;
extern uchar second;
extern uchar minute;
extern uchar hour;
extern uchar state;
//bit comrespondf=0;//接收命令回复标志
/*extern uchar receive0[];
extern uchar send[];
extern uchar datacount;*/
//接口定义
/************************************串口初始化**********************************/
void serial_init(void)
{
PCON&=0x7F; //无双倍波特率
SCON=0x70; //10位UART,允许接收数据
IE|=0x90; //开串行中断
TMOD&=0x0F;
TMOD|=0x20; //T1工作方式2
TL1=0xfa; //初值250
TH1=0xfa;
TR1=1; //定时器开
}
/*********************************主动发送一个字节*******************************/
void serl_snd_code(uchar scode)
{
charendf=1;
SBUF=scode;
}
/*********************************主动发送一串字符*******************************/
void serl_snd_string(uchar *str)
{
while(*str!=0xff)
{
serl_snd_code(*str++);
while(charendf);
}
}
/**********************************串行中断(接收)********************************/
void serl_rec_code(void) interrupt 4
{
//lightflag=0;
if(TI)
{
charendf=0;
TI=0;
}//发送中断
if(RI)//接收中断
{
slimitf=1;
/*
switch(usemark)
{
case 0:receive0[datacounter++]=SBUF;break;
case 1:receive1[datacounter++]=SBUF;break;
case 2:receive2[datacounter++]=SBUF;break;
default:break;
}*/
temp[datacounter++]=SBUF;
if(datacounter>253)
{
tiaoshi=1;
lightflag=0;
}
secondcopy=second;//刷新最后接收时间
RI=0;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -