这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » msp43018B20

共1条 1/1 1 跳转至

msp43018B20

助工
2014-10-05 20:20:59     打赏

#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430f4371.h>


#define SdaDirOut          P6OUT &= ~BIT6//---弱拉输出 
#define SdaDirIns          P6DIR &=~ BIT6//---弱拉输入 
#define SdaLow             P6DIR |=  BIT6//---被动低             
#define SdaHig             P6DIR &=~ BIT6//---被动高
#define SdaInSt            P6IN  &   BIT6//---


/*
#define SdaDirOut          P6DIR |=  BIT6//---强拉输出 
#define SdaDirIns          P6DIR &=~ BIT6//---强拉输入 
#define SdaHig             P6OUT |=  BIT6//---输出高             
#define SdaLow             P6OUT &=~ BIT6//---输出低
#define SdaInSt            P6IN  &   BIT6
*/
void InitRTC(void)
{  
    SCFQCTL=SCFQ_2M;//---------------------时钟为2M 
    FLL_CTL0 |= XCAP10PF;
    
    WDTCTL=WDT_ADLY_1000;//---工作于定时状态  
    IE1=WDTIE;//---使能看门狗定时中断;    
}
void DelayTempa(unsigned int Time)

    unsigned char i,j;
    i=Time;
    j=Time;
    _NOP();
    while(i--); 
    _NOP();
    while(j--); 
    _NOP();
}
void TempaInit(void)
{
    SdaDirOut;
    SdaHig;
}


unsigned char ChkTempaChip(void)
{
    unsigned char Chip;
    
    SdaDirOut;
    SdaHig;
    DelayTempa(10);
    SdaLow;
    DelayTempa(480);//---等待480微秒
    SdaHig;
    SdaDirIns;
    DelayTempa(10);
    if(P6IN  &   BIT6)
    {
        Chip=0xff; 
    }
    else
    {
        Chip=0x00;
        
    }
    SdaDirOut;
    SdaHig;
    DelayTempa(10);//---等待480微秒
    return Chip;
}
//-----***-从slave端读取一个数据-***-----//
unsigned char ReadByte(void)
{
 unsigned char i;
 unsigned char ByteData=0;
        SdaDirOut;
        SdaLow;
 for(i=0;i<8;i++)
 {
            
            SdaDirOut;
            SdaLow;
            ByteData>>=1;
            SdaHig;
            SdaDirIns;
            if(P6IN  &   BIT6)
            {
                    ByteData |=0x80;
            }
            DelayTempa(5);
            SdaDirOut;
            DelayTempa(25);
 }
 return ByteData;
}
//-----***-传送一个 Byte 数据到 slave-***-----//
void WriteByte(unsigned char DataByte)               
{
    unsigned char i;
    SdaDirOut;
    for(i=0;i<8;i++)
    {
        SdaLow;
        if(DataByte & 0x01)
     {
         SdaHig;//IicSda=1;
     }
        else
        {
            SdaLow; 
        }
     DelayTempa(30);
        SdaHig;
        DataByte >>=1;
        
    }
    DelayTempa(10);
}
void ReadTempa(unsigned char *RecData)
{
    *(RecData)=0;
    *(RecData+1)=0; 
    if(ChkTempaChip()==0x00)
    {
        WriteByte(0xCC);
        WriteByte(0x44);
        DelayTempa(3000);   
    }
    
    if(ChkTempaChip()==0x00)
    {
        WriteByte(0xCC);
        WriteByte(0xBE);
        *(RecData)=ReadByte();
        *(RecData+1)=ReadByte();
    }



}
void TempPack(void)
{   
    if(SecondsConn&0x40)//---秒使能控制
    {
        _DINT(); 
        TempaData=0;
        ReadTempa((unsigned char*)&TempaData); 
        TempaData=TempaData*625;
        TempaData=TempaData/100;
        _EINT();  
        
        SecondsConn&=0xbf;
    }
}
int main(void)
{
 InitRTC();
 TempaInit();
 for(;;)
 {
  TempPack();
 }
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_Delay(void)

    SecondsConn=0xff;
    LPM3_EXIT; 
}


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]