各位朋友:
我模拟SPI控制MCPS6S28芯片的方法不能进行通道转换,MCPS6S28芯片总是处在默认的0通道1增益的模式下,请帮我看看我的这段程序是否有问题,延时时间基本遵循MCPS6S28芯片的spi时序说明,谢谢各位!
/* **************************************************************** ** 函 数 名: MCP6S28_SPI() ** 功能描述: MCU通过模拟SPI,对MCP6S28进行通道,增益控制 ******************************************************************/
void MCP6S28_SPI(void) { unsigned char i = 0; mcp6s28_order = 0b01000001; //每次更换通道时都要发送一次通道 //寄存器(通道数值)//通道命令字 mcp6s28_interim_data = 1;//写入通道的数值 1通道 //RC2 = 1;//片选 -CS //RB4 = 1;//时钟 SCK //RB5 SI单片机发送端口 RB4 = 0;//时钟 //sck初始状态为低电平 Nop(); //>=10ns Nop(); Nop(); Nop(); RC2 = 1;//片选 >=40ns Nop(); //>=40ns Nop(); Nop(); RC2 = 0;//片选-CS清成低电平 启动6s28器件的通讯 Nop();//延时一段时间 Nop();//延时一段时间 for( i = 0; i < 8 ; i ++ )//连续发送命令字 //(mcp6s28_order)的8个位数据 { //先发指令字的高位然后发指令字底位,再发通道寄存器 //的高位,最后发通道)寄存器的低位 if(( (mcp6s28_order << i ) & 0x80 ) == 0x80 ) //将 //mcp6s28_order向左边移 //动0位,1位.....8位,由 //于i 的控制就可以先发 //送高位后发送地位, { //该位等于1 RB5 = 1; //将要发送的数据位放到 R5 上,并连接 //到mcp6s28的SI口,进入mcp6s28芯片 } else //表明该位等于0 { RB5 = 0; //将要发送的数据位放到 RB5 上,并连接 //到mcp6s28的SI口,进入芯片 } Nop(); //>=40ns 延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 RB4 = 1; //sck置成高电平 1 Nop(); //>=40ns //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 RB4 = 0; //sc清为低电平 0
} for( i = 0; i < 8 ; i ++ ) //连续发送通道寄存器的8个位 { //数据(mcp6s28_interim_data if(( (mcp6s28_interim_data << i ) & 0x80) == 0x80 ) //将 //mcp6s28_interim_data向左边移动0 //位,1位.....8位,由于i 的控制就可 //以先发送高位后发送地位,
{ //该位等于1 RB5 = 1; //将要发送的数据位放到 RB5 上,并连接到mcp6s28 //的SI口,进入芯片 } else // 表明该位等于0 { RB5 = 0; //将要发送的数据位放到 RB5 上,并连接到 //mcp6s28的SI口,进入芯片 } Nop(); //>=40ns //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 RB4 = 1; //sck置成高电平 1 Nop(); //>=40ns //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 Nop(); //延时一段时间 RB4 = 0; //sc清为低电平
Nop(); //>=30ns //延时一段时间 Nop();//延时一段时间 Nop();//延时一段时间 Nop();//延时一段时间 RC2 = 1;//在2个字节都发送完后将CS清成高电平,本次(命令,数据)发送完 Nop(); //>=100ns //延时一段时间 Nop(); //延时一段时间 Nop();//延时一段时间 Nop();//延时一段时间 Nop();//延时一段时间
}
void main (void) { port_initia( );//所有端口进行初始化 while (1) { MCP6S28_SPI( ); //发送通道控制 } }
|