打印

IO口虚拟并口的问题

[复制链接]
2610|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vincent0319|  楼主 | 2011-3-9 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, TE, PDA, pd, dc
用了LPC1768,
一次传8位数据,通过IO口传。
为了画板简便,8位数据连接在了不同的端口的不同的引脚上,
(0---p0.1,1----p2.2,3-----p3.1,4---p0.4,5---p2.10,.....),如这样的连接。
请问,有什么简便的方式实现并口传输。
我写的代码大概是这样:
void writebyte (unsigned char byte)
{
           PDATA=byte;
...
}
unsigned char readbyte (void)
{
            unsigned char byte;
            byte=PDATA;
            .....
             return byte;
}

也就是问大家,PDATA这个怎么写?
#define PDATA ????
谢谢!

相关帖子

沙发
xinzha| | 2011-3-9 17:49 | 只看该作者
并口传输本身就存在竞争冒险问题,再加上你用的这些口都很散,如果不属于同一个寄存器管理,就不能一次把8位都写进去。
另外如果真的要这么做,我建议你还是多加一根线作为中断,当两边通信的时候作为数据ready的标记,否则怎么知道现在读数据是稳定的?

使用特权

评论回复
板凳
vincent0319|  楼主 | 2011-3-10 09:42 | 只看该作者
我用了移位操作,大家看看有没有更好的办法。
unsigned char CHP_IO_BYTE_READ(void)
{
       
        //MSB 2.5 2.6 2.7 2.8 2.9 0.16 0.15 0.17
        unsigned char byte=0;
        byte = (((LPC_GPIO2->FIOPIN0)&0x20)<<2);        //p2.5  0b00100000
        byte|= ((LPC_GPIO2->FIOPIN0)&0x40);          //p2.6  0b01000000
        byte|= (((LPC_GPIO2->FIOPIN0)&0x80)>>2);        //2.7 0b10000000
        byte|= (((LPC_GPIO2->FIOPIN1)&0x01)<<4);         //2.8 0b00000001
        byte|= (((LPC_GPIO2->FIOPIN1)&0x02)<<2);        //2.9         0b00000010
        byte|= (((LPC_GPIO0->FIOPIN3)&0x01)<<2);        //0.16                0b00000001
        byte|= (((LPC_GPIO0->FIOPIN2)&0x80)>>6);        //0.15        0b10000000
        byte|= (((LPC_GPIO0->FIOPIN3)&0x02)>>1);        //0.17          0b00000010
        return byte;
}

使用特权

评论回复
地板
supercatinzoo| | 2011-3-12 14:39 | 只看该作者
真不如加个595,你这样传输速度很慢而且占用IO口较多。。。

使用特权

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

本版积分规则

0

主题

5

帖子

1

粉丝