void JieShou(void) //接收函数,每4次调用接收一位
{
if((KaiShi==0) && (JieShou_D==0)) //串行开始位到来
{
DingShiJiShu=0; //开始定时计数
KaiShi=1;
JieShou_T=0xffff; //接收临时寄存器置全1
}
else if((KaiShi==1) && (DingShiJiShu==1)) //第2次调用,串行数据采样时间到来
{
JieShou_T >>= 1;
if(JieShou_D) JieShou_T |=0x8000;
}
else if(JieShou_T & 0x807f ==0x803f) //接收完成 JieShou_T=1xxx_xxxx_x011_1111
{
KaiShi=0;
DingShiJiShu=0;
JieShou_h = JieShou_T >> 7; //右移7位得到串行数据
JieShou_b=1;
}
if(KaiShi)
{
DingShiJiShu++; //只在开始接收时定时计数+1
DingShiJiShu &=0x03; //每4次调用接收一位
}
}
//发送部分
sbit FaSong_D= ;//定义发送端口
uint16 FaSong_h; //发送缓冲区
bit FaSong_b; //发送完成标志
void KaiShiFaSong(uint8 fs) //设置发送数据,开始发送
{
FaSong_h = fs;
FaSong_h <<= 1;
FaSong_h |= 0x0200; //FaSong_h=0000_001x_xxxx_xxx_0
FaSong_b=0; //发送标志=0 表示正在发送中
}
void FaSong(void) //发送函数,每调用一次发一位
{
if(FaSong_h) //发送未完成
{
if(FaSong_h & 0x0001)
FaSong_D=1;
else FaSong_D=0;
FaSong_h >>= 1;
}
else
FaSong_b =1; //发送完成标志=1 表示发送完成
}