本人刚接触430不久 如果还有很多错误请大神指出
#define DS_SCL BIT4 //DS_SCL = P5.4#define DS_SDA BIT6 //DS_SDA = P2.6 #define DS_SCL_IN P5DIR &= ~DS_SCL#define DS_SCL_OUT P5DIR |= DS_SCL#define DS_SCL0 P5OUT &= ~DS_SCL#define DS_SCL1 P5OUT |= DS_SCL#define DS_SDA_IN P2DIR &= ~DS_SDA#define DS_SDA_OUT P2DIR |= DS_SDA#define DS_SDA0 P2OUT &= ~DS_SDA#define DS_SDA1 P2OUT |= DS_SDA#define DS_SDA_BIT P2IN & DS_SDA
void Init_CLK(void){ unsigned int i; BCSCTL1 &= ~XTS; do{ IFG1 &= ~OFIFG; for(i=0xFF;i>0;i--); } while((IFG1 & OFIFG)!=0); BCSCTL2 |= SELS+SELM1; _EINT(); P5SEL|=0x30; DS_SCL_OUT; //SCLK对应的IO设置为输出状态 P2DIR&=0xbf; P2OUT|=BIT6; DS_SCL0; //SCLK=0 delay_us(5);}void DS3231_Write(u8 write_address,u8 write_data){ u8 Device_Address = 0xD0; //DS3231写设备地址 iic_Start(); //开始 iic_SendByte(Device_Address); //发送设备地址 iic_Ack(); iic_SendByte(write_address); //发送地址 iic_Ack(); //应答 iic_SendByte(write_data); //发送数据 iic_Ack(); //应答 iic_Stop(); //停止}u8 DS3231_Read(u8 read_address){ u8 Receive_Data; //数据接收 u8 Device_Address = 0xD0; //DS3231写设备地址 iic_Start(); //开始 iic_SendByte(Device_Address); //发送设备地址 iic_Ack(); //应答 iic_SendByte(read_address); //发送地址 iic_Ack(); //应答 iic_Start(); //重复开始 Device_Address = 0xD1; //DS3231读设备地址 iic_SendByte(Device_Address); //发送地址 iic_Ack(); //应答 iic_in(); Receive_Data = iic_ReceiveByte(); //接收数据 iic_out(); iic_NAck(); //不应答 iic_Stop(); //停止 return Receive_Data; //返回数据}void delay_us(u8
time){ for(int i=0;i<time;i++) _NOP();}//------------iic开始-----------
void iic_Start(void){ DS_SDA_OUT; DS_SCL_OUT;
DS_SCL1; delay_us(5); DS_SDA1; delay_us(10); DS_SDA0; delay_us(5); DS_SCL0; delay_us(5); DS_SDA_IN;
}
//------------iic结束-----------void iic_Stop(void) { DS_SDA_OUT; DS_SCL_OUT; DS_SCL1; delay_us(10); DS_SDA0; delay_us(5); DS_SDA1; delay_us(5); DS_SDA_IN;}
//------------iic应答-----------void iic_Ack(void){ DS_SCL0; DS_SDA0; delay_us(5); DS_SCL1; delay_us(5); DS_SCL0; delay_us(5);
}
//------------iic不应答---------void iic_NAck(void){ DS_SCL0; DS_SDA1; delay_us(5); DS_SCL1; delay_us(5); DS_SCL0; delay_us(5);
}
//------------iic发送-----------void iic_SendByte(u8 SendData){ DS_SDA_OUT; DS_SCL_OUT; DS_SCL0; u8 i; for(i=0;i<8;i++) { DS_SCL0; delay_us(5); if(SendData&0x80) //MSB在前 DS_SDA1; else DS_SDA0; DS_SCL1; delay_us(2); DS_SCL0; SendData<<=1; }
//delay_us(5); //DS_SDA1; //delay_us(5); //DS_SDA_IN;}
//------------iic接收-----------u8 iic_ReceiveByte(void){ u8 i,temp=0; delay_us(5); DS_SDA1; delay_us(5); for(i=0;i<8;i++) { temp<<=1; DS_SCL0; delay_us(5); DS_SCL1; delay_us(2); temp=DS_SDA_BIT; if(temp==0x80) temp=temp|0x01; else temp=temp&0xFE; } DS_SCL0; delay_us(2); return temp;}void iic_in(){ DS_SCL_OUT;
DS_SDA_IN;}
void iic_out(){ DS_SCL_OUT; DS_SDA_OUT;
DS_SCL1; delay_us(5); DS_SDA1; delay_us(2);}
一周热门 更多>