单片机MSP430F149-DS1302读写及串口收发程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/********************************************************

* 文件名称:

* IIC.c

* 文件说明:

* 使用口线模拟IIC

* 程序使用波特率为2400,程序运行时需要在pc机上使用一个串口* 接收发送程序,任意发送字符,接收的字符为十六进制时间数据* MSP-FET430P149 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2

* L.TCH

* Feb 2007

* Built with IAR Embedded Workbench Version: 3.10A

*******************************************************/

/*********************************************************/

#include

/*********************************************************

* 定义

*********************************************************/

#define RST BIT7

#define SDA BIT6

#define SCLK BIT5

char pbuf[7];

char clok[7]={0x16,0x15,0x14,0x13,0x12,0x04,0x07};

char cbuf;

char bbuf;

char *pda;

char *pck;

char *prg;

/************************************************

说明

************************************************/

void Port_Init(void);

void Init_CLK(void);

void Init_UART0(void);

void RST_Enable(void);

void RST_Disable(void);

void SCLK_HI(void);

void SCLK_LO(void);

void WriteByte(char nVal);

char ReadByte(void);

void WriteTo1302(char nAddr, char nVal);

char ReadFrom1302(char nAddr);

void BurstWriteTime(char *pWClock);

void BurstReadTime(char *pRClock);

void BurstWriteRam(char *pWReg);

void BurstReadRam(char *pRReg);

void SetTime(char *pClock);

void GetTime(char pTime[]);

/***********************************************/

void Port_Init(void)

{

P1DIR |= RST; //设置CE为输出管脚

P1DIR |= RST; //设置SCLK为输出管脚

P1DIR |= SCLK;

P2DIR |= 0x02; // Set P2.1 to output direction

return;

}

void Init_CLK(void)

{

unsigned int i;

BCSCTL1 = 0X00; //将寄存器的内容清零

//XT2震荡器开启

//LFTX1工作在低频模式

//ACLK的分频因子为1

do

{

IFG1 &= ~OFIFG; // 清除OSCFault标志

for (i = 0xFF; i > 0; i--);

}

while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1

BCSCTL1 &= ~(XT2OFF + XTS); //open XT2, LFTX2 select low frequency //BCSCTL1 |= RSEL0 + RSEL1 + RSEL2; //DCO Rsel=7(Freq=3200k/25摄氏度)//BCSCTL1 |= 0x07;

BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1

BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1

return;

}

void Init_UART0(void)

{

U0CTL = 0X00; //将寄存器的内容清零

UCTL0|=SWRST;

P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD

ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character

UTCTL0 |= SSEL1; // UCLK = SMCLK

UBR00 = 0xD3; // 3.58Mhz/2400 -1491

UBR10 = 0x05; //

UMCTL0 = 0x00; // no modulation

UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interrupt

IE1 &= ~UTXIE0; // Disable USART TX interrupt return;

}

void RST_Enable(void)

{

P1OUT |= RST;

return;

}

void RST_Disable(void)

{

P1OUT &= ~(RST);

return;

}

void SCLK_HI(void)

{

P1OUT |= SCLK;

return;

}

void SCLK_LO(void)

{

P1OUT &= ~(SCLK);

return;

}

/*-------------------------------

* 功能: 写入1Byte数据

* 调用:

* 输入: nVal 写入的数据

* 返回值: 无

*------------------------------*/

void WriteByte(char nVal)

{

char i,j;

相关文档
最新文档