You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Proteus 8 Professional中PIC16F877A程序停止自动循环?

问题描述

MCU设置

Settings of the MCU

Proteus电路

This is the circuit

我编写了一段代码,预期让LED仅闪烁一次,但实际却无限闪烁。请问如何在Proteus 8 Professional模拟器中让该程序停止自动循环?我已正确检查并将代码烧录至PIC16F877A MCU。

代码

#include<pic.h>

#define _XTAL_FREQ 20000000
__CONFIG(0x3D72);

void delay();

void main()
{
    TRISD=0X00;
    PORTD=0X00;
    RD4=1;
    delay();
    RD4=0;
    delay();
}

void delay()
{
    for(int i=0;i<50;i++)
        __delay_ms(10);
}

问题原因

PIC16F877A这类8位PIC单片机,在执行完main()函数后会自动触发复位,程序会从头重新执行,这就是LED无限闪烁的核心原因。

解决方法

只需在main()函数末尾添加代码,让单片机停止执行或进入休眠,阻止程序复位重启:

方法1:进入休眠模式(更节省资源)

配置寄存器后调用休眠指令,修改后的main()函数如下:

void main()
{
    TRISD=0X00;
    PORTD=0X00;
    RD4=1;
    delay();
    RD4=0;
    delay();
    
    INTCON = 0x00;       // 关闭所有中断,避免休眠被意外唤醒
    SLEEP();             // 进入休眠模式,程序停止执行
    while(1);            // 双重保险,防止唤醒后继续执行
}

方法2:添加无限循环

如果不需要休眠,直接在main()末尾加无限循环,让程序停在这里:

void main()
{
    TRISD=0X00;
    PORTD=0X00;
    RD4=1;
    delay();
    RD4=0;
    delay();
    
    while(1); // 无限循环,程序不再重启
}

验证

修改代码后重新编译烧录到Proteus的MCU中,运行模拟器,LED只会闪烁一次后保持熄灭,程序不会再循环执行。

内容的提问来源于stack exchange,提问作者BaumaRanjith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:28:11