📄 serial_port.c
字号:
/*---------------------------------------------------
serial_port.c file
Creat by Computer-lov Date: 2005.7.19
Last edit date:2005.11.17
Copyright(C) 2005-2015 Computer-lov
All rights reserved
Welcome to my Blog: Http://computer00.21ic.org
-----------------------------------------------------*/
#include <serial_port.h>
#include <hardware.h>
unsigned char Sending;
//**************************************************************************************
void InitComport(void) //串口初始化函数,使用11.0592M晶体
{
EA=0;
TMOD=0x21; //定时器0工作在模式1,定时器1工作在模式2
SCON=0x50; //串口工作在模式1
TCON=0x05;
TH1=0xFF; //57600bps
TL1=0xFF;
// TH1=0xE8;
// TL1=0xE8;
PCON=0x80; //串口波特率加倍
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1; //允许中断
}
//****************************************************************************************
unsigned char Buffer[10];
unsigned char OK;
unsigned char Cancel;
//******************************* 串口中断处理 ***********************************
void SerialPort(void) interrupt 4
{
unsigned char i;
if(RI) //收到数据
{
RI=0; //清中断请求
if(SBUF=='T') //收到请求连接的命令
{
TI=0;
SBUF='A'; //则返回A应答
while(!TI); //等待发送完毕
TI=0;
}
if(SBUF=='C') //接收到取消命令
{
TI=0;
Cancel=1; //取消置1
}
if(SBUF==0xAA) //0xAA、0x55表示参数开始
{
while(!RI); //等待下一个数据
RI=0;
if(SBUF==0x55) //要连续收到0xAA和0x55后才能开始接收参数
{
for(i=0;i<10;i++) //连续接收10个参数
{
while(!RI);
RI=0;
Buffer[i]=SBUF; //数据保存在Buffer中
}
while(!RI);
RI=0;
if(SBUF==0x55) //参数包以0x55结束,如果是,则表示参数接收正确
{
OK=1; //则OK置1
Cancel=0;
return;
}
else //若包尾错误,则OK置0
{
OK=0;
return;
}
}
else
{
return;
}
}
return;
}
else //发送完一字节数据
{
TI=0;
Sending=0; //清正在发送标志
}
}
//*****************************************************************************************
//*****************************************************************************************
void SendToComport(unsigned char d) //往串口发送一字节数据
{
Sending=1;
SBUF=d;
while(Sending);
}
//*****************************************************************************************
//*****************************************************************************************
//发送一个字符串
/*
void prints(unsigned char * pd,unsigned char line_feed)
{
while((*pd)!='\0')
{
SendToComport(*pd);
pd++;
}
if(line_feed)
{
SendToComport(13);
SendToComport(10);
}
}
*/
//****************************************************************************************
//****************************************************************************************
//将16bit的数分成4个4bit的发送
void PrintHex(unsigned int x)
{
SendToComport((x>>12)&0x0F);
SendToComport((x>>8)&0x0F);
SendToComport(((unsigned char)x>>4)&0x0F);
SendToComport((unsigned char)x&0x0F);
}
//*****************************************************************************************
//*****************************************************************************************
/*
void PrintLongInt(unsigned long int x) //将整数转按十进制字符串发送
{
signed char i;
unsigned char display_buffer[10];
display_buffer[10]=0;
for(i=9;i>=0;i--)
{
display_buffer[i]='0'+x%10;
x/=10;
}
for(i=0;i<9;i++)
{
if(display_buffer[i]!='0')break;
}
for(;i<10;i++)SendToComport(display_buffer[i]);
}
*/
//*****************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -