程序问题求助
时间:10-02
整理:3721RD
点击:
有没有大神告诉我(bit)(temp&0x8000)是什么意思啊?主要是里面的bit不知道什么意思,因为这是从51改成msp的程序,然后bit没有定义,我不知道怎么回事。还有就是
PinDIN=(bit)(temp&0x8000);这是完整的那一句程序,PinDIN也没有定义啊
这是主函数
#include<msp430g2553.h>
#include<string.h>
#include "tlv5638.h"
void InitIO( )
{ RST_PinDIN;
RST_CS;
RST_PinSCLK;
}
void main()
{
float i;
InitIO();
while(1)
{ //SetDAC_A(FASTSP,IN_1024,0,1.0);
//SetDAC_B(FASTSP,IN_1024,0,1.0);
SetDAC_AB(SLOESP,IN_2048,0,1,2);
}
}
这是tlv5638的头文件
/*
* tlv5638.c
*
* Created on: 2014-7-31
* Author: Administrator
*/
#include <msp430g2553.h>
#include "tlv5638.h"
//短延时函数:nNop( )
void nNop(uchar i)
{
for(;i>0;i--);
}
//函数功能:长延时
//长延时函数:LongDelay( )
void LongDelay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);
}
}
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(int temp)
{ uint i;
RST_CS;
for(i=0;i<16;i++)
{ PinDIN=(bit)(temp&0x8000);
RST_CS ;
temp<<=1;
nNop(1);
SET_PinSCLK;
nNop(1);
}
SET_CS;
}
//函数功能:将电压值转换为对应的12位数字量
//说明:ref为参考源,ex_ref为当选择外部参考源的电压值,
// out_volt为输出模拟电压值
//将电压值转换为对应的12位数字量函数:VoltToData( )
int VoltToData(uint ref,float ex_ref,float out_volt)
{ int temp;
switch(ref)
{
case EXTERNAL:temp=(int)((out_volt*4096)/(2*ex_ref));
break;
//case IN_1024:temp=(int)((out_volt*4096)/(2*1.024));
break;
case IN_2048:temp=(int)((out_volt*4096)/(2*2.048));
//case IN_2048:temp=out_volt;
break;
default:break;
}
return(temp&0xfff);
}
//函数功能:设置DAC A(即A通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A(即A通道)输出函数:SetDAC_A( )
void SetDAC_A(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x8000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC B(即B通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x0000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC A与DAC B同时输出
//说明:speed为速度模式,ref为参考源选择,
// temp1为A通道需要输出的电压,temp2为B通道需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(uint speed,uint ref,float ex_ref,float temp1,float temp2)
{ int ModCMD;
int DataA,DataB;
ModCMD=0x9000|(speed<<14)|(ref);
DataA=VoltToData(ref,ex_ref,temp1);
DataA=DataA|0x8000|(speed<<14);
DataB=VoltToData(ref,ex_ref,temp2);
DataB=DataB|0x1000|(speed<<14);
SPIWrite(ModCMD);
SPIWrite(DataB);
SPIWrite(DataA);
}
这是tlv5638的c语言源程序
/*
* tlv5638.c
*
* Created on: 2014-7-31
* Author: Administrator
*/
#include <msp430g2553.h>
#include "tlv5638.h"
//短延时函数:nNop( )
void nNop(uchar i)
{
for(;i>0;i--);
}
//函数功能:长延时
//长延时函数:LongDelay( )
void LongDelay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);
}
}
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(int temp)
{ uint i;
RST_CS;
for(i=0;i<16;i++)
{ PinDIN=(bit)(temp&0x8000);
RST_CS ;
temp<<=1;
nNop(1);
SET_PinSCLK;
nNop(1);
}
SET_CS;
}
//函数功能:将电压值转换为对应的12位数字量
//说明:ref为参考源,ex_ref为当选择外部参考源的电压值,
// out_volt为输出模拟电压值
//将电压值转换为对应的12位数字量函数:VoltToData( )
int VoltToData(uint ref,float ex_ref,float out_volt)
{ int temp;
switch(ref)
{
case EXTERNAL:temp=(int)((out_volt*4096)/(2*ex_ref));
break;
//case IN_1024:temp=(int)((out_volt*4096)/(2*1.024));
break;
case IN_2048:temp=(int)((out_volt*4096)/(2*2.048));
//case IN_2048:temp=out_volt;
break;
default:break;
}
return(temp&0xfff);
}
//函数功能:设置DAC A(即A通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A(即A通道)输出函数:SetDAC_A( )
void SetDAC_A(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x8000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC B(即B通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x0000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC A与DAC B同时输出
//说明:speed为速度模式,ref为参考源选择,
// temp1为A通道需要输出的电压,temp2为B通道需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(uint speed,uint ref,float ex_ref,float temp1,float temp2)
{ int ModCMD;
int DataA,DataB;
ModCMD=0x9000|(speed<<14)|(ref);
DataA=VoltToData(ref,ex_ref,temp1);
DataA=DataA|0x8000|(speed<<14);
DataB=VoltToData(ref,ex_ref,temp2);
DataB=DataB|0x1000|(speed<<14);
SPIWrite(ModCMD);
SPIWrite(DataB);
SPIWrite(DataA);
}
PinDIN=(bit)(temp&0x8000);这是完整的那一句程序,PinDIN也没有定义啊
这是主函数
#include<msp430g2553.h>
#include<string.h>
#include "tlv5638.h"
void InitIO( )
{ RST_PinDIN;
RST_CS;
RST_PinSCLK;
}
void main()
{
float i;
InitIO();
while(1)
{ //SetDAC_A(FASTSP,IN_1024,0,1.0);
//SetDAC_B(FASTSP,IN_1024,0,1.0);
SetDAC_AB(SLOESP,IN_2048,0,1,2);
}
}
这是tlv5638的头文件
/*
* tlv5638.c
*
* Created on: 2014-7-31
* Author: Administrator
*/
#include <msp430g2553.h>
#include "tlv5638.h"
//短延时函数:nNop( )
void nNop(uchar i)
{
for(;i>0;i--);
}
//函数功能:长延时
//长延时函数:LongDelay( )
void LongDelay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);
}
}
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(int temp)
{ uint i;
RST_CS;
for(i=0;i<16;i++)
{ PinDIN=(bit)(temp&0x8000);
RST_CS ;
temp<<=1;
nNop(1);
SET_PinSCLK;
nNop(1);
}
SET_CS;
}
//函数功能:将电压值转换为对应的12位数字量
//说明:ref为参考源,ex_ref为当选择外部参考源的电压值,
// out_volt为输出模拟电压值
//将电压值转换为对应的12位数字量函数:VoltToData( )
int VoltToData(uint ref,float ex_ref,float out_volt)
{ int temp;
switch(ref)
{
case EXTERNAL:temp=(int)((out_volt*4096)/(2*ex_ref));
break;
//case IN_1024:temp=(int)((out_volt*4096)/(2*1.024));
break;
case IN_2048:temp=(int)((out_volt*4096)/(2*2.048));
//case IN_2048:temp=out_volt;
break;
default:break;
}
return(temp&0xfff);
}
//函数功能:设置DAC A(即A通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A(即A通道)输出函数:SetDAC_A( )
void SetDAC_A(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x8000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC B(即B通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x0000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC A与DAC B同时输出
//说明:speed为速度模式,ref为参考源选择,
// temp1为A通道需要输出的电压,temp2为B通道需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(uint speed,uint ref,float ex_ref,float temp1,float temp2)
{ int ModCMD;
int DataA,DataB;
ModCMD=0x9000|(speed<<14)|(ref);
DataA=VoltToData(ref,ex_ref,temp1);
DataA=DataA|0x8000|(speed<<14);
DataB=VoltToData(ref,ex_ref,temp2);
DataB=DataB|0x1000|(speed<<14);
SPIWrite(ModCMD);
SPIWrite(DataB);
SPIWrite(DataA);
}
这是tlv5638的c语言源程序
/*
* tlv5638.c
*
* Created on: 2014-7-31
* Author: Administrator
*/
#include <msp430g2553.h>
#include "tlv5638.h"
//短延时函数:nNop( )
void nNop(uchar i)
{
for(;i>0;i--);
}
//函数功能:长延时
//长延时函数:LongDelay( )
void LongDelay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);
}
}
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(int temp)
{ uint i;
RST_CS;
for(i=0;i<16;i++)
{ PinDIN=(bit)(temp&0x8000);
RST_CS ;
temp<<=1;
nNop(1);
SET_PinSCLK;
nNop(1);
}
SET_CS;
}
//函数功能:将电压值转换为对应的12位数字量
//说明:ref为参考源,ex_ref为当选择外部参考源的电压值,
// out_volt为输出模拟电压值
//将电压值转换为对应的12位数字量函数:VoltToData( )
int VoltToData(uint ref,float ex_ref,float out_volt)
{ int temp;
switch(ref)
{
case EXTERNAL:temp=(int)((out_volt*4096)/(2*ex_ref));
break;
//case IN_1024:temp=(int)((out_volt*4096)/(2*1.024));
break;
case IN_2048:temp=(int)((out_volt*4096)/(2*2.048));
//case IN_2048:temp=out_volt;
break;
default:break;
}
return(temp&0xfff);
}
//函数功能:设置DAC A(即A通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A(即A通道)输出函数:SetDAC_A( )
void SetDAC_A(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x8000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC B(即B通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(uint speed,uint ref,float ex_ref,float temp)
{ int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x0000|(speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//函数功能:设置DAC A与DAC B同时输出
//说明:speed为速度模式,ref为参考源选择,
// temp1为A通道需要输出的电压,temp2为B通道需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(uint speed,uint ref,float ex_ref,float temp1,float temp2)
{ int ModCMD;
int DataA,DataB;
ModCMD=0x9000|(speed<<14)|(ref);
DataA=VoltToData(ref,ex_ref,temp1);
DataA=DataA|0x8000|(speed<<14);
DataB=VoltToData(ref,ex_ref,temp2);
DataB=DataB|0x1000|(speed<<14);
SPIWrite(ModCMD);
SPIWrite(DataB);
SPIWrite(DataA);
}
看格式应该是类型强制转换。转换成bit型。
应该是转成二进制。temp与0x8000位与
(bit)(temp&0x8000) bit强制类型转换 其实简单点理解就是temp的最该位为0或者1
你把别人的程序拷过来PinDIN这个就是一个引脚的定义,找到是哪个引脚定义下就OK了
其实可以去掉。