FrostedVic

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

2 сообщения в этой теме

FrostedVic    0

Всем привет! Возник вопрос о том как осуществить передачу данных по 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 в заголовках вроде бы не отвечает стандарту Си.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Cobban    136

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

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

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

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

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

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

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

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

while (!(IFG2&UCA0RXIFG));

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

  • Одобряю 1

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • А толку то? Даст больший ток в ТХ? Его и так можно всегда накрутить. Стабильность? Она больше зависит от построения датчика. Ставьте обычный и самый распространенный К78-2, их на старых платах как г..на. 
    • Многофункционал - мечта дизайнера-минималиста. А у предыдущей, судя по губам, золотой характер. Злые вы! А их есть у нее? МАЛАВАТАБУДЕТ!!!!!!!!!!!!! А я в школе все думал, как в жизни выглядит число (-2)?
    • Столько же. Поскольку в  РР трансформаторе работает разностный ток, нагрузочная прямая будет та же. Хорошую публикацию по этому поводу дал Леонид Пермяк: КОЕ-ЧТО О ДВУХТАКТЕ.doc Ну а если хочется разобраться "до винтика" то лучше почитать Войшвилло "Усилители НЧ на электронный лампах" . стр. 511 и дальше. У него расписано гораздо подробнее чем у Цикина. Это про меня.  Меня как и винни пуха длинные мысли только расстраивают.  Предпочитаю картинки и симуляторы. Там все долгие расчёты делает процессор, а я наслаждаюсь полученным результатом.
    • Мне важнее, чтобы Кларус догадался, что его жизнь не напрасна, и он запросто может и поесть шашлык, и приобрести медный провод, не сокрушаясь отсутствием друзей, или чьих-то приглашений, и не теряясь в бессмысленных  догадках. Хотя... Вы можете предложить Кларусу стать его единственным другом. Например отправите ему бесплатно кусок медного провода, а он пригласит вас на шашлык.. и  так начнётся дружба.
    • Приблизительно какое должно быть напряжение для 4 Ом? И все же какие динамики нужны под этот усилитель? Там в даташите судя по графикам и таблцам для 6Ом на 34В 100Вт , на 8Ом 80Вт .   8Ом 80Вт  так же соответствует значениям в табличке с продолжительными "Electrical specifications (continued)" параметрами , значит 80Вт это номинальная мощность усилителя для 8Ом? Тогда и колонки нужны с номиналкой не менее 80Вт (не учитывая мощь на запас прочности динамика)? я правильно понял?
    • Спасибо за подсказку.Остаётся где то.у кого то.как то найти этот МИТ
    • В порядке обмена опытом хочу поделиться тем, как я устанавливаю на платы дисплеи. Графические дисплеи OLED (да и Nokia5110 тоже) - детали довольно хрупкие, поэтому требуют к себе осторожного обращения. В процессе подгонки окна в передней панели радиоприёмника можно невзначай повредить такой дисплей, особенно если он не закреплён на плате. Другой проблемой является ограниченный размер от поверхности дисплея до поверхности его платы, на которой должен быть элемент крепежа, тоже имеющий некоторую высоту. Это затрудняет установку дисплея "заподлицо" с передней панелью приёмника.
      Я применяю для этой цели самодельные стойки из отрезков стержней от гелевых авторучек длиной 11 мм. Нужно подобрать небольшие шурупы, которые с усилием вкручиваются в трубочку и установить стойки на плате. Затем дисплей устанавливается в разъём и прочно фиксируется при помощи скобок из медной проволоки диаметром около 0,7 мм, заранее закреплённых на стойке как показано на фото. На представленных ниже фото показаны детали стоек и вид установленного на плату при их помощи  дисплея.
      Подобным образом я установил на плату дисплей Nokia5110 в радиоприёмнике "Гиала-404".