我为8位PIC单片机编写了一个hello-world程序,并希望在MPLAB X IDE模拟器上运行它。
我想在其引脚上创建一个激励,并将结果显示在微控制器的寄存器中,该寄存器对应于输入引脚(在寄存器上设置了一个监视器)。
到目前为止我所取得的成果:程序似乎在模拟器上正常运行,我可以创建一个“异步”激励,即激发一个刺激的变化(例如在输入引脚上应用逻辑0)我点击“开火”按钮。这会更改PORTC
寄存器的内容。然而,我无法使“同步”激励工作(例如,自动切换应用于输入引脚的激励逻辑值)。 PORTC
不会改变。 (但模拟器输出表明正在应用刺激)。
Microchip已经为MPLAB 8.x IDE模拟器编写了一些示例,我尝试将其应用于MPLAB X(v2.0),但我无法正常工作。为了确定我做错了什么,(或者如果我遇到了错误),也许有人可以通过以下方式之一提供帮助:
这就是我的尝试:
所遵循的步骤摘要:
main.c
PORTC
特殊功能寄存器PORTC
寄存器的更改。在MPLAB X IDE中使用源文件main.c
创建一个新项目,并选择“PIC16F77”作为目标设备:
#include <htc.h>
__CONFIG(
FOSC_HS
& WDTE_OFF
& PWRTE_OFF
& BOREN_OFF
);
void main(void) {
// set tristate port directions: 1=input, 0=output
TRISC = 0b11111111;
while (1);
}
我在PORTC
SFR注册表中添加了一个变量监视:
在窗口/标签Stimulus > Asynchronous
中配置异步激励:
在窗口/标签Stimulus > Pin/Register Actions
最后:
我构建项目,在调试模式下运行,暂停,并单步执行该程序。
当我点击异步激励的“fire”按钮然后单击Step-Over按钮时,PORTC寄存器中的值会按预期变化。
但是当通过该程序时,同步刺激似乎永远不会产生任何影响。看起来刺激被反复应用,但对PORTC
寄存器中的值没有影响。可以在窗口/标签中看到:Output > Stimulus
正在应用刺激:
我不明白为什么异步刺激工作正常,但似乎应用了同步刺激,但没有产生预期的效果。
答案 0 :(得分:0)
问题是通过Pin / Register Actions选项卡设置的同步PORTC激励没有改变输入引脚上的值。相反,它设置PORTC寄存器的值,因此仅在TRISC在C代码中设置为OUTPUT时影响寄存器中的值,即0b00000000。
我还没有弄清楚如何在输入时同步设置引脚的值。