打印

一个关于LPC2103的IOSET的小问题,请教下!

[复制链接]
2141|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaigch|  楼主 | 2010-11-4 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
帖个代码:
void write_data(uint8 rl,uint8 data)
{
isbusy();
  if(rl)
  {
     IOCLR=CS2;
     IOSET=RS;
     IOCLR=RW;
     IOSET=data;
     //IOCLR=~data;
     //IOPIN=(IOPIN&0xffffff00)|data;
     IOSET=EN;
     IOCLR=EN;
     IOSET=CS2;
  }
  else
  {
     IOCLR=CS1;
     IOSET=RS;
     IOCLR=RW;
     IOSET=data;
     //IOCLR=~data;
     //IOPIN=(IOPIN&0xffffff00)|data;
     IOSET=EN;
     IOCLR=EN;
     IOSET=CS1;
  }
}
不解的是:IOSET=data;这句,当data中有数据位为0时,0对应的这个位会输出为0么?为什么 我的这个函数write_data(0,0x00)能使LCD清屏?我在书看到的是这个寄存器只有在对应的位为1时才输出1的么,写入0无效的呀??不解,请教大家了!

相关帖子

沙发
leohsiung| | 2010-11-5 12:38 | 只看该作者
可能IOSET原来有些位为1,你没有清零。你再写0无效,原来的位还是为1

使用特权

评论回复
板凳
supercatinzoo| | 2010-11-5 21:44 | 只看该作者
当data中有数据位为0时,0对应的这个位会输出为0么?
不一定会,原来data中为1的位在写入本次data是还是1。。。。
解决办法:
一、使用前先清零data位,也就是说先写入data中的0,再写入data中的1;
或者方法二(用些书上说IO0PIN是只读属性,实验证明,再给其寄存器写值时能反映到IO引脚上)
二、用IO0PIN寄存器,使用时不要破坏其他位(默认data为P0.7~P0.0)
IO0PIN=IO0PIN&(~0xff)|data;

使用特权

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

本版积分规则

64

主题

158

帖子

1

粉丝