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

 
 
> Проблема с передачей по RS-232
MichaelTLT
сообщение Jan 27 2012, 07:40
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 27-01-12
Пользователь №: 69 910



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

Есть контроллер AT89S52. К нему напрямую, без всяких извращений подключен MAX232 со стандартной обвязкой из 5 конденсаторов. Я пытаюсь вывести в последовательный порт данные, но на компьютере принимаю какой-то мусор. Причем этот мусор отличается от данных всего-лишь двумя старшими битами. Например, отправляю в порт число 41h, а получаю попеременно 81h и C1h. Вот пример программы:

Код
cseg
                                
org    00h
jmp        init

init:
    mov    p3, #0FFh
    mov    SCON, #50h
    mov    TH1, #0F9h
    orl    TMOD, #20h
    setb    TR1

main:
    clr    TI
    mov    SBUF, #41h
    jnb    TI, $
    sjmp    main


Скажите, где засада?
MAX232 - нехитрое устройство, данные на него отправляются по одному биту. И если бы он был глючный, то наверно портились все бы биты или большая их часть. Но у меня стабильно отличие только в двух старших битах. Может с программой что-нибудь не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Jan 27 2012, 09:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MichaelTLT @ Jan 27 2012, 11:40) *
Скажите, где засада?

Вероятно, несовпадение скоростей - неправильно расчитано значение TH1
Go to the top of the page
 
+Quote Post
MichaelTLT
сообщение Jan 27 2012, 15:03
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 27-01-12
Пользователь №: 69 910



Цитата(Палыч @ Jan 27 2012, 13:04) *
Вероятно, несовпадение скоростей - неправильно расчитано значение TH1


Возможно. Я считал по такой формуле: 256 - (Fosc / 384 / 9600). При Fosc = 24МГц получил 249.5 и округлил до 249 (0xF9h).
Пробовал менять это значение на единицу в обе стороны. Тогда получаю на выходе вообще хаос )

Цитата(ChipKiller @ Jan 27 2012, 14:43) *
... попробуйте так


Да! Все получилось )
Только интересно, почему (ушел искать про удвоение скорости...). Спасибо за помощь sm.gif
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 27 2012, 15:19
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(MichaelTLT @ Jan 27 2012, 22:03) *
Возможно. Я считал по такой формуле: 256 - (Fosc / 384 / 9600). При Fosc = 24МГц получил 249.5 и округлил до 249 (0xF9h).

Ну вот вам и разгадка: делить частоту нужно на (Fosc / 384 / 9600)=6.5
При делении на 6 или 7 ошибка составляет ~0.5/6.5 = 7.7%, многовато.
Ближе к концу посылки накапливается ошибка более половины бита и старшие биты принимаются неправильно.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 19:23
Рейтинг@Mail.ru


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