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

UART Low-Speed AT89C51RB2


vitallativ

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

Привет, ребята. Буду признателен за любую помощь.

Ситуация в следующем: 

Мне требуется выполнить миграцию для одного проекта с МК P87C51FB (снятого с производства) на МК AT89C51RB2 (в производстве).

Код переехал отлично, за исключением одной вещи. В проекте реализована связь диагностического стенда с моим блоком, инициализирующаяся кодовой посылкой на 5 бодах (ISO 9141), исходя из которой настраивается передача на 4800/9600. Проблема в том, что UART данного МК отказывается работать на этой скорости. P87C51FB это делал легко.

ДШ гласит:

Скрытый текст

One can achieve very low baud rates with Timer 1 by leaving the Timer 1 interrupt
enabled, and configuring the Timer to run as a 16-bit timer (high nibble of TMOD =
0001B), and using the Timer 1 interrupt to do a 16-bit software reload.

Т2 у меня занят, Internal_BaudRate_Generator на 5 бод настроить не выйдет. Юзаем Т1 на таймере 1 в режиме 16бит с софтварной перезагрузкой в прерывании (как ДШ завещал). Код (только UART) асемблирую и прошиваю следующий:

$DATE ( 30.06.2018 )
$TITLE ( Project3 )
$NOPAGING
$NOMOD51
$INCLUDE (AT89C51RB2.inc)

        org     00H
        ljmp    BEGIN

        org     23H
        ljmp    serial_IT

        ORG     001BH    
        JMP     TM1INT

        org 100h

BEGIN:
        clr     A
        mov     TCON, A
        mov     T2CON, A
        mov     SCON,#50H  
        MOV     PCON,#80H   
        MOV     TMOD,#10H   
        MOV     TH1,#0CFH 
        MOV     TL1,#02CH      

        setb    ES
        setb    EA
        setb    ET1
        setb    TR1
        
        mov     A,#55h
        mov     sbuf,A

        jmp     $

TM1INT:
        clr     TR1
        MOV     TL1,#02CH
        MOV     TH1,#0CFH
        SETB    TR1

        RETI

serial_IT:
        jnb     RI, _TI
        clr     RI

        mov     A,sbuf
        mov     sbuf,A
        cpl     P3.5

        ljmp    end_IT
_TI:
        clr     TI
end_IT:
        reti
        
END

В результате стартовую посылку "55H" МК не отправляет, нога TxD прижимается к лог. 1 и висит, на прием МК также не реагирует. Понимаю, что не показатель, но в протеусе данный код работает прекрасно.

Ко всему вышесказанному добавлю, что запустить UART на Т1 (16bit software reload in interrupt) ни на одной из скоростей у меня не вышло. На Т2 и Internal_BaudRate_Generator, да даже на Т1 в режиме 8бит автоперезагрузки (только высокие скорости) UART работает исправно.

Ломаю голову... Возможно я что-то делаю не так. 

Буду признателен за любую помощь.

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

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

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

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

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

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

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

В 04.07.2018 в 07:36, vitallativ сказал:

Код переехал отлично, за исключением одной вещи

Интересно как вы проверили что код отлично переехал, если у вас прошивка стартовать не может! Но это ладно.

В протеусе на ноге TxD присутствует 0х55??? Но я не вижу где этот код ее значение меняет!

и не вижу где запись в TX регистр uart-а.

И что такое P3.5 и зачем ее ЦПЛ-ить в прерывании UART-а( это ведь прерывание UART-а?)

Ни-чО не понятно!!!

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

16 часов назад, ruhi сказал:

Интересно как вы проверили что код отлично переехал, если у вас прошивка стартовать не может! Но это ладно.

В протеусе на ноге TxD присутствует 0х55??? Но я не вижу где этот код ее значение меняет!

и не вижу где запись в TX регистр uart-а.

И что такое P3.5 и зачем ее ЦПЛ-ить в прерывании UART-а( это ведь прерывание UART-а?)

Ни-чО не понятно!!!

1. Есть множество вариантов проверить исправность определенных участков и без юарта. Но это не важно, ибо "НО это ладно".

2. По-мойму прекрасно видно:
 

Цитата

 

mov     A,#55h

mov     sbuf,A

 

3. В регистр TxD не пишут, пишут в буфер SBUF, дальше байт попадает в аппаратный сдвиговый регистр.

4. Инверт делаю ПРОСТО ТАК - в целях отладки использую данную конструкцию.

5. Все же остальное практически апнот атмела. CLICK-КЛАК

Изменено пользователем vitallativ
уточнение
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, vitallativ сказал:

3. В регистр TxD не пишут, пишут в буфер SBUF, дальше байт попадает в аппаратный сдвиговый регистр.

4. Инверт делаю ПРОСТО ТАК - в целях отладки использую данную конструкцию.

5. Все же остальное практически апнот атмела. CLICK-КЛАК

Ссылка не работает у меня по крайней мере.

Но теперь понятно, в прерывании эхо.

Только вот, если вы хотите чтобы по таймеру у вас байт выходил на ногу ТХ, там должен быть код сдвига и управления этой ногой или ...

Не ужели там тактирование UART-а от таймера предусмотрено, и таймер можно выбрать - 1-й или 2-й???

8 минут назад, ruhi сказал:

Не ужели там тактирование

И ведь действительно можно.

Тогда попробуй значение в счетчике уменьшить раз в 100 - может ты какой то делитель не учел - если начнет прыгать выход, сможешь измерить частоту и поправить свои константы - настройки бод-рейта.

Изменено пользователем ruhi
очепятка

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

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

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

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

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

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

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

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

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

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

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