Оператор сравнения и размеры переменных для этого сравнения
|
|
Prototup |
Дата: Пн, 08.06.2009, 02:23 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 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, реально не работает (или неправильно)
|
|
|
|
toommy |
Дата: Пн, 08.06.2009, 11:09 | Сообщение # 2 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
13
Замечания:
±
На сайте с 04.11.2008
Статус:
Offline
|
а можеш предоставить код полностью, возможно ошыбка совсем не в етом
|
|
|
|
slavauk |
Дата: Сб, 13.06.2009, 11:01 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
64
Замечания:
±
На сайте с 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
|
|
|
|
terrarus |
Дата: Сб, 13.06.2009, 17:12 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 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
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал
terrarus - Сб, 13.06.2009, 17:17
|
|
|
|
Prototup |
Дата: Сб, 13.06.2009, 18:20 | Сообщение # 5 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 09.11.2008
Статус:
Offline
|
Спасибо большое! Извините пожалуйста! Нашёл ошибку, дело было не в бабине!!!! Просто при перерыве между включением и выключением симуляции в Протеусе, Протеус просто "забывал" число записываемое (переменную) в EERPROM, в то время когда реально оно не пропадает в микропроцессоре. Перезапуск симуляции из командной строки или выход из программы вообще - обнуляет содержимое EERPROM. В результате инкремент "1"(из якобы записанного числа) вызывал реально операцию %0000-0000 -1, что в конечном счёте, разность была вычислена в дополнительном коде, и как следствие, в последующих операторах сравнения получался неверный результат!!! Обходя разложенные грабли, ты теряешь ценный опыт! Спасибо ещё раз за присланные ответы!!!!! Тема закрыта!!!
|
|
|
|