[help]ds1307 send nack ngay khi start

nguyễn đình huân

Cố Vấn CLB
cho em hỏi về bài i2c. Trên lớp các anh có viết code đọc số giây từ ds1307 và sáng led nếu số giây là lẻ. Khi em cho chạy code thì nó bị dừng ở lệnh i2c_write, em debug thì thấy sau dòng
Code:
while (UCB0CTL1 & UCTXSTP);                // Loop until I2C STT is sent
    UCB0CTL1 |= UCTR + UCTXSTT;                // I2C TX, start condition
    while (!(IFG2&UCB0TXIFG));
cờ ngắt UCNACKIFG được set lên 1, thậm chí em chưa chạy dòng đặt địa chỉ slave nữa. Em không hiểu tại sao.
thạch anh, nguồn cấp em đo bằng VOM thấy vẫn bình thường. 2 dây SCL, SDA dùng bus ngắn, em cũng xoắn lại luôn. Lúc chạy code có mấy lần em cấp ngược nguồn 5V nên con ds1307 bị nóng, không biết có ảnh hưởng gì không.
Đây là code đầy đủ hàm i2c_write trong file i2c.c
Code:
void i2c_write(unsigned char AddRes,unsigned char numbyte, unsigned char *poisend)
{
    while (UCB0CTL1 & UCTXSTP);                // Loop until I2C STT is sent
    UCB0CTL1 |= UCTR + UCTXSTT;                // I2C TX, start condition
    while (!(IFG2&UCB0TXIFG)); // sent word address
    UCB0TXBUF = AddRes;
    while (!(IFG2&UCB0TXIFG));                // check to see whether it is sent
    unsigned char i;
    for( i=0;i<numbyte;i++)
    {
        UCB0TXBUF= poisend[i] ;
        while (!(IFG2&UCB0TXIFG));
    }
    UCB0CTL1 |= UCTXSTP;                      // I2C stop condition after 1st TX
    IFG2 &= ~UCB0TXIFG;                        // Clear USCI_B0 TX int flag
}
Còn đây là hàm main
Code:
#include <msp430.h>
#include "I2C.h"
 
int main(void)
{    WDTCTL=WDTPW+WDTHOLD;
    BCSCTL1=CALBC1_1MHZ;
    DCOCTL=CALDCO_1MHZ;
    P2DIR|=BIT0;
    P2OUT|=BIT0;
    unsigned    char    datawr[]={0x00,0x00,0x20,0x05,0x29,0x11,0x12};//20:00:00 t5 29/11/(20)12
    unsigned    char    datarev[7];
    i2c_init(0x68);
    i2c_write(0x00,7,datawr);
    while(1)
    {
        _delay_cycles(5000);
        i2c_read(0x00,7,datarev);
        if(datarev[0]%2)
            P2OUT |=BIT0;
        else
            P2OUT &=~BIT0;
    }
}
 
Top