【问题标题】:Simulator Hello World in MPLAB IDE: Put stimulus on pins using Pin/Register ActionsMPLAB IDE 中的模拟器 Hello World:使用引脚/寄存器操作对引脚施加激励
【发布时间】:2014-03-02 12:03:43
【问题描述】:

我为 8 位 PIC 微控制器编写了一个 hello-world 程序,并希望在 MPLAB X IDE 模拟器上运行它。

我想在其引脚上创建一个刺激,并将结果显示在与输入引脚相对应的微控制器寄存器中(在寄存器上设置了手表)。

到目前为止我所取得的成就:该程序似乎在模拟器上运行良好,并且我可以创建一个“异步”刺激,即在以下情况下触发刺激的变化(例如在输入引脚上应用逻辑 0)我点击“开火”按钮。这会更改PORTC 寄存器的内容。但是,我无法让“同步”刺激起作用(例如,自动切换应用于输入引脚的刺激逻辑值)。 PORTC 不会改变。 (但模拟器输出表明正在应用刺激)。

Microchip 为 MPLAB 8.x IDE 模拟器编写了一些示例,我尝试将其应用于 MPLAB X (v2.0),但无法正常工作。为了确定我做错了什么(或者如果我遇到了错误),也许有人可以通过以下方式之一提供帮助:

  • 举一个工作的 hello-world 的例子
  • 发现我所遵循的过程中的任何错误(请参阅下面的步骤)
  • 按照我的步骤,看看问题是否可以复制

这是我尝试过的:

步骤总结:

  1. 创建项目并将目标设备设置为“PIC16F77”
  2. 添加源文件main.c
  3. 设置模拟器为硬件工具,XC8为C编译器
  4. PORTC 特殊功能寄存器上添加变量监视
  5. 配置异步激励
  6. 配置同步激励
  7. 构建项目
  8. 在调试模式下运行
  9. 单步执行程序并查找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 &gt; Asynchronous中配置异步激励:

在窗口/标签Stimulus &gt; Pin/Register Actions配置同步刺激

最后:

我构建项目,在调试模式下运行,暂停并单步执行程序。

当我单击异步激励的“触发”按钮,然后单击 Step-Over 按钮时,PORTC 寄存器中的值会按预期更改。

但是在运行程序时,同步刺激似乎从来没有任何效果。似乎重复应用了刺激,但对PORTC 寄存器中的值没有影响。可以在窗口/选项卡中看到:Output &gt; Stimulus 正在应用刺激:

我不明白为什么异步刺激可以正常工作,但似乎应用了同步刺激但没有产生预期的效果。

【问题讨论】:

    标签: simulator pic mplab


    【解决方案1】:

    问题在于通过 Pin/Register Actions 选项卡设置的同步 PORTC 刺激没有改变输入引脚上的值。相反,它设置 PORTC 寄存器的值,因此只有在 C 代码中将 TRISC 设置为 OUTPUT 时才会影响寄存器中的值,即 0b00000000。

    我还没有弄清楚如何在输入时同步设置引脚的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多