单片机MSP430F149-DS1302读写及串口收发程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;