Instrukcja warunkowa

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
raichle
-
Posty: 1
Rejestracja: 08 mar 2014, 10:45
Lokalizacja: Wroclaw

Instrukcja warunkowa

Post autor: raichle » 08 mar 2014, 10:51

Zadanie polega na napisaniu programu w Assemblerze, który będzie zapal i gasił diody w dowolnej sekwencji po naciśnięciu klawisz odpowiadającego za dana diodę (mikro-kontroler 8051)

Napisałem coś takiego, ale nie wiem dlaczego nie działa mi ta instrukcja if.
Są to moje początki z Asemblerem. Z góry dziękuje za wszelkie wskazówki

$INCLUDE (REG51.INC)

POCZATEK:

MOV r0, 0
lampka1 EQU p3.7
lampka2 EQU p3.6
lampka3 EQU p3.5
lampka4 EQU p3.4

KLAWIATURA:

JNB P1.7,ENTER
JNB P1.6,DOWN
JNB P1.5,UP
JNB P1.4,ESCAPE
JMP KLAWIATURA

ENTER:
IF( r0 == 0 )
CLR lampka1
DEC r0
JMP KLAWIATURA
elseIF( r0 == 1 )
SETB lampka1
INC r0
JMP KLAWIATURA
endif
JMP KLAWIATURA

DOWN:
CLR lampka2
JMP KLAWIATURA


UP:
CLR lampka3
JMP KLAWIATURA

ESCAPE:
CLR lampka4
JMP KLAWIATURA

end

Z góry dziękuje za wszelką pomoc i wskazówki.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1418
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 08 mar 2014, 11:24

Czysty assembler '51 nie ma instrukcji if, żaden procesor '51 nie ma takiego rozkazu i żaden standard nie obejmuje takiego zapisu.

Zamiana instrukcji warunkowych if (znanych z języków wysokopoziomowych) na kod maszynowy może być dokonana przez kompilator ale nie musi, wszystko zależy od tego z jakiego kompilatora korzystasz i jakie opcje włączyłeś podczas kompilacji.

Jeśli tak ma wyglądać Twój program, poszukaj jak działa instrukcja JB/JNB, JZ/JNZ lub CJNE. Jedna lub dwie z tych 5 instrukcji umożliwią Ci właściwe rozwiązanie problemu.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 09 mar 2014, 20:25

IF w makro asemblerze jest, ale to nie jest instrukcja mikrokontrolera, tylko instrukcja do kompilacji warunkowej (przydatne gdy mamy kilka wariantów kodu). Ale jak kolega wyżej wspomniał, w asemblerze nie ma czegoś takiego jak IF (jako instrukcja MCU).

ODPOWIEDZ