打印

MSP430驱动单总线程序

[复制链接]
1306|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dirtwillfly|  楼主 | 2016-2-15 21:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************************************/
/*主系统时钟为8MHZ*                                               */
/********************************************************************/
#include"msp430x16x.h"
#define   uint unsigned int
#define   uchar unsigned char
uint numpass=0;
void ht_init()
{
  _DINT();//关闭所有中断
  _NOP(); //在保护程序之前与关中断之间最少有一步操作。
  P1DIR|=BIT0;//输输出方向
  P1OUT|=BIT0;//输出为0
}
void ht_OK()
{
  _BIS_SR(GIE);//开启所有中断
}
void delay_ms(uchar ms)//ms
{
  uchar x=0;uint y=0;
  for(x=ms;x>0;x--)
    for(y=1955;y>0;y--);
}
void delay_10us()//10us
{
  uchar x=0;
  for(x=15;x>0;x--);
}
uchar readbyte()//读一个字节
{
  uchar value=0;
  uchar i=0;
  for(i=8;i>0;i--)
  {
     value<<=1;
     while(!(P1IN&BIT1))
     {numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}
     delay_10us();
     delay_10us();
     delay_10us();
     delay_10us();
     if(P1IN&BIT1)
     {
       value|=0x01;
       while(P1IN&BIT1){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}//等待剩余3
     }
     if(i!=7)
     {
      while(!(P1IN&BIT1)){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}
     }
  }
  
  return value;
}
uchar ht_start(uchar *ht)//开始读取数据
{
  uchar check_value=0;
  uchar s[5]={0,0,0,0,0};
  ht_init();//关闭所有中断
  P1DIR|=BIT1;//输出
  P1OUT|=BIT1;
  P1OUT&=~BIT1;//输出低电平
  delay_ms(25);//输出大于18MS低电平
  P1OUT|=BIT1;//拉高等待
  delay_10us();
  delay_10us();
  delay_10us();
  P1DIR&=~BIT1;
  while(P1IN&BIT1)
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  while(!(P1IN&BIT1))
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  while(P1IN&BIT1)
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  s[0]=readbyte();
  s[1]=readbyte();
  s[2]=readbyte();
  s[3]=readbyte();
  s[4]=readbyte();
  check_value=s[0]+s[1]+s[2]+s[3];
  if(check_value!=s[4])
  {
   ht_OK();
   return 0;
  }
  else
  {
    ht[0]=s[0];
    ht[1]=s[2];
    ht_OK();
    return 1;
  }
  
}
#include"msp430x16x.h"
#define   uint unsigned int
#define   uchar unsigned char
uint numpass=0;
void ht_init()
{
  _DINT();//关闭所有中断
  _NOP(); //在保护程序之前与关中断之间最少有一步操作。
  P1DIR|=BIT0;//输输出方向
  P1OUT|=BIT0;//输出为0
}
void ht_OK()
{
  _BIS_SR(GIE);//开启所有中断
}
void delay_ms(uchar ms)//ms
{
  uchar x=0;uint y=0;
  for(x=ms;x>0;x--)
    for(y=1955;y>0;y--);
}
void delay_10us()//10us
{
  uchar x=0;
  for(x=15;x>0;x--);
}
uchar readbyte()//读一个字节
{
  uchar value=0;
  uchar i=0;
  for(i=8;i>0;i--)
  {
     value<<=1;
     while(!(P1IN&BIT1))
     {numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}
     delay_10us();
     delay_10us();
     delay_10us();
     delay_10us();
     if(P1IN&BIT1)
     {
       value|=0x01;
       while(P1IN&BIT1){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}//等待剩余3
     }
     if(i!=7)
     {
      while(!(P1IN&BIT1)){numpass=15000;numpass--;if(!numpass){ht_OK();return 0xff;}}
     }
  }
  
  return value;
}
uchar ht_start(uchar *ht)//开始读取数据
{
  uchar check_value=0;
  uchar s[5]={0,0,0,0,0};
  ht_init();//关闭所有中断
  P1DIR|=BIT1;//输出
  P1OUT|=BIT1;
  P1OUT&=~BIT1;//输出低电平
  delay_ms(25);//输出大于18MS低电平
  P1OUT|=BIT1;//拉高等待
  delay_10us();
  delay_10us();
  delay_10us();
  P1DIR&=~BIT1;
  while(P1IN&BIT1)
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  while(!(P1IN&BIT1))
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  while(P1IN&BIT1)
  {numpass=15000;numpass--;if(!numpass){ht_OK();return 0;}}
  s[0]=readbyte();
  s[1]=readbyte();
  s[2]=readbyte();
  s[3]=readbyte();
  s[4]=readbyte();
  check_value=s[0]+s[1]+s[2]+s[3];
  if(check_value!=s[4])
  {
   ht_OK();
   return 0;
  }
  else
  {
    ht[0]=s[0];
    ht[1]=s[2];
    ht_OK();
    return 1;
  }
  
}

相关帖子

沙发
dirtwillfly|  楼主 | 2016-2-15 21:38 | 只看该作者
MSP430驱动单总线程序.rar (3.94 KB)

使用特权

评论回复
板凳
vivilzb1985| | 2016-2-16 14:00 | 只看该作者
这个程序 比较复杂的,单总线的应用很重要的。

使用特权

评论回复
地板
FireRiver9| | 2016-2-28 22:14 | 只看该作者
这是驱动什么的,DS18b20是不是就是单总线的

使用特权

评论回复
5
houjiakai| | 2016-2-28 23:02 | 只看该作者
这是驱动什么的?

使用特权

评论回复
6
houjiakai| | 2016-2-28 23:03 | 只看该作者
iic控制的吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1180

主题

34874

帖子

1117

粉丝