Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
jjjjjjein
Примеры кода на сайте техас инструмент на асемблере написанны. А может кто-нибудь простой код на си написать, как один символ из гипертерминала по UARTу в контроллер MSP430F135 перенести? А то я в UARTе ничего не понимаю
*rust*
MSP430x13x, MSP430F14x, MSP430F15x, MSP430F16x Code Examples <--примеры. В архиве три папки, одна из которых называется "С". Там то, что Вас интересует.

Цитата
А то я в UARTе ничего не понимаю

Здесь Вам UART никто объяснять не будет, его нужно знать, тем более, что в нем нет ничего сложного.
jjjjjjein
Код
//**************************************************     ПОДКЛЮЧАЕМЫЕ К ПРОЕКТУ БИБЛИОТЕКИ     ********************************************************************************
******************

#include "msp430x13x.h"                                                         // Стандартная библиотека описания микроконтроллеров серии MSP430x13x
#include "stdbool.h"                                                            // Стандартная библиотека для работы с переменными типа BOOL
#include "stdio.h"                                                              // Стандартная библиотека ввовда/вывода
#include "stdint.h"
#include "usart_msp430.h"                                                       // Подключение библиотеки для работы с модулем USART микроконтроллера MSP430F135 data_convert_adc.h

//********************************************************************************
*********************************************************************************
******************************
//*************************************************     ГЛОБАЛЬНЫЕ ПНРЕМЕННЫЕ     ********************************************************************************
***************

volatile uint16_t t_interrupt;                                                  // 16-разрядный целочисленный тип без знака
uint16_t time1, time2,t1, t2;                                                   // 16-разрядный целочисленный тип без знака


//********************************************************************************
*********************************************************************************
******************************
//*************************************************     ФУНКЦИИ ПРЕДСТАВЛЕННЫЕ ДАННЫМ МОДУЛЕМ     ********************************************************************************
***************
uint16_t clock_10ms(void)
       {
           do
             { t1=t_interrupt;
               t2=t_interrupt;
             }
           while(t1 != t2);
           return t2;
       }

void InitializationTimersMSP430 (void);                                         // Функция инициализации внутренних аппаратных таймеров микроконтроллера
void InitializationPortIO (void);                                               // Функция инициализации портов ввода вывода микроконтроллера  
void InitializationUSART (void);                                                // Функция инициализации модуля USART микроконтроллера


//********************************************************************************
*********************************************************************************
******************************
//**************************************************************     ТЕЛО МОДУЛЯ     ********************************************************************************
****************************
//********************************************************************************
*********************************************************************************
******************************
void main( void )
{                                                                              
    WDTCTL = WDTPW + WDTHOLD;                                                   // Остановка сторожевого таймера, чтобы предотвратить время сброса
    _DINT();                                                                    // Запрещаем прерывания
    InitializationPortIO ();                                                    // Вызов функции инициализации портов ввода/вывода микроконтроллера  
    InitializationTimersMSP430 ();                                              // Вызов функции инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135    
    InitializationUSART ();                                                     // Вызов функции инициализации модуля USART
    _EINT();                                                                    // Разрещаем прерывания

  time1 = clock_10ms();
// time2 = clock_10ms();
        for (;;)
           {
              if ((clock_10ms() - time1) >= 100)                                 //проверка периода (1сек)
                 {
                   // А вот в этом месте мне надо передать по UART 1 символ, UART инициализирован, а вот как написать само действие передачи, ни разу в жизни не видела, и всякие примеры кода и пдф по msp мне не советуйте, ибо всеравно ничего из них не пойму
                                                                                // Передача по UART
                   time1 = clock_10ms();
                 }
              //if ((clock_10ms() - time2) >= 50)                                 //проверка периода
               //  { P4OUT ^= BIT4;                                            
               //    time2 = clock_10ms();
               //  }
           }
/*  
while (1)
  
     {            
                              
       if (Flag_100ms == true)                                                  // Если поставлен флаг 100мс
                {
                   P4OUT = ~(P4OUT & BIT3);                                     // Состояние 4 вывода 4 порта меняется  
                   Flag_100ms = false;                                          // Флаг убирается
                }                    
     } */
}
//********************************************************************************
*********************************************************************************
******************************
//**********************************************************     ОБРАБОТЧИКИ ПРЕРЫВАНИЙ     ********************************************************************************
*********************
#pragma vector=TIMERA0_VECTOR                                                   // Прерывание от таймера А (срабатывает каждые 10 мс)
__interrupt void isr_TACCR0()
                {
                  t_interrupt += 1UL;                                           //инкремент переменной времени прерывания
                }
*rust*
Я надеюсь Вы понимаете, что для того чтобы связать ваш микроконтроллер с компьютером посредством последовательного порта Вам необходимо:
1. Преобразователь UART-RS232.
2. Настроить порт компьютера (скорость, кол-во бит данных, четность, стоповые биты)
3. Все правильно распаять, чтобы TX от компьютера попал на RX микроконтроллера через преобразователь, и наоборот.

Вот пример кода от TI для микроконтроллера. Все что микроконтроллер примет по UART, то и отправит назад.

Думаю, проще нет.

Код
//******************************************************************************
//  MSP-FET430P140 Demo - USART1, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK
//
//  Description: Echo a received character, RX ISR used. Normal mode is LPM3,
//  USART1 RX interrupt triggers TX Echo.
//  ACLK = UCLK1 = LFXT1 = 32768, MCLK = SMCLK = DCO~ 800k
//  Baud rate divider with 32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 4Ah )
//  //* An external watch crystal is required on XIN XOUT for ACLK *//    
//
//
//                MSP430F149
//            -----------------
//        /|\|              XIN|-
//         | |                 | 32kHz
//         --|RST          XOUT|-
//           |                 |
//           |             P3.6|----------->
//           |                 | 9600 - 8N1
//           |             P3.7|<-----------
//
//
//  M. Buccini
//  Texas Instruments Inc.
//  Feb 2005
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
//******************************************************************************

#include  <msp430x14x.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0xC0;                            // P3.6,7 = USART1 TXD/RXD
  ME2 |= UTXE1 + URXE1;                     // Enable USART1 TXD/RXD
  UCTL1 |= CHAR;                            // 8-bit character
  UTCTL1 |= SSEL0;                          // UCLK = ACLK
  UBR01 = 0x03;                             // 32k/9600 - 3.41
  UBR11 = 0x00;                             //
  UMCTL1 = 0x4A;                            // Modulation
  UCTL1 &= ~SWRST;                          // Initialize USART state machine
  IE2 |= URXIE1;                            // Enable USART1 RX interrupt

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interrupt
}

#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = RXBUF1;                          // RXBUF1 to TXBUF1
}


Все что Вам нужно сделать - это подключить заголовочный файл своего микроконтроллера и проверить ноги и регистры UART на соответствие.
jjjjjjein
Спасибо всем за такие подробные ответы и за ваше безграничное терпение по поводу моего абсолютного не знания микроконтроллеров)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.