www.pudn.com > msp430_pcf8563.rar > main.c
#include#include #include #include #include "xtype.h" #define PCF8563_ADDR 0xa2 #define IICSDA 0x01 #define IICSCL 0x20 #define IICSDAIn() P2DIR &= ~IICSDA #define IICSDAOut() P2DIR |= IICSDA #define IICSetSDA() P2DIR |= IICSDA;P2OUT |= IICSDA #define IICClrSDA() P2DIR |= IICSDA;P2OUT &= ~IICSDA #define IICReadSDA() P2IN & IICSDA #define IICSetSCL() P1OUT |= IICSCL;_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP() #define IICClrSCL() P1OUT &= ~IICSCL;_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP() /******************************************************************************************************** ** 函数名称: WriteDelay ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void WriteDelay(void) { uint16 i; for(i=0;i<8000;i++); } void Delay(uint16 i) { while(i-->0); } /******************************************************************************************************** ** 函数名称: IICStart ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void IICStart(void) { IICSetSDA(); Delay(10); IICSetSCL(); Delay(10); IICClrSDA(); Delay(10); IICClrSCL(); } /******************************************************************************************************** ** 函数名称: IICStop ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void IICStop(void) { IICClrSDA(); Delay(10); IICSetSCL(); IICSetSDA(); IICSetSCL(); } /******************************************************************************************************** ** 函数名称: IICReadAck ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ bit IICReadAck(void) { bit status; IICSetSDA(); IICSDAIn(); IICSetSCL(); status=IICReadSDA(); IICClrSCL(); IICSDAOut(); return(status); } /******************************************************************************************************** ** 函数名称: IICWriteAck ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void IICWriteAck(void) { IICSDAOut(); IICClrSDA(); Delay(10); IICSetSCL(); Delay(10); IICClrSCL(); IICSetSDA(); } /******************************************************************************************************** ** 函数名称: IICNoAck ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ void IICNoAck(void) { IICSDAOut(); IICSetSDA(); IICSetSCL(); IICClrSCL(); } /******************************************************************************************************** ** 函数名称: IICWriteByte ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ bit IICWriteByte(uint8 v) { uint8 i; for(i=0;i<8;i++) { if(v &0x80) { IICSetSDA(); } else { IICClrSDA(); } IICSetSCL(); IICClrSCL(); v=v<<1; }; // IICSetSDA(); IICSDAIn(); IICSetSCL(); i =IICReadSDA(); IICClrSCL(); IICSDAOut(); return(i); } /******************************************************************************************************** ** 函数名称: IICReadByteWithAck ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ uint8 IICReadByteWithAck(void) { uint8 rc,i; rc=0; IICSDAOut(); IICSetSDA(); IICSDAIn(); for(i=0;i<8;i++) { rc=rc<<1; IICSetSCL(); rc=(IICReadSDA())?(rc | 0x01):(rc); IICClrSCL(); }; IICWriteAck(); return(rc); } /******************************************************************************************************** ** 函数名称: IICReadByteWithoutAck ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ uint8 IICReadByteWithoutAck(void) { uint8 rc,i; rc=0; IICSDAOut(); IICSetSDA(); IICSDAIn(); for(i=0;i<8;i++) { rc=rc<<1; IICSetSCL(); rc=(IICReadSDA())?(rc | 0x01):(rc); IICClrSCL(); }; IICNoAck(); return(rc); } /******************************************************************************************************** ** 函数名称: PCF8563WriteData ** 功能描述: ** 输 入: 无 ** 输 出: 无 ** 全局变量: 无 *------------------------------------------------------------------------------------------------------- ** 修改人: ** 日 期: **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ bit PCF8563WriteData(uint8 word_address,uint8 *p,uint8 count) { uint8 i; uint8 slave_address; slave_address = PCF8563_ADDR; slave_address &= 0xfe; P1DIR |= IICSCL; //define to output IICSDAOut(); //define to output IICStart(); if(IICWriteByte(slave_address))return(1); if(IICWriteByte(word_address))return(1); for(i=0;i 0;k--); } while((IFG1&OFIFG)!=0); stat = PCF8563ReadData(0, Buf, 1); printf("%x\n", Buf[0]); Buf[0]|=0x20; PCF8563WriteData(0, Buf, 1); stat = PCF8563ReadData(0, Buf, 1); printf("%x\n", Buf[0]); Buf[0]&=~0x20; PCF8563WriteData(0, Buf, 1); stat = PCF8563ReadData(0, Buf, 1); printf("%x\n", Buf[0]); memset(Buf,0,sizeof(Buf)); stat = PCF8563WriteData(0x02, Buf, 7); while(1) { stat = PCF8563ReadData(0x02, Buf, 7); Buf[5] = Buf[5]&0x1f; Buf[3] = Buf[3]&0x3f; Buf[2] = Buf[2]&0x3f; Buf[1] = Buf[1]&0x7f; Buf[0] = Buf[0]&0x7f; printf("%02X-%02X-%02X %02X:%02X:%02X\n",Buf[6], Buf[5],Buf[3], Buf[2], Buf[1], Buf[0]); for(i=0;i<0x3fff;i++); }; }