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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Serin, помогите разобраться.
fire_on_line6436 Дата: Ср, 26.08.2009, 00:34  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 22.08.2009

Статус: Offline

помогите второй день бьюсь, не получается принять данные с терминала.
в чём я неправ? И почему вместо первого символа при передаче всякая ахинея? Заранее сенкс.

@ device PIC16F877A, XT_osc, wdt_on, wrt_off, lvp_off, pwrt_on, protect_off
DEFINE OSC 4
INCLUDE "MODEDEFS.BAS"

i var byte
W var byte

for i =1 to 100
serout porta.3, T2400, [ #i,13]
serin porta.2, t2400, [w]
serout porta.3, T2400, [ "cool",#w,13]
pause 300
next
end

Прикрепления: test.dsn (100.8 Kb)

Сообщение отредактировал fire_on_line6436 - Ср, 26.08.2009, 00:35
ЯНДЕКС Дата: 26.08.2009
terrarus Дата: Ср, 26.08.2009, 12:35  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Вот ваши отлаженные программа и файл test.DSN
Но я давно уже не использую PicBasiсPRO а пользуюсь ROTON+IDE . Они родные братья.
Поэтому синтаксис PicBasikPRP поддерживается ROTON-ом почти на 99%.
вот как я переделал вашу программу:

Include "PROTON_4.Inc"
Device = 16F877A
i var Byte
w var Byte
For i = 1 To 100
SerOut PORTA.3, T2400, [#i,13]
SerIn PORTA.2, T2400, [w]
SerOut PORTA.3, T2400, ["cool ",#w,13]
pause 300
Next
End

Здесь в архиве файлы test.bas , test.hex и модель test.DSN

Советую пользоваться PTOTON , и мощнее и очень удобно. Тем кто знаком c PicBasiсPRO абсолютно не составит труда перейти на PTOTON Если заинтересуетесь PTOTON советую посетить ресурс
http://terrarus.ucoz.ru/proton_plus_ide/index.html

А причина у вас как мне кажется в настройках PORTA.

Успехов.

Прикрепления: test.rar (54.1 Kb)


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
fire_on_line6436 Дата: Чт, 27.08.2009, 01:18  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 22.08.2009

Статус: Offline

Quote (terrarus)
Вот ваши отлаженные программа и файл test.DSN
Но я давно уже не использую PicBasiсPRO а пользуюсь ROTON+IDE . Они родные братья.
Поэтому синтаксис PicBasikPRP поддерживается ROTON-ом почти на 99%.

Спасибо, с удовольствием в ближайшее время последую вашему совету.
Но сейчас очень хочется понять в чём моя ошибка, учитывая, что по всем справочникам код верен. Может кто всё таки знает?

Dmitry Дата: Чт, 27.08.2009, 02:58  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (fire_on_line6436)
учитывая, что по всем справочникам код верен

Эка, вы, батенька, самоуверенны... smile

Вот вам кусочек из даташита на 16ф877:

Other PORTA pins are multiplexed with analog inputs
and the analog VREF input for both the A/D converters
and the comparators. The operation of each pin is
selected by clearing/setting the appropriate control bits
in the ADCON1 and/or CMCON registers.
Note: On a Power-on Reset, these pins are configured
as analog inputs and read as ‘0’.

Вкратце это означает, что после сброса те ножки МК, где есть входы АЦП, находятся в режиме АЦП и с них читается 0. Чтобы перевести все ноги в режим цифровых входов, надо ADCON1 = 6

Вторая ошибка в строке SERIN - читаемую переменную вы поставили в квадратные скобки. Слгласно описанию команды serin в квадратных скобках указываются не принимаемые данные, а квалификационный байт (или несколько байт), т.е. программа ждет, пока от терминала придут эти байты, а затем уже начинает прием в переменные, перечисленные после квадратных скобок. У вас их там вообще нет.
Короче, вот рабочий код:

@ device PIC16F877A, XT_osc, wdt_on, wrt_off, lvp_off, pwrt_on, protect_off
DEFINE OSC 4
INCLUDE "MODEDEFS.BAS"

i var byte
W var byte

ADCON1 = 6

for i =1 to 100
serout porta.3, T2400, [ #i,13]
serin porta.2, t2400, w
serout porta.3, T2400, [ "cool",#w,13]
pause 300
next
end

P.S. Почему от первого serout-a на терминале мусор - не знаю. Мож, глюк модели в протоне. В железе никогда подобного не видел.

Сообщение отредактировал Dmitry - Чт, 27.08.2009, 03:01
fire_on_line6436 Дата: Пт, 28.08.2009, 01:54  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 22.08.2009

Статус: Offline

Большое человеческое спасибо.

Понимаю что задаю идиотские вопросы но всё же вот такой код:

Code

  @ device PIC16F877A, XT_osc, wdt_on, wrt_off, lvp_off, pwrt_on, protect_off
DEFINE OSC 4
INCLUDE "MODEDEFS.BAS"
w var byte
ADCON1 = 6
main:
serout porta.3, T2400, [ "InputW",13]
SerIn porta.2,T2400, w
if w=255 then serout porta.3, T2400, [ "Kyky",13]
goto main
end

Посылаю число 255 и не чего не работает, подскажите где я не прав?

Сообщение отредактировал fire_on_line6436 - Пт, 28.08.2009, 13:30
Dmitry Дата: Сб, 29.08.2009, 00:46  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

А каким символом ты его посылаешь? Терминал посылает коды нажатых клавиш, а для байта FF какая клавиша?
fire_on_line6436 Дата: Сб, 29.08.2009, 01:25  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 22.08.2009

Статус: Offline

Quote (Dmitry)
А каким символом ты его посылаешь? Терминал посылает коды нажатых клавиш, а для байта FF какая клавиша?

с помощью COM Port Toolkit или VB как строку, доходит в исковерканном виде. А как правильно?

Dmitry Дата: Сб, 29.08.2009, 01:41  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Чего-то я такое припоминаю, выводил через serout текстовые сообщения, принимал их штатным виндовым гипертерминалом, так маленькую букву "я" терминал упорно пропускал. По-моему, ее код как раз 255. Так что, похоже, это какая-то особенность ANSI-терминала - видимо, байт FF имеет какое-то служебное значение.
Сообщение отредактировал Dmitry - Сб, 29.08.2009, 01:44
xxxmonejall Дата: Сб, 21.01.2012, 14:35  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Доброго времени суток, столкнулся с проблемой.
Спаял схемку на PIC16F84A, и написал программу которая посылает с пк числа, так проблема собственно в том что контролер принимает непонятные символы, при этом если корочу выводы на FT232 TX и RX, на пк все гуд что уходит то и приходит, думал что помехи. Взял экранированный провод, не помогло. Скорость и режим передачи одинаковые. В чем может быть проблема?
Вот код:

@ device pic16F84A, xt_osc, wdt_off, protect_off, pwrt_on
include "MODEDEFS.BAS"
DEFINE char_pacing 200
DEFINE OSC 4
Define LCD_DREG PORTb
Define LCD_DBIT 4
Define LCD_RSREG PORTb
Define LCD_RSBIT 1
Define LCD_EREG PORTb
Define LCD_EBIT 2
define lcd_commandus 2000
define lcd_dataus 50

diodes Var word
data1 Var word
data2 Var word
Trisb = %00000100
Portb = %00000000
PortA = %00000000
TrisA = %00000000
diodes = 0


Lcdout $fe,1
pause 1000

lcdout $fe,1, "Test 1.1"
pause 1000
main:
serin portb.3, T2400, data1
PAUSE 100
lcdout $fe, $C0, data1



pause 500
goto main


e
rvstar Дата: Вс, 22.01.2012, 14:36  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 7   ±
Замечания:   ±
На сайте с 09.10.2007

Статус: Offline

Quote (Dmitry)
Вкратце это означает, что после сброса те ножки МК, где есть входы АЦП, находятся в режиме АЦП и с них читается 0. Чтобы перевести все ноги в режим цифровых входов, надо ADCON1 = 6


А Для 16f877a еще CMCON = $FF, компаратор отключить

Сообщение отредактировал rvstar - Вс, 22.01.2012, 14:40
  • Страница 1 из 1
  • 1
Поиск: