24小时热门版块排行榜    

查看: 235  |  回复: 0
当前主题已经存档。

czxjuren

金虫 (小有名气)

[交流] msp430读写ds1991问题

我写的ds1991读写程序,在51单片机测试过,能正常读写。可用到msp430f2131为啥就不行了呢?
是指令执行的周期引起的吗?
51我用的12M晶振,程序注释中的时间是在51中仿真测试出来的。
51的12M经过12分频后是1M,为了延长同样长的时间,我在430程序中将MCLK配置成1M了,
请问在430中是不是也延长了这么多时间呀?如果不是要延时这么长时间,怎么实现?
我的程序如下:
//******************************************************************************
//  MSP430x2xx Demo - Software Toggle P1.0
//
//  Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
//  ACLK = n/a, MCLK = SMCLK = default DCO
//
//                MSP430x2xx
//             -----------------
//         /|\|              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//            |             P1.0|-->LED
//
//  A. Dannenberg
//  Texas Instruments, Inc
//  January 2006
//  Built with IAR Embedded Workbench Version: 3.40A
//******************************************************************************
#include "msp430x20x1.h"

#define  TM_OUT(level)       P2OUT = ((unsigned int)level) ? (P2IN|BIT4) : (P2IN&~BIT4)
#define  TM_DIR(level)       P2DIR = ((unsigned int)level) ? (P2DIR|BIT4) : (P2DIR&~BIT4)
#define  TM_IN               (P2IN&BIT4)
/******************************
函数功能:测试DS1991是否在线
           DS1991在线则返回1,
           否则返回0
********************************/
unsigned char rest(void)
{
unsigned char i;
unsigned char k=0;
TM_DIR(1);
TM_OUT(0);
for(i=0;i<170;i++);   //512us   //发复位低脉冲tRSTL>80us
  TM_OUT(1);                          //释放总线,等待上拉电阻将总线恢复高电平tPDH=5us~60us
for(i=0;i<1;i++);   //5us
i=0;TM_DIR(0);
do              //等待对方返回低脉冲, tPDL=60us~240us
{
    if(TM_IN==0)
     {
       k=1;
       for(i=0;i<15;i++);   //47us
       i=0;
       do
       {
        if(TM_IN==1)        //等待对方恢复高电平
        break;
       }while(i++<40);
      TM_DIR(1);
      TM_OUT(1);
      for(i=0;i<135;i++);   //482us
      break;
     }

}
while(i++<55);    //530us
TM_DIR(1);
      TM_OUT(1);
for(i=0;i<5;i++);   //27us
return k;

}
/******************************
函数功能:DS1991写数据
           *byte1为数据指针,
           num表示写的数据个数
********************************/
void wrbyte(unsigned char *byte1,unsigned char num)
{
unsigned char i,j,k,byte,temp;
for(k=0;k {
   byte=*(byte1+k);
   for(j=0;j<8;j++)
    {
     temp=(byte>>j)&0x01;  //14us
     TM_OUT(0);  //1us
     i=0; //2us    //总线值低电平tLow1=1us~15us   
     TM_OUT(temp);
     //TM=temp;   //4us//写周期TH=60us-tLow1, 对方在检测到总线=0开始15us后,将总线采样写入
     for(i=0;i<30;i++);   //91us
     TM_OUT(1);
     for(i=0;i<1;i++);   //5us
   }
}
}
/******************************
函数功能:DS1991读数据
           num表示读的数据个数
           函数返回指针
********************************/
unsigned char *rbyte(unsigned char num)
{
unsigned char i,j,k,byte1=0,byte2=0;
unsigned char *pp,temp[8];
for(k=0;k {
    for(j=0;j<8;j++)
     {
      TM_OUT(0);      //总线值低电平tSu<1us
      i=0; //2us      
      TM_OUT(1);       //等待总线数据到达tLOW=1us~15us
      i=1; //2us
      i=2; //2us
      i=0;i=3;i=8;i=9;i=0;TM_DIR(0);
      byte2=(unsigned char)(TM_IN);   //采样周期,对方在检测到总线=0开始15us后,将数据放在总线上,持续时间0~45us
                                   //然后释放总线,总时间共60us-TL.
      byte2=byte2<<7;
      byte1=byte1>>1;
      byte1=byte1|byte2;
      byte2=0;
     for(i=0;i<16;i++);   //40us
     TM_DIR(1); TM_OUT(1);
     for(i=0;i<1;i++);   //5us
     }
     temp[k]=byte1;
  }
  pp=temp;
  return pp;
}

void main(void)
{
  unsigned int i;
  unsigned char  *pp,temp[8]={0};
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  BCSCTL1=CALBC1_1MHZ;                 //将MCLK配置成1M
  DCOCTL=CALDCO_1MHZ;
  for (;
  {
    for(;
    {     
     i=rest();            //测试DS1991是否在线,在线则跳出循环
     if(i==1){break;}
    }
                              
    /////////////  读取8 位家族码48 位唯一的序列号和8 位CRC 校验码
    temp[0]=0x33;
    wrbyte(temp,1);
    pp=rbyte(0x8);
    for(i=0;i<8;i++)
    temp=*(pp+i);

   if(temp[0]==0x02)     //ds1991家族码为02
   {
     i=rest();
   temp[0]=0xcc;     //Skip ROM
   wrbyte(temp,1);
   temp[0]=0x96;temp[1]=0xc0;temp[2]=(0xff-temp[1]);  //Write Scratchpad [96H]
   wrbyte(temp,3);
   temp[0]=0x32;
   wrbyte(temp,1);
    i=rest();
   
   ////////////////////
   i=rest();
   temp[0]=0xcc;
   wrbyte(temp,1);
   temp[0]=0x69;temp[1]=0xc0;temp[2]=(0xff-temp[1]); // Read Scratchpad [69H]
   wrbyte(temp,3);
   pp=rbyte(0x2);
    for(i=0;i<2;i++)
    temp=*(pp+i);
    i=rest();
    i=9;
   }  
   
     
  }
  
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 czxjuren 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[找工作] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +5 ASdOkHsho7FD 2026-08-28 9/450 2026-08-30 11:41 by l0VvVHGBGRLv
[找工作] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +6 ASdOkHsho7FD 2026-08-28 9/450 2026-08-30 11:19 by l0VvVHGBGRLv
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-30 10:33 by winsaint
[考博] 找导师 +4 yuanjiabao 2026-08-29 5/250 2026-08-30 09:52 by onesupeng
[考博] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 gy1nBQXYQJqL 2026-08-29 5/250 2026-08-30 07:05 by ZPa0EcMwuECS
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 gy1nBQXYQJqL 2026-08-29 4/200 2026-08-30 06:57 by ZPa0EcMwuECS
[找工作] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 gy1nBQXYQJqL 2026-08-29 7/350 2026-08-30 06:46 by ZPa0EcMwuECS
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +6 ASdOkHsho7FD 2026-08-28 11/550 2026-08-30 06:00 by ZPa0EcMwuECS
[考研] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +7 ASdOkHsho7FD 2026-08-28 11/550 2026-08-30 05:40 by ZPa0EcMwuECS
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 gy1nBQXYQJqL 2026-08-29 6/300 2026-08-30 01:58 by ZPa0EcMwuECS
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +15 晴天加油 2026-08-26 16/800 2026-08-29 18:28 by symmetry
[基金申请] 国自然评审意见 +13 wangmingqi 2026-08-28 19/950 2026-08-29 10:22 by Poppy1104
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[文学芳草园] 梦想 +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 为什么国自然不能直接公布 +4 bjdxyxy 2026-08-26 4/200 2026-08-26 13:12 by qingmu1201
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
信息提示
请填处理意见