Перейти к содержанию

Msp430. Uart. Помогите Новичку


Рекомендуемые сообщения

Всем привет! Возник вопрос о том как осуществить передачу данных по UART.

#include "msp430.h"
/*
* main.c
*/
//const char string[] = { "Hello World\r\n" };
void initADC(void);
int tempOUT(void);
void initUART();

int main(void) {
int t ;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
initADC();
initUART();
//__bis_SR_register(CPUOFF + GIE);
while(1)
{
__delay_cycles(1000);//Сюда нужно передавать задержку переданную с компа
t = tempOUT();
__delay_cycles(1000);//...и сюда
}
return 0;
}
void initADC()
{
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON; // Включаем АЦП
ADC10CTL1=INCH_10+ ADC10DIV_3;//Канал с которого ведется преобразование 10(INCH_10)
	 //ADC10DIV_3- контролирует время разрешенное на преобразование
}
int tempOUT()
{
int T = 0;
int tmp = 0;
ADC10CTL0 |= ENC + ADC10SC; //Включаем преобразование когда ENC = 1
	 //Начинам преобразование, когда ADC10SC = 1
while(ADC10CTL1 & ADC10BUSY);
T = ADC10MEM;
ADC10CTL0&=~ENC;
tmp = (0.413 * T - 277.7 );
return(int)(tmp);
}
void initUART()
{
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSWRST;	 // Этот бит блокирует работу прерываний от UART и работу
						 // сдвигового регистра чтобы не мешать
						 // настройке (грубо говоря отключает UART).
UCA0CTL1 |= UCSSEL_2;	 // Наш UART будет работать от
						 // SMCLK (Sub-main clock), тоесть от 1MHZ.
UCA0BR0 = 0x03;		 // Делитель частоты для SMCLK (1000000 / 9600).
UCA0BR1 = 0x03;
UCA0MCTL = UCBRS1 + UCBRS0; // Модуляция UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Включаем UART обратно.
}
/*void UARTWriteString(char ch)
{
//тестовый посыл в uart-порт
int strSize = sizeof();
for(int i = 0; i < strSize; i++)
{
//WDTCTL = WDTPW + WDTCNTCL; // Сброс таймера watchdog в ноль.
while (!(IFG2&UCA0TXIFG))
; // Проверка готовности буфера отправки.
UCA0TXBUF = str[i];
}
}*/

Как инициализировать я разобрался. А вот как передать значение температуры догнать не могу. На хабре наткнулся на статью http://habrahabr.ru/post/137719/ .Там все просто для понимания, однако string в заголовках вроде бы не отвечает стандарту Си.

Нашел еще примеры с прерываниями, и реализация на таймере. И тут совсем запутался. Как все-таки осуществить прием и передачу данных? Какие тонкости? Заранее благодарю!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А что непонятно-то?

Сходу пару замечаний.

IE2 |= UCA0RXIE; // Включаем UART обратно.

Вот это совершенно ни к чему, т.к. прерывания ты всё равно не используешь.

Для передачи используй:

while (!(IFG2&UCA0TXIFG));
UCA0TXBUF = очередной байт данных;

Т.е. дожидаемся освобождения буфера передатчика и закидываем в него очередной байт данных. Можно засунуть в цикл и повторять сколько надо.

Принимать данные лучше в прерывании, но если без них...

while (!(IFG2&UCA0RXIFG));

Ждём установки флага прерывания. После этого читаем UCA0RXBUF - там принятый байт.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ребят помогите, какие выходы подсоединяются на конденсаторы(50вольт 10.000 мкФ) , с каких дорожек. По схемам реально плохо разбираюсь. Кто знает отпишитесь....  Я ее впервые ремонтирую
    • @ALex_68 пока добился 4 мВ помехи - на пределе моих измерений, закономерность пока не вывел - два узла помех емкость межобмоточная в трансформаторе и замыкающий диод - клацает божественно на 2,5-16 мГц - обычные приемы ввиде помехопоглощающих бусин не срабатывают. По осени запилю новые тесты - посмотрим,что выйдет. Успехов
    • То есть истинным можно считать значения , которые показывают мультиметры ( как и самодельный амперметр ) включенные на измерение постоянного тока. И по ним судить о набранной ёмкости за промежуток времени .... Так ?
    • С подсветкой пришлось повозиться. Первая схема работает лишь частично: при включении подсветка зажигается, её можно выключить, а назад включаться она уже не хочет - только короткая вспышка и всё. Толку мне с ней добиться не удалось, поэтому использовал другую схему. Также тестировал три дня (включено, выключено, щёлкал туда-сюда) - всё работает, ничего не греется, проблем не обнаружено. Вот измерения: А вот и финальная схема. Также прилагается печатная плата. Fan Controller - CADCAM.ZIP
    • На  Схеме  указано напряжение выходное и напряжение  питания и не ПИК-ПИК , а это  СРЕДНЕКВАДРАТИЧНОЕ  напряжение на выходе при подаче  1 вольта  среднеквадратичного на вход..  А  ПИК-ПИК  и при 320 вольтах  выдаст. 
    • Не совсем так...  В схеме шунтируют резисторы и вход ОУ. У меня при терморезисторе 100 к (80к в комнате) замер  в схеме даёт 17к. Субъективно можно предположить, что стоит именно термистор 100к при замере в схеме при показаниях мультиметра 18,4к. Заказал в поднебесной 47к  Поставлю посмотрю как и , что получится. А вообще то всё это хитро придумано. Компаратор на ОУ как то не в тему, есть отдельные компараторы для этого случая.  А вообщето желательно запитать ветилятор от отдельного источника и с отдельным регулятором температуры (не зависимым от основной схемы)- о чём и писал и советовал разработчик (ца) этого чуда.  
×
×
  • Создать...