?? main.c
字號:
#include <msp430x14x.h>
#include <in430.h>
#include <string.h>
#include <stdio.h>
#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<count;i++)
{
if(IICWriteByte(*p))return(1);
p++;
};
IICStop();
return(0);
}
/********************************************************************************************************
** 函數名稱: PCF8563ReadData
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit PCF8563ReadData(uint8 word_address,uint8 *p,uint8 count)
{
uint8 i;
uint8 slave_address;
slave_address=PCF8563_ADDR;
P1DIR |= IICSCL; //define to output
IICSDAOut(); //define to output
IICStart();
slave_address &= 0xfe;
if(IICWriteByte(slave_address)) return(1);
if(IICWriteByte(word_address)) return(1);
IICStart();
slave_address |= 0x01;
if(IICWriteByte(slave_address))return(1);
for(i=1;i<count;i++)
{
*p=IICReadByteWithAck();
p++;
};
*p=IICReadByteWithoutAck();
IICStop();
return(0);
}
//main
void main(void)
{
uint8 Buf[128],stat;
uint16 i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1&=~XT2OFF; //XT2 available
BCSCTL2|=SELM1; //Mclk,SMCLK=8M
BCSCTL2|=SELS;
do
{
int k = 0xff;
IFG1 &= ~OFIFG;
for(k=0xff; k>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++);
};
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -