打印
[国产单片机]

15W4K56S4SPI模块与端口扩展芯片MCP23S17通信不成功

[复制链接]
927|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxys_1988|  楼主 | 2016-2-16 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
附源程序希望大神帮忙看看,示波器测试波形都是有的。
#include   "my_include.h"
#define   MCP_ADDR  0x40
#define   IODIRA    0x00
#define   IODIRB    0x01
#define   IOCONA    0x0A
#define   IOCONB    0x0B
#define   GPIOA     0x12
#define   GPIOB     0x13
#define   OLATA     0x14
#define   OLATB     0x15
#define   SPIF      0x80
#define   WCOL      0x40
sbit CS2 = P1^0;                                //U2片选       
sbit CS3 = P1^1;                                //U3片选
sbit CS4 = P1^2;                                //U4片选
sbit CS5 = P1^6;                                //U5片选
sbit CS6 = P1^7;                                //U6片选(低有效)
sbit LED19 = P2^4;
sbit LED18 = P2^5;
sbit LED17 = P2^6;
sbit LED21 = P3^7;
void GPIO_config (void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                                //结构定义
        GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_7;        //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
        GPIO_InitStructure.Mode = GPIO_PullUp;                                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);                        //初始化

           GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;                    //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
        GPIO_InitStructure.Mode = GPIO_PullUp;                                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);                        //初始化

        GPIO_InitStructure.Pin  = GPIO_Pin_7;                    //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
        GPIO_InitStructure.Mode = GPIO_PullUp;                                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
}
void SPI_init (void)
{       
        SPCTL = 0xD0;
        SPDAT = 0;
        SPSTAT = SPIF | WCOL;       
}
void SPI_Write_Byte (u8 dat)
{
    SPDAT = dat;                                               
        while (!(SPSTAT & SPIF));            
    SPSTAT=SPIF|WCOL;      
}
u8 SPI_Read_Byte (void)
{
        u8 SPI_dat;
    SPDAT=0xFF;
        while (!(SPSTAT & SPIF));                          
    SPI_dat=SPDAT;
        SPSTAT=SPIF|WCOL;
        return SPI_dat;
}
void Wirte_MCP23S17 (u8 Device_Add, u8 Reg_Add, u8 dat)
{
        CS6 = 0;
        SPI_Write_Byte (Device_Add);         
        SPI_Write_Byte (Reg_Add);
        SPI_Write_Byte (dat);
        CS6 = 1;       
}
void Init_MCP23S17 ()
{
       
       
        Wirte_MCP23S17 (MCP_ADDR,IODIRA,0x00);
        Wirte_MCP23S17 (MCP_ADDR,IODIRB,0x00);
        Wirte_MCP23S17 (MCP_ADDR,GPIOA,0xFF);
        Wirte_MCP23S17 (MCP_ADDR,GPIOB,0xFF);       
}
void main (void)
{
        LED19 = 0;       
        GPIO_config ();
        GPIO_PWMInit(GPIO_PWM2,GPIO_PullUp);//设置为准双向口 凡是跟PWM相关的IO口上电都是高阻输入态
        GPIO_PWMInit(GPIO_PWM3,GPIO_PullUp);
        GPIO_PWMInit(GPIO_PWM4,GPIO_PullUp);
        GPIO_PWMInit(GPIO_PWM5,GPIO_PullUp);
        GPIO_PWMInit(GPIO_PWM6,GPIO_PullUp);
        GPIO_PWMInit(GPIO_PWM7,GPIO_PullUp);
        SPI_init ();
        Init_MCP23S17 ();                       
        while (1)
        {                                                       
                Wirte_MCP23S17 (MCP_ADDR,GPIOA,0x00);
                Wirte_MCP23S17 (MCP_ADDR,GPIOB,0x00);                                                                                               
        }
}

相关帖子

沙发
yxys_1988|  楼主 | 2016-2-16 16:47 | 只看该作者
希望大神解答(有偿)

使用特权

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

本版积分规则

6

主题

25

帖子

0

粉丝