| MNEMONIC | CODE | PARAM. | INSTRUCTION DESCRIPTION | REMARKS |
| END |
0x00 |
0 |
Kończy działanie programu HAVR |
|
| LDA |
0x01 imm8 |
1 |
Ładuje rejestr A konstantą |
A <- imm8 |
| LDB |
0x02 imm8 |
1 |
Ładuje rejestr B konstantą |
B <- imm8 |
| LDC |
0x03 imm8 |
1 |
Ładuje rejestr C konstantą |
C <- imm8 |
| LDD |
0x04 imm8 |
1 |
Ładuje rejestr D konstantą |
D <- imm8 |
| LDE |
0x05 imm8 |
1 |
Ładuje rejestr E konstantą |
E <- imm8 |
| PHA |
0x06 |
0 |
Odkłada rejestr A na stos |
stack <- A |
| PPA |
0x07 |
0 |
Przywraca rejestr A ze stosu |
A <- stack |
| PHB |
0x08 |
0 |
Odkłada rejestr B na stos |
stack <- B |
| PPB |
0x09 |
0 |
Przywraca rejestr B ze stosu |
B <- stack |
| PHC |
0x0A |
0 |
Odkłada rejestr C na stos |
stack <- C |
| PPC |
0x0B |
0 |
Przywraca rejestr C ze stosu |
C <- stack |
| PHD |
0x0C |
0 |
Odkłada rejestr D na stos |
stack <- D |
| PPD |
0x0D |
0 |
Przywraca rejestr D ze stosu |
D <- stack |
| PHE |
0x0E |
0 |
Odkłada rejestr E na stos |
stack <- E |
| PPE |
0x0F |
0 |
Przywraca rejestr E ze stosu |
E <- stack |
| NOP |
0x10 |
0 |
Brak operacji |
|
| RPA |
0x11 |
0 |
Odczytuje PORTA do rejestru A [*] |
A <- PORTA |
| RPB |
0x12 |
0 |
Odczytuje PORTB do rejestru A [*] |
A <- PORTB |
| RPC |
0x13 |
0 |
Odczytuje PORTC do rejestru A [*] |
A <- PORTC |
| RPD |
0x14 |
0 |
Odczytuje PORTD do rejestru A [*] |
A <- PORTD |
| WPA |
0x15 |
0 |
Zapisuje PORTA z rejestru A [*] |
PORTA <- A |
| WPB |
0x16 |
0 |
Zapisuje PORTB z rejestru A [*] |
PORTB <- A |
| WPC |
0x17 |
0 |
Zapisuje PORTC z rejestru A [*] |
PORTC <- A |
| WPD |
0x18 |
0 |
Zapisuje PORTD z rejestru A [*] |
PORTD <- A |
| ADD |
0x19 |
0 |
Dodaje zawartość rejestru B do rejestru A [^] |
A <- (A + B) [^] |
| SUB |
0x1A |
0 |
Odejmuje zawartość rejestru B od rejestru A [^] |
A <- (A - B) [^] |
| AND |
0x1B |
0 |
Wykonuje bitowe AND na rejestrze A i rejestrze B [^] |
A <- (A AND B) [^] |
| OR |
0x1C |
0 |
Wykonuje bitowe OR na rejestrze A i rejestrze B [^] |
A <- (A OR B) [^] |
| XOR |
0x1D |
0 |
Wykonuje bitową różnicę symetryczną na rejestrze A i rejestrze B [^] |
A <- (A XOR B) [^] |
| NEG |
0x1E |
0 |
Wykonuje arytmetyczną negację na rejestrze A [^] |
A <- (NEG A) [^] |
| NOT |
0x1F |
0 |
Wykonuje bitową negację na rejestrze A [^] |
A <- (NOT A) [^] |
| LSL |
0x20 |
0 |
Wykonuje przesunięcie bitowe na rejestrze A w lewo [^] |
A <- (A << 1) [^] |
| LSR |
0x21 |
0 |
Wykonuje przesunięcie bitowe na rejestrze A w prawo [^] |
A <- (A >> 1) [^] |
| DEC |
0x22 |
0 |
Wykonuje zmniejszenie o 1 rejestru A [^] |
A <- (A - 1) [^] |
| INC |
0x23 |
0 |
Wykonuje zwiększenie o 1 rejestru A [^] |
A <- (A + 1) [^] |
| INT |
0x24 vect8 |
1 |
Wywołuje podany wektor przerwania softwarowego |
PC <- (@INT) |
| I2CRD |
0x25 |
0 |
Odczytuje bajt z magistrali I2C do rejestru A |
|
| I2CIT |
0x26 |
0 |
Inicjacja magistrali I2C |
|
| I2CST |
0x27 imm8 |
1 |
Nadaje warunek START na magistrali I2C (należy podać adres I2C) |
|
| I2CWR |
0x28 imm8 |
1 |
Zapisuje podany bajt do magistrali I2C |
|
| I2CSP |
0x29 |
0 |
Nadaje warunek STOP na magistrali I2C |
|
| KBD |
0x2A |
0 |
Wprowadza znak ASCII z urządzenia wejściowego do rejestru A |
A <- INPUT_DEVICE |
| CPBNE |
0x2B imm8 aa8 |
2 |
Porównuje zawartość rejestru A z konstantą, skacze pod wskazany adres jeśli nierówne |
if (A != imm8) PC <- aa8 else PC <- (PC + 3) |
| CALL |
0x2C aa8 |
1 |
Wywołanie funkcji |
stack <- (PC+2), PC <- aa8 |
| RET |
0x2D |
0 |
Powrot z funkcji |
PC <- stack |
| LOOP |
0x2E aa8 |
1 |
Pętla z licznikiem w rejestrze C |
if (C>0) PC <- aa8 else PC <- (PC + 2) |
| JMP |
0x2F aa8 |
1 |
Skok pod 8 bitowy adres HAVR |
uC PC <- aa16 |
| GOTO |
0x30 aa16h aa16l |
2 |
Skok pod 16 bitowy adres w pamieci programu mikroprocesora (powrót do HAVR niemożliwy) |
uC PC <- aa16 |
| DEL20U |
0x31 |
0 |
Softwarowe opóźnienie 20us |
|
| DEL100U |
0x32 |
0 |
Softwarowe opóźnienie 100us |
|
| DEL1M |
0x33 |
0 |
Softwarowe opóźnienie 1ms |
|
| ST0 |
0x34 aa8 |
1 |
Składuje rejestr A pod wskazany adres RAMSEG0 [**] |
RAMSEG0(aa8) <- A |
| DEL10M |
0x35 |
0 |
Softwarowe opóźnienie 10ms |
|
| DEL50M |
0x36 |
0 |
Softwarowe opóźnienie 50ms |
|
| DEL100M |
0x37 |
0 |
Softwarowe opóźnienie 100ms |
|
| DEL200M |
0x38 |
0 |
Softwarowe opóźnienie 200ms |
|
| DEL500M |
0x39 |
0 |
Softwarowe opóźnienie 500ms |
|
| DEL1 |
0x3A |
0 |
Softwarowe opóźnienie 1s |
|
| DBG |
0x3B |
0 |
Debug Break - zatrzymuje wykonanie programu i wyświetla: PC, A, B, C, D, E |
|
| WRT |
0x3C aa8 |
1 |
Zapisuje string do urządzenia wyjściowego spod wskazanego adresu |
if(@aa8!=0) { @aa8->OUTPUT_DEVICE, aa8++} |
| WRS |
0x3D imm8 |
1 |
Zapisuje kod błędu do urządzenia ERROR DEVICE |
ERROR_DEVICE <- imm8 |
| INS |
0x3E |
0 |
Wprowadza daną do rejestru A w formacie HEX z urządzenia wejściowego |
A <- INPUT_DEVICE |
| DSP |
0x3F |
0 |
Zapisuje do urządzenia wyjściowego daną z rejestru A w formacie HEX |
OUTPUT_DEVICE <- A |
| LD0 |
0x40 aa8 |
1 |
Ładuje rejestr A z RAMSEG0 [**] |
A <- RAMSEG0(aa8) |
| WRI |
0x41 aa8 imm8 |
2 |
Składuje konstantę pod wskazany adres RAMSEG0 [**] |
RAMSEG0(aa8) <- imm8 |
| LD |
0x42 aa8 |
1 |
Ładuje rejestr A z pamięci programu HAVR (RAMSEG1) |
A <- RAMSEG1(aa8) |
| ST |
0x43 aa8 |
1 |
Składuje rejestr A do pamięci programu HAVR (RAMSEG1) |
RAMSEG1(aa8) <- A |
| LD2 |
0x44 aa8 |
1 |
Ładuje rejestr A ze wskazanego adresu RAMSEG2 |
A <- RAMSEG2(aa8) |
| ST2 |
0x45 aa8 |
1 |
Składuje rejestr A pod wskazany adres RAMSEG2 |
RAMSEG2(aa8) <- A |
| LD3 |
0x46 aa8 |
1 |
Ładuje rejestr A ze wskazanego adresu RAMSEG3 |
A <- RAMSEG3(aa8) |
| ST3 |
0x47 aa8 |
1 |
Składuje rejestr A pod wskazany adres RAMSEG3 |
RAMSEG3(aa8) <- A |
| CPBLO |
0x48 imm8 aa8 |
2 |
Porównuje zawartość rejestru A z konstantą, skacze pod wskazany adres jeśli niższa |
if (A > imm8) PC <- aa8 else PC <- (PC+3) |
| RPE |
0x49 |
0 |
Odczytuje PORTE do rejestru A [***] |
|
| RPF |
0x4A |
0 |
Odczytuje PORTF do rejestru A [***] |
|
| WPE |
0x4B |
0 |
Zapisuje PORTE z rejestru A [***] |
|
| WPF |
0x4C |
0 |
Zapisuje PORTF z rejestru A [***] |
|
| LDX |
0x4D aa16h aa16l |
2 |
Ładuje rejestr A z RAM wskazanego przez adres 16 bitowy [***] |
A <- RAM(aa16) |
| STX |
0x4E aa16h aa16l |
2 |
Składuje rejestr A do RAM wskazanego przez adres 16 bitowy [***] |
RAM(aa16) <- A |
| START |
0xAA |
0 |
Start programu HAVR - musi być na pozycji zerowej pamięci programu HAVR |
|