16PIC877A用C代码复位

16PIC877A用C代码复位,c,microcontroller,pic,C,Microcontroller,Pic,我正在使用PIC16F877a,我需要在不使用按钮的情况下重置程序。当我查看数据表和参考设计时,MLCR引脚上有一个按钮。若按下按钮,MCU复位。但我需要重置,可以用C代码控制,我不想使用重置按钮。还有其他方法吗?PIC 8位MCU有软件复位装配说明: RESET 您必须使用内联程序集。我从未对PIC使用过内联汇编,但从它看来,这是MPLAB的正确语法: void soft_reset(void) { _asm reset _endasm } 请注意,正如

我正在使用PIC16F877a,我需要在不使用按钮的情况下重置程序。当我查看数据表和参考设计时,MLCR引脚上有一个按钮。若按下按钮,MCU复位。但我需要重置,可以用C代码控制,我不想使用重置按钮。还有其他方法吗?

PIC 8位MCU有软件复位装配说明:

RESET

您必须使用内联程序集。我从未对PIC使用过内联汇编,但从它看来,这是MPLAB的正确语法:

void soft_reset(void)
{
    _asm
        reset
    _endasm
}

请注意,正如链接页面所述,外部看门狗定时器通常是触发完整系统重置的更好方法。通过软复位,外部设备也不会复位。使用外部WDT,您只需停止触摸看门狗,然后它就会重置整个电路板。

MPLABX XC16的格式(假设您使用的是编译器)为:

根据您的处理器,您还可以在启动时检查
RCON
寄存器的内容,以找出复位的原因(MCLR、软件、看门狗定时器、断电等)。

对于XC8,使用#asm和#endasm。使用XC8手册中的示例

#asm
RESET
#endasm

// do it again the other way...
asm("RESET");

微控制器需要在程序执行前达到已知状态。重置通常由外部源的硬件信号生成,例如,您可能会在开发板上找到重置按钮。大多数微控制器设备都有用于复位的输入引脚。

代码不工作。“Asm”是未知标识符。我不知道wdt是如何设置的。我试试。你用的是什么编译器?我假设GCC。更新了我对MPLAB.WDT的回答,我认为是控制整个过程。我只需要一次复位。我的意思是你们有一个程序,程序是从第一行到最后一行完成的,pic将被重置。就是这样。WDT对此很复杂。我说得对吗?@Jonathon Reinhart:PIC16F系列没有reset汇编指令,18F系列有。可以使用看门狗超时解决方案,也可以使用上拉电阻器将输出引脚连接到MCLR,将MCLR连接到VCC。将输出引脚设置为低将硬件重置。通过设置WDT(看门狗定时器)而不定期禁用(不调用
CLRWDT
指令),PIC将在短延迟后重置。通过调用会导致内部堆栈溢出的递归函数。它的深度为8,所以这将是快速的。通过向复位引脚输出信号,可能使用muxer或类似的东西在硬件和软件输入之间进行选择,您还可以触发软件中的复位。可能是XC8,因为16F877是一个8位控制器,这是正确的。编译器是XC8。
#asm
RESET
#endasm

// do it again the other way...
asm("RESET");