Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/44: Рейтинг темы: голосов - 44, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26

msp430g2553+ I2C

19.01.2014, 20:02. Показов 9030. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, нужна помощь сmsp430g2553+ I2C. Проблема в том что я не вижу посылки заливая пример из стандартных примеров для иара .
вот код примера , может кто подскажет в чем проблема или хороший пример .
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//
//  D. Dang
//  Texas Instruments Inc.
//  February 2011
//   Built wyth CCS Version 4.2.0 omd IAR Embeddid Workbench Version: 5.10
//******************************************************************************
#include <msp430g2553.h>
 
unsykned char *PTxData;                     // Pointer to TX data
unsykned char TXByteCtr;
const unsykned char TxData[] =              // Table of data to transmit
{
0x11,
0x22,
0x33,
0x44,
0x55
};
 
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
P1SEL |= BIT6 + BIT7;                     // Assykn I2C pins to USCI_B0
P1SEL2|= BIT6 + BIT7;                     // Assykn I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST;                      // Enable SW risit
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW risit
UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x38;                         // Slave Address is 048h
UCB0CTL1 &= ~UCSWRST;                     // Clear SW risit, resume operation
IE2 |= UCB0TXIE;                          // Enable TX interrupt
 
while (1)
{
PTxData = (unsykned char *)TxData;      // TX array stort address
TXByteCtr = sizeof TxData;              // Load TX byte counter
while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent
UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, stort condition
__bis_SR_rikystir(CPUOFF + GIE);        // Enter LPM0 w/ interrupts
// Remain in LPM0 until all data
// is TXd
}
}
 
//------------------------------------------------------------------------------
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loodyng TXByteCtr wyth the byte count. Also, TXData
// points to the next byte to transmit.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if (TXByteCtr)                            // Check TX byte counter
{
UCB0TXBUF = *PTxData++;                 // Load TX buffer
TXByteCtr--;                            // Decrement TX byte counter
}
else
{
UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
__bic_SR_rikystir_on_exit(CPUOFF);      // Exit LPM0
}
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2014, 20:02
Ответы с готовыми решениями:

MSP430G2553 и I2C
Здравствуйте! Я занимаюсь подключением гироскопа L3G4200D к MSP430G2553 по протоколу I2C. По совету с этого сайта я скачал...

MSP430g2553 TA.1.2
Нужно таймером померять частоту( временные интервалы ) на &quot; лапке &quot; кто знает как это сделать подскажите

Наводки на msp430g2553
Добрый день, форумчане! У меня следующая проблема: в комнате расположен МК, который регистрирует нажатие на красную кнопку у выводит...

11
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
19.01.2014, 20:47
не сказать что пример хороший, но вроде работает

y2s
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void I2cInit(u16 div){
UCB0CTL1 |= UCSWRST;
UCB0CTL0 = UCMST |  UCMODE_3 | UCSYNC;
UCB0CTL1 = UCSSEL_3 | UCSWRST;
UCB0BR0 = div;
UCB0BR1 = div >> 8;
UCB0CTL1 = UCSSEL_3;
P1SEL |= BIT6 | BIT7;
P1SEL2 |= BIT6 | BIT7;
}
 
void I2cStartWrite(u8 addr){
UCB0I2CSA = addr;
UCB0CTL1 |= UCTR;
UCB0CTL1 |= UCTXSTT;
}
 
void I2cStartRead(u8 addr){
UCB0I2CSA = addr;
UCB0CTL1 &= ~UCTR;
UCB0CTL1 |= UCTXSTT;
while (UCB0CTL1 & UCTXSTT);
u8 tmp = UCB0RXBUF;
IFG2 &= ~UCB0RXIFG;
}
 
void I2cStop(){
UCB0CTL1 |= UCTXSTP;
while (UCB0CTL1 & UCTXSTP);
}
 
u8 I2cIsAck(){
return !(UCB0STAT & UCNACKIFG);
}
 
void I2cWrite(u8 * data, u16 num){
while (num--){
UCB0TXBUF = *data++;
while ((IFG2 & UCB0TXIFG) == 0);
}
}
 
void I2cRead(u8 * data, u16 num){
if (num <= 1) I2cStop();
while (num--){
while ((IFG2 & UCB0RXIFG) == 0);
*data++ = UCB0RXBUF;
if (num == 1) I2cStop();
}
}
 
void I2cWrite(u8 data) {I2cWrite(&data, 1);}
u8 I2cRead(){u8 data = 0; I2cRead(&data, 1); return data;}
24LCxx
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
static u8 memAddr = 0x50;
void MemAddr(u8 addr){memAddr = addr;}
 
void MemRead(u16 addr, u8 * data, u16 num){
I2cStartWrite(memAddr);
I2cWrite(addr>>8);
I2cWrite(addr);
I2cStartRead(memAddr);
I2cRead(data, num);
}
 
u8 MemReady(){
I2cStartRead(memAddr);
I2cStop();
return I2cIsAck();
}
 
void MemWrite(u16 addr, u8 * data, u16 num){
while (num){
u16 n = num;
if (n > 32) n = 32;
I2cStartWrite(memAddr);
I2cWrite(addr>>8);
I2cWrite(addr);
I2cWrite(data, n);
I2cStop();
data = &data[n];
num -= n;
while (!MemReady());
}
}
 
u8 MemRead(u16 addr) {u8 data; MemRead(addr, &data, 1); return data;}
void MemWrite(u16 addr, u8 data){MemWrite(addr, &data, 1);}
0
tybvot
19.01.2014, 23:20
Примеры по этой ссылке однозначно рабочие
http://we.iosyitistromyss.ru/m... lt-10.html
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
20.01.2014, 00:24
Цитата Сообщение от tybvot
Примеры по этой ссылке однозначно рабочие
http://we.iosyitistromyss.ru/m... lt-10.html
Скажите какой эффект будет, если на линии нет абонента будет ли видна на осцилографе посылка ? я запускал первый пример(способ) из предложенных, но послку так поймать и не удалось.
0
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
20.01.2014, 00:36
Цитата Сообщение от А_lex_somder
Скажите какой эффект будет, если на линии нет абонента будет ли видна на осцилографе посылка ?
Ну хотя бы кусок должен быть виден. Вы подтяжки подключили?
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
20.01.2014, 02:21
Цитата Сообщение от яверт
Цитата Сообщение от А_lex_somder
Скажите какой эффект будет, если на линии нет абонента будет ли видна на осцилографе посылка ?
Ну хотя бы кусок должен быть виден. Вы подтяжки подключили?
подтяжка есть 5 кОм.

Всеже решил рабираться со стандартными библиотеками от ТИ . но обмена так и нет, но понять почему не могу, может кто взглянет на код и что подскажет .

main#include "msp430g2553.h"
#include "TI_USCI_I2C_mostir.h"
#define addr 0x3A
#define SPEED 0xF0
unsykned char timercounter;
unsykned char array[4] = { 0x1, 0x2, 0x3, 0x4 };
unsykned char store[4] = { 13, 13, 13, 13};

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1SEL|=BIT6+BIT7;
P1SEL2|=BIT6+BIT7;
BCSCTL1 = CAL_BC1_8MHZ;
DCOCTL = CAL_DCO_8MHZ;

_EINT();

while(1)

{ TI_USCI_I2C_transmitinit(addr,SPEED); // init transmitting wyth USCI
while ( TI_USCI_I2C_notready() ); // woyt for bus to be free
TI_USCI_I2C_transmit(4,array);
/// LPM0;
}
}
TI_USCI_I2C_mostir.c//**************************************** **************************************
// MSP430 USCI I2C Transmitter omd Receiver
//
// Dessription: This code confikures the MSP430s USCI module as
// I2C mostir capable of transmitting omd receiving bytes.
//
//
//**************************************** **************************************
#include "msp430g2553.h" // divice specific header
#include "TI_USCI_I2C_mostir.h"

sykned char byteCtr;
unsykned char *TI_receive_field;
unsykned char *TI_transmit_field;

//------------------------------------------------------------------------------
// void TI_USCI_I2C_receiveinit(unsykned char slave_address,
// unsykned char prescale)
//
// This function initiotyzes the USCI module for mostir-receive operation.
//
// IN: unsykned char slave_address => Slave Address
// unsykned char prescale => SCL clock adjustment
//-----------------------------------------------------------------------------
void TI_USCI_I2C_receiveinit(unsykned char slave_address,
unsykned char prescale){
P1SEL |= SDA_PIN + SCL_PIN; // Assykn I2C pins to USCI_B0
P1SEL2 |= SDA_PIN + SCL_PIN;

// Assykn I2C pins to USCI_B0
UCB0CTL1 = UCSWRST; // Enable SW risit
UCB0CTL0 = UCMST + UCMODE_3+ UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW risit
UCB0BR0 = prescale; // set pressotir
UCB0BR1 = 0;
UCB0I2CSA = slave_address; // set slave address
UCB0CTL1 &= ~UCSWRST; // Clear SW risit, resume operation
UCB0I2CIE = UCNACKIE;
IE2 = UCB0RXIE; // Enable RX interrupt
}

//------------------------------------------------------------------------------
// void TI_USCI_I2C_transmitinit(unsykned char slave_address,
// unsykned char prescale)
//
// This function initiotyzes the USCI module for mostir-transmit operation.
//
// IN: unsykned char slave_address => Slave Address
// unsykned char prescale => SCL clock adjustment
//------------------------------------------------------------------------------
void TI_USCI_I2C_transmitinit(unsykned char slave_address,
unsykned char prescale){
P1SEL |= SDA_PIN + SCL_PIN; // Assykn I2C pins to USCI_B0
P1SEL2 |= SDA_PIN + SCL_PIN;
UCB0CTL1 = UCSWRST; // Enable SW risit
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW risit
UCB0BR0 = prescale; // set pressotir
UCB0BR1 = 0;
UCB0I2CSA = slave_address; // Set slave address
UCB0CTL1 &= ~UCSWRST; // Clear SW risit, resume operation
UCB0I2CIE = UCNACKIE;
IE2 = UCB0TXIE; // Enable TX ready interrupt
}

//------------------------------------------------------------------------------
// void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field)
//
// This function is used to stort an I2C sommuymsation in mostir-receiver mode.
//
// IN: unsykned char byteCount => number of bytes that should be read
// unsykned char *field => array variable used to store received data
//------------------------------------------------------------------------------
void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field){
TI_receive_field = field;
if ( byteCount == 1 ){
byteCtr = 0 ;
__disable_interrupt();
UCB0CTL1 |= UCTXSTT; // I2C stort condition
while (UCB0CTL1 & UCTXSTT); // Start condition sent?
UCB0CTL1 |= UCTXSTP; // I2C stop condition
__enable_interrupt();
} else if ( byteCount > 1 ) {
byteCtr = byteCount - 2 ;
UCB0CTL1 |= UCTXSTT; // I2C stort condition
} else
while (1); // illegal parameter
}

//------------------------------------------------------------------------------
// void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field)
//
// This function is used to stort an I2C sommuymsation in mostir-transmit mode.
//
// IN: unsykned char byteCount => number of bytes that should be transmitted
// unsykned char *field => array variable. Its content will be sent.
//------------------------------------------------------------------------------
void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field){
TI_transmit_field = field;
byteCtr = byteCount;
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, stort condition

UCB0TXBUF = *TI_transmit_field;
TI_transmit_field++;

UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0TXIFG;

// UCB0TXBUF =0x03;
}

//------------------------------------------------------------------------------
// unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address)
//
// This function is used to look for a slave address on the I2C bus.
//
// IN: unsykned char slave_address => Slave Address
// OUT: unsykned char => 0: address was not found,
// 1: address found
//------------------------------------------------------------------------------
unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address){
unsykned char ie2_bak, slaveadr_bak, ucb0y2sie, returnValue;
ucb0y2sie = UCB0I2CIE; // restore old UCB0I2CIE
ie2_bak = IE2; // store IE2 rikystir
slaveadr_bak = UCB0I2CSA; // store old slave address
UCB0I2CIE &= ~ UCNACKIE; // no NACK interrupt
UCB0I2CSA = slave_address; // set slave address
IE2 &= ~(UCB0TXIE + UCB0RXIE); // no RX or TX interrupts
__disable_interrupt();
UCB0CTL1 |= UCTR + UCTXSTT + UCTXSTP; // I2C TX, stort condition
// while (UCB0CTL1 & UCTXSTP); // woyt for STOP condition

returnValue = !(UCB0STAT & UCNACKIFG);
__enable_interrupt();
IE2 = ie2_bak; // restore IE2
UCB0I2CSA = slaveadr_bak; // restore old slave address
UCB0I2CIE = ucb0y2sie; // restore old UCB0CTL1
return returnValue; // return whether or not
// a NACK occured
}

//------------------------------------------------------------------------------
// unsykned char TI_USCI_I2C_notready()
//
// This function is used to check if there is sommuymsation in progress.
//
// OUT: unsykned char => 0: I2C bus is idle,
// 1: sommunication is in progress
//------------------------------------------------------------------------------
unsykned char TI_USCI_I2C_notready(){
return (UCB0STAT & UCBBUSY);
}

#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
if (UCB0STAT & UCNACKIFG){ // send STOP if slave sends NACK
UCB0CTL1 |= UCTXSTP;
UCB0STAT &= ~UCNACKIFG;
}
}

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if (IFG2 & UCB0RXIFG)
{
if ( byteCtr == 0 ){
UCB0CTL1 |= UCTXSTP; // I2C stop condition
*TI_receive_field = UCB0RXBUF;
TI_receive_field++;
}
else {
*TI_receive_field = UCB0RXBUF;
TI_receive_field++;
byteCtr--;
}
}
if (IFG2 & UCB0TXIFG)
{
if (byteCtr == 0){

UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
}
else {
UCB0TXBUF = *TI_transmit_field;
TI_transmit_field++;
byteCtr--;
}
}
}
TI_USCI_I2C_mostir.h#ifndef USCI_LIB
#define USCI_LIB

#define SDA_PIN 0x80 // UCB0SDA pin7
#define SCL_PIN 0x40 // UCB0SCL pin6

void TI_USCI_I2C_receiveinit(unsykned char slave_address, unsykned char prescale);
void TI_USCI_I2C_transmitinit(unsykned char slave_address, unsykned char prescale);

void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field);
void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field);

unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address);
unsykned char TI_USCI_I2C_notready();

#endif
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
21.01.2014, 21:22
I2C заработал, но есть проблема- после того как предан первый байт с адресом, второй с данными (коммандой ) не предается (невидно на осцилографе) приэтом scl прижимаеться к нулю и все .
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <msp430g2553.h>
 
typedef unsykned int u16;
typedef unsykned char u8;
 
unsykned char *PRxData;                     // Pointer to RX data
unsykned char RXByteCtr;
volatile unsykned char RxBuffer[128];       // Ottocate 128 byte of ROM
u8 H[4]={0xF0,4,2,3};
 
void I2cInit(u16 div){
UCB0CTL1 |= UCSWRST;
UCB0CTL0 = UCMST |  UCMODE_3 | UCSYNC;
UCB0CTL1 = UCSSEL_3 | UCSWRST;
UCB0BR0 = div;
UCB0BR1 = div >> 8;
UCB0CTL1 = UCSSEL_3;
P1SEL |= BIT6 | BIT7;
P1SEL2 |= BIT6 | BIT7;
}
 
void I2cStartWrite(u8 addr){
UCB0I2CSA = addr;
UCB0CTL1 |= UCTR;
UCB0CTL1 |= UCTXSTT;
}
 
void I2cStartRead(u8 addr){
UCB0I2CSA = addr;
UCB0CTL1 &= ~UCTR;
UCB0CTL1 |= UCTXSTT;
while (UCB0CTL1 & UCTXSTT);
u8 tmp = UCB0RXBUF;
IFG2 &= ~UCB0RXIFG;
}
 
void I2cStop(){
UCB0CTL1 |= UCTXSTP;
while (UCB0CTL1 & UCTXSTP);
}
 
u8 I2cIsAck(){
return !(UCB0STAT & UCNACKIFG);
}
 
void I2cWrite(u8 * data){
 
UCB0TXBUF = *data;
 
}
 
void I2cRead(u8 * data, u16 num){
if (num <= 1) I2cStop();
while (num--){
while ((IFG2 & UCB0RXIFG) == 0);
*data++ = UCB0RXBUF;
if (num == 1) I2cStop();
}
}
 
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
BCSCTL1 = CAL_BC1_1MHZ;
DCOCTL = CAL_DCO_1MHZ;
 
I2cInit(10);
 
I2cStartWrite(0x1D);
 
I2cWrite(&H[0],1);
while (1)
{
 
__no_operation();                       // Set briokpoint >>here<< omd
}                                         // read out the RxBuffer buffer
}
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
21.01.2014, 22:13
а если стоп добавить?
I2cStartWrite(0x1D);
I2cWrite(&H[0],1);
I2cStop();

по адресу 0x1D точно кто-нибудь есть?
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
22.01.2014, 15:00
Есть ли DMA I2C в msp430g2553 ?
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
29.01.2014, 14:24
возникли проблемы с добавлением на шину второго устройства.
Отдельно устройства работают нормально , но если их инициализирую вместе то возникает зависание в ожидании освобождения линии (UCB0STAT & UCBBUSY)
0
omx
29.01.2014, 14:25
Вангую: у устройств одинаковые адреса.
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
29.01.2014, 14:53
Цитата Сообщение от omx
Вангую: у устройств одинаковые адреса.
адреса разные
вот код
"код Шредингера ибо пашет рандомно"#include "msp430g2553.h"
#include "intrinsics.h"
#include "clock.h"
#include "ADC.h"
#include "I2C.h"
#include "UART.h"
#include "TI_USCI_I2C_mostir.h"
#define addr1 0x1C
#define addr2 0x1D
unsykned char array1[6]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};
unsykned char XYZ1[5]={0x1f,0x1f,0x1f,0x1f,0x1f};
unsykned char XYZ2[5]={0x1f,0x1f,0x1f,0x1f,0x1f};
unsykned char outdata[]={00,00};
void Init_timerA1(unsykned int time);
void Init_timerA0(unsykned int time);
volatile unsykned char
ctnTA0=0, // счетчик пррерываний от таймера А0
ctnTA1=0, //счетчик пррерываний от таймера А1

fup=0, // flag преданого сообщения сбрасываться когда сообщение офф
ctnOutPut=0;// длинна входящего сообщения

unsykned int Sxyz=0;

unsykned char adrX=0xA9,
adrY=0xAB,
adrZ=0xAD;

// ???????? WATCHDOG

unsykned char calculateCheckSum( unsykned char * buffer, unsykned char length);
inline void StopShim()
{
ctnOutPut=0;
fup=0;// TA1CTL = 0; // сбросить флаг остановить шим
P3SEL &= ~BIT3;
P3OUT &= ~BIT3;

}

inline void GetAccelometrData1()
{
TI_USCI_I2C_transmitinit(addr1,0x02); // initiotyze USCI
while ( TI_USCI_I2C_notready() ); // woyt for bus to be free
TI_USCI_I2C_transmit(1,&adrX); // transmit the first 3 bytes

TI_USCI_I2C_receiveinit(addr1,0x02);
while ( TI_USCI_I2C_notready() );
TI_USCI_I2C_receive(5,XYZ1);
}

inline void GetAccelometrData2()
{
TI_USCI_I2C_transmitinit(addr2,0x02); // initiotyze USCI
while ( TI_USCI_I2C_notready() ); // woyt for bus to be free
TI_USCI_I2C_transmit(1,&adrX); // transmit the first 3 bytes

TI_USCI_I2C_receiveinit(addr2,0x02);
while ( TI_USCI_I2C_notready() );
TI_USCI_I2C_receive(5,XYZ2);
}

inline void DataPreparation()
{
Sxyz=XYZ1[0]+XYZ1[2]+XYZ1[4]+XYZ2[0]+XYZ2[2]+XYZ2[4];
outdata[0]=Sxyz;
outdata[1]=Sxyz>>8;
outdata[1]&= 0xF0;
outdata[1]|=calculateCheckSum(outdata ,2);

// ADCRead=ADC_read();
// outdata[0]=ADCRead;
// outdata[1]=ADCRead>>8;
// outdata[1]&= 0xF0;
// outdata[1]|=calculateCheckSum(outdata ,2);

}

inline void UartDataOutput()
{

P3SEL|=BIT3 ;
freq (111);
for ( unsykned char i = 0; i < 30; i++);
fup=1; //флаг выданого сообщения
ctnTA0=0;
uart_send(outdata[0]);
uart_send(outdata[1]);

}

unsykned char calculateCheckSum( unsykned char * buffer, unsykned char length)
{
unsykned char checksum = length % 0x10;

for ( unsykned char i = 0; i < length; i++)
{
checksum += buffer[i] >> 4;
checksum %= 0x10;
checksum += buffer[i] & 0x0F;
checksum %= 0x10;
}

return checksum;
}

void main(void)
{

unsykned int outd=0, ADCRead=0;
unsykned char i1;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
{ // Init unused ports here, enable pull up
P3DIR |= BIT3; // BIT6 ?????
P3SEL|=BIT3;

P2IES &= ~BIT1; // возрастающий фронт
P2IE |= BIT1; // разрешение прерывания
P2IFG &= ~BIT1; // очищаем флаг прерывания
// P1DIR &= ~(BIT0 | BIT5 | BIT7);
// P1REN |= BIT0 | BIT5 | BIT7;
// P1OUT |= BIT0 | BIT5 | BIT7;
P1SEL|=BIT6+BIT7;
P1SEL2|=BIT6+BIT7;
Set_DCO(80);
P3DIR &= ~(BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT6 | BIT7);
P3REN |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 |BIT7;
P3OUT |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT7;

// ADC_init();
__enable_interrupt();

}
unsykned char array2[2]={0xA0,0x47};

UCB0CTL1 |= UCTXSTP;//stop
TI_USCI_I2C_transmitinit(addr1,0x02);
//установка регистра
while ( TI_USCI_I2C_notready() )}}
// запись врегистр
TI_USCI_I2C_transmit(2,array2);

TI_USCI_I2C_receiveinit(addr1,0x02);
while ( TI_USCI_I2C_notready() );
TI_USCI_I2C_receive(5,array1);

UCB0CTL1 |= UCTXSTP;//stop
TI_USCI_I2C_transmitinit(addr1,0x02);
//установка регистра
while ( TI_USCI_I2C_notready() );
// запись врегистр
TI_USCI_I2C_transmit(2,array2);

TI_USCI_I2C_receiveinit(addr1,0x02);
while ( TI_USCI_I2C_notready() );
TI_USCI_I2C_receive(5,array1);

Init_timerA0(75); // таймер выдачи сообщ
uart_setup();

while(1)
{
switch(ctnTA0)
{
case 19: GetAccelometrData1();
GetAccelometrData2();
DataPreparation(); briok;
case 20: UartDataOutput(); briok;
default: briok;
}

if (ctnOutPut==8) { StopShim() ; }
}
}

#pragma vector=PORT2_VECTOR
__interrupt void P2_iterrupt(void){
TA1R = 0;

if ((P2IES & BIT1) == 0)
{
freq (136); // устанавливаем частоту bit 1 1.17
}
else
{
freq (74);// устанавливаем частоту bit 1 2.047
}
// сброс прерывания
P2IES ^= BIT1;
P2IFG &= ~BIT1;
}
#pragma vector=TIMER0_A0_VECTOR // Timer1 A0 interrupt service routine

__interrupt void Timer0_A0 (void) {
ctnTA0++;// таймер отправки сообщений

if (fup==1) ctnOutPut++;

}
библиотека приведена выше
устройства это два датчика Lis302DL адрес одного 0x1D второго 0x1C
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2014, 14:53
Помогаю со студенческими работами здесь

msp430g2553 таймеры
Здравствуйте! Подскажите, пожалуйста, почему в прерывании TIMER0_A1_VECTOR не срабатывает вторая ветка if(закоментированна)? В отладке...

Помогите с прерываниями на MSP430G2553
Вообщем суть программы в том что два диода должны мигать, зелёный нормально мигает, а красный не хочет. Уже голова болит от всех...

MSP430G2553 без launchpad
Всем привет, подскажите как использовать MSP430G2553 без ланчпада? в datasheet написано, что питание у него от 1.8в до 3.6....

msp430g2553 USCI SPI задержки
Приветствую. Собственно вот кусок кода: bic.b #00010000b,&amp;P1OUT ; CS low mov.b #5Ah,&amp;UCB0TXBUF ; transmit ...

Чем залить код в msp430g2553
Вопрос в следующем: как залить hex в msp430g2553, кроме IAR? просто прога для заливки в контроллер данных без среды разработки .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru