微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序问题求助

程序问题求助

时间: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);
}


看格式应该是类型强制转换。转换成bit型。

应该是转成二进制。temp与0x8000位与

(bit)(temp&0x8000)   bit强制类型转换  其实简单点理解就是temp的最该位为0或者1
你把别人的程序拷过来PinDIN这个就是一个引脚的定义,找到是哪个引脚定义下就OK了

其实可以去掉。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top