Оператор сравнения и размеры переменных для этого сравнения - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Оператор сравнения и размеры переменных для этого сравнения (IF....HTEN и операторы <; >; <=; >=.)
Оператор сравнения и размеры переменных для этого сравнения
Prototup Дата: Пн, 08.06.2009, 02:23  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 09.11.2008

Статус: Offline

Как показывают опыты - логические операторы сравнения работают только в пределах VAR byte, если переменная размером VAR WORD, то сравнение величин идёт всё равно в пределах старшего байта , так как-же определить большее из двух переменных VAR WORD?
У кого какие мысли? В мануале РВР и дополнительной литературе ничего не сказано!!!!
P.S. Сравнение величин гораздо меньших чем%1111 1111 1111 1111
Оператор IF A>B THEN.... Если A VAR WORD; B VAR WORD, реально не работает (или неправильно) sad
ЯНДЕКС Дата: 08.06.2009
toommy Дата: Пн, 08.06.2009, 11:09  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Новенький
Сообщений: 15
Репутация: 0   ±
Замечания:   ±
На сайте с 04.11.2008

Статус: Offline

а можеш предоставить код полностью, возможно ошыбка совсем не в етом
slavauk Дата: Сб, 13.06.2009, 11:01  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 68
Репутация: 3   ±
Замечания:   ±
На сайте с 14.03.2009

Статус: Offline

Привет.Проверял разные комбинации,
вроде работает правильно.

w var word
e var word
main:
w=%1111111111111011
e=%1111111111111111
pause 2000
Lcdout $fe, 1
if w>e then
Lcdout $fe,$80,"w>e"
endif
if w<e then
Lcdout $fe,$80,"e>w"
endif
if w=e then
Lcdout $fe,$80,"w=e"
endif
goto main
end

Прикрепления: example.zip(16Kb)
terrarus Дата: Сб, 13.06.2009, 17:12  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Prototup и slavauk, вот как это работает в Proton-e

Code

Device = 16F84A     
XTAL = 4                       
'--------------Настройки подключения ЖКИ--------------------------
                          
Declare  LCD_TYPE ALPHA       'Тип ЖКИ буквенно-цифровой
Declare  LCD_DTPIN  PORTB.4   'Порт данных ЖКИ
Declare  LCD_ENPIN  PORTB.3   'Управление линией E
Declare  LCD_RSPIN  PORTB.2   'Управление линией RS
Declare  LCD_INTERFACE  4     'Разрядность шины данных
Declare  LCD_COMMANDUS  2000  'Задержка перед посылкой команды
Declare  LCD_DATAUS  50       'Задержка перед посылкой данных
Declare  LCD_LINES   4        'количество строк ЖКИ
                          
'--------------------------Настройка портов--------------------------       
TRISA = %00001111               ' порты RA0...RA3 входа для кнопок                       
'--------------------------Объявление переменных---------------------
Dim W As Word
Dim E As Word      
'-------------------Присвоение начальных значение----------------     
W = %1111111111111011     
E = %1111111111111111     
'--------------------------Главная программа--------------------------
main:      
If PORTA.0 = 0 Then DelayMS 150: W = W + 1
If PORTA.1 = 0 Then DelayMS 150: W = W - 1
If PORTA.2 = 0 Then DelayMS 150: E = E + 1
If PORTA.3 = 0 Then DelayMS 150: E = E - 1

Print At 1, 1, "Srawnen. dvuh chisel"     
Print At 2, 1, "W= ", BIN W
Print At 3, 1, "E= ", BIN E
If W > E Then Print At 4, 1, "W>E"
If W < E Then Print At 4, 1, "W<E"
If W = E Then Print At 4, 1, "W=E"

GoTo main     

Здесь модель в Proteus 7.4 SP3

Прикрепления: sravn_proton.rar(43Kb)


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Сб, 13.06.2009, 17:17
Prototup Дата: Сб, 13.06.2009, 18:20  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 09.11.2008

Статус: Offline

Спасибо большое! Извините пожалуйста! Нашёл ошибку, дело было не в бабине!!!!
Просто при перерыве между включением и выключением симуляции в Протеусе, Протеус просто "забывал" число записываемое (переменную) в EERPROM, в то время когда реально оно не пропадает в микропроцессоре. Перезапуск симуляции из командной строки или выход из программы вообще - обнуляет содержимое EERPROM. В результате инкремент "1"(из якобы записанного числа) вызывал реально операцию %0000-0000 -1, что в конечном счёте, разность была вычислена в дополнительном коде, и как следствие, в последующих операторах сравнения получался неверный результат!!!
Обходя разложенные грабли, ты теряешь ценный опыт!
Спасибо ещё раз за присланные ответы!!!!!
Тема закрыта!!! wacko
Форум Picbasic.ru » Программирование МК » PicBasicPro » Оператор сравнения и размеры переменных для этого сравнения (IF....HTEN и операторы <; >; <=; >=.)
Страница 1 из 11
Поиск: