реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> UART Low-Speed AT89C51RB2
vitallativ
сообщение Jul 4 2018, 05:47
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-07-18
Пользователь №: 105 698



Привет, ребята. Буду признателен за любую помощь.
Ситуация в следующем:
Мне требуется выполнить миграцию для одного проекта с МК 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 работает исправно.
Ломаю голову... Возможно я что-то делаю не так.
Буду признателен за любую помощь.
Go to the top of the page
 
+Quote Post
vitallativ
сообщение Jul 4 2018, 10:07
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 4-07-18
Пользователь №: 105 698



Частота кварца 12Мгц
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 09:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016