|
这个程序和AT2402通信,我想读出一个字节,应该怎么设置相应的寄存器,求大神求指点!
贴出程序
MSP430F2617的
晶振是手表晶振
#include "msp430f2617.h"
#define WriteAdd 0xA0 //2402写地址
#define ReadAdd 0xA1 //2402读地址
void delay(unsigned int time)
{
int ii;
for(;time>0;time--)
for(ii=100;ii>0;ii--);
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//设置UCB0 为I2C模式 master模式
//P3.1--SDA ||| P3.2--SCL
P3SEL |= 0x06; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_1 + UCSWRST;
// Use SMCLK, keep SW reset
UCB0BR0 = 2; // fSCL = ACLK/2 = ~16.5kHz
UCB0BR1 = 0;
UCB0I2CSA = ReadAdd;
UCB0I2CIE |= UCSTTIE + UCSTPIE + UCNACKIE;
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
IE2 |= UCB0TXIE+UCB0RXIE; // Enable TX RX interrupt
_EINT();
while(1)
{
// while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0CTL1 |= UCTXSTT; // I2C start condition
delay(50);
UCB0TXBUF = 0X01;
delay(50);
// while (UCB0CTL1 & UCTXSTT); // Start condition sent?
UCB0CTL1 |= UCTXSTP; // I2C stop condition
delay(50);
while(UCB0STAT & UCBBUSY);
// __bis_SR_register(GIE); // Enter interrupts
}
}
// USCI_B0 Data ISR
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
UCB0TXBUF = 0X01;
}
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
P2DIR = 0xFF;
P2OUT = UCB0RXBUF;
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|