完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
有没有大神告诉我(bit)(temp&0x8000)是什么意思啊?主要是里面的bit不知道什么意思,因为这是从51改成msp的程序,然后bit没有定义,我不知道怎么回事。。。还有就是
PinDIN=(bit)(temp&0x8000);这是完整的那一句程序,PinDIN也没有定义啊 这是主函数 #include #include #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 #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 #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); } |
|
相关推荐
4个回答
|
|
看格式应该是类型强制转换。转换成bit型。
|
|
|
|
应该是转成二进制。temp与0x8000位与
|
|
|
|
(bit)(temp&0x8000) bit强制类型转换 其实简单点理解就是temp的最该位为0或者1
你把别人的程序拷过来PinDIN这个就是一个引脚的定义,找到是哪个引脚定义下就OK了 |
|
|
|
其实可以去掉。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
770 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
544 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
677 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
904 浏览 2 评论
649 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11991 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 18:36 , Processed in 0.573721 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号