Обмен с портами
|
|
nic |
Дата: Вс, 18.11.2007, 20:29 | Сообщение # 1 |
Группа:
Удаленные
Ранг:
Сообщений:
Статус:
|
Вот такая загвоздка у меня вышла , нужно связать контроллер PIC16F877 c паролельным портом копьютера работающего с уже готовой программой . Формат передачи которой 8N1 при скорости 150 бод/сек, причем первым байтом всегда идет признак начала посыли FF а заним байт с номером адреса к которму обращается программа . Вот этот байт адреса мне и нужно получить , но используя операторы Hserin,Serin и Serin2 получить приема даных на скорости ниже 300 бод/сек неполучилось . А при использование оператора Debugin принимает правильно , но в нем не работает модификатор WAIT (хотя в мануале описано что все должно быть ОК ). Кто что может посоветовать ?
Сообщение отредактировал
nic - Вс, 18.11.2007, 20:30
|
|
|
|
Romario |
Дата: Вс, 18.11.2007, 22:58 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
58
Замечания:
±
На сайте с 14.09.2007
Статус:
Offline
|
Вам необходимо передавать данные в формате параллельного порта, а формат 8N1 не подходит для связи с параллельным потом.
|
|
|
|
nic |
Дата: Чт, 22.11.2007, 22:35 | Сообщение # 3 |
Группа:
Удаленные
Ранг:
Сообщений:
Статус:
|
Получилось используя оператор Debugin !!! Выставил 150 бод/сек. и ожидание стартового байта(wait) после чего захват следующих двух и их обработка. Прибор получился и все довольны !!!
|
|
|
|
DIMAG |
Дата: Пн, 28.01.2008, 22:23 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
Просьба сильно не пинать ... пытаюсь освоить . решил написать програмку индикатор напряжения на свои БП . 12ф675 нужно связать с 16ф84 пока ничего толком на железе не получается ( причем в протеусе индикация осуществляется 0-999) DEFINE DEBUG_REG gpio DEFINE DEBUG_bit 2 DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_PACING 1000 low gpio m1 var Byte seg var Byte x var Word m var Word mask var Byte digit var Byte digit1 var Byte digit2 var Byte digit3 var Byte trisio = %00000100 loop: for x=0 to 999 digit1 = x / 100 digit = digit1 seg=%00000001 gosub getmask m = x Mod 100 digit2 = m / 10 digit = digit2 seg=%00000010 Gosub getmask digit3 = m Mod 10 digit = digit3 seg=%00000100 Gosub getmask next x goto loop End getmask: Lookup digit,[$40,$79,$24,$30,$19,$12,$02,$78,$00,$18],mask Pause 500 debug mask,seg Return 16ф84 прием и отображение . DEFINE DEBUGIN_REG portA DEFINE DEBUGIN_bit 4 DEFINE DEBUGIN_BAUD 9600 DEFINE DEBUGIN_PACING 1000 x var byte seg var byte LOW PORTA LOW PORTB TRISA = %10000000 TRISB = %00000000 loop: debugin 1000,loop,[x,seg] porta=seg portb=x pause 100 goto loop
http://www.ejtag.ru
Сообщение отредактировал
DIMAG - Пн, 28.01.2008, 22:26
|
|
|
|
ADMIN |
Дата: Вт, 29.01.2008, 02:23 | Сообщение # 5 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
и где проблема, в каком месте?
|
|
|
|
DIMAG |
Дата: Вт, 29.01.2008, 06:41 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
проблема в том что собрав это все дело и прошив пики , оно не работает должным образом . на сегментах отображаются кракозябы какието вот я и думаю хдеж у меня ошибка
http://www.ejtag.ru
|
|
|
|
ADMIN |
Дата: Вт, 29.01.2008, 07:55 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Объясни строку команды Lookup поподробней. Откуда цифры в скобках? И вообще прикрепи проект к сообщению и сюда выкладывай, трудно судить без схемы.
|
|
|
|
DIMAG |
Дата: Ср, 30.01.2008, 22:18 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
транзюки убрал (в протеусе ), почемуто с ними не работает а вобще я запутолся скореи всего ..... это уже третии вариант схемы пытаюсь реализовать . первыи был на двух пиках и 74hc164 , потом на одном пике и 139 и 164 , .... в строке локуп возможно не те коды поставил , но это не долго исправить . проблема в самои передаче я думаю и ишо путаю команду отключения компроматора и выбор портов анало\ цифров кнопки обзор не бачу у себи , есть ток -- просмотреть - добавить ответ - отменить
http://www.ejtag.ru
|
|
|
|
ADMIN |
Дата: Пн, 18.02.2008, 18:22 | Сообщение # 9 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Насчет 10 бит, просто в переменную WORD записываешь результат, и эту переменную посылаешь, и принимаешь соответственно тоже в переменную размером в WORD. То есть resultat.lowbyte=adresl resultat.highbyte=adresh serout GPIO.2,1200,[resultat] Можно и так Quote Serout GPIO.2, 1200, [ ADRESH , ADRESL ]
|
|
|
|
DIMAG |
Дата: Пт, 29.02.2008, 09:44 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
Микроконтроллер PIC12F675 не имеет встроенного адаптера последовательного интерфейса (UART) ктонить может привести пример организации программного (UART) в PIC12F675 ?
http://www.ejtag.ru
|
|
|
|
ADMIN |
Дата: Пт, 29.02.2008, 09:57 | Сообщение # 11 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я позже с твоей программой разберусь, уже наметки есть. На работе времени не хватает.
|
|
|
|
DIMAG |
Дата: Пт, 29.02.2008, 10:34 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
мне бы не готовыи результат и не все сразу ... так ступенчато чтоб я мог вникнуть ... ADCON0.1=1 if ADCON0.1=1 then goto loop loop1: ADRH=%00000011: ADRL=%00000011- загнал чтоб отследить что передается (подключил к терминалке порт пика ) serout2 GPIO.2, 9600, [ ADRH,ADRL] pause 10 Goto loop1 ну в 84 вроде все впорядке если тут задать переменые то отобразится верныи результат на сегментах loop: Serin2 porta.3,9600,[ADRH,ADRL] ADRH=ADRH<<8 x= ADRH+ADRL loop3: digit1 = x / 100 digit = digit1 Gosub getmask porta = %11111110 portb = mask Pause 5 loop2: m = x // 100 digit2 = m / 10 digit = digit2 Gosub getmask porta = %11111101 portb = mask Pause 5 loop1: digit3 = m // 10 digit = digit3 Gosub getmask porta = %11111011 portb = mask Pause 5 Goto loop getmask: Lookup digit,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],mask Pause 1 return End чувствую что нужно использовать прерывание( TMRO) но незнаю как их использовать и как с ними работать
http://www.ejtag.ru
|
|
|
|
ADMIN |
Дата: Вс, 02.03.2008, 15:41 | Сообщение # 13 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
так проблема то в чем сейчас, зачем прерывания? чтобы ловить байты по прерыванию? Так перед передачей результата из 675 выставь единицу на какой-либо ноге 12ф675, а в 84 на RB0 по прерыванию переходить на ПП приема данных.
|
|
|
|
DIMAG |
Дата: Вс, 02.03.2008, 22:25 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
22
Замечания:
±
На сайте с 13.11.2007
Статус:
Offline
|
для передачи и контроля хочу использовать только один порт 12ф675.
http://www.ejtag.ru
|
|
|
|
Холод |
Дата: Пн, 10.11.2008, 17:01 | Сообщение # 15 |
Группа:
Удаленные
Ранг:
Сообщений:
Статус:
|
Продолжая тему с обменом портов. Чем всётаки дело кончилось. я тоже столкнулся с этой проблемой.
|
|
|
|