Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ivan_fd  
ПРОБЛЕМА СВЯЗИ PIC1684A И PI16F876A В ФОРМАТЕ 8N1
tesla88 Дата: Сб, 18.02.2012, 00:57  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Дорогие друзья помогите!!! ПРОБЛЕМА СВЯЗИ PIC1684A И PI16F876A В ФОРМАТЕ 8N1, передаю данные от одного к другому , но адекватной реакции почему то нет, при передачи кода индекация ошибки проподает , но программа в pic16f84a не переходит в нужный раздел , может должны быть какие то особые настройки регистров? выкладываю саму программу.
Прикрепления: 9855165.pbp (3.8 Kb) · 4349706.pbp (1.6 Kb)
ЯНДЕКС Дата: 18.02.2012
ADMIN Дата: Сб, 18.02.2012, 07:12  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А где проект в протеусе?
tesla88 Дата: Сб, 18.02.2012, 09:32  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

У меня нет протеуса, я сразу на железе проверяю
rvstar Дата: Сб, 18.02.2012, 10:24  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 7   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

x - это переменная в которую должен быть записан байт [1], или [2], насколько я понимаю
ADMIN Дата: Сб, 18.02.2012, 17:07  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Скорее всего, это проблема, описанная здесь. Ожидая поймать 1, ты ловишь ASCII символ "1"
tesla88 Дата: Сб, 18.02.2012, 21:33  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

По идее, должно выглядеть так:
serin K1, T300, 1000, error, X

в квадратных скобках пишут какой-либо начальный символ, по которому можно начинать прием остальных. В данном конкретном случае, принимается ВСЕГО ОДИН символ - в переменную X. Если небыло ошибок при приеме/передаче, то при переданной "A" в переменной X окажется символ "A".
tesla88 Дата: Вс, 19.02.2012, 18:25  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

СПАСИБО БОЛЬШОЕ, сейчас попробую, оказывается проблема была в самом железе приёмной платы, и ещё вопрос - а как проверять символ "A" вот так ? - IF X = "A" THEN MAIN1 или же иначе как то?
ЯНДЕКС Дата: 19.02.2012
ADMIN Дата: Вс, 19.02.2012, 18:26  |                                                                                                                Сообщение # 12
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

можно хоть так, можно хоть if X=65 - без разницы
tesla88 Дата: Вс, 19.02.2012, 18:37  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (tesla88)
приёмник реагирует но не всегда и с большими хаотичными паузами

пока у вас моргают светики она и неможет ничего принять


Попробуй всё и вся... может быть пол...

tesla88 Дата: Пн, 20.02.2012, 11:22  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

так диоды маргают после приёма данных а потом программа переходит в начало и снова ждёт посылки, только эти посылки как то неадекватно принемаютсяч, а вот как синхронизировать посылку с приёмом это для меня большой вопрос
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: