ПРОБЛЕМА СВЯЗИ PIC1684A И PI16F876A В ФОРМАТЕ 8N1
|
|
tesla88 |
Дата: Сб, 18.02.2012, 00:57 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Дорогие друзья помогите!!! ПРОБЛЕМА СВЯЗИ PIC1684A И PI16F876A В ФОРМАТЕ 8N1, передаю данные от одного к другому , но адекватной реакции почему то нет, при передачи кода индекация ошибки проподает , но программа в pic16f84a не переходит в нужный раздел , может должны быть какие то особые настройки регистров? выкладываю саму программу.
|
|
|
|
ADMIN |
Дата: Сб, 18.02.2012, 07:12 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
А где проект в протеусе?
|
|
|
|
tesla88 |
Дата: Сб, 18.02.2012, 09:32 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
У меня нет протеуса, я сразу на железе проверяю
|
|
|
|
rvstar |
Дата: Сб, 18.02.2012, 10:24 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 09.10.2007
Статус:
Offline
|
Очевидно, если Вы пытаетесь принять ДВА байта - serin K2, T300, 500, error, [1], X, то следовало бы и передавать ДВА байта : SEROUT Comm_pin, T300, [1,X]
|
|
|
|
tesla88 |
Дата: Сб, 18.02.2012, 10:44 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
x - это переменная в которую должен быть записан байт [1], или [2], насколько я понимаю
|
|
|
|
ADMIN |
Дата: Сб, 18.02.2012, 17:07 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Скорее всего, это проблема, описанная здесь. Ожидая поймать 1, ты ловишь ASCII символ "1"
|
|
|
|
tesla88 |
Дата: Сб, 18.02.2012, 21:33 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Я всё проверил , изменил программу, но в итоге всё тоже самое - вот первая программа init: ADCON1 = %00001110 TRISA = %11111111 PORTB = %00000000 TRISB = %00000100 PORTC = %00000000 TRISC = %00000000 include "modedefs.bas" K1 VAR PORTA.1 K2 VAR PORTA.2 K3 VAR PORTA.3 K4 VAR PORTA.4 symbol I = PORTB.1 SYMBOL O = PORTB.2 MOTOR_1: LCDOUT $FE, 1 LCDOUT $FE, 2 LCDOUT "L - K1 R - K3" LCDOUT $FE, $C0 LCDOUT "MOTOR - K4 " PAUSE 250 LED = 0 IF K4 = 0 THEN MOTOR IF K1 = 0 THEN L IF K3 = 0 THEN R GOTO MOTOR_1 L: SEROUT i, T300, ["A"] LED = 1 IF K1 = 1 THEN MOTOR_1 GOTO L
и вторая программа - init: TRISA = %11110001 PORTA = %00000000 PORTB = %00000000 TRISB = %00000000 k1 var porta.4 k2 var porta.3
SYMBOL LED = PORTA.2
include "modedefs.bas"
X VAR BYTE
LED = 1 PAUSE 1000 LED = 0 PAUSE 1000 MAIN:
serin K1, T300, 1000, error, ["A"], X
IF X = 65 THEN MAIN1
goto main
MAIN1: LED = 1 PAUSE 1000 LED = 0 PAUSE 100 LED = 1 PAUSE 1000 LED = 0 PAUSE 100 GOTO MAIN Я в тупике, чесно говоря уже не знаю на что и думать, может у кого есть рабочий пример связи двух пиков с помощью команды serin and serout?
|
|
|
|
ADMIN |
Дата: Вс, 19.02.2012, 10:48 | Сообщение # 8 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Так в команде Serin по данной строчке будет так, что она ждет символ "A", а следующий за ним кладет в переменную X. Почитай справку:
Quote ' Wait until the character “A” is received serially on Pin1 and put next character into B0 SERIN 1,N2400,["A"],B0
И где метка error?
|
|
|
|
tesla88 |
Дата: Вс, 19.02.2012, 15:48 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
ТО ЕСТЬ ПО ИДЕИ ВЫГЛЯДИТЬ ДОЛЖНО ТАК - 1) SEROUT PORTB.1, T9600, [5, 1] 2) SERIN PORTA.4, T9600, 500, ERROR, [5, 1], X ' ГДЕ - 5 ЭТО РАЗРЕШАЮЩИЙ СИМВОЛ, Я ПРАВЕЛЬНО ПОНЯЛ? ИЗВЕНЯЮСЬ ЗА ТУПОСТЬ , ПРОСТО ЭТО ПЕРВЫЙ МОЙ ОПЫТ ПЕРЕДАЧИ ДАННЫХ
|
|
|
|
ADMIN |
Дата: Вс, 19.02.2012, 18:11 | Сообщение # 10 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
По идее, должно выглядеть так: serin K1, T300, 1000, error, X
в квадратных скобках пишут какой-либо начальный символ, по которому можно начинать прием остальных. В данном конкретном случае, принимается ВСЕГО ОДИН символ - в переменную X. Если небыло ошибок при приеме/передаче, то при переданной "A" в переменной X окажется символ "A".
|
|
|
|
tesla88 |
Дата: Вс, 19.02.2012, 18:25 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
СПАСИБО БОЛЬШОЕ, сейчас попробую, оказывается проблема была в самом железе приёмной платы, и ещё вопрос - а как проверять символ "A" вот так ? - IF X = "A" THEN MAIN1 или же иначе как то?
|
|
|
|
ADMIN |
Дата: Вс, 19.02.2012, 18:26 | Сообщение # 12 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
можно хоть так, можно хоть if X=65 - без разницы
|
|
|
|
tesla88 |
Дата: Вс, 19.02.2012, 18:37 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
ДАННЫЕ СТАЛИ ПРИНЕМАТЬСЯ но теперь другая проблема, приёмник реагирует но не всегда и с большими хаотичными паузами, хотя данные отпровляются циклично пока нажата кнопка, как это исправить я незнаю вот последняя версия программы init: TRISA = %11110001 PORTA = %00000000 PORTB = %00000000 TRISB = %00000000 k1 var porta.4 k2 var porta.3
SYMBOL LED = PORTA.2
include "modedefs.bas" z var byte
X VAR BYTE
LED = 1 PAUSE 1000 LED = 0 PAUSE 1000
MAIN: x = 0 z = 0 serin k1, T9600, [7], Z serin k1, T9600, [9], x IF z = 2 THEN MAIN1 IF x = 5 THEN MAIN2 goto main
MAIN1: LED = 1 PAUSE 500 LED = 0 PAUSE 500 LED = 1 PAUSE 500 LED = 0 PAUSE 500 GOTO MAIN
MAIN2: LED = 1 PAUSE 100 LED = 0 PAUSE 100 LED = 1 PAUSE 100 LED = 0 PAUSE 100 GOTO MAIN
END
Сообщение отредактировал
tesla88 - Вс, 19.02.2012, 19:47
|
|
|
|
demanik |
Дата: Пн, 20.02.2012, 01:26 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (tesla88) приёмник реагирует но не всегда и с большими хаотичными паузами пока у вас моргают светики она и неможет ничего принять
Попробуй всё и вся... может быть пол...
|
|
|
|
tesla88 |
Дата: Пн, 20.02.2012, 11:22 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
так диоды маргают после приёма данных а потом программа переходит в начало и снова ждёт посылки, только эти посылки как то неадекватно принемаютсяч, а вот как синхронизировать посылку с приёмом это для меня большой вопрос
|
|
|
|