• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
Isaev_ivan

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

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

Isaev_ivan    0

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

Недавно возникла потребность передачи данных из микроконтроллера в ПК. Написал код на ассемблере, опираясь на 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. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста :)

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


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Cobban    114

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Похожие публикации

    • Автор: mine1
      Наткнулся на библиотеку hal_xxx.c от TI для MSP430.
      Ни как не могу найти, где взять взять полное семейство этих библиотек. Поделитесь ссылочной  
      hal_UCS.c
    • Автор: Elite_Knight
      Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. 
      Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716.
      Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров.
      Составить двоичный и шестнадцатеричный код каждой команды.
    • Автор: 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) :
       
      Благодарю за каждый пендель в нужном направлении, тема-то хорошая.
       
    • Автор: Карен
      Такая задача, собрал схему с сайта в протеусе с микрокоонтроллером, там же на этом сайте есть программаа, но есть одно, надо написать алгоритм это программы(блок схему), аж на уровне регистров, а прога написана в этом алооритм билдере, мб кто-нибудь шарит и сможет мне помочь? или есть вариант перевести это в обычныый язык ассемблера??

    • Гость CrazyRedMan
      Автор: Гость CrazyRedMan
      Разработать модель в среде симуляции Proteus  на базе микроконтроллера AtMega128  и написать программу на языке ассемблера для решения следующей задачи:
      1. Изменяя положение ручки регулятора напряжения переменным резистором высвечивать на одном разряде трехразрядного семисегментного индикатора цифру от 0 до 9.
      2.    При нажатии кнопки 1 на клавиатуре выдавать звуковой сигнал с пьъезодинамика с частотой 1 кГц. При нажатии на кнопку 2 – с частотой 2 кГц, при нажатии на кнопку 3 – с частотой 3 кГц.
  • Сообщения

    • 1. Да. Только перед конденсатором нужно будет установить дроссель; 2. Да. Стабилитрон может быть 11-15В; 3. Смотря какая нагрузка БП и коэффициент трансформации тр-ра связи (ОС по току). Чем выше коэф. тем меньше ток через стабилитроны. При нагрузке 200Вт стабилитроны в моей схеме уже были ощутимо теплые. Как вариант можно взять 2 соединенных последовательно стабилитрона 0,5W 5,6-6,2В. Это будет эквивалент 11-12В, 1W.
    • ну если вы можете почти что голыми руками, около 10-ти часов тыкать железку под большим напряжением в уголь, так что бы уголь не пробило и кромку не оплавило, то я сниму перед вами свой капюшон.)
      скажу только что оно того стоит. у меня есть лампочка накала, стеклянная колба которой - исцарапанная после подобных процедур со стамесками.
      сложнее всего с ножами для фуговочного станка. 300мм. у меня было два комплекта, когда начинал экспериментировать. один "процементировал" а другой не трогал. изначально это были два одинаковых, уже отработанных комплекта.
      тот что после цементации звенел "выше" и дольше(4 человека определяли) и при обработке дуба продержался лучше. все при одних и тех-же условиях, "набитыми" руками.
      по этому, исходя из своего Опыта и наблюдений могу сказать  - нужен генератор пачек импульсов. нужно регулировать длительность импульса и его "интенсивность". 
      если можете предложить что-то более простое и не менее действенное исходя из Вашего опыта - предлагайте. и для этого - тоже.
    • http://forum.cxem.net/uploads/monthly_2017_12/IMG_0275.jpg.371ef102dd26df72239befb4ecf6b436.jpg Там есть красный и синий, красивые проводочки на клеммах, впаяных в плату. Четыре отверстия 1мм с выфрезерованными перемычками.
    • В общем, пока что все-таки пришел к данному способу измерения, как наиболее пригодному, недорогому  и простому в реализации и повторении. Если несколько упростить конструкцию, то можно реализовать устройство, используя только токарные изделия. Поэтому буду пробовать. Спасибо за рекомендацию! Осталось только придумать из какого материала выточить контактные пластины для контактного датчика. Пока что крутиться в голове Кремнистая бронза. Возможно? титан, правда никогда не слышал, чтобы из него делали контакты, но мне он нравиться своей стабильностью свойств в атмосфере. Для улучшения контакта и пробивки оксидных пленок, можно использовать повышенное напряжение (12, 24В) и после прохождения через прерыватель делить его и подавать на плату измерений.