📄 serial.h
字号:
/********************************工程文件说明*******************************/
/*FileName:serial.h */
/*Author:烛光 */
/*Version:v1.0 */
/*Data:2008年07月11日 */
/*Description:工程串口程序文件,负责串口数据接收和发送。 */
/*Function List: */
/* 1.main 主程序,状态机制 */
/* 2.scrfresh 状态辅助程序,刷新屏幕 */
/* 3.time_manager 时间控制程序,时间机制 */
/* 4.…… */
/*History: */
/* 3.烛光 2008.09.13 v1.0 初步完成设计 */
/* 2.烛光 2008.09.13 v1.0 初步完成设计 */
/* 1.烛光 2008.07.11 v0.0 开始设计 */
/*Copyright (c) 2008 烛光 All Rights Reserved */
/***************************************************************************/
#ifndef __SERIAL_H__
#define __SERIAL_H__
/***********************************硬件接口说明****************************/
//无
/************************************符号定义*******************************/
//无
/************************************变量定义*******************************/
xdata uchar temp[256];//数据缓冲区数组
uchar idata zclsend[]={0xaa,0x03,0x31,0x33,0x39,0x31,0x33,0x39,0x39,0x31,0x36,0x34,0x39,0x03,0x41,0x5a,0x00,0xab,0xcd,0xef};
uchar idata gprssend[]={0x5a,0x44,0x49,0x4d,0xff,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xab,0xcd,0xef};
uchar idata gprsres[82];
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;
/*******************************函数声明************************************/
//无
/*********************************串口初始化********************************/
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==0xab)&&(*(str+1)==0xcd)&&(*(str+2)==0xef)))//判别结束码
{
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 + -