打印

有没有朋友分享个IO口模拟串口的例程?

[复制链接]
883|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
clvert|  楼主 | 2017-2-13 14:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件限制,需要用IO口模拟个串口收发功能。115200波特率的。
沙发
wyz6| | 2017-2-17 16:31 | 只看该作者
我最近倒是写了一个,115200的,GD103的芯片,就不知道怎么传上来

使用特权

评论回复
板凳
wyz6| | 2017-2-17 16:32 | 只看该作者
void U4_TxB(u8 da)
{ u8 i;
        u16 t;

//  S4Ce(1);//ʹÄÜ·¢ËÍ
        S4Tx(0);//·¢ËÍÆðʼλ
  for(t=0;t<78;)//ÑÓʱ8.68us/78
        { t++;}
        for(i=0;i<8;i++)
        { if(da & 0x80){ S4Tx(1);}
                else{ S4Tx(0);}
                da<<=1;
           for(t=0;t<78;)//ÑÓʱ8.6us/77
          { t++;}
        }
        S4Tx(1);//·¢ËÍֹͣλ
        for(t=0;t<78;)//ÑÓʱ8.64us/78
        { t++;}
}

使用特权

评论回复
地板
wyz6| | 2017-2-17 16:33 | 只看该作者
u8 U4_RxB(void)
{ u8 i,da=0;
        u16 t;

        while(S4Rx)i++; //µÈ´ýµÍ
        { if(i>80)return 0xFF;}
        for(t=0;t<78;)//ÑÓʱ8.68us/79
        { t++;}//ÆðʼλL
        for(t=0;t<35;)//ÑÓʱ4.08us(0.5bit/4.32us/37)
        { t++;}
        for(i=0;i<7;i++)//0.23us
        { if(S4Rx) da|=0x01;
                da<<=1;
           for(t=0;t<76;)//8.48/77ÑÓʱ(8.68us/79)
          { t++;}
        }
        if(S4Rx) da|=0x01;
        for(t=0;t<35;)//ÑÓʱ3.04,(4.08us/35)
        { t++;}
        while(!(S4Rx)); //µÈ´ý¸ß,ֹͣλH

        return da;
}

使用特权

评论回复
5
wyz6| | 2017-2-17 16:34 | 只看该作者
测试是过了的,如果有什么不妥,希望能提供给我

使用特权

评论回复
6
tongbu2015| | 2017-2-19 21:29 | 只看该作者
这个需要借助定时器的

使用特权

评论回复
7
tongbu2015| | 2017-2-19 21:29 | 只看该作者
我记得我原来做个这个的,,采用定时器的捕获功能的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

111

帖子

1

粉丝