• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

关于dspic30f6014的SPI接口问题

我最近在使用pic30f6014控制数字电位器mcp41010,程序总是没法运行,不知那位高人可以给看一下,谢谢
#include   
//#include

   _FOSC(CSW_FSCM_OFF & XT_PLL4);   //XT with 4xPLL oscillator, Failsafe clock off
   _FWDT(WDT_OFF);                  //Watchdog timer disabled
   _FBORPOR(PBOR_OFF & MCLR_EN);    //Brown-out reset disabled, MCLR reset enabled
   _FGS(CODE_PROT_OFF);             //Code protect disabled

#define Fcy 16000000

void delay(void)
{
short temp;
for (temp=0;temp<255;temp++)
;
}


int main(void)
{
//LATBbits.LATB2 = 1;   //不知此处SS1是否需要配置
//TRISBbits.TRISB2 = 1;


LATF = 0x0000;
TRISF = 0x0080;


while(1)
{

//LATBbits.LATB2 = 0;

IFS0bits.SPI1IF = 0;
IEC0bits.SPI1IE = 1;
IPC2bits.SPI1IP = 0x010;

SPI1BUF = 0x0;           //SPI相关寄存器配置
SPI1STAT = 0x0;
SPI1CON = 0x043C;
SPI1STAT = 0x8000;

LATDbits.LATD10 = 0; //mcp41010的片选CS接在DSP的RD10
SPI1BUF = 0x11F0;     //前八位是命令字,后8位是电阻值
while(!IFS0bits.SPI1IF);  
LATDbits.LATD10 = 1;
//LATBbits.LATB2 = 1;
delay();
}return 1;
}
全部回复(2)
正序查看
倒序查看
shily
LV.1
2
2007-12-06 20:50
请高手不吝赐教
0
回复
liangke
LV.1
3
2008-01-02 08:39
我不是高手.........才学51没多长时间.......最近也做了MCP41010测试....成功了.......和大家一起分享....主要程序如下:

void Write_RES(uchar dat)         //调整数字电位器
{
uchar i,dat1,command=0x11;
dat1=dat;

RES_CS = 1;
SCK = 1;
RES_CS = 0;               //片选   
SCK = 0;

for(i=8;i>0;i--)       //写命令8位
{
command <<= 1;  
DI  = CY;   
SCK = 1;_nop_();
SCK = 0;
}

for(i=8;i>0;i--)          //写数据八位
{
dat1 <<= 1;
DI  = CY;
SCK = 1 ;_nop_();
SCK = 0 ;
}

RES_CS = 1;_nop_();

       //如果不写以下空操作程序,电位器不能连续调整,这点不知道为什么....,说明书上也没讲...我自己花时间调试出来的.....
RES_CS = 0;
         for(i=16;i>0;i--)         //空操作
{
DI  = 0;
SCK = 1 ;_nop_();
SCK = 0 ;
}

RES_CS = 1;_nop_();
DI  = 1;
SCK = 1 ;
}
0
回复