请问各位朋友我这样规划电路,会出现P0口上的数据冲突吗?

[复制链接]
2402|1
 楼主| ccjchen 发表于 2007-3-23 09:52 | 显示全部楼层 |阅读模式
我的89C52接了外部数据存储器sst29sf040(总线接法,其中数据是从P0口直接输出),而外部接的adc0816,8279,8251等是通过总线方式与89C52相接的(其中数据是从与P0口相连的74245输出);现在我还要接一个lcd,是通过I/0口方式工作的,非总线形式,数据和外部数据存储器sst29sf040一样直接从P0口输出;请问各位朋友我这样规划电路,会出现P0口上的数据冲突吗?--这是我曾经发的贴子,各位大虾门都说应该没问题,可是实验验证好象不行啊<br />看看这是我写的那段主函数中的程序,其中包含lcd操作和8251(总线方式)的操作,当用示波器测试时,8251的读写信号只有单个波形。如果不加上lcd,8251波形是连续的,且是正确的,大虾能否帮我看看主程序是这样写正确吗<br />void&nbsp;main(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;code&nbsp;*h;<br />&nbsp;&nbsp;&nbsp;&nbsp;initmcu();<br />&nbsp;&nbsp;&nbsp;&nbsp;//8251&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x40;//以上为8251复位部分<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x4e;//9600baud,1停止位,无校验,8位数据,X16<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x35;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;//lcd<br />&nbsp;&nbsp;&nbsp;&nbsp;lcdwrite(1,0x3e);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcdwrite(1,0xc0);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcdwrite(1,0x3f);<br />&nbsp;&nbsp;&nbsp;&nbsp;clrlcd(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcdwrite(1,0X3e);//lcd写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;X1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis_word(1,5,h);//lcd显示一个字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis_word(1,0,h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;X7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis_word(0,0,h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcdwrite(1,0x3f);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(256,256);wait(256,256);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//8251<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;data_temp[m];//写&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[m]&nbsp;=&nbsp;DAT8251;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m==4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(256,256);wait(256,256);wait(256,256);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />
 楼主| ccjchen 发表于 2007-3-26 18:22 | 显示全部楼层

查来查去就这个函数有问题!高手请指教一下,不胜感激

虽然我不用这个lcd了,但还想知道为什么<br />void&nbsp;&nbsp;lcdwrite(bit&nbsp;flag,&nbsp;uchar&nbsp;command&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//flag=0;数据&nbsp;flag=1;命令<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RS&nbsp;=&nbsp;!flag;&nbsp;/rs&nbsp;:H数据,L指令<br />&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;=&nbsp;0;&nbsp;//片使能信号<br />&nbsp;&nbsp;&nbsp;&nbsp;RW&nbsp;=&nbsp;0;//rw&nbsp;&nbsp;:H&nbsp;读&nbsp;&nbsp;L写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;=&nbsp;command;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E&nbsp;=&nbsp;0;&nbsp;RW&nbsp;=&nbsp;1;&nbsp;RS&nbsp;=&nbsp;1;<br />}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部