Desert _Eagl.5

Uart На At89C51

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

Здраствуйте.

Ктонибудь в курсе как работать с uart на низком уровне( ассемблер) в AT89C51 ?

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


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

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

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

  • x
    мм
Заказать Получить купон на $5.00
o_l_e_g    1 614

Передача:

MOV SBUF, xx ' где хх- источник данных

Данные будут немедленно переданы, после передачи установится флаг TI

Прием:

MOV xx, SBUF

после аппаратной установки флага RI

UART должен быть соответственно настроен.

ЗЫ примеры:

прием-передача

Serial_Send:
    ;wait for last data to be
    ;sent completely
    jnb TI,Serial_Send
    ;clear the transmit interrupt flag
    clr TI
    ;Then move the data to send in SBUF
    mov SBUF,A
    ret

Serial_Read:
    ;Wait for Receive interrupt flag
    jnb RI,Serial_Read
    ;If falg is set then clear it
    clr RI
    ;Then read data from SBUF
    mov A,SBUF
    ret

инициализация

Serial_Init:
    ;Set timer 1 mode to 8-bit Auto-Reload
    mov TMOD,#20H
    ;Enable reception
    ;Set Serial port mode to 8-bit UART
    mov SCON,#50H
    ;Set baudrate to 9600 at 11.0592MHz
    mov TH1,#0FDH
    mov TL1,#0FDH
    ;Start Timer
    setb TR1
    ret

Изменено пользователем o_l_e_g
  • Одобряю 2

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


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

Помни, что для формирования временных временных интервалов используется таймер-счетчик 1, и для других целей он будет недоступен.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: dim3740
      Читается порт UART на микроконтроллере Atmega. Применяю типовой алгоритм, но аппаратно вижу ошибки. Что неверное, или отчего они могут быть?
       
      unsigned char rx_buffer[128]; //накопительный буфер unsigned char indexW; // индекс при наполнении накопительного буфера unsigned char Count; // счетчик накопительного буфера unsigned char indexR; // индекс при опорожнении накопительного буфера int Max; // максимум до переполнения char tempMessage; // временная переменная int main(void) {    Max=100; // пробовал разные    while(1)     {         _delay_us(40); // пробовал от 10 мкс до мс                          if (Count > 0)          {             tempMessage=rx_bufferR[indexR];                                        MesComplite(tempMessage); //тут анализ каждого считанного байта. Это занимает время                                          //поэтому и нужен буфер                          indexR++;                            if (indexR>=Max)  indexR=0;  //Значение Max одинаковое для чтения и записи. Может разные проба?                          cli();  // для надежности запрет прерывания             Count--;             sei(); //разрешение                          if (Count>=Max)  Count=0;                  }              } } ISR(USART_RXC_vect)   {     if (UCSRA & (1<<7))        {                  rx_buffer[indexW]=UDR;                  indexW++;                    if (indexW>=Max)  indexW=0;                   Count++;                  if (Count>Max)  Count=0;           } }
      1. Задержка нужна в цикле whole? У меня при нуле еще больше ошибок(((
      2. Размеры 128 и 100 методом подбора?
      3. Инкременты ++ ставить после команды?
      4. запреты прерывания нужны?
      5. If делаю на "равенство и больше". Верно?
      6. Какие есть иные методы повышения надежности, кроме повторной отправки при ошибке?
    • Автор: Дмитрий Кузьмичёв
      Доброго времени суток!!! Я столкнулся с тем, что не работает UART и не реагирует на AT-команды. Пробовал с 2-мя переходниками: CH340 и FT232RL, тот, что в Arduino. Пробовал и менять контакты RX-TX местами, и скорость менял (должно быть 9600 бод) - терминал молчит от слова совсем. CH340 просто светит своим индикатором приема, а FT232 моргнет при включении и все. Должно выводиться в терминале при включении ON, но не выводится ничего и никак не реагирует. Проверял и обвязкой, и упрощенным подключением (4 провода - 2 питания и 2 UART), и напряжение то 3.3 делал, то 3.7, то питал с аккумулятора - молчание. Подумал, что UART нагнулся из-за моих кривых рук - махнулся с другом на свежую, проверить UART, но результат тот же, полагаю, что в моем даже и не сдох. А сам модуль работает, не считая злосчатного UART. Так в чем может быть проблема? 
    • Автор: X-Fear
      Здравствуйте, на днях собрал ubs-usart на attiny2313 на макетной плате, всё работало. Припаял к плате - не работает. В диспетчере задач показывается, как Неизвестное устройство.  В чём может быть проблема, контакты проверил тестером в режиме прозвонки, вроде не коротит ничего. 




    • Автор: carlogulliani
      Добрый день, читаю датчик GPS MTK3339 по uart, везде, где бы не читал (ардуино, fdti, ubuntu) выдает следующее
       
      $GPGGA,061527.084,,,,,0,0,,,M,,M,,*43 $GPRMC,061527.084,V,,,,,0.00,0.00,110417,,,N*44 $GPGGA,061528.084,,,,,0,0,,,M,,M,,*4C $GPRMC,061528.084,V,,,,,0.00,0.00,110417,,,N*4B Из этого видно, что дату и время показывает верную, а координаты и позицию 0. Формат NMEA, также пробовал парить и с помощью ардуино и online парсеров, что подтвердило выводы. Тесты проводились в комнате, вот хочу понять, это до спутника не добивается или прошивка/модуль косячные?
       
      Может кто имел дело с данным модулем?
       
      По питанию все ок, подключил согласно даташиту платы (+5В там стоит преобразователь 5В в 3.3В)
       
      В поле еще не проверял
  • Сообщения

    • Думаю он должен быть уже где-то совсем рядом со станцией.. Как-никак ещё с 28го августа к ней вышел. Как вплотную подойдёт, сообщит.
    • Задержка задержкой, но импульс-то мы видим лишь потому, что "волна отражается" от конца кабеля! И если он (конец) закорочен, то отражается "током", а если не закорочен - "напряжением", что на осцилле видно в виде импульсов разной полярности. Ну а теперь остается только домыслить, что будет, если подать в линию не импульс, а непрерывную синусоиду... что будет? дойдет волна до конца, отразится и? и просуммируется с "набегающей" волной! в итоге получится новая синусоида - стоячая волна! "пучности", о которых вы тут любите рассуждать, будут определяться тем, в какой фазе произошло отражение... А вот если на конце линии будет сопротивление строго определенной величины, то оно сведет отражение в ноль - отражения больше не будет. И это как раз и называется согласованием нагрузки, а сопротивление это будет равно волновому сопротивлению... Эх вы, локаторщик...
    • 3 - это 11 (в бинарном виде), соответственно 3<<int0 это  1100 0000 (в бинарном виде). Что тут не понятно?
    • CC3100 – сетевой процессор для «Интернета вещей»/ C3100 BoosterPack на базе CC3100 для использования совместно с оценочными комплектами LaunchPad от Texas Instruments (примеры программного обеспечения для MSP-EXP430F5529LP) и с Advanced Emulation BoosterPack для SimpleLink Wi-Fi CC3100 BoosterPack для подключения к ПК для эмуляции микроконтроллера с использованием SimpleLink Studio for CC3100. Этот комплект также может быть подключен к другим платформам через контакты с помощью руководства пользователя для получения инструкций по переносу драйвера и примеры кода. Все новое, 1000 р., находится в Ярославле. +7(964)1374073
    • это конечно многое проясняет .  В таких случаях хорошо помогает лог анализатор....
    • Кеша, ты делаешь мой день!  Ты, даже не знаешь разницы между стоячей и бегущей! И причем тут стабильность частоты?