Aplikace PicDev Procesor PIC16F84 Překladač PicDev Stavebnice P84

-

Překladač PicDev
Doprovodná dokumentace k aplikaci PicDev
Copyright (c) 2000-2012 Ing. Miroslav Němeček, Gemtree Software, s.r.o.

www.breatharian.eu/Petr, www.gemtree.com

-

Úvod Příkazy překladače Výrazy

V následujícím textu je popsán překladač aplikace PicDev, jeho použití a syntaxe. Překladač překládá zdrojový text k procesorům řady PIC16xxx do binárního tvaru, který je možné odeslat do paměti procesoru. Funkce překladače závisí na typu procesoru, který je zvolen v aplikaci PicDev.

Vytvářený program je uložen ve zdrojovém tvaru v souboru s příponou ASM. Program lze pomocí PicDev otevřít, editovat a přeložit do binárního tvaru. Program v binárním tvaru je možné odeslat přímo do procesoru nebo uložit do souboru formátu HEX (pro možnost programování procesoru jiným programovacím nástrojem).

Program je zpracováván po jednotlivých řádcích. Řádek zdrojového textu má běžně tento tvar:

návěští instrukce operandy ; komentář

Návěští
Návěští je symbolické označení místa v programu jménem. Návěští musí začínat na první pozici řádku, za návěštím může následovat znak dvojtečky (":"), mezera nebo tabulátor. Návěští musí začínat písmenem nebo znakem podtržítka ("_") a může obsahovat písmena, číslice, otazník a znak podtržítka. U návěští se rozlišují velká a malá písmena ("Start" a "START" se považují za dvě různá návěští).

Instrukce
Na místě instrukce může být buď instrukce procesoru, pseudoinstrukce nebo příkaz překladače. Instrukce musí začínat na druhé nebo vyšší pozici řádku. Je-li před instrukcí návěští, musí být odděleno znakem dvojtečky (":"), mezerou nebo tabulátorem.

Operandy
Operandy jsou parametry instrukce. Od instrukce jsou odděleny mezerou nebo tabulátorem. Je-li uvedeno více operandů, jsou jednotlivé operandy navzájem odděleny čárku (",").

Komentář
Komentář je jakákoliv poznámka následující za znakem středníku (";"). Komentář může začínat kdekoliv na řádku (též na jeho začátku). Komentář slouží pouze ke zpřehlednění zdrojového textu. Překladač text za středníkem ignoruje (kromě případu, kdy je středník součástí operandu instrukce jako text v uvozovkách).

Příkazy překladače

Úvod Příkazy překladače Výrazy

Příkazy překladače jsou příkazy sloužící k řízení překladu. Při zadávání příkazů překladače se nerozlišují velká a malá písmena ("ORG" a "org" je pro překladač stejný příkaz).

CBLOCK, ENDC blok číselných konstant
CONFIG nastavení konfigurace procesoru
DE definice dat v paměti EEPROM
DEFINE definice substitučního textu, definice symbolu
DT definice tabulky konstant v programové paměti
DW uložení slova do programové paměti
EQU definice hodnoty číselné konstanty
ERROR výpis chybového hlášení
IDLOCS nastavení identifikačního slova procesoru
IFDEF, IFNDEF, ELSE, ENDIF podmíněný překlad programu
INCLUDE vnoření externího souboru
LIST, NOLIST řízení výpisu překladu
ORG nastavení ukazatele adres
RADIX nastavení implicitní číselné soustavy
RES rezervace místa v paměti
SET nastavení hodnoty číselné proměnné
UNDEFINE zrušení definice substitučního textu, zrušení symbolu

Pro zajištění přenositelnosti z jiných překladačů a pro budoucí použití rezervuje překladač skupinu příkazů, jejichž jména nemohou být použita jako návěští nebo jména symbolů:

BADRAM, BANKISEL, BANKSEL, CODE, CONSTANT, END, ENDM, ENDW, ERRORLEVEL, EXITM, EXPAND, EXTERN, GLOBAL, IDATA, IF, LOCAL, MACRO, MAXRAM, MESSG, NOEXPAND, PAGESEL, PROCESSOR, SPACE, SUBTITLE, TITLE, UDATA, VARIABLE, WHILE.

Předdefinované symboly
Překladač definuje několik předdefinovaných symbolů (prázdných substitučních textů), které umožňují řídit podmíněný překlad příkazy IFDEF a IFNDEF v závislosti na zvoleném procesoru.

procesor symboly
PIC16F83 __16F83, __16f83, _16F83, _16f83, PIC16F83, pic16f83
PIC16C84 __16C84, __16c84, _16C84, _16c84, PIC16C84, pic16c84
PIC16F84 __16F84, __16f84, _16F84, _16f84, PIC16F84, pic16f84
PIC16F627 __16F627, __16f627, _16F627, _16f627, PIC16F627, pic16f627
PIC16F628 __16F628, __16f628, _16F628, _16f628, PIC16F628, pic16f628
PIC16F873 __16F873, __16f873, _16F873, _16f873, PIC16F873, pic16f873
PIC16F874 __16F874, __16f874, _16F874, _16f874, PIC16F874, pic16f874
PIC16F876 __16F876, __16f876, _16F876, _16f876, PIC16F876, pic16f876
PIC16F877 __16F877, __16f877, _16F877, _16f877, PIC16F877, pic16f877

Druhou skupinou symbolů jsou symboly definující architekturu procesoru.

procesory symboly
PIC16F83, PIC16C84, PIC16F84 __1684, _1684, PIC1684, pic1684
PIC16F627, PIC16F628 __1662, _1662, PIC1662, pic1662
PIC16F873, PIC16F874, PIC16F876, PIC16F877 __1687, _1687, PIC1687, pic1687

CBLOCK, ENDC
Constant Block

  CBLOCK [<výraz>]  
návěští [:<přírustek>]    
  ENDC    

Příkaz CBLOCK definuje blok číselných konstant. Každému návěští uvnitř bloku je přiřazena číselná hodnota. Za návěštím může za znakem dvojtečky (":") následovat přírustek (0 a více), o kolik se posune ukazatel konstant. Není-li přírustek uveden, zvýší se ukazatel konstant o 1 (další návěští bude mít hodnotu o 1 vyšší). Na jednom řádku může být uvedeno více definic konstant, jednotlivé definice jsou odděleny čárkami. Za příkazem CBLOCK může být uveden číselný výraz představující počáteční hodnotu přiřazovanou konstantám. Není-li výraz uveden, použije se poslední hodnota předešlého příkazu CBLOCK. Pro první příkaz CBLOCK se použije hodnota prvního všeobecného registru (GPR). Blok konstant je ukončen příkazem ENDC. Nejčastějším použitím příkazu CBLOCK je při definici adres proměnných v datové paměti procesoru.

Příklad:

  CBLOCK 20h ; počáteční adresa
Citac1     ; čítač 1 (adresa 20h)
Citac2     ; čítač 2 (adresa 21h)
Flags     ; příznaky (adresa 22h)
  ENDC   ; konec bloku konstant

CONFIG
Configuration

  CONFIG {<výraz>| LP | XT | HS | RC | WDT}

Příkaz CONFIG nastavuje konfigurační slovo procesoru. Za příkazem následuje číselný výraz představující přímo číselnou hodnotu konfiguračního slova procesoru nebo následuje jeden ze symbolů:

Výhodou symbolů je, že nezávisí na použitém procesoru. Význam jednotlivých bitů konfiguračního slova lze nalézt u popisu procesoru. Pro zajištění přenositelnosti zdrojového textu programu s číselným vyjádřením konfiguračního slova lze použít podmíněný překlad IFDEF se jménem procesoru (PIC16F84 atd).

Příklad:

  CONFIG WDT ; zapnout časovač Watchdog

DE
Data EEPROM

  DE <výraz> [, <výraz>, ...]

Příkaz DE uloží data do paměti EEPROM. Za příkazem může následovat jeden nebo více číselných výrazů, každý výraz je uložen jako jeden datový bajt. Ukládací adresa je určena nastavením ukazatele adres (příkazem ORG) na adresu 2100h a více.

Příklad:

  ORG 2100h ; počáteční adresa EEPROM
  DE 'A', 'H', 'O', 'J', 0 ; uložení dat do EEPROM

DEFINE
Define

  DEFINE jméno text

Nebo:

#DEFINE jméno text

Příkaz DEFINE definuje substituční text, kterým bude nahrazován symbol daného jména. Během překladu je každý překládaný řádek předzpracován nahrazením symbolů substitučními texty. Za substituční text je považován text následující za oddělovacími mezerami a tabulátory až po konec řádku nebo po komentář. Pomocí substitučního textu lze snadno provádět modifikace zdrojových textů změnou definic na začátku programu. Symboly je možné předefinovávat opakovaným použitím příkazu DEFINE (včetně zadání prázdných textů) nebo definice zrušit příkazem UNDEFINE. Dalším využitím je podmíněný překlad programu pomocí příkazů IFDEF a IFNDEF.

Poznámka: Před příkazem DEFINE není povoleno uvést návěští.

Příklad:

#define bank1 bcf 3,5 ; vytvoření pseudoinstrukce
       
  bank1   ; příkaz pro nastavení banky 1
  bcf 3,5 ; tak by vypadal rozvoj příkazu

DT
Data Table

  DT <výraz> [, <výraz>, ...]

Příkaz DT slouží k definici tabulek konstant. Za příkazem následuje jeden nebo více číselných parametrů. Každý parametr je přeložen jako jedna instrukce RETLW s uvedeným parametrem (u procesorů řady PIC16xxx se čtení hodnot z tabulek provádí voláním instrukcí RETLW, které navrací požadované hodnoty).

Příklad:

Table1 addwf 2,1 ; přičtení offsetu ve W k registru PCL
  dt 'A', 'H', 'O', 'J', 0 ; přeloženo jako 5 instrukcí RETLW

Tabulka je volána instrukcí CALL Table1, před voláním je do registru W uložen offset požadované hodnoty z tabulky (W = 0 až 4), po návratu obsahuje W načtenou hodnotu. Tabulka v příkladu vyžaduje, aby byla umístěna v počátečních 256 bajtech programové paměti. Při jiném umístění je nutné použít složitější obsluhu volání s využitím registru PCLATH.


DW
Data Word

  DW <výraz> [, <výraz>, ...]

Příkaz DW uloží do programové paměti jedno nebo více slov se zadanou hodnotou (rozsah hodnot 03FFFh). Tímto způsobem je možné do programu vkládat nestandardní instrukce (např. instrukce ADDLW 0xFF je překládána kódem 3EFFh, ale může mít kód i 3FFFh).

Příklad:

  addlw 0FFh ; instrukce přeložena jako 3EFFh
  dw 3FFFh ; jiný tvar instrukce ADDLW 0FFh

EQU
Equal

návěští EQU <výraz>

Pomocí příkazu EQU je možné definovat číselné konstanty pro překladač. Uvedením jména konstanty ve výrazu dosadí překladač na místo konstanty odpovídající číselnou hodnotu. Konstanty slouží především k usnadnění zápisu programu. Namísto konkrétních číselných hodnot je možné používat symboly s mnemotechnickým jménem. Změnou definice konstanty lze snadno změnit hodnotu konstanty v celém programu. Konstantu lze definovat kdekoliv v programu (i před jejím prvním použitím). Konstantu lze definovat pouze jednou; její hodnotu nelze na dalším místě programu změnit. Je-li potřeba hodnotu měnit, je možné použít příkaz SET.

Příklad:

LED equ 3 ; dioda LED připojena k bitu 3
  bsf PortA,LED ; zapnutí diody LED

ERROR
Error

  ERROR text

Příkazem ERROR může progam při překladu vypisovat chybová hlášení, zpravidla při nesplnění některé podmínky pro překlad. Překladač považuje příkaz ERROR za chybu. Během překladu informuje o chybě uživatele a vypíše řádek se zdrojovým textem, kde si uživatel může přečíst text chybového hlášení.

Příklad:

#ifndef __16c84  
  error >>> Nepodporovaný procesor! <<<
#endif    

IDLOCS
Identification Locations

  IDLOCS <výraz>

Procesory řady PIC16xxx umožňují příkazem IDLOCS uložit do paměti procesoru 16-bitové slovo, které může být využito k identifikaci procesoru (sériové číslo). Identifikační slovo není přístupné z programu v procesoru. Je přístupné pouze při čtení obsahu procesoru a to i v případě zapnuté ochrany proti čtení obsahu procesoru.

Příklad:

  idlocs 0x1234 ; sériové číslo procesoru

IFDEF, IFNDEF, ELSE, ENDIF
If Defined, If Not Defined, Else, End of If

  IFDEF jméno  
  ...    
  ELSE    
  ...    
  ENDIF    

Nebo:

#IFNDEF jméno  
  ...  
#ELSE    
  ...  
#ENDIF    

Příkazy IFDEF a IFNDEF umožňují podmíněný překlad programu. Příkaz IFDEF testuje, zda existuje symbol daného jména. Symbol je definován příkazem DEFINE, hodnotou symbolu může být prázdný řetězec. Pokud symbol existuje, přeloží se část programu následující za příkazem IFDEF. Pokud symbol neexistuje (nebo byl zrušen příkazem UNDEFINE), přeloží se část programu následující za příkazem ELSE. Podmíněný blok je ukončen příkazem ENDIF. Příkaz ELSE je nepovinný. Příkaz IFNDEF má opačný význam než IFDEF. První část programu se přeloží v případě, že symbol neexistuje, druhá část v případě existence symbolu.

Pomocí podmíněného překladu je možné přizpůsobit zdrojový text různým variantám. Častým případem je překlad podmíněný typem zvoleného procesoru. Překladač definuje symboly označující typ zvoleného procesoru (např. PIC16F84 nebo __16F84).

Poznámka: Před příkazy IFDEF a IFNDEF není povoleno uvést návěští.

Příklad:

#ifdef PIC16C84    
  config 11001b ; konfigurace pro PIC16C84
#endif      
       
#ifdef PIC16F84    
  config 3FF1h ; konfigurace pro PIC16F84
#endif    

INCLUDE
Include

  INCLUDE "soubor"

Nebo:

#INCLUDE "soubor"

Příkazem INCLUDE je možné vložit do programu zdrojový text z jiného souboru. Jako parametr příkazu následuje jméno souboru, které může být uzavřeno do dvojitých uvozovek nebo do lomených závorek <soubor>. Jako aktuální složka pro přístup k souborům je použita složka, ve které je umístěn editovaný program.

Příklad:

#include "pic16f627.inc" ; definice procesoru PIC16F627

LIST, NOLIST
List, No List

  NOLIST
   
  LIST

Po překladu programu je možné v okně překladu zobrazit výpis překladu programu, který obsahuje kódy přeložených instrukcí. Výpis překladu lze pro jednotlivé části programu zastavit příkazem NOLIST nebo opět povolit příkazem LIST. To je vhodné například při vnoření souboru příkazem INCLUDE, kdy nás nezajímá výpis jeho překladu.

Příklad:

  nolist   ; výpis překladu vypnut
#include "config.inc"   ; konfigurace programu
  list   ; výpis překladu zapnut

ORG
Origin

[návěští] ORG <výraz>

Překladač používá při překladu vnitřní ukazatel adres udávající místo, kam bude přeložená instrukce v paměti uložena. Ukazatel má počáteční hodnotu 0 a po každé přeložené instrukci se zvýší. Jeho hodnotu lze nastavovat příkazem ORG a tak určovat, kam bude která část programu uložena. Není nutné dodržet posloupnost adres (nižší adresy a potom vyšší), doporučuje se to však z důvodu přehlednosti programu. Je-li před příkazem ORG zapsáno návěští, je mu přidělena hodnota odpovídající nové hodnotě ukazatele adres. Hodnotu ukazatele adres lze používat ve výrazech uvedením znaku $ (dolar). Ukazatel adres se uplatňuje i při zápisu dat do paměti EEPROM příkazem DE. Pro zápis do EEPROM je nutno nastavit ukazatel adres na 2100h a více.

Příklad:

Tab1 org ($ + 0ffh) & ~0ffh ; tabulka začíná vždy na násobku 256 bajtů

RADIX
Radix

  RADIX {<výraz>| DEC | HEX | OCT | BIN}

Při zápisu číselných hodnot v programu lze specifikovat číselnou soustavu, ve které je číslo zapsáno. Specifikaci číselné soustavy je možné vynechat, v tom případě se číslo interpretuje v implicitní číselné soustavě. Implicitní číselnou soustavou je běžně dekadická soustava. Příkazem RADIX je možné implicitní číselnou soustavu změnit, nová číselná soustava se uplatní pro následující překládané řádky programu. Jako parametr příkazu RADIX lze uvést přepínač DEC, HEX, OCT nebo BIN, nastaví se číselná soustava dekadická, hexadecimální, oktalová nebo binární. Jinou možností je zadání číselného parametru s hodnotou 10, 16, 8 nebo 2. Při zadání číselného parametru příkazu je však potřeba pamatovat na to, že pro parametr platí do té chvíle platná implicitní číselná soustava.

Upozornění: Je-li zvolena implicitně hexadecimální soustava, není vhodné používat dekadický a binární sufixový způsob zápisu, sufixové znaky D a B jsou v tom případě považovány za znaky hexadecimální číselné soustavy. Např. 10D je považován za 0x10D a 10B za 0x10B. Pro tyto případy je vhodnější použít prefixový zápis .10 (nebo D'10') a B'10'.

Příklad:

  RADIX DEC ; dekadická číselná soustava
  addlw 10 ; číslo má hodnotu 10
  RADIX HEX ; hexadecimální číselná soustava
  addlw 10 ; číslo má hodnotu 16
  RADIX OCT ; oktalová číselná soustava
  addlw 10 ; číslo má hodnotu 8
  RADIX BIN ; binární číselná soustava
  addlw 10 ; číslo má hodnotu 2
       
  addlw .10 ; číslo má vždy hodnotu 10
  addlw 0x10 ; číslo má vždy hodnotu 16
  addlw O'10' ; číslo má vždy hodnotu 8
  addlw B'10' ; číslo má vždy hodnotu 2

RES
Reserve

[návěští] RES <výraz>

Příkaz RES rezervuje v paměti volné místo o zadané velikosti. Příkaz způsobí zvýšení ukazatele adres o hodnotu zadanou výrazem. Má stejný účinek jako "ORG $+<výraz>". Je-li před příkazem RES uvedeno návěští, bude mít toto návěští hodnotu začátku rezervované oblasti. Příkaz RES se uplatňuje na programovou paměť i na paměť EEPROM, stejně jako příkaz ORG. Do rezervované oblasti lze v jiné části programu ukládat instrukce nastavením příkazu ORG na hodnotu návěští začátku oblasti.

Příklad:

  org 0 ; počátek paměti procesoru (adresa po resetu)
  goto Start ; adresa 0: skok na start procesoru
  res 3 ; přeskočení nepoužité části paměti
  goto Inter ; adresa 4: skok na obsluhu přerušení procesoru
  res 250 ; rezervace místa pro tabulky

SET
Set

návěští SET <výraz>

Pomocí příkazu SET je možné definovat číselné proměnné pro překladač. Uvedením jména proměnné ve výrazu dosadí překladač na místo proměnné odpovídající číselnou hodnotu. Proměnné slouží především k usnadnění zápisu programu. Namísto konkrétních číselných hodnot je možné používat symboly s mnemotechnickým jménem. Změnou definice proměnné lze snadno změnit hodnotu proměnné v celém úseku programu. Proměnnou lze definovat kdekoliv v programu (i před jejím prvním použitím). Proměnnou je možné předefinovávat na více místech programu, nová definice přepíše starou hodnotu. Před první definicí proměnné platí hodnota nastavená poslední definicí v programu. Pro číselné hodnoty, které se v programu nebudou měnit, je vhodnější použít příkaz EQU (větší kontrola nechtěné vícenásobné definice).

Příklad:

Port set PORTA ; použije se port A
#include "Input.asm"   ; překlad pro port A
Port set PORTB ; nyní se použije port B
#include "Input.asm"   ; překlad pro port B

UNDEFINE
Undefine

  UNDEFINE jméno

Nebo:

#UNDEFINE jméno

Příkaz UNDEFINE zruší definici substitučního textu, který byl nadefinován příkazem DEFINE. Příkaz má význam především ve spojitosti s podmíněným překladem IFDEF a IFNDEF, kdy je překlad větven v závislosti na existenci symbolu substitučního textu.

Poznámka: Před příkazem UNDEFINE není povoleno uvést návěští.

Příklad:

#define quick   ; bude překlad pro režim "quick"
#include "SetRate.asm"   ; překlad pro režim "quick"
#undefine quick   ; zrušení příznaku režimu "quick"
#define slow   ; bude překlad pro režim "slow"
#include "SetRate.asm"   ; překlad pro režim "slow"

Výrazy

Úvod Příkazy překladače Výrazy

Výrazy jsou vyčíslovány jako celočíselné. Výrazy vyčíslující číslo registru nebo konstantu pro parametr instrukce mohou přesahovat cílový rozsah bitů, nadbytečné bity jsou ignorovány. Např. je možné zapsat instrukci MOVWF TRISA, adresa TRISA (85h) je zkrácena na 7 bitů (na 05h).


Operátory

Operátory slouží k sestavování číselných výrazů.

operátor popis příklad
$ aktuální ukazatel adres goto $ + 1
( ) levá a pravá závorka 1 * (2 + a)
- unární znaménko - (negace) -4
+ unární znaménko + +4
~ bitová inverze ~flags
HIGH vyšší bajt movlw HIGH Table
LOW nižší bajt movlw LOW Table
* násobení a * 4
/ celočíselné dělení a / 4
% modulo (zbytek po celočíselném dělení) a % 4
+ sčítání a + 4
- odečítání a - 4
<< bitový posun vlevo (opakované násobení 2) a << 4
>> bitový posun vpravo (opakované dělení 2) a >> 4
& bitový součin (AND) a & 4
| bitový součet (OR) a | 4
^ bitový výhradní součet (XOR) a ^ 4

Ukazatel adres
Symbol $ (dolar) představuje ukazatel adres překládaného programu. Je to adresa, do které bude uložena přeložená instrukce. Hodnotu ukazatele adres lze nastavovat příkazem ORG. Jeho hodnota se automaticky zvýší po překladu každé instrukce. Při použití ve výrazu udává ukazatel adres $ hodnotu aktuální adresy instrukce. Např. instrukce "goto $" představuje nekonečnou smyčku, skok sám na sebe.

Unární operátory
Unární operátory jsou jednooperandové operátory. Mění hodnotu následujícího operandu. Patří mezi ně:

Duální operátory
Duální operátory jsou operátory pro dva operandy. Operátor provede operaci mezi operandy uvedenými na obou stranách, výsledkem je hodnota, která může sloužit jako operand pro další operace.

Priorita operací
Při vyčíslování výrazů se postupuje podle následující priority:

  1. unární operátory -, +, ~, HIGH a LOW
  2. násobení *, dělení / a modulo %
  3. sčítání + a odečítání -
  4. bitový posun vlevo << a vpravo >>
  5. bitový součin AND &, bitový součet OR | a bitový výhradní součet XOR ^

Prioritu operací lze měnit uzavíráním částí výrazů do závorek ( a ).


Zadání číselných konstant

Při zadávání číselných konstant je možné zadat číselnou soustavu podle následující tabulky. Zápis je možný buď v prefixovém tvaru nebo v sufixovém tvaru. Při prefixovém zápisu je číslo uvozeno znakem číselné soustavy D (dekadická), H (dexadecimální), O (oktalová), B (binární). Za úvodním znakem následují číslice ohraničené znaky jednoduchých uvozovek. Při sufixovém zápisu následuje znak číselné soustavy za číslicemi čísla. Číslo při sufixovém zápisu musí začínat číslicí 0 až 9.

číselná soustava syntaxe příklad
dekadická D'???' D'127'
  .??? .127
  ???d 127d
hexadecimální H'??' H'9F'
  0x?? 0x9F
  ??h 9Fh
oktalová 0'???' 0'777'
  O'???' O'777'
  ???o 777o
binární B'????' B'0110'
  ????b 0110b
ASCII A'?' A'C'
  '?' 'C'

Dekadická číselná soustava
Při prefixovém zápisu se uvede nejdříve písmeno D (nebo d), za ním následují číslice ohraničené jednoduchými uvozovkami (např. D'123'). Zvláštním typem zápisu je znak tečky uvedený před číslicemi (bez uvozovek, např. .123). Při sufixovém zápisu následuje za číslicemi písmeno D (nebo d; např. 123d). Sufixový zápis nelze použít v případě, že je zvolena hexadecimální číselná soustava jako implicitní. V tomto případě je sufixový znak D považován za platnou číslici hexadecimální soustavy.

Hexadecimální číselná soustava
Při prefixovém zápisu se uvede nejdříve písmeno H (nebo h), za ním následují číslice ohraničené jednoduchými uvozovkami (např. H'2AB'). Zvláštním typem zápisu je zápis čísla za prefixem 0X (nebo 0x, např. 0x2AB). Při sufixovém zápisu následuje za číslicemi písmeno H (nebo h; např. 123h). Číslo musí při sufixovém zápisu začínat číslicí 09 (např. 0ABh).

Oktalová číselná soustava
Při prefixovém zápisu se uvede nejdříve písmeno O (nebo o), za ním následují číslice ohraničené jednoduchými uvozovkami (např. O'167'). Jako prefixový znak je možné použít i znak číslice 0 (např. 0'167'). Při sufixovém zápisu následuje za číslicemi písmeno O (nebo o; např. 167o). Sufixový zápis se nedoporučuje používat, neboť může snadno dojít k záměně písmene O s číslicí 0.

Binární číselná soustava
Při prefixovém zápisu se uvede nejdříve písmeno B (nebo b), za ním následují číslice ohraničené jednoduchými uvozovkami (např. B'110'). Při sufixovém zápisu následuje za číslicemi písmeno B (nebo b; např. 110b). Sufixový zápis nelze použít v případě, že je zvolena hexadecimální číselná soustava jako implicitní. V tomto případě je sufixový znak B považován za platnou číslici hexadecimální soustavy.

ASCII zápis
Číslo v ASCII tvaru umožňuje zadat jeden ASCII znak. Znak je uzavřen do jednoduchých uvozovek, před uvozovkami může (ale nemusí) předcházet prefixový znak A nebo a (např. 'm' nebo A'm').

Implicitní číselná soustava
Při zápisu čísla není nutné uvádět číselnou soustavu. V tom případě se použije implicitní číselná soustava. Implicitní číselnou soustavou je dekadická číselná soustava nebo soustava zvolená příkazem RADIX. Čísla v implicitní číselné soustavě se zadávají přímo zápisem číslic. Hexadecimální čísla musí začínat číslicí 09. Při implicitní hexadecimální číselné soustavě nelze použít sufixový zápis dekadické a binární soustavy (např. 10b), protože sufixové znaky D a B jsou považovány za platné číslice hexadecimální soustavy.


Tabulky

Zde je uvedeno několik tabulek, které mohou usnadnit používání různých číselných soustav. První je binární tabulka usnadňující převod jednotlivých bitů:

číslo bitu dekadicky hexadecimálně binárně
0 1 0001h 0000000000000001b
1 2 0002h 0000000000000010b
2 4 0004h 0000000000000100b
3 8 0008h 0000000000001000b
4 16 0010h 0000000000010000b
5 32 0020h 0000000000100000b
6 64 0040h 0000000001000000b
7 128 0080h 0000000010000000b
8 256 0100h 0000000100000000b
9 512 0200h 0000001000000000b
10 1024 0400h 0000010000000000b
11 2048 0800h 0000100000000000b
12 4096 1000h 0001000000000000b
13 8192 2000h 0010000000000000b
14 16384 4000h 0100000000000000b
15 32768 8000h 1000000000000000b

Další je hexadecimální tabulka usnadňující převod hexadecimálních číslic:

vyšší bajt (HIGH) nižší bajt (LOW)
1. číslice 2. číslice 3. číslice 4. číslice
hex. dek. binárně hex. dek. binárně hex. dek. binárně hex. dek. binárně
0000 0 0000000000000000 000 0 000000000000 00 0 00000000 0 0 0000
1000 4096 0001000000000000 100 256 000100000000 10 16 00010000 1 1 0001
2000 8192 0010000000000000 200 512 001000000000 20 32 00100000 2 2 0010
3000 12288 0011000000000000 300 768 001100000000 30 48 00110000 3 3 0011
4000 16384 0100000000000000 400 1024 010000000000 40 64 01000000 4 4 0100
5000 20480 0101000000000000 500 1280 010100000000 50 80 01010000 5 5 0101
6000 24576 0110000000000000 600 1536 011000000000 60 96 01100000 6 6 0110
7000 28672 0111000000000000 700 1792 011100000000 70 112 01110000 7 7 0111
8000 32768 1000000000000000 800 2048 100000000000 80 128 10000000 8 8 1000
9000 36864 1001000000000000 900 2304 100100000000 90 144 10010000 9 9 1001
A000 40960 1010000000000000 A00 2560 101000000000 A0 160 10100000 A 10 1010
B000 45056 1011000000000000 B00 2816 101100000000 B0 176 10110000 B 11 1011
C000 49152 1100000000000000 C00 3072 110000000000 C0 192 11000000 C 12 1100
D000 53248 1101000000000000 D00 3328 110100000000 D0 208 11010000 D 13 1101
E000 57344 1110000000000000 E00 3584 111000000000 E0 224 11100000 E 14 1110
F000 61440 1111000000000000 F00 3840 111100000000 F0 240 11110000 F 15 1111

Následující ASCII tabulka slouží k převodu ASCII znaků:

20 - 2F 30 - 3F 40 - 4F 50 - 5F 60 - 6F 70 - 7F
hex dek ASCII hex dek ASCII hex dek ASCII hex dek ASCII hex dek ASCII hex dek ASCII
20 32 mezera 30 48 0 40 64 @ 50 80 P 60 96 ` 70 112 p
21 33 ! 31 49 1 41 65 A 51 81 Q 61 97 a 71 113 q
22 34 " 32 50 2 42 66 B 52 82 R 62 98 b 72 114 r
23 35 # 33 51 3 43 67 C 53 83 S 63 99 c 73 115 s
24 36 $ 34 52 4 44 68 D 54 84 T 64 100 d 74 116 t
25 37 % 35 53 5 45 69 E 55 85 U 65 101 e 75 117 u
26 38 & 36 54 6 46 70 F 56 86 V 66 102 f 76 118 v
27 39 ' 37 55 7 47 71 G 57 87 W 67 103 g 77 119 w
28 40 ( 38 56 8 48 72 H 58 88 X 68 104 h 78 120 x
29 41 ) 39 57 9 49 73 I 59 89 Y 69 105 i 79 121 y
2A 42 * 3A 58 : 4A 74 J 5A 90 Z 6A 106 j 7A 122 z
2B 43 + 3B 59 ; 4B 75 K 5B 91 [ 6B 107 k 7B 123 {
2C 44 , 3C 60 < 4C 76 L 5C 92 \ 6C 108 l 7C 124 |
2D 45 - 3D 61 = 4D 77 M 5D 93 ] 6D 109 m 7D 125 }
2E 46 . 3E 62 > 4E 78 N 5E 94 ^ 6E 110 n 7E 126 ~
2F 47 / 3F 63 ? 4F 79 O 5F 95 _ 6F 111 o 7F 127 del

Předdefinované konstanty

Překladač definuje několik předdefinovaných konstant usnadňujících použití registrů a konstant procesoru. Hodnoty některých konstant závisí na zvoleném typu procesoru. Předdefinované konstanty mají charakter proměnných, jejich hodnotu lze předefinovat příkazy SET nebo EQU.

Adresy registrů

název popis hodnota
EEADR (EEAdr, Eeadr, eeadr) adresa registru EEADR podle typu procesoru
EEADRH (EEAdrH, Eeadrh, eeadrh) adresa registru EEADRH podle typu procesoru
EECON1 (EECon1, Eecon1, eecon1) adresa registru EECON1 podle typu procesoru
EECON2 (EECon2, Eecon2, eecon2) adresa registru EECON2 podle typu procesoru
EEDATA (EEData, Eedata, eedata) adresa registru EEDATA podle typu procesoru
EEDATH (EEDatH, Eedath, eedath) adresa registru EEDATH podle typu procesoru
FSR (Fsr, fsr) adresa registru FSR 4
INDF (IndF, Indf, indf) adresa registru INDF 0
INTCON (IntCon, Intcon, intcon) adresa registru INTCON 0Bh
OPTION_REG (Option_Reg, Option_reg, option_reg) adresa registru OPTION 81h
PCL (Pcl, pcl) adresa registru PCL 2
PCLATH (PCLatH, Pclath, pclath) adresa registru PCLATH 0Ah
PORTA (PortA, Porta, porta) adresa registru PORTA 5
PORTB (PortB, Portb, portb) adresa registru PORTB 6
PORTC (PortC, Portc, portc) adresa registru PORTC 7
PORTD (PortD, Portd, portd) adresa registru PORTD 8
PORTE (PortE, Porte, porte) adresa registru PORTE 9
STATUS (Status, status) adresa registru STATUS 3
TMR0 (Tmr0, tmr0) adresa registru TMR0 1
TRISA (TrisA, Trisa, trisa) adresa registru TRISA 85h
TRISB (TrisB, Trisb, trisb) adresa registru TRISB 86h
TRISC (TrisC, Trisc, trisc) adresa registru TRISC 87h
TRISD (TrisD, Trisd, trisd) adresa registru TRISD 88h
TRISE (TrisE, Trise, trise) adresa registru TRISE 89h

Čísla bitů v registrech

název popis hodnota
C (c) číslo bitu C registru STATUS 0
DC (Dc, dc) číslo bitu DC registru STATUS 1
EEIE (Eeie, eeie) číslo bitu EEIE registru INTCON 6
EEIF (Eeif, eeif) číslo bitu EEIF registru EECON1 4
GIE (Gie, gie) číslo bitu GIE registru INTCON 7
INTEDG (IntEdg, Intedg, intedg) číslo bitu INTEDG registru OPTION 6
INTE (IntE, Inte, inte) číslo bitu INTE registru INTCON 4
INTF (IntF, Intf, intf) číslo bitu INTF registru INTCON 1
IRP (Irp, irp) číslo bitu IRP registru STATUS 7
NOT_PD (Not_PD, Not_pd, not_pd) číslo bitu /PD registru STATUS 3
NOT_RBPU (Not_RBPU, Not_rbpu, not_rbpu) číslo bitu /RBPU registru OPTION 7
NOT_TO (Not_TO, Not_to, not_to) číslo bitu /TO registru STATUS 4
PS0 (Ps0, ps0) číslo bitu PS0 registru OPTION 0
PS1 (Ps1, ps1) číslo bitu PS1 registru OPTION 1
PS2 (Ps2, ps2) číslo bitu PS2 registru OPTION 2
PSA (Psa, psa) číslo bitu PSA registru OPTION 3
RBIE (Rbie, rbie) číslo bitu RBIE registru INTCON 3
RBIF (Rbif, rbif) číslo bitu RBIF registru INTCON 0
RD (Rd, rd) číslo bitu RD registru EECON1 0
RP0 (Rp0, rp0) číslo bitu RP0 registru STATUS 5
RP1 (Rp1, rp1) číslo bitu RP1 registru STATUS 6
T0CS (T0cs, t0cs) číslo bitu T0CS registru OPTION 5
T0SE (T0se, t0se) číslo bitu T0SE registru OPTION 4
T0IE (T0ie, t0ie) číslo bitu T0IE registru INTCON 5
T0IF (T0if, t0if) číslo bitu T0IF registru INTCON 2
WR (Wr, wr) číslo bitu WR registru EECON1 1
WREN (WrEn, Wren, wren) číslo bitu WREN registru EECON1 2
WRERR (WrErr, Wrerr, wrerr) číslo bitu WRERR registru EECON1 3
Z (z) číslo bitu Z registru STATUS 2

Různé konstanty

název popis hodnota
BIT0 (Bit0, bit0) hodnota bitu 0 1
BIT1 (Bit1, bit1) hodnota bitu 1 2
BIT2 (Bit2, bit2) hodnota bitu 2 4
BIT3 (Bit3, bit3) hodnota bitu 3 8
BIT4 (Bit4, bit4) hodnota bitu 4 16
BIT5 (Bit5, bit5) hodnota bitu 5 32
BIT6 (Bit6, bit6) hodnota bitu 6 64
BIT7 (Bit7, bit7) hodnota bitu 7 128
F (f) druhý parametr instrukce - výsledek do F 1
W (w) druhý parametr instrukce - výsledek do W 0