Jump to content
Isaev_ivan

Код Передачи По Usart Для Msp430(Ассемблер)

Recommended Posts

Доброго времени суток всем!

Недавно возникла потребность передачи данных из микроконтроллера в ПК. Написал код на ассемблере, опираясь на Code_examples от TI, и то, что получилось, приведено ниже:

#include "msp430F1232.h"

RSEG CSTACK

DS16 0

RSEG CODE

;---------------------------------------------------------------------

; Установка тактирования от кварца

;---------------------------------------------------------------------

RESET mov #SFE(CSTACK),SP

mov #WDTPW+WDTHOLD,&WDTCTL ;OSTANOVKA WDT

BIC #OSCOFF, SR ; tAKTIROVANIE OT KVARCA

BIS.B #XTS, BCSCTL1

L1 BIC.B #OFIFG, &IFG1

MOV #0FFh, R15

L2 DEC R15

JNZ L2

BIT.B #OFIFG, &IFG1

JNZ L1

BIS.B #SELM_3, &BCSCTL2

;--------------------------------------------------------------------

; Инициализация USART

;--------------------------------------------------------------------

mov.b #200,R7

bis.b #SWRST,&UCTL0;

bis.b #030h,&P3SEL; P3.4,5 - USART

bis.b #UTXE0+URXE0,&ME2; Включение передачи и приема

bis.b #CHAR, &UCTL0; Формат данных 8-разрядный

mov.b #SSEL0, &UTCTL0; UCLK=ACLK

mov.b #0100b,&UBR00; 5MHz/19200 = 260.4 = 100000100b

mov.b #0001b,&UBR10;

mov.b #0000, &UMCTL0; Без модуляции

bic.b #SWRST,&UCTL0; Сброс USART не включен

bis.b #URXIE0+UTXIE0,&IE2

bis.b #UTXIFG0,&IFG2; Флаг гтовности к прерыванию

Loop bis.w #LPM3+GIE,SR

nop

jmp Loop

;-------------------------------------------------------------------

USART0TX_ISR;

;-------------------------------------------------------------------

mov.b R7, &TXBUF0;

reti

;--------------------------------------------------------------------

; Векторы прерываний

;--------------------------------------------------------------------

COMMON INTVEC

ORG RESET_VECTOR

DW RESET

ORG USART0TX_VECTOR

DW USART0TX_ISR

END.

Из программы видно, что я просто хочу передать содержимое R7 в ПК. Трудность заключается в том, что это значение передается не всегда. Запускаю программу, которая считывает информацию с com порта (программа работает 100% правильно), она в тестовый файл записывает значение 200(правильное значение). В следующий раз, после перезапуска программы, в текстовый файл она записывает величину 14. Потом снова 200. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста :)

Share this post


Link to post
Share on other sites

Вот это непонятно зачем:

bis.b #UTXIFG0,&IFG2; Флаг гтовности к прерыванию

Как только буфер передатчика становится пустым флаг выставляется автоматически.

В остальном проблем с настройками сходу не заметил, кроме того что в регистр модуляции вписать "4". Если есть осциллограф, то посмотрите на нём что передаётся. Проверьте кабель. Можно попробовать понизить скорость.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By SerYoga72
      Приветствую всех.
      Подскажите не совсем программисту (или совсем не программисту) как грамотно реализовать программный SPI. МК CC430F5137 + OLED дисплей WEH000802A от Winstar. Данные 10 бит. Аппаратный в контроллере позволяет только 8, выход свой написать. Написал, но мне это не нравиться, знаю что можно намного проще, но не нахожу решения. Да и как то странно с портами в этом контроллере работается, нельзя (или не знаю как) данные напрямую в порт кидать, типа P1.0 = 1; А только BITами оперировать??? Вот что у меня получилось, смеяться разрешается ))
      // Обработчик дисплея // // Маразм для програмного SPI void SCL(uchar b) { if (b==1) (P1OUT |= BIT7); else P1OUT &= ~BIT7; } //Строб void CSB(uchar b) { if (b==1) (P1OUT |= BIT4); else P1OUT &= ~BIT4; } //Выбор чипа void SDI(uchar b) { if (b==1) (P1OUT |= BIT6); else P1OUT &= ~BIT6; } //Передаваемые данные void SDO(uchar b) { if (b==1) (P1OUT |= BIT5); else P1OUT &= ~BIT5; } //Принимаемые данные // Вывод управляющей команды для дисплея void WriteCMD(uchar CMD) { uchar i; CSB(0); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); for(i=0;i<8;i++) { uchar t = ((CMD>>(7-i)) & 0x01); // Как уйти от переменной t ????? SDI(t); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); } CSB(1); } /*============================================ Вывод одиночного символа на дисплей ============================================*/ void WriteOneDAT(uchar DAT) { uchar i;; CSB(0); SDI(1); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); for(i=0;i<8;i++) { uchar t =((DAT>>(7-i)) & 0x01); SDI(t); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); } CSB(1); } Технически разница между Командой и Данными в первом бите SDI и объединить эти две функции наверно не проблема, но я уверен что это можно написать как то грамотнее ...  Как в этом контроллере с портами работать кроме как P1OUT |= BIT1 ??? Нельзя как то типа P1OUT_1 = 1;  ?? Где то в буржуйской литературе мапинг какой то проскакивал, но там я вообще не вьехал про что это, для чего это....
      Заранее Всем Благодарен.
       
       
       
       
       
    • By Vlad Zubarev
      Доброго времени суток!  Кто разбирается с Atmega128,  ассемблером и кому не жалко времени,  пожалуйста помогите. 
      Как можно корректировать скорость падения маятника (он должен постеменно набирать скорость падения и плавно замедляться к верхней точке)... Какие данные нужно менять?!  Спасибо! 
      логин маятник 2.zip

    • By mine1
      Наткнулся на библиотеку hal_xxx.c от TI для MSP430.
      Ни как не могу найти, где взять взять полное семейство этих библиотек. Поделитесь ссылочной  
      hal_UCS.c
    • By Elite_Knight
      Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. 
      Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716.
      Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров.
      Составить двоичный и шестнадцатеричный код каждой команды.
    • By Speed Fighter
      Здарова, инженеры. 
      Не подсобите студню с заданием? 
      Задание, если кому интересно:
      Я подчитнул некоторую теорию, про индикацию, матричную клавиатуру и её опрос. Но вот возникли след. вопросы/трудности:
      1. В случае использования только двух кнопок, целесообразно ли подключать кнопку непосредственно к выводу микроконтроллера? Насколько сильно это упростит решение задачи?
      2. Можно ли где-то посмотреть пример реализации таких клавиатур именно на PIC18? (Уж очень у меня не хватает практики по программированию устройств, всегда на уровне любителя работал на крестах и ему подобных языках для решения мелких проблем и забав)
      3. Можно ли где-то смоделировать моё творение, т.е. посмотреть работоспособность? (MPLAB, proteus, xlinx)
      4. На чем в данном случае рациональнее "кодить" - язык ассемблера или сишка?
      Есть некоторый алгоритм для обработки дребезка контактов:
      https://pp.userapi.com/c840123/v840123038/23a0/IjXofwjEmuc.jpg
      Есть некоторая схемка, которую я в инете откопал:
      https://pp.userapi.com/c840123/v840123038/23a7/-rD4tgCfvLs.jpg
      Так же нашел небольшой код на просторах интернета (увы, он для AVR) :
       
      Благодарю за каждый пендель в нужном направлении, тема-то хорошая.
       
  • Сообщения

    • В ФБК начали публиковать фотографии и адреса детей неугодных навальнистам чиновников. Пугающие заявления Навального и его хомяков: блогеру пора в больничку с белыми стенами. Навальный и его шестерки совсем потеряли чувство реальности. Детей в свои игры они втягивают уже давно, но теперь они перешли все грани разумного.  Сотрудники ФБК опубликовали данные 10-летнего мальчика, внука одного их членов Мосгоризбиркома. Фото, адрес – все это попало в Сеть.  Более того, хомяки Навального начали призывать распространять эти данные, другими словами, зная методы навальнят – травить. Подобные античеловечные поступки не оценили даже в либеральной тусовке. Главред журнала «Сноб» Ксения Чудинова не поддержала действия Навального и написала, что на подростка «травят свору». После этого свора пришла и к ней. Навальнята требовали от Чудиновой не учить их лидера нравственности. Как всегда не обошлось без нецензурщины и агрессии. Позиция Навального и его хомяков проста. Есть «свои» дети, а есть «чужие». Вторых не жалко, и с ними можно делать что угодно, в том числе и распространять данные для дальнейшей адской травли. Например, семью Проказовых они защищают. Тем временем эти недородители дали своего ребенка соратнику и провокатору Соболь Сергею Фомину, дабы тот мог прикрыться малышом и уйти из оцепления на митинге в Москве. Да что там, Соболь и сама прикрывается своей несовершеннолетней дочерью, вспоминая о ней лишь когда надо избежать более жесткого наказания за нарушения и противоправные действия. Очень верно оценил действия либерастов педиатр Федор Катасонов. Он назвал их озлобленными и грубыми людьми, которые совсем растеряли «налет интеллигентности». За примерами далеко ходить не надо. Один из поклонников Навального предложил органам опеки изъять внука члена Мосгоризбиркома у семьи. Другая соратница блогера поддержала эту дичь. Она также выдвинула свою идею – конфисковать недвижимость этой семьи в пользу детских домов. Примечательно, что на страничке в соцсети у этой девушки ранее была размещена петиция в поддержку фигуранток дела «Нового величия». Тогда она требовала отпустить девушек домой, они же дети!  Да и не будем забывать, что блогер всегда призывает детей участвовать в митингах. Однако его собственные сын и дочь ни разу не были замечены на подобных мероприятиях. Так что позиция либерастов, как всегда, очень лицемерна. Одних детей они защищают, других готовы уничтожить. Более того, сам Навальный ранее говорил о том, что люстрировал бы не только чиновников, но и их детей и внуков. В общем, тупость на грани диссоциативного расстройства. В голове нормального человека подобные действия и заявления не укладываются.  Для Навального это в порядке вещей, и своих хомяков он взращивает на этом же идиотизме. Леше бы всерьез подлечиться в больничке с белыми мягкими стенами. Такая она, «Светлая Россия будущего», в понимании этих беспринципных, циничных, жестоких и лицемерных людей. https://x-true.info/87111-pugajuschie-zajavlenija-navalnogo-i-ego-homjakov-blogeru-pora-v-bolnichku-s-belymi-stenami.html
    • Мини сверлильный станок для сверления дерева, пластика, цветных металлов.  Чтобы не быть требовательным к напряжению питания установлен повышающий DC-DC преобразователь и плата автоматического увеличения мощности двигателя при сверлении (чем больше нагрузка при сверлении, тем большее напряжение подаётся на двигатель). Двигатель RS445PA14233R от принтера EPSON Патрон JT0 для сверл диаметром от 0,3 мм - 4 мм. (биения сверла нет) Подсветка рабочей зоны: На двигателе - 2 ярких светодиода без регулятора яркости. Стол 95 мм. х 110 мм. изготовлен из ЛДСП толщиной 16 мм. с силиконовыми ножками. Напряжение питания: DC от 18 до 36 вольт. если принудительно остановить двигатель: то при напряжении 18 вольт - ток 2,8 Ампера. при напряжении 36 вольт - менее 1 ампера. Расстояние от стойки до сверла 70 мм. Вертикальный ход сверла 35 мм. Весь станок от основания поднимается и опускается по стойке Цена станка 3000 рублей. + стоимость доставки. Тут подробнее о станке, комплектующих и его обслуживании.
    • Добавлю индикаторы для Сигнал 201, 4 штуки и от Веги-119, 2 штуки. Новые. Все проверены. По 300 рублей. От Веги без маркировки.
    • От бывшего на день рождения.
    • Не любит пинков дядя Паша А в остальном - правда ваша Увы, с жизнью скучной, унылой Поэзию мы позабыли   Явился же друг мой @Diodoff Он любит настройку приборов Он прет, чтоб приборы наладить И все наши беды исправить
    • Нет смысла там в войне, Вадим, бесполезно, я жду когда ты успокоишься, война отвлекает от созидания.... мой тебе совет- не ходи в деревню Гадюкино, серет там кто-то и серет, ты за своими темами смотри, вовремя правь схемы, если Пилотники и масовость сборок находит ВОПРОСЫ\ответы... остальное шелуха!  Обидно конечно, что КЛАВДИЮ тоже обосрали, но тут в форуме если кто-то скажет что Клавдия НАЖИЛАСЬ и денег заработала- то должно стать стыдно, тот кто в теме продажи и разработок всё может сказать, насколько я нажился, ага, хренов как дров  , впору виллу в Калифорнии покупать ( нахрен я в деревню езжу работать и овощи-фрукты со своего участка собирать  ) ... Да , алгоритм работы с самой слоЖной схемой ЭА-2014 (2012) в виду ее упрощенности сложноват для Новичка, тут согласен. Но там ранее висело в форуме " ДЛЯ ОПЫТНЫХ СБОРЩИКОВ", тут в форуме это сложно назад повесить ? Не пойму в чем проблема ?  Никто же не заставляет ШКОЛЬНИКУ настраивать спутниковую навигацию.....на уровне железа.... а не так чтобы УЖЕ ЕСТЬ тыкнул на кнопку и уже хорошо.
    • выложил измененную версию. номер версии не стал изменять. кто уже скачал, прошу скачать заново. в названии прибора и в единицах измерения убрал ограничение длины строки. теперь можно ввести любую длину. чуток уменьшил высоту окна, чтобы некоторым людям был хорошо виден зазор между окном и границами доступной области. исправил образцы сохраненных файлов, чтобы там были появившиеся новые параметры.  
×
×
  • Create New...