Quote (ilyafm98)
Тут есть инструмент для рассчета значений регистров модуля USART. У вас в прошивке указана тактовая частота 4 МГц и скорость 115200 - при этих значениях ошибка в скорости будет составлять 8,5 %, соответственно ничего принять или передать не получится.
Попробуйте поставить скорость 9600 и попробовать что либо принять или передать. Если нужна скорость выше то рекомендую поднять тактовую частоту до 20 МГц.
Добавлено (05.11.2012, 23:12)
---------------------------------------------
И вот тут еще ошибка, должно быть:
Поясню, что я делаю. Есть плата кнопок где каждая кнопка висит на порте В при замыкании кнопки на pin порта В приходит +5 (т.е. логическая единица). Моя задача, чтобы эта плата через UART с помощью max232 передавала 1 байт. Структура которого следующая: если ниодна кнопка не нажата, то байт имеет значение %11111111, если нажата кнопка 1 то байт будет выглядеть %11111110, если кнопка 2, то %11111101 и т.д.
У меня порт А вообще не используется.
Поднимать частоту кварца не могу, т.к. есть готовая плата с уже готовой аналогичной прошивкой и кварцев 4 Мгц и все работает замечательно. Я просто хочу повторить ее
Покопавшись по иностранным форумам нашел одну интересную вещь. На больших скоростях необходимо менять значение HSER_TXSTA с 20 на 24
У меня получилось следующее
Code
define OSC 4
define HSER_TXSTA 24h
define HSER_EVEN none
DEFINE HSER_ODD none
DEFINE HSER_BAUD 115200
DEFINE HSER_BRGH 1
DEFINE HSER_SPBRG 1
TRISB = %11111111
PORTB = %00000000
I1 VAR byte ' временные переменные
B1 var byte 'выходной байт 1
main:
I1 = PORTB
B1 = ~I1
hserout [B1] ' вывожу значения через uart
pause 100
goto main
но проблема в том, что после перепрошики я получаю свой байт %11111111($FF - в HEX), но стоит мне к примеру нажать кнопку 1 то я вместо положенного %11111110 ($FE) значения получаю %01111110 ($7E) и так со всеми кнопками. Т.е. куда-то девается старший 7-ой бит
В чем проблема?