}
}
}
else //检测起始位
{
if ( RXD_pin )
{
RXD_t = HITS/2;
}
else
{
RXD_t--;
if ( RXD_t == 0 ) //连续HITS/2次采样RXD_pin都是0,就可以确认起始位
{
//启动接收
RXD_t = HITS;
RXD_cnt = 8;
RXD_doing = 1;
}
}
}
//发送数据
if ( TXD_doing ) //正处于发送状态
{
TXD_t--;
if ( TXD_t == 0 )
{
if ( TXD_cnt == 0 ) //发送全部完毕
{
TXD_doing = 0; //清除正在发送的标志
}
else
{
if ( TXD_cnt == 1 ) //8个数据位发送完毕
{
TXD_pin = 1; //发送停止位
}
else //发送数据位
{
TXD_pin = TXD_ch_LSB;
TXD_ch 》》= 1;
//上面2条语句若用{CY=(TXD_ch&0x01); TXD_pin=CY; TXD_ch=ACC;}代替,效率更高
}
TXD_cnt--;
TXD_t = HITS;
}
}
}
else
{
if ( TXD_p2 != TXD_p1 ) //如果发送缓冲队列不空
{
//从发送缓冲队列中取出要发送的数据
TXD_ch = TXD_buf[TXD_p2++];
if ( TXD_p2 》= TXD_BUF_LEN ) TXD_p2 = 0;
//启动发送
TXD_doing = 1;
TXD_cnt = 9;
TXD_t = HITS;
//先发送起始位
TXD_pin = 0;
}
else
{
//发送缓冲队列是空的,不发送任何数据
}
}
}
//系统初始化
void SystemInit()
{
TXD_init();
RXD_init();
T2_init();
}
//主程序
void main()
{
unsigned char c;
SystemInit();
//
TXD_Send_String(“Hello!rn”);
TXD_Send_String(“The author is 21IC suda.rn”);
//以下是简单的测试:从接收引脚接收数据,再通过发送引脚转发出去
for (;;)
{
if ( RXD_p2 != RXD_p1 )
{
c = RXD_buf[RXD_p2++];
if ( RXD_p2 》= RXD_BUF_LEN ) RXD_p2 = 0;
TXD_Send_Char(c);
}
}
}
来源;21ic
关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。