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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
18f4680 Два оператора через ":" - гонит?
defaultNick Дата: Ср, 07.07.2010, 12:54  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 27
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

Здрасте.
Прежде всего хочу сказать, что я перелез на 18f4680 с 16f877a. И на нём всё работало.
А на новом работает всё за исключением следующего:
Есть некая переменная В и две строчки

if b = "0" then portd.0 = 1 : portd.3 = 1

if b = "8" then portc.5 = 0 : sound portb.4, [119,7] : portc.5 = 1

Разница в строчках минимальна, однако вторая работает корректно, а в первой выполняется только первый оператор! После ":" не работает.
Если их сменить местами, то снова же работает только первый:

if b = "0" then portd.3 = 1 : portd.0 = 1

Что это за гониво?! Вообще не логично sad

ЯНДЕКС Дата: 07.07.2010
terrarus Дата: Ср, 07.07.2010, 13:53  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

В чем вы пишите! Такой синтаксис работает в Протоне, но не работает в PicBasicPRO

Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
defaultNick Дата: Ср, 07.07.2010, 14:21  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 27
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

; PICBASIC PRO™ Compiler 2.60, © 1998, 2009 microEngineering Labs, Inc. All Rights Reserved.

Это из скомпилиного .ASM
Какой ещё протон... и опять, же, на 16f677a работало всё отлично sad

АА точно что-то не пашет. Ну не важно, это я вместо HIGH portX и LOW portX.
Типа так

if b = "0" then HIGH portd.0 : HIGH portd.3

if b = "8" then LOW portc.5 : sound portb.4, [119,7] : LOW portc.5

Но это сути вопроса не меняет...

Сообщение отредактировал defaultNick - Ср, 07.07.2010, 14:46
terrarus Дата: Ср, 07.07.2010, 16:21  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Quote (defaultNick)
Какой ещё протон

Эта такая штука которая предназначена для работы с процами которые имеют не только 14-разрядные ядра, а еще и 16-разрядные.
А PICBASIC PRO™ Compiler 2.60 предназначен для работы с МК которые имеют 14-разрядные ядра.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
defaultNick Дата: Ср, 07.07.2010, 16:55  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 27
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

ООО... surprised :o

Это может объяснить почему эта строчка работает нормально
if b = "8" then high portc.5 : high portc.3 : sound portb.4, [119,7] : low portc.5 : low portc.3
(тут мы включаем 2 леда, пикаем, и выключаем)
а, следом-идущая

if b = "0" then HIGH portd.0 :sound portb.4, [101,3] : HIGH portd.3
(а тут включаем один лед, пикаем и включаем другой)
работает только на половину?

Во второй строчки происходит так: первый лед включается, и пока идет БИП он горит, а помто когда зажигается второй лед, первый сразу погасает.
Как будто второй на Д.3 сам включается, а остальные в порте Д, сбрасываются на 0.
Однако в первой строчку включаются оба, и С.5 и С.3, ведь второй не гасит первый....

Уже всю голову сломал!!!

Насчёт протона ща посмотрим, но работает же ПИКБейсика на моём проце, и в файлах ПикБейсика есть
18F4680.bal
18F4680.BAS
18f4680.inc

PS. Ща проверил специально PORTD.5 = 1 и HIGH PORTD.5
Работает и так и так.

Добавлено (07.07.2010, 16.55.04)
---------------------------------------------
wacko tongue
PORTD.5 заменил на LATD.5 и всё заработало.
Надо везде порт на лат поменять, и разобраться поподробнее про это.

Сообщение отредактировал defaultNick - Ср, 07.07.2010, 16:37
holyuser Дата: Ср, 07.07.2010, 17:03  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (defaultNick)
Разница в строчках минимальна, однако вторая работает корректно, а в первой выполняется только первый оператор! После ":" не работает.

Здрасте, defaultNick, здесь ":" нипричем и синтаксис нормальный.
В первой строке обращение только к одному порту, а во второй строке - к разным.
Чтобы избежать длинных объяснений, короче, в подобных ситуациях, с 18-серией
надо вместо PORT-регистры, использовать в качестве выходных LAT-регистры.
Другое возможное решение проблемы это вставлять один пустой такт между
двумя последовательными обращениями к одному и тому-же порту.
Что-то вроде:
...
asm
NOP
endasm
...

Сообщение отредактировал holyuser - Ср, 07.07.2010, 17:04
defaultNick Дата: Чт, 08.07.2010, 15:40  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 27
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

holyuser, Спасибо!

Почему-то ЛАТ работает только с портом Д, а с другими портами только ПОРТ работает... Ну да ладно.

  • Страница 1 из 1
  • 1
Поиск: