找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4399|回复: 11
打印 上一主题 下一主题
收起左侧

关于proteus仿真失败——很简单,你肯定会

[复制链接]
跳转到指定楼层
楼主
学校里设计做了一个单词记忆测试器
我是现在单片机上实现的,然后再做仿真
然后神奇的事来了,同一个hex单片机上可以实现的仿真里实现不了。




更离谱的是我有一个室友用汇编写的编译了hex可以仿真,弄了几天真的很心累。


各位说说可能的原因,我自己也尝试了很多了,再看看大伙儿的想法。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342822 发表于 2021-12-6 15:17 | 只看该作者
看了两个图区别是不同的文件夹
回复

使用道具 举报

板凳
ID:102963 发表于 2021-12-6 16:48 | 只看该作者
可能都原因:你的1602驱动程序有问题
回复

使用道具 举报

地板
ID:161164 发表于 2021-12-6 17:58 | 只看该作者
你不贴代我只能乱猜
请把Readdata和WriteData函数中的CheckBusy注释掉
回复

使用道具 举报

5#
ID:96682 发表于 2021-12-7 06:34 来自触屏版 | 只看该作者
应该是放错程序了吧
回复

使用道具 举报

6#
ID:420836 发表于 2021-12-7 09:08 | 只看该作者
有没有可能是芯片配置不正确? 还是单片机的机器频率设置不正确?
回复

使用道具 举报

7#
ID:988502 发表于 2021-12-7 12:46 | 只看该作者
songxia8013 发表于 2021-12-6 16:48
可能都原因:你的1602驱动程序有问题

是的,我对着网上一个驱动改了就行,正在详细看
回复

使用道具 举报

8#
ID:401564 发表于 2021-12-7 13:25 | 只看该作者
逛这个论坛三年,我一直很庆幸,我到现在还不会用proteus仿真
回复

使用道具 举报

9#
ID:624769 发表于 2021-12-7 13:44 | 只看该作者
Y_G_G 发表于 2021-12-7 13:25
逛这个论坛三年,我一直很庆幸,我到现在还不会用proteus仿真

我也不会,同喜同喜。
回复

使用道具 举报

10#
ID:988502 发表于 2021-12-7 17:07 | 只看该作者
有一下几种驱动;
忙检测的:

第一种:r  单片机可以仿真不行;
#include <reg52.h>
...
void Busy()
{
                P0= 0xFF;//必要的否则会干扰读写信号
                RW=1;
                RS=0;
                EN=1;
                while(P0 & 0x80);
                EN=0;       
}
第二种:源代码中的:单片机可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
     P0_7=1;              //将P0.7置1,为读状态做准备
     RS=0;                //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     RW=1;                //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     E=1;                 //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     while(P0_7==1);      //由P0.7读入1,表示1602液晶忙,需要等待
     E=0;                 //读完以后,恢复E的电平
}


第三种:也是唯一成功的,读入忙信号后不将while循环放在忙检测函数中,这似乎也是影响到仿真的因素,while循环是否在忙检测函数内部。
//BUSY   CHECK
bit test()
{
        bit busy;
        RS=0;
        RW=1;
        EN=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        busy=BF;
        EN=0;
        return busy;
}
我要顶不住了兄弟们
回复

使用道具 举报

11#
ID:989630 发表于 2021-12-8 15:35 | 只看该作者
你把排阻连接到lcd1602上看看
回复

使用道具 举报

12#
ID:988502 发表于 2021-12-10 12:14 | 只看该作者
ccyyer 发表于 2021-12-7 17:07
有一下几种驱动;
忙检测的:

第一种:r  单片机可以,仿真不行;
#include <reg52.h>
...
void Busy()
{
···
}

第二种:源代码中的:单片机可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
···
}

以上两种不能仿真是因为在驱动忙检测里在对P0口赋值后马上忙检测,此时检测的还是对P0赋值的1,所以一直为忙,只有在while忙检测之前加一段延时就行。
例如这样。
void Busy()
{
                P0= 0xFF;//必要的否则会干扰读写信号
                delay_nms(5);
                RW=1;
                RS=0;
                EN=1;
                while(P0 & 0x80);
                EN=0;       
}

为了验证这一猜想,我将P0赋值为0F,果然此时仿真有显示了。然而实际单片机则显示错误。
这说明硬件与软件在数据读取速度上的不同,影响了实现。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表