关于Proteus仿真PIC单片机的问题

[复制链接]
 楼主| pallee 发表于 2013-2-25 22:13 | 显示全部楼层 |阅读模式
初学PIC
一个很基本的程序,判断单片机管脚电平高低,如果为低,点亮对应管脚的发光二极管,结果在仿真中发现无论如何,二极管的点亮不受程序控制,
程序如下:
#include <pic18f4580.h>

void main()
{
TRISA1=1;

TRISB0=1;
TRISB2=1;
TRISB4=1;
TRISB6=1;//设置管脚的输入输出

TRISE0=0;
TRISE1=0;
TRISE2=0;

PORTE=0;
while(1)
{
if(RA1==0)//如果RA1对应的开关按下,则RA1为低电平,点亮RE0管脚的二极管,实际仿真中发现无论RA1对应的开关是否按下,RE0对应的二极管都会被点亮
{
  PORTE=0;
  RE0=1;
}
if(RB2==0)//如果RB2对应的开关按下,则RB2为低电平,点亮RE1管脚的二极管,这段代码有时有效,有时无效

{
  PORTE=0;
  RE1=1;
}
/*if(RB4==0)//下面是类推,结果都实现不了
{
  PORTE=0;
  RE2=1;
}
if(RB6==0)
{
  PORTE=0;
  RE0=1;
  RE1=0;
  RE2=1;  
}*/
}
while(1);
}
图片如下

搞不懂是程序的问题还是Proteus的问题,有没有高人指点一下?多谢了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yklstudent 发表于 2013-2-26 09:45 | 显示全部楼层
while(1);
程序都死这边了 你再按按键还能有用????
asspeed 发表于 2013-2-26 09:46 | 显示全部楼层
又一个不认真看数据手册的
储小勇_526 发表于 2013-2-26 14:07 | 显示全部楼层
引脚有复用功能的
dogglove 发表于 2013-2-26 16:22 | 显示全部楼层
比较乱啊
 楼主| pallee 发表于 2013-2-26 20:33 | 显示全部楼层
疑问:即使最后程序死了,为什么RA1在没有赋值为0的时候RE0对应的LED会亮呢?没有对RE0进行赋值为1的操作啊?个人觉着只会是按键无反应,3个LED都不亮才对。
 楼主| pallee 发表于 2013-2-26 21:46 | 显示全部楼层
今天用MCC18的编译器,程序改为空,只有一个#include <p18f4580.h>,main函数为空,仿真电路图见,我以为按照图中的连接(PORTB口的连接是乱了点,我的意图是端口通过1K电阻排上拉至VCC,在按键没有按下的时候端口应为高电平,仿真开始后确实如此,见图),仿真开始后,在读PORTB口的值,应该是0xff吧,因为开关没按下,都是高电平,为什么在watch窗口中观察会是0XEC?程序是空的,没有对B口的操作,按照电气连接,觉着应该是高电平,而且看图上端口都是红色的标记,应该识别出来是高电平。为什么观察窗口会是0xec?还有,在看汇编窗口时发现有两个文件汇编进去了,一个是c018i.c,一个是p18f4580.asm,这两个文件我通过查找都在我安装的MCC18的目录下,是在E盘下,怎么在汇编窗口里会显示的在C盘?(我用线括起来了)

感谢,另外,用51单片机,这样的尝试是没有问题的(端口通过开关接地,程序判断管脚输入是否为0来对另外的管脚进行操作),对端口的操作51和PIC有什么不同?疑惑中。

可能说的有点乱,希望大家提些建议和意见,多谢了!
至于管脚的复用,我如果程序中不对某些寄存器进行设置,默认是不会激活的吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| pallee 发表于 2013-3-12 19:56 | 显示全部楼层
是自己没看明白458和4580的原因,B口有差别的。
huarens 发表于 2013-3-22 23:26 | 显示全部楼层
不用写配置字吗?
Rain_King 发表于 2013-3-24 22:37 | 显示全部楼层
貌似需要设置数字输入还是模拟输入.....就是上面说的引脚复用的功能...好好看一下介绍的资料....
sunjiaqi2004 发表于 2013-3-28 14:52 | 显示全部楼层
告诉你吧,你的原因是端口没有配置好,手册上有说,带模拟功能的IO口必须初始化配置为模拟输入还是数字输入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

177

帖子

2

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