MISO脚读回数据有误

[复制链接]
1278|21
 楼主| morrisk 发表于 2021-5-5 15:49 | 显示全部楼层 |阅读模式
IC16F1503的MSSP配置为SPI与芯片通信,MISO脚读回数据有误
zhuhuis 发表于 2021-5-5 15:51 | 显示全部楼层
详细说说
 楼主| morrisk 发表于 2021-5-5 15:53 | 显示全部楼层
使用PIC16F1503利用SPI口对LT8900进行读写操作。
通过示波器观察波形,现在发现:写进去的字节波形是对的,但是读回来的字节波形有对的,也有错的
gongche 发表于 2021-5-5 15:55 | 显示全部楼层
MISO返回的数据是有误的?
 楼主| morrisk 发表于 2021-5-5 16:02 | 显示全部楼层

硬件上,SCK,MISO,MOSI和芯片是直接连接的,没加上拉或下拉电阻
问题到底出在哪呢
huanghuac 发表于 2021-5-5 16:04 | 显示全部楼层
配置看下
 楼主| morrisk 发表于 2021-5-5 16:06 | 显示全部楼层
对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 发表于 2021-5-5 16:08 | 显示全部楼层
unsigned char ReadValueH 定义成int试试?
 楼主| morrisk 发表于 2021-5-5 16:10 | 显示全部楼层
这个貌似没什么关系的吧。
jiajs 发表于 2021-5-5 16:12 | 显示全部楼层
ReadValueH char类型直接左移8位不溢出?
 楼主| morrisk 发表于 2021-5-5 16:15 | 显示全部楼层
我现在都已经改成 unsgiend int 类型了。。。没改变啊??
songqian17 发表于 2021-5-5 16:17 | 显示全部楼层
dengdc 发表于 2021-5-5 16:19 | 显示全部楼层
ReadValueH << 8  加括号  +优先级高·
chuxh 发表于 2021-5-5 16:26 | 显示全部楼层
MISO引脚弄一个上拉试试
 楼主| morrisk 发表于 2021-5-5 16:27 | 显示全部楼层
我外部已经接了一个上拉电阻,并且用I/O口模拟了SPI协议,与LT8900进行通信。通过示波器查看波形。
gongche 发表于 2021-5-5 16:29 | 显示全部楼层
你现在的情况是什么?
 楼主| morrisk 发表于 2021-5-5 16:31 | 显示全部楼层
在MOSI引脚看到的波形是正确的,但是再MISO引脚上看到的波形和我要读回来的正确波形是有出入的
stly 发表于 2021-5-5 16:34 | 显示全部楼层
MISO的输出是有你代码决定的,要查代码了
supernan 发表于 2021-5-5 16:36 | 显示全部楼层
或者你把手到的数据直接回发,看看MISO引脚输出对不对?
chenjunt 发表于 2021-5-5 16:38 | 显示全部楼层
这个什么问题,后来解决了没有?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部