📄 scom.c
字号:
#include <reg51.h>
sbit BT_SND = P1^7;//定义连接方式,发送端
sbit BT_REC = P1^6;//定义连接方式,接受端
#define TIMER0_ENABLE TL0=TH0; TR0=1;//开启定时器并装入初值
#define TIMER0_DISABLE TR0=0;//关闭定时器
#define F_TM F0 //定义中断标志
#define FALSE 0 //接收过程错误标志
#define TRUE 1 //接收到正确数据标志
void Inttime0();
void SendChar(unsigned char);
unsigned char GetChar(char);
main()
{
while(1);
}
//=============初始化定时器================================
void Inttime0()
{
TMOD=0x02; /*定时器0为模式2(8位自动重装) */
TR0=0; //在发送或接收才开始使用
TF0=0; //清定时器溢出标志
TH0=0XA0; //9600是1000000/9600=104.167微秒104.167*11.0592/12=96 (256-96=0XA0)
TL0=TH0;
ET0=1; //开定时器中断
EA=1; //开CPU中断
}
//=========================================================
//=============定时器中断子程序============================
void IntTimer0() interrupt 1
{
F_TM=1; //定时器溢出引起中断,置标志位
}
//=========================================================
//=============发送一个字符================================
void SendChar(unsigned char ch)
{
unsigned char i;
i=0;
F_TM=0; //关中断标志
BT_SND=0; //发送起始位
TIMER0_ENABLE; //启动定时器
while(!F_TM); //检测到中断标志后开始发送一个字符(8位)
while(i<8)
{
if(ch&1)
{
BT_SND=1;
}
else
{
BT_SND=0;
}
F_TM=0; //发送一位之后关标志准备发送下一位
while(!F_TM);
i++;
ch>>=1;
}
BT_SND=1; //发送停止位
F_TM=0;
while(!F_TM);
TIMER0_DISABLE; //停止定时器
}
//=========================================================
//=============接收一个字符================================
unsigned char GetChar(char *ndata)
{
unsigned char i=0,ch=0; //i:位计数,ch:接收的字符存储位置
unsigned int count=0; //超时计数器
TIMER0_ENABLE ; //启动定时器
//=============检测起始位和超时====================
while(1)
{
F_TM=0;
while(!F_TM); //等待中断
if(!BT_REC) //等待开始位
break;
count++;
if(count>30000)
return FALSE; //超时后错误
}
//=================================================
//=============接收一个字节的数据==================
F_TM=0;
while(!F_TM); //等待溢出准备接收一个字节的数据
while(i<8)
{
ch>>=1;
if(BT_REC)
ch|=0x80;
i++;
F_TM=0;
while(!F_TM);
}
//=================================================
F_TM=0;
while(!F_TM) //接收停止位
{
if(BT_REC)
break; //接收完后返回
}
TIMER0_DISABLE ; //停止定时器
*ndata = ch; //将接收的数据以ndata指针返回
return TRUE; //正确接送数据
}
//=========================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -