很简单的电路,很简单的程序。
就是读取IO口引脚上输入的电平状态,高电平读出来是1,低电平读出来是0.
使用的是dspic30f6014A的片子,用的PORTD这一组,一共16个IO口,从RD0到RD15。
先初始化IO口为输入方向。
TRISD=0XFFFF;
然后在主程序中while(1)死循环中读取PORTD的状态,因为PORTD是16位,因此用串口分两次发上来看,先发高8位,再发低8位。
while(U1STAbits.TRMT==0){} //串口发数据
U1TXREG=PORTD>>8; //发送高8位的电平状态值
while(U1STAbits.TRMT==0){} //串口发数据
U1TXREG=PORTD&0x00ff; //发送低8位的电平状态值
但是我连续焊了两块板子,都出现同样的问题,我甚至更好了新的单片机,问题依旧。问题表现是RD8,即高8位的最低位,读上来的总是0,不论该IO口实际输入的电平是高还是低,从串口看总是0。而其余15个IO口的电平从串口发上来均是正确的。
反复确认了硬件,应该没问题,然后看了芯片手册,读IO口的状态就是这样嘛。
不知道到底哪出了问题,怀疑过我使用串口发送数据的程序有问题,这样改过:
先定义:int DI_Status; //开关量输入,整型,16位,正好对应PORTD的16个IO口
然后在主程序中先这样读:
DI_Status=PORTD;
然后:
while(U1STAbits.TRMT==0){} //串口发数据
U1TXREG=(unsigned char)(DI_Status>>8); //高8位
while(U1STAbits.TRMT==0){} //串口发数据
U1TXREG=(unsigned char)(DI_Status&0x00ff); //低8位
问题依旧。
然后这样试过,直接读取有问题的RD8的电平状态:
while(U1STAbits.TRMT==0){} //串口发数据
U1TXREG=PORTDbits.RD8;
问题依旧。
求指导,我通过万用表测量过,当接入RD8的电平发生变化时,RD8引脚上的电平也变化,高对应5V~4.99V,低电平对应0.12V左右。
可是通过串口读上来总为0。 fuck!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>