求助:dsPIC单片机键盘ICD2调试没问题,烧写到板子上单独执行出问题

2020-02-09 09:37发布

RT,使用dsPIC30F5015。刚刚上手,从初始的I/O端口操作学习开始
编写如下程序
#include "p30f5015.h"
// Macros for Configuration Fuse Registers (copied from device header file):
_FOSC(CSW_FSCM_OFF & XT_PLL8);  //Set up for Crystal multiplied by 8x PLL
_FWDT(WDT_OFF);                 //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF);   // Enable MCLR reset pin and turn off the power-up timers.
_FGS(CODE_PROT_OFF);            // Disable Code Protection


#define   S1        PORTBbits.RB15   //S1为按键
#define   STATUS    PORTCbits.RC14   //STATUS接到发光二极管的负端
#define   NOP( )  {__asm__ volatile ("nop");}

int main()
{
        INTCON1=0x0000;  //关闭所有中断
        INTCON2=0x0000;
       
        PORTC=0x4000;    //初始化RC端口
        NOP( );
        TRISC=0x0000;    //设置RC14为输出
        NOP( );


        while(1)
        {
                PORTB=0xffff;//初始化RB端口
                NOP( );
                TRISB=0xff00;//设置RB15为输入
                NOP( );
               
                STATUS=S1;
        }
        return 0;       
}

按理说不按键led亮,按键后led灭。用ICD2调试没问题,很正常,然而烧写到板子上后LED一直亮着,按键也不灭。已使用万用表测出按钮电平变化正常(不按时为高电平,按时为低电平,S1串接1k电阻到电源,并联0.1uF电容。)

使用RC13口代替RB15口一切正常。
望各位高手路过的指点小弟一下,不甚感激!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Apis
1楼-- · 2020-02-09 14:53
感觉可能与PB口同时有AD输入有关,可惜datasheet里找不到说明
许多例程里也没有类似情况
Apis
2楼-- · 2020-02-09 19:14
嘻嘻,搞了两天的问题,解决了
初始化部分加一句

ADPCFG = 0xFFFF;//配置为数字通道

之前有人也是这样,dsPIC单片机默认复位后RB口为模拟输入通道,当读取端口寄存器时,所有配置为模拟输入通道的引脚都将读为零(低电平)

一周热门 更多>