打印

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

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

相关帖子

沙发
ccjchen|  楼主 | 2007-3-26 18:22 | 只看该作者

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

虽然我不用这个lcd了,但还想知道为什么
void  lcdwrite(bit flag, uchar command )     //flag=0;数据 flag=1;命令

     RS = !flag; /rs :H数据,L指令
    E = 0; //片使能信号
    RW = 0;//rw  :H 读  L写
     P0 = command;
     _nop_();
     E = 1;
     _nop_();
     _nop_();
     E = 0; RW = 1; RS = 1;
}

使用特权

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

本版积分规则

175

主题

446

帖子

1

粉丝