MISO脚读回数据有误

[复制链接]
822|21
手机看帖
扫描二维码
随时随地手机跟帖
morrisk|  楼主 | 2020-1-1 15:10 | 显示全部楼层 |阅读模式
IC16F1503的MSSP配置为SPI与芯片通信,MISO脚读回数据有误

使用特权

评论回复
zhuhuis| | 2020-1-1 15:14 | 显示全部楼层
详细说说

使用特权

评论回复
morrisk|  楼主 | 2020-1-1 15:22 | 显示全部楼层
使用PIC16F1503利用SPI口对LT8900进行读写操作。
通过示波器观察波形,现在发现:写进去的字节波形是对的,但是读回来的字节波形有对的,也有错的

使用特权

评论回复
gongche| | 2020-1-1 15:25 | 显示全部楼层
MISO返回的数据是有误的?

使用特权

评论回复
morrisk|  楼主 | 2020-1-1 15:28 | 显示全部楼层

硬件上,SCK,MISO,MOSI和芯片是直接连接的,没加上拉或下拉电阻
问题到底出在哪呢

使用特权

评论回复
huanghuac| | 2020-1-1 15:32 | 显示全部楼层
配置看下

使用特权

评论回复
morrisk|  楼主 | 2020-1-1 15:34 | 显示全部楼层
对SPI的配置如下:
void SPI_Init(void)
{
    TRISCbits.TRISC0 = 0;   //SCK引脚设置为输出
    TRISCbits.TRISC1 = 1;   //MISO引脚设置为输入
    TRISCbits.TRISC2 = 0;   //MOSI引脚设置为输出
    TRISCbits.TRISC4 = 0;   //片选引脚设置为输出
    APFCONbits.SDOSEL = 0;  //SDO功能在引脚 RC2-
    //配置SPI的格式               //1,1,1或者0,0,0
    SSP1STAT |= (0X01 << 7);
    SSP1CON1 = 0X21;       //SPI Master mode,clock = Fosc/16 = 1Mhz,使能SPI
}

//SPI接口发送和接收数据函数
static unsigned char SPI_SendReadByte(unsigned char dat)
{
    unsigned char readbyte;
  //  SSP1CON1bits.WCOL = 0;   //清楚写冲突标志位(WCOL),允许写SSP1BUF寄存器
    PIR1bits.SSP1IF = 0;
  //  SSP1CON1bits.SSPOV = 0;
    SSP1BUF = dat;
    while(!PIR1bits.SSP1IF);
    PIR1bits.SSP1IF = 0;
    while(!SSP1STATbits.BF);
    readbyte = SSP1BUF;        //读取接收缓冲器中的数据
   // PIR1bits.SSP1IF = 0;  //清除接收完成标志位
    return readbyte;      //返回接收到的数据
}

unsigned int LT_ReadReg(unsigned char reg)
{
    unsigned char ReadValueH,ReadValueL;
    LATCbits.LATC4 = 0;           //片选引脚拉低,使能
    SPI_SendReadByte(reg+0X80);    //读取寄存器的值
    Delay_5us;
    ReadValueH = SPI_SendReadByte(0X00);
    ReadValueL = SPI_SendReadByte(0X00);
    Delay_5us;
    LATCbits.LATC4 = 1;
    return (ReadValueH << 8 + ReadValueL);  //返回读取到的寄存器值
}


使用特权

评论回复
wenfen| | 2020-1-1 15:43 | 显示全部楼层
unsigned char ReadValueH 定义成int试试?

使用特权

评论回复
morrisk|  楼主 | 2020-1-1 15:48 | 显示全部楼层
这个貌似没什么关系的吧。

使用特权

评论回复
hanwe| | 2020-1-1 15:51 | 显示全部楼层
ReadValueH char类型直接左移8位不溢出?

使用特权

评论回复
morrisk|  楼主 | 2020-1-1 15:54 | 显示全部楼层
我现在都已经改成 unsgiend int 类型了。。。没改变啊??

使用特权

评论回复
songqian17| | 2020-1-1 15:58 | 显示全部楼层
不懂

使用特权

评论回复
songqian17| | 2020-1-1 16:00 | 显示全部楼层
ReadValueH << 8  加括号  +优先级高·

使用特权

评论回复
chuxh| | 2020-1-1 16:02 | 显示全部楼层

MISO引脚弄一个上拉试试

使用特权

评论回复
morrisk|  楼主 | 2020-1-11 21:10 | 显示全部楼层
我外部已经接了一个上拉电阻,并且用I/O口模拟了SPI协议,与LT8900进行通信。通过示波器查看波形。

使用特权

评论回复
gongche| | 2020-1-11 21:14 | 显示全部楼层
你现在的情况是什么?

使用特权

评论回复
morrisk|  楼主 | 2020-1-11 21:17 | 显示全部楼层
在MOSI引脚看到的波形是正确的,但是再MISO引脚上看到的波形和我要读回来的正确波形是有出入的

使用特权

评论回复
stly| | 2020-1-11 21:20 | 显示全部楼层
MISO的输出是有你代码决定的,要查代码了

使用特权

评论回复
supernan| | 2020-1-11 21:23 | 显示全部楼层
或者你把手到的数据直接回发,看看MISO引脚输出对不对?

使用特权

评论回复
chenjunt| | 2020-1-11 21:27 | 显示全部楼层
这个什么问题,后来解决了没有?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝