Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Здравствуйте! Написал простейшую программу (непрерывная передача символа) с помощью библиотечных функций, собрал схему на max232, соединил с PC - всё работает: в гипертерминале отображаются полученные символы. Теперь написал ту же самую программу, но не использовал библиотечные функции, а настраивал модуль USART по даташиту. Соединил с РС по той же схеме и ничего, в гипертерминале ничего нет, хотя программа rs232 регистрирует активность порта. В чем может быть дело? Спасибо. PS: в протеусе работают обе программы.
Для начала, так делать нельзя. Между байтами (или пакетами байт) необходимо вставлять защитный интервал длительностью не менее периода передачи одного байта, включая стартовый и стоповый биты.
Это обработчик прерывания? Если да, то он отсюда никогда не выйдет. В прерывании надо сбрасывать флаг вызвавшего прерывания вручную, иначе будет крутится в бесконечном лупе.
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
A. Fig Lee, с битом TXIF как раз всё наоборот. Если он "0", то буфер передачи полон и его содержимое выгружается в сдвиговый регистр. После этого бит TXIF будет равен "1", что означает - буфер передачи пуст. К тому же этот бит сбрасывается и устанавливается аппаратно. Среда программирования - PIC C Compile. В протеусе эта программа работает, а значит МК всё таки выходит из прерывания. Smen, а разве МК не делает это сам, ведь USART аппаратный?
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
а разве МК не делает это сам, ведь USART аппаратный
И что ж, что аппаратный? Откуда ему знать, где у Вас пакеты начинаются/заканчиваются, и какую паузу делать? Его "аппаратность" состоит в том, что он берёт байт из буфера, и помещает его в сдвиговый регистр, который выпихивает это всё в линию, вставляя стартовый и стоповый биты. И, если Вы будете всё время что-то записывать в буфер, передача так и будет, без пауз.
P.S.: Что-то смотрю, у Вас все порты на выход настроены, а должны быть на вход.
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Smen, а какие должны быть настроены на вход? я только как передатчик мк использую (но пробовал и так: PORTC=0b10000000) Я кажется понял где может быть проблема-почему то не запускается обработчик прерываний:
Код:
#int_tbe (буфер передачи пуст) void transmit() { PORTB=0b00000000; }
или
#int_default void transmit() { PORTB=0b0000000; }
то есть порт В не обнуляется (первоначально он 0b00000001). Может я какой то бит забыл?
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Вообще-то оба на выход. Даташиты когда начнем читать? Setting the SPEN bit of the RCSTA register enables the EUSART and automatically configures the TX/CK I/O pin as an output. If the TX/CK pin is shared with an analog peripheral the analog I/O function must be disabled by clearing the corresponding ANSEL bit.
Вообще-то оба на выход. Даташиты когда начнем читать?
Всегда умиляет, когда ламеры, не умеющие читать даташиты, с пафосом бывалого знатока, отсылают их читать.
Цитата:
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be set in order to to configure pins RC6/TX/CK and RC7/RX/DT as the Universal Synchronous Asynchronous Receiver Transmitter.
п 10.0 стр. 95 для 877 стр. 111 для 877a в самом верху большими буквами.
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Smen, я читал ДШ в этом месте, но подумал, что здесь что то не так. Зачем настраивать вывод TX передатчика на вход, если он будет только на выход использоваться? Или я что то не так понял?
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Вообще-то оба на выход. Даташиты когда начнем читать?
Всегда умиляет, когда ламеры, не умеющие читать даташиты, с пафосом бывалого знатока, отсылают их читать.
Еще раз глянул, да я неправ, на вход перестраиваются перед началом основного цикла. По поводу ламера: если я ламер, то какой у тебя опыт в программировании?
Я бы ковырял так: перед входом в main loop посмотрел бы содержание регистров, которые относятся к портам, настройке частоты и RS232. Toже самое сделал бы для нерабочей программы. И сравнил.
Зарегистрирован: Сб мар 26, 2011 14:17:14 Сообщений: 262 Откуда: Оренбург
Рейтинг сообщения:0
Всем спасибо за ответы и советы! Всё дело было в порте D(наверное сжег его как-то неправильной полярностью подключения). Когда программа доходила до его инициализации, она останавливалась и дальше не шла. Поэтому-то флаг TXIF и не устанавливался. Убрал инициализацию порта D и все заработало.
_________________ У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.
Сам не знаю, зачем это так сделано, ведь согласно FIGURE 3-5 (для 877-го, или 4-6, для 877a, кстати, у Вас-то какой) сигналы Peripheral OE и выход защёлки TRIS складываются по "ИЛИ". Наверное, в этом есть какой-то более глубокий смысл.
Hispanus писал(а):
Когда программа доходила до его инициализации
Что-то не вижу я в Вашей программе никакой инициализации порта D. Выдёргиваете куски из контекста? Что там, у Вас, ещё инициализируется?
-=Vovka=- писал(а):
если я ламер, то какой у тебя опыт в программировании?
Только ламеры и чайники пишут для 877-го на Сях. Да что там для 877. Тут встретил, для PIC12-го. Но не в этом суть. Коли так режет слух, выкинь словосочетание про ламеров. Смысл фразы сильно изменился? Речь-то о культуре общения. Надеюсь, ты адекватен, и данный конфуз пойдёт тебе на пользу, и ты больше не будешь уподобляться отдельным личностям, вообразившими себя знатоками электроники, и вообще, "истинной в последней инстанции". P.S.: А пиписьками мериться я ни с кем не намерен. Коли хочешь, можешь меня тоже ламером считать.
если я ламер, то какой у тебя опыт в программировании?
Только ламеры и чайники пишут для 877-го на Сях. Да что там для 877. Тут встретил, для PIC12-го.
И что? Какая разница на чем будет написано? Главное чтобы конечный результат работал правильно и без сбоев! Помнится в 90-х около недели писал драйвер на асм для 8086-го. А если бы на си то же самое делал, то за пару дней, с перекурами. Лично я редко пользуюсь асмом, т.к. время дорого. А на си и быстрее напишешь и алгоритм легче отлаживать, т.к. нагляднее. Может еще на перфокартах "писать" чтобы слыть крутым программером?
Smen писал(а):
Но не в этом суть. Коли так режет слух, выкинь словосочетание про ламеров. Смысл фразы сильно изменился? Речь-то о культуре общения. Надеюсь, ты адекватен, и данный конфуз пойдёт тебе на пользу, и ты больше не будешь уподобляться отдельным личностям, вообразившими себя знатоками электроники, и вообще, "истинной в последней инстанции". P.S.: А пиписьками мериться я ни с кем не намерен. Коли хочешь, можешь меня тоже ламером считать.
Я к тому, что и "На старуху бывает...", а сразу рубить "Ламер"- это уже слишком!
Только ламеры и чайники пишут для 877-го на Сях. Да что там для 877. Тут встретил, для PIC12-го.
Весьма громкое заявление . Вот это писано в двух вариантах на сях и на асме https://www.youtube.com/watch?v=x4aycNs8J0Q По быстродействию и по размеру кода практически одинаково. Реализация BAM c чарлиплексингом на пЫк10F. Попробуй реализуй ...
Может еще на перфокартах "писать" чтобы слыть крутым программером?
Бывало и такое. С перфокартами, правда, не довелось, а вот ассемблерный код, по бинарнику восстанавливать доводилось. Ну, и не надо путать автоматизацию рутинных процессов с творческими.
-=Vovka=- писал(а):
сразу рубить "Ламер"
Ну, вообще-то фраза была общей. Никто конкретный в ней не указывался.
dosikus писал(а):
Попробуй реализуй
Сказал же, пиписьками не меряюсь. Лучше вот объясни, зачем действительно порты надо на вход настраивать, если из схемы в ДШ получается, что их вообще настраивать необязательно?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения