MSP430接MAX6675测温芯片问题

cq1988114 2013-04-23 05:27:23
我仿照论坛上51单片机接MAX6675的程序,在MSP430F149上面写,但为什么一直都输出0?而且硬件单步仿真看芯片数据口SO一直都是0,没有变化
难道MSP430驱动MAX6675和用51单片机驱动不一样?

附上程序:
#define CS_SET P5OUT|=BIT5
#define CS_CLR P5OUT&=~BIT5
#define SCK_SET P5OUT|=BIT4
#define SCK_CLR P5OUT&=~BIT4
#define SO P5IN&BIT6
void wendu_init()
{
P5SEL=0X00;
P5DIR|=BIT5 + BIT4;
P5DIR&=~BIT6;
}
void Re_Convert() //热电偶数据读取,返回温度
{
uchar i;
// CS_SET;

CS_CLR;
_NOP();
_NOP();
CS_CLR;
SCK_CLR;
for(i=0;i<16;i++)//16位数据读取
{ Temp_2<<=1;//向左移一位
_NOP();
SCK_SET;//上升
_NOP();
SCK_CLR;
if(SO==1)
{
Temp_2|=0x01;
}
else
{
Temp_2|=0x00;
}
_NOP();
}
CS_SET;
_NOP();
_NOP();
delay_ms(500);
}
...全文
386 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨立 2014-05-06
  • 打赏
  • 举报
回复
楼主好人 能把整个程序发给我吗?
Joy-choi 2013-09-04
  • 打赏
  • 举报
回复
版主~有用到TI的MSP430系列的芯片可以找我,代理优势价格支持!QQ,183551765,电话:13480967768
cq1988114 2013-06-19
  • 打赏
  • 举报
回复
引用 5 楼 leoelison 的回复:
看到你发的帖子,我刚好也在用430板子做这个温度检测,但是程序很头疼,我按照你的把程序烧了下,不行哦,下面是我的程序: 延时改了很多都不行,输出都是0,帮我看看问题所在!
我看了你的程序,感觉有两个问题 ① SO的数据传出来后,延时必须很长,MS级别 你才US太少了 你试试500MS左右,多看看芯片DATA时序图,一个延时一个延时的查 ② 你的Re_Convert()函数应该放在一个循环里,否则,就只能执行一次,即使温度变化,数据没反应。
leoelison 2013-04-28
  • 打赏
  • 举报
回复
看到你发的帖子,我刚好也在用430板子做这个温度检测,但是程序很头疼,我按照你的把程序烧了下,不行哦,下面是我的程序: #include <msp430x16x.h> #define CS_SET P5OUT|=BIT5 #define CS_CLR P5OUT&=~BIT5 #define SCK_SET P5OUT|=BIT4 #define SCK_CLR P5OUT&=~BIT4 #define SO P5IN&BIT6 void Re_Convert();void Delay10us(void); void main() { WDTCTL = WDTPW+WDTHOLD; P5DIR|=BIT5 + BIT4; P5DIR&=~BIT6; Re_Convert(); LPM4; } void Re_Convert() //热电偶数据读取,返回温度 { int i; P4DIR|=0xff; long int Temp_2=0x000; CS_SET; SCK_CLR; Delay10us(); CS_CLR; Delay10us(); for(i=0;i<16;i++)//16位数据读取 { SCK_SET;//上 Temp_2<<=1;//向左移一位 if(SO) Temp_2=Temp_2|0x01; SCK_CLR; Delay10us(); } CS_SET; chuank(Temp_2); } void Delay10us(void) { long int i=80; while (i != 0) { i--; } } 延时改了很多都不行,输出都是0,帮我看看问题所在!
cq1988114 2013-04-26
  • 打赏
  • 举报
回复
已经找到原因了,请注意上面的代码 “if(SO==1)” 这个用在51里是可以的,因为51有位定义,但MSP430没有,所以虽然宏定义了SO (P3IN&BIT6) 但在IAR环境里若SO置高应该是0100000 而不是0 所以SO要么等于64,要么等于0,断不能等于1的,自然上面的IF,根本就进不去 把if(SO==1)改为 if(SO) 就可以了 当然,芯片驱动的时序上面的代码还是有点问题,不过自己按着文档改就行了,关键是SO的值,被忽视了是个大问题
lbing7 2013-04-24
  • 打赏
  • 举报
回复
引用 2 楼 cq1988114 的回复:
引用 1 楼 lbing7 的回复:是不是速度快了? 加点延时看看,另外,IO上的电平够不够 请问IO电平是指MAX6675的VCC引脚吗,我接的5V 延时应该加在哪个位置呢?上面的程序我在CS=1后面已经加了0.5S的延时了,但还是显示0
MSP430我印象中是3.3的电平,不知道这个电平能不能让对应的芯片认可?
cq1988114 2013-04-24
  • 打赏
  • 举报
回复
引用 1 楼 lbing7 的回复:
是不是速度快了? 加点延时看看,另外,IO上的电平够不够
请问IO电平是指MAX6675的VCC引脚吗,我接的5V 延时应该加在哪个位置呢?上面的程序我在CS=1后面已经加了0.5S的延时了,但还是显示0
lbing7 2013-04-24
  • 打赏
  • 举报
回复
是不是速度快了? 加点延时看看,另外,IO上的电平够不够

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧