📄 serial.h
字号:
//*********************************************
//MCU:AT89C2051 ,晶振频率:6 MHz
//用到串口的参数:
//波特率: 2400bps
//制作人:平顶山工学院计算机系,郭猛
//**********************************************
uchar IR_REC[10]={0,0,0,0,0,0,0,0,0,0,};
uchar IR_RecNum=0;
bit Flag_HOST_Send=0; // =0:主机没有向MCU发送AT命令;=1:主机向MCU发送AT命令,MCU应该做出响应.
void DelayuS(uchar DelayTimes); //延时,单位uS
void Delay_1ms(); //延时1mS
void Delay(unsigned int DelayTimes); //延时,DelayTimes是延时的ms数
//**************************************微秒级延时****************************************
void DelayuS(uchar DelayTimes)
{
while(--DelayTimes); //12Mhz下,延时DelayTimes*2+3微秒
}
//**************************************1毫秒延时****************************************
void Delay_1ms()
{
DelayuS(240);DelayuS(240);
}
//*************************************较长时间,mS级延时(不精确)******************************
void Delay(unsigned int DelayTimes)
{
while(--DelayTimes) Delay_1ms(); //延时,DelayTimes是延时的ms数
}
void Init_SerialComm() //BPS是波特率
{
IE |= 0x90; //Enable Serial Interrupt
TR1=0; //Pause
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON = 0x80; //SMOD=1;
//if (BPS==192) //192: 19200
TH1 = 0xFD; //Baud:19200bps fosc=11.0592MHz
TL1 = 0xFD;
TR1 = 1; // timer 1 run
TR0=0; //T0 pause.
/////////////////////////////////////////////////
}
//向串口发送一个字符
void Send_Char_Com(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void Send_String_Com(uchar *str,unsigned int strlen)
{
unsigned int k=0;
do
{
Send_Char_Com(*(str + k));
k++;
} while(k < strlen);
}
//串口接收中断函数
void serial () interrupt 4
{
uchar ch;
// EA=0; //关中断
if(RI) //接收到数据
{
ch=SBUF;
RI = 0;//TI=0;
if(ch=='s') //帧开始
{
IR_RecNum=0;
}
else if(ch=='e') //帧结束
{
if (IR_REC[0]=='A' && IR_REC[1]=='T' && IR_RecNum==2)
{
Flag_HOST_Send=1;
}
IR_RecNum=0;
}
else
{
IR_REC[IR_RecNum++]=ch;
}
}
// EA=1; //中断开放
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -