完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
菜鸟求助:MSP430F149,SPI ,读ADT7320温度值,单步运行可以读取数值,可是全速运行是读取的全是0,求大神指点迷津,下面是小弟完整程序。
//ADT7320测温(SPI测试版) #include #include #include #include #define continous_16 0x54 //连续读取16位 #define wr_config 0x08 //写控制寄存器命令 #define one_shot 0x20 //读数模式 typedef unsigned char uchar; typedef unsigned int uint; /*SPI初始化函数*/ void spiinitad(void) { UCTL1 |= SWRST; UCTL1 |= CHAR + SYNC + MM; //SPI主模式,8为数据 UTCTL1 |= STC + SSEL0 + CKPL; //选定ACLK(32KHZ晶振)为时钟源,3线SPI模式 (CKPH,CKPL)=10 U1BR0 = 0x02; U1BR1 = 0x00; //波特率分频因子为2 UMCTL1 = 0x00; //SPI模式下必须置零 ME2 |= USPIE1; //SPI0模块允许 UCTL1 &= ~SWRST; //SWRST复位,USART允许 P5SEL = 0x0F; //P5.0~P5.3为SPI模块功能 P5DIR = 0x0A; 出模式;P3.2(SOMI)为输入模式 P4SEL = 0x00; //P4为端口模式 P4DIR = 0x40; //P4.6输出(作为片选信号) P4OUT = 0x40; } /*TX0结束判断函数*/ void tx1over(void) { while((UTCTL1 & 0x01)!= 0x01) {;} //如果发送中断标志位为1,跳出 } /*延时函数*/ void Delay(uint time) { uint i; for(i=0;i { ; } } /*SPI数据发送函数*/ int send(int data) { int transdata=0,receivedata=0; transdata = data; P4OUT &= ~0x40; //CS=0 Delay(10); TXBUF1 = transdata; tx1over(); receivedata = RXBUF1; Delay(10); P4OUT |= 0X40; //CS=1 return receivedata; } void reset(void); void shot(void); int rd(void); int TEMP; float T; /*********************************** 函数名称:main 功 能: 主函数 参 数:无 返回值 :无 ************************************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; //关看门狗 while(1) { spiinitad(); //SPI初始化 reset(); //复位 shot(); //读数模式设置 TEMP=rd(); //读数 T=TEMP/128.0; //计算温度值 } } //复位 void reset(void) //复位,连续写32个1,延时500us { int i=0; P4OUT&=~0X40 ;// pull CSB low to start the command Delay(10); for(i=0;i<5;i++) { send(0xff); // send reset sequence } Delay(500); // wait for the reset sequence timing P4OUT=0X40; // pull CSB high to finish the command } void shot(void) //读数模式设置,延时240us { P4OUT&=~0X40 ; send(0x08); send(0x80+0x20); Delay(240); P4OUT=0X40; } int rd(void) //读数子函数 { int ret=0,tp=0; P4OUT&=~0X40 ; //CS=0 send(continous_16); //发送读数命令 Delay(10); ret=send(0x00); //读取第一个字节 Delay(10); tp=tp+256*ret; //左移8位 ret=send(0x00); //读取第二个字节 Delay(10); tp=tp+ret; P4OUT=0X40; return tp; } |
|
相关推荐
2个回答
|
|
延时有问题,初步估计你的延时时间太短了,建议延时加长看看
|
|
|
|
谢谢,是延时问题,现在解决了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
151 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1043 浏览 0 评论
836 浏览 0 评论
874 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 23:37 , Processed in 0.934043 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号