我正在尝试在PIC18F45K42上使用SMT1来计数RB0引脚上方波的周期。我无法让计数器增加,不确定我在做什么错。如果我理解正确,那么SMT1TMR应该在增加,但不是。 (我也直接检查了SMT1TMRL等,并且没有改变)。
1)我试图做一个普通的计数器,而不是门控,所以我根本不使用Window信号(我不想使用它,我只是想不时地将计数器归零然后检查已到达多少平方周期。
2)根据MPLAB X中暂停的调试器,我将寄存器设置如下(如下图所示)。我将示波器探头直接放在引脚上,可以看到方波到达。我也可以偶尔暂停调试器以读取PORTB,并查看PORTB.0在高电平和低电平之间变化,因此我相信它已被接收。
3)我正在玩由函数发生器产生的20 Hz至约400 Hz的方波。
我已附上寄存器的图像。以下是供参考的值:
SMT1SIGPPS 0x08 (should be RB0)
SMT1CON0 0x80
SMT1CON1 0xC8
SMT1STAT 0x05
SMT1SIG 0x00
TRISB 0xE3
PMD6 0x17 (SMT1MD is 0, which should be "not disabled")
任何建议,不胜感激。看起来应该是如此简单和直接。
谢谢。
我知道了。关键在数据表25.1.2周期匹配中断中。周期寄存器必须设置得比计数器运行的时间更长。默认为0,因此计数器无法递增。通过手动加载3个周期寄存器的最大值来解决此问题...在我的ini代码中添加了以下内容,现在似乎可以正常工作。
SMT1PRU = 0xFF; //set max period for SMT1 so counter doesn't roll over
SMT1PRH = 0xFF;
SMT1PRL = 0xFF;