Alexsis f
Новичок
|
Всех приветствую. При программировании PIC-контроллеров столкнулся с проблемой. Ситуация следующая. Имеются значения 2-х регистров PASS и VAR. Следует осуществить сравнение из значений, и в случае: 1) если условно VAR = PASS , то переходим к метке "loopY"; 2) если условно VAR <> PASS, то переходим к метке "loopX" Код ASM1 ;Вот кусок кода ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ movlw b'00000001' movwf PASS ;Присваиваем значение регистру PASS movlw b'00000011' movwf VAR ;Присваиваем значение регистру VAR ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ loop: movlw PASS ; заносим PASS в W xorwf VAR, 0 ; побитовое ИЛИ (меняется флаг Z регистра STATUS) ;0-нулевой результат выполнения арифм. операции; ;1-ненулевой результат... btfss STATUS, 0x02 ;если 3-й бит STATUS = 1, то прыжок... goto loopX goto loopY Условие не выполняется. Не могу понять, где я допустил ошибку. Был бы благодарен за разъяснения.
|
Всего сообщений: 1 | Присоединился: март 2011 | Отправлено: 28 марта 2011 9:09 | IP
|
|
Alexu007
Новичок
|
1. Я не силён в ассемблере для контроллеров - он точно может сравнивать регистр с константой? Может только регистр с регистром или регистр с памятью? 2. В "обычном" ассемблере оператор xor часто используется для обнуления регистров, например xor ax, ax. Вы уверены, что вам надо именно xor, а не скажем or или cmp? 3. goto - оператор безусловного перехода. Независимо от результата выполнения операции "btfss STATUS, 0x02" вы всегда перепрыгните в loopX, и никогда в loopY (Сообщение отредактировал Alexu007 31 марта 2011 0:43) (Сообщение отредактировал Alexu007 31 марта 2011 0:47)
|
Всего сообщений: 11 | Присоединился: март 2011 | Отправлено: 31 марта 2011 0:42 | IP
|
|
|