我目前正在连接 msp430g2553和 ds1307。 当 RTC 应答时、读取写入操作执行正确、它在下一次运行时停止应答。 有什么建议吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我目前正在连接 msp430g2553和 ds1307。 当 RTC 应答时、读取写入操作执行正确、它在下一次运行时停止应答。 有什么建议吗?
#include
unsigned char i;
unsigned char *pTxData; //指向 TX 数据的指针
unsigned char *pRxData; //指向 RX 数据的指针
const unsigned char TxData[]={0x00、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01}; //要发送的数据
const unsigned char RxData[];
void init_I2C (void);
void transmit (void);
void set_pointer (void);
接收无效(无效);
int main (空)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P1SEL |= BIT6 + BIT7; //将 I2C 引脚分配给 USCI_B0
P1SEL2|= BIT6 + BIT7; //将 I2C 引脚分配给 USCI_B0
init_i2C();
pTxData =(unsigned char *) TxData;
pRxData =(unsigned char *) RxData;
while (1){
Transmit ();
set_pointer();
receive();
}
}
void init_I2C (void){
UCB0CTL1 |= UCSWRST; //启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST; //使用 SMCLK、保持软件复位
UCB0BR0 = 12; // fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x68; //从地址为068h
UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
}
void transmit (void){
while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
for (i=0;i<8;i++) //检查 TX 字节计数器
{
UCB0TXBUF =* pTxData++; //加载 TX 缓冲区
}
UCB0CTL1 |= UCTXSTP;
}
void set_pointer (void)
{ while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
UCB0TXBUF = 0x00; //加载 TX 缓冲区
UCB0CTL1 |= UCTXSTP; }
void receive (void){
UCB0CTL1 &=~UCTR; //清除 UCTR
while (UCB0CTL1 & UCTXSTP);
UCB0CTL1 |= UCTXSTT; // I2C 启动条件
while (UCB0CTL1 & UCTXSTT);
for (i=0;i<7;i++) //检查 TX 字节计数器
{
*pRxData++= UCB0RXBUF; //加载 TX 缓冲器
}
UCB0CTL1 |= UCTXSTP; // I2C 停止条件
}