最近在用DSPIC30F做一项目,其中用到了独立键盘,UART和CAN,还有一个模拟IIC按口的240*128的点阵,
遇到一个很奇怪的问题,如果我进入仿真状态,程序可以正常运行,读到PB口的值为0x3f(PB0~PB5接了6个按键,上拉),按下后相应位为0,UART和CAN和点阵也都可以正常使用,但我退出仿真后UART和CAN可以正常使用,接键读到的值一直是0,可是我明明是上拉的啊,万用表测量也是5V啊,屏也不亮了
#include<p30f4011.h>
#include "uart.h"
#include "type.h"
_FOSC(CSW_FSCM_OFF&XT_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF&MCLR_EN);
_FGS(CODE_PROT_OFF);
这是按键的初始化
void Key_Init()
{
// TRISB |= 0x3f; //将RB0~RB5设为输入
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
TRISBbits.TRISB2 = 1;
TRISBbits.TRISB3 = 1;
TRISBbits.TRISB4 = 1;
TRISBbits.TRISB5 = 1;
}
//main函数
int main(void)
{
uint16_t key_value;
TRISF=0x0000;
Key_Init();
Uart1_Init(6000000, 9600);
Uart1_Send(0x12);//可以正常打印,说明程序已经运行了
while(1)
{
key_value = PORTB; //读一次端口的值
Uart1_Send(PORTB);//不仿真时一直打印0x00,仿真就打印正确值
delayms(1000);
}
}
我用MPLAB X IDE v3.45和MPLAB IDE都试过,结果是一样的,仿真就可以读到按键值,不仿真就读不到
不仿真时确定程序已经运行了,因为串口和CAN口可以正常收发数据
我把我的程序给同事,同事下载到他的板子里也是这样,就明应该是程序的问题
第一次用dspic,搞了几天了都没搞明白是怎么回事,
附件中是完整的工程,有没有遇到过这种问题的大神,求解答
|