我在 PIC24F16KA102 上使用 MPLABX XC16,并尝试从 PIC16 和 mpasm 迁移。
对一些 LED 进行排序的简单循环应该测试每个 LED 开/关之间的开关,然后如果开关未闭合则分支到
GoSleep
。
据我所知,
SwitchTest
函数从未被调用过。
void main(void) {
AD1PCFG = 0xFFFF; // All ports are digital
TRISA = 0x0041; // PORTA bit 0 and 6 input (port 0 = Select Button, port 6 = Wake INT)
__builtin_nop();
TRISB = 0x0000; // PORTB bit all outputs
__builtin_nop();
while (1) {
SwitchTest(); // if the switch is down cycle the LED's
led_step = 0b11000001; // and leave the last one selected on for 1 sec
Display = led_step; // mimic the selection in binary on LED's 5-7
LED1 = LED_ON; // turn on LED1
__delay_ms(2000);
LED1 = LED_OFF; // turn off LED1
SwitchTest();
led_step = 0b10100010;
Display = led_step;
LED2 = LED_ON; // turn on LED2
__delay_ms(2000);
LED2 = LED_OFF; // turn off LED2
}
}
void SwitchTest(void)
{
if (PORTAbits.RA0 == 0)
{ // Is the Status Button pressed (low = 0)
__delay_ms(25);
if (PORTAbits.RA0 == 0)
{
return; // Yes, resume main loop
}
}
else // No, Sleep
{
GoSleep();
}
}
按下/释放开关时,RA0 上的外部上拉电阻和引脚会正确切换。
尝试使用正确连接的 PICKit 进行调试失败(指出位设置不正确,但不显示哪些位),尽管运行了代码(在 MPLABX 中),但当 PICKit/MPLABX 断开且外部电源断开时,该 PIC 不会保留代码已应用。
我刚刚阅读了该 PIC 的勘误表,似乎 RA0 和 RB0 以及其他功能存在重大问题。刚刚用 RA1 进行了测试,它似乎有效。我尝试迁移到更现代的代码和 PIC 是正确的。