2301_80944573 2024-11-14 19:45 采纳率: 0%
浏览 12
已结题

Proteus仿真程序只能执行一次

我在学习用proteus仿真时,写了一个按键控制流水灯移位的程序,但是在执行程序的时候,只有第一次按键是有效的,之后按键便不起作用了。
代码如下:

#include <reg51.h>
#include <stdio.h>

void delay_ms(unsigned int ms)
{
   unsigned int i,j;
   for(i=0;i<ms;i++)
      for(j=0;j<120;j++)
      {;}
}
unsigned char a;
void main(void)
{ 
   P0=~0x01;   //低电平有效,亮第一个灯
   while(1)   
   {
    if((P1&0x02)==0)
    {
      delay_ms(10);
      while((P1&0x02)==0);
      delay_ms(10);
      a++;
      if(a>=8)
    a=0;
      P0=~(0x01<<a);
    }
    if((P1&0x01)==0)
    {
      delay_ms(10);
      while((P1&0x01)==0);
      delay_ms(10);
      if(a==0)
          a=7;
      else
          a--;
      P0=~(0x01<<a);
    }
   }
 }

Proteus仿真电路图如下:

img

  • 写回答

32条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-11-14 19:45
    关注
    获得0.30元问题酬金

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在使用PROTEUS进行单片机编程时,如果仅执行一次按键,那么可能是因为PROTEUS没有正确处理输入信号或设置错误的编程模式。为了解决这个问题,你可以按照以下步骤操作:

    1. 确保正确的编程模式

    确保你的PROTEUS程序中设置了正确的编程模式。通常,PROTEUS会自动识别并执行特定的编程模式,例如单步、多步等。

    2. 检查编程模式是否正确

    检查你的程序是否符合编程模式的要求。通常,PROTEUS会提供多种编程模式供你选择,如单步、多步、定时器、中断等。确保你在使用这些模式时,程序中的所有变量和指令都按要求运行。

    3. 重新编写程序

    尝试修改你的程序以使其符合编程模式的要求。如果你发现程序无法正常工作,这可能是由于未正确配置的编程模式引起的。

    4. 使用调试工具

    如果以上方法都无法解决问题,可以考虑使用调试工具来进一步分析问题。PROTEUS提供了丰富的调试选项,可以帮助你定位问题所在。

    5. 查看故障信息

    有时候,简单的错误提示可能会揭示问题的根本原因。查看程序中可能出现的错误消息或者调试报告,可能能帮助找到问题的具体位置。

    结论

    解决PROTEUS仿真程序按键无效的问题需要综合考虑多种因素,包括编程模式的正确设置、程序逻辑的清晰性以及对异常情况的应对策略。通过上述步骤,应该能够有效解决你的问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 创建了问题 11月14日

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联