v. 2011 Materiál je určen jako pomocný materiál pouze pro studenty zapsané v předmětu: A3B38MMP a X38MIP, ČVUT- FEL, katedra měření, přednášející Jan Fischer © Jan Fischer, 2011
Překladač - Assembler
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
1
Úloha UART, specifikace zadání, vysvětlení asynchronní komunikace Assembler Symboly, Příklady direktiv asembleru a jejich použití Tvorba programu s využitím výhod symbolického programování Úloha - Odpor
Náplň
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
2
Pokud se bude správně generovat signál na P1.4, ověřte též funkčnost při vysílání na sériovou linku RS-232. Program změňte tak, aby se signál generoval na portu P3.1, který je připojen na RS-232. Pokud je vše správně, budou se po spuštění programu na obrazovce vypisovat zvolené znaky.
Generovat periodicky na portu P1.4 signál, který odpovídá přenosu ASCII znaků iniciál Vašeho jména. sériový asynchronní přenos 9600 Bd, 1 start bit, 8 datových bitů bez parity, 1 stop bit. Aby bylo možno při pozorování signálu dobře synchronizovat osciloskop, vysílejte po každém znaku prodlevu alespoň 1 ms, kdy zůstává signál v neaktivním stavu (vysoká úroveň).
Úloha –programový UART- zadání
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
3
Pokud je vše správně, budou se po spuštění programu na obrazovce vypisovat zvolené znaky.
V microvision – otevřít terminálové okno (funkce analogicky hyperterminal)
Pro odladění - generovat signál na P1.4 kontrolovat osciloskopem,… změnit program na P3.1, vysílání prostřednictvím RS -232 do PC.
Úloha –programový UART, ověření 1 2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 9 P3.0/RxD 10 P3.1/TxD 11 12 P3.2/INT0 P3.3/INT1 13 14 15 16 17 18 19 VSS 20
PDIL
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
VCC
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
4
nastavení prodlevy mezi znaky – pro snazší kontrolu osciloskopem, znak
znak
znak
znak
vyslání znaku ´1´ doba = 10 x ( 1 / Br ) , nast. - 8 dat, 1 stop bit Asynchronní komunikace, obvykle 1/ Br přenos ASCII znaků „A“ = 41h, „B“=42h „1“= 31h, „2“ = 32h start D0 D1 D2 D3 D4 D5 D6 D7 stop start bit, datové bity D0 –D7, stop bit (nastavení – bez parity) obecně komunikace:start bit, 5-8 datových bitů, parita, či bez parity, 1, 1,5 nebo 2 stop bity , vysílání dat od D0 po D7, to je od LSB – nejnižší doba vyslání celého znaku – zde 1 0 0 0 1 1 0 0 31 = "1" 10 x (1/9600)= 1,04 ms
Úloha – programový UART, princip
start
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
stop
5
Převodník RS-232 na USB i vyšší rychlosti (www .NC .CZ - 190 Kč), pro „boot“ procesorů STM32,..
U 8051 -obvod UART: 8 dat. bit bez parity nebo 7 dat. bitů s paritou u PC s COM Port - možnost nastavení až 115 200 Bd
nast.: start bit - vždy ; 8 datových bitů (bez parity ); 1 stop bit možný přenos: 5 až 8 datových bitů; s paritou - bez parity ; 1 , 1,5 nebo 2 stop bity
.19200, 9600, 4800, 2400, 1200, ...Bd ( Baud) 9600 bývá základní rychlost Br = 9600 , 1 / Br = 0,1041 ms, vyslání celého ASCI ´1´ znaku 1,04 ms
Obvykle používané Br (baud rate - modulační rychlost) ..
Modulační rychlost, baudrate
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
6
adr.16 A Rn
LCALL,…..
RRC
DJNZ
24 osc.
2,17 us
1,085 us
2,17 us
24 osc. 12 osc
1,085 us
12 osc.
Využít simulátor, pozorovat signál na log. analyzátoru v uVision -3, kontrola časování, ( v simulátoru nebude však vypisovat znaky na terminálu)
Vstupem znak např. v akumulátoru, posun akumulátoru přes Carry, kopírovat Carry do P3.1, ( MOV P3.1, C) testovat na dokončení vyslání celého znaku.
A, Rn
MOV
Vytvořit jako podprogram pro vyslání jednoho znaku. Určení doby čekání při vyslání jednoho bitu (smyčka), nutno snížit dobu dalších „režijních“ instrukcí call,… Frekvence krystalu vývojové desky s I8031 je 11.0592 MHz. Doba jednocyklové instrukce je dána T=12 /11.0592 MHz = 1,085 us .
Programový UART, postup řešení
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
7
strojní kód, jeho umístění do ROM, EPROM, FLASH, nebo zavedení (BOOT) do programové RAM Vygenerování strojního kódu - v počátcích i „ruční překlad“ tato znalost někdy užitečná při hledání chyb nebo „zpětném inženýrství“
Cíl - získat spustitelný kód
Tvorba programu pro mikroprocessor
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
8
DPTR, 01C4h ; Vypis uvodniho titulku
SETB 90h.5 ; zhasni LED - zapojene proti Ucc ACALL 018Eh ; cekej CLR 90h.5 ; rozsvit LED
ACALL 0294h ; volani programu pro vypis textu MOV 3Fh ,# 00h ; vynulovani pocitadla bliknuti
MOV
A) Základní program bez využití symbolů a symbolických adres
Dva způsoby tvorby programu
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
9
Titlulek: MOV DPTR,# Txt_U ; Vypis uvodniho titulku
MOV
CALL Sendrss ; volani programu pro vypis textu Start: MOV Pruch, #00 ;vynulovani pocitadla bliknuti Aznovu: SETB LED ; zhasni LED - zapojene proti Ucc ; cekej CALL Cekej CLR LED ; rozsvit LED
ACALL 0294h ; volani programu pro vypis textu MOV 3Fh ,# 00h ; vynulovani pocitadla bliknuti
SETB 90h.5 ; zhasni LED - zapojene proti Ucc ACALL 018Eh ; cekej CLR 90h.5 ; rozsvit LED
DPTR, 01C4h ; Vypis uvodniho titulku
B) Program s využitím symbolů a symbolických adres
A) Základní program bez využití symbolů a symbolických adres
Dva způsoby tvorby programu
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
10
MOV R0, # 55H DJNZ R0, ZAC
Komplikovaná modifikace programu
A) Základní program bez využití symbolů a symbolických adres Programátor musí přehled o umístění jednotlivých proměnných, adresách , kam se skáče,... změna jednoho parametru - nutnost přepisování ve více místech programu
B) Program s využitím symbolů a symbolických adres Snaha minimalizovat přímé číselné konstatnty v těle programu, ale nahradit je symbolickými konstatntami. Symbolická jména proměnných i pevných konstatnt umístěných v paměti. Snadná modifikovatelnost OPAK EQU 55H .... MOV RO, # OPAK DJNZ R0, ZAC
Srovnání variant tvorby programu
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
11
vyhodnocení symbolu 16 bitově možno rozsah 0 až 65535 (bez znaménka) nebo -32768 až +32767 dvojkový doplněk
Místo číselných adres a číselných konstant symbolické adresy a symbolické konstanty. Překladač dosadí příslušnou hodnotu symbolu podle zadání nebo počitadla adres při překladu. Symbol je jméno, které se definuje, aby reprezentovalo hodnotu, textový blok, adresu nebo jméno registru. Symboly mohou reprezentovat číselnou konstantu a výraz Symboly začínají písmenem nebo spec znaky _, ? (nesmí začínat číslicí)
Symbol, symbolické adresy
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
12
Řízení asembleru – řízení procesu překladu a tvorby kódu (Include, XREF, NOMOD51, Object, ..)
Direktivy asembleru – pseudoinstrukce – pro definovaní programové, datové struktury a symbolů, generování nespustitelného kódu ( není to informace pro procesor!) ( SET, DB, EQU, ORG,….CSEG,..)
Program v assembleru má tři části: Strojní instrukce, instrukce proc. 8051 (MOV, ACALL,..) dle popisu 8051
Adresy a hodnoty používané v poli operandů instrukcí mohou být vyjádřeny symbolicky. (Také používaný název jazyk symbolických adres JSA)
Assembler programový nástroj pro zjednodušení psaní počítačového. prog. Překládá symbolický kód do kódu .obj, který může být naprogramován do mikropočítače a spuštěn.
Překladač Assembler, z jazyka symbolických adres
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
13
Na cvičeních absolutní segmenty, přesně definovaná adresa (CSEG AT 0A000h,..., DSEG AT 30h) od které bude umístěn. Obvykle však více modulů, relativní moduly, při překladu není známo, jak budou umístěny. Přeložení modulů a jejich linkování
Samostatné části programu, přeložení (aritmetika, komunikace, sběr dat) samostatné přeložení- relativní modul, linkování do výsledného programu
Modulární programování, rozdělení na menší bloky a podprogramy, které se lépe testují assembler AX51 ( A51), linker Lx51, OHx51 převodník do hex.
Překladač
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
14
přiřazení hodnoty vždy 16- bitově segment blok kódové nebo datové paměti
direktivy assembleru (pseudoinstrukce)
symbol význam číslo adresa programu Code, Data, XDATA,
Překladač
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
15
$ MACRO ;implicitně, povolí zpracování definicí ; opak $ NOMACRO;
; $ INCLUDE (knih.lib)
; ZKUSIT v předchozích řádcích $MOD51 ..změnit
; symbolu pro jiné klony, např. Philips 80C552 ,...
; $INCLUDE (REG552.INC) ; se vloží soubor s definicí
; $ NOMOD51 ; zakáže předdef.né symboly 8051 a pomocí
$ MOD51 ; je implicitně,
; implicitně NOXREF !!
$ XREF ; crossreference, zkráceně XR, NOXR
DIREKTIVY PŘEKLADAČE
Testovací program pro syntaxi příkazů překladače A51 firmy KEIL
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
16
H, h 1234h , 99H, 0A0F0H, 0FFH
vyhodnocují se 16 -bitově Dekadické
Hexadecimální
sym set 'A'
sym set 'AB'
sym set 'a'
sym set 'ab'
0041
4142
0061
6162
; STRING - RETEZCE
Binární ZNAK $ pro snazší orientaci
; sym set 'abc' to je CHYBNĚ
; BIN B, b 111B, 10011 ; 1111$0000$1010$0011B
; OKTAL. 177O, 7777o, 25O, 123o, 177777O Oktalové
; DEC D, d , 1234, 65590D, 20d, 123
; HEX
; ČÍSELNÉ VÝRAZY
VÝRAZY
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
17
0099 0020 F599
0007 90A000
CODE, DATA, BIT TYPELES
SERIAL_BUFFER DATA SBUF ; deklarace MOV SERIAL_BUFFER, A ; použití
; TYPY
; symbol začíná znakem 'A' az 'Z', nebo '?'
; Symboly - max. 31 ZNAKU DLOUHE
; SYMBOLY
TABLE:
MOV DPTR, # EX_RAM DB ' Zadej znak ', 0
EX_RAM EQU 0A000 h
MOV DPTR, # 8000 h
0004 908000
A000
SUBB A, # '0‘
TEST: MOV @ R0, # 'A'
0002 9430
0000 7641
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
18
; komentář
LABEL2:
2
DS
LABEL1:
002A 00 002B E0
0026 52494E47 COPY:
MOVX A, @DPTR
0022 1B215354 NUMBERA: DB 27, 33,'STRING', 0
; NAVĚŠTÍ
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
19
HALT: SJMP $
ORG nastavení počitadla ($) adres ($) (v daném segmentu)
ORG 100 ; pomocí ORG se nastavuje $
006A 006A
0066 00660068 TABLEA: DW $, $, $
0064 80FE
0064
CSEG
; odděleně SEGMENT CODE, DATA, IDATA, BIT,
; SYMBOL $ ČÍTAČ ADRES v SEGMENTU
; DPTR, PC, C, AB, AR0 až AR7
; A, R0 az R7
; tyto symboly jsou rezervovovány pro stálé použití překladačem
REZERVOVANE SYMBOLY
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
20
SYM SET NOT 0000$0000$0000$0001B
SYM SET NOT 1 + 1
SYM SET (NOT 1) +1
SYM SET -0AH
FFFE
FFFF
FFFF
FFF6
SYM SET 17 MOD 4 ; zbytek po dělení
SYM SET ( 2 + 8 ) * 12 ; změna pořadí výkonu operací
0078
; celočíselné dělení
0001
17/4
SYM SET
0004
; * 1200h * 7 násobení ; / dělení
2 + 10 - 2 sčítání, odečítání
SYM SET NOT 1
FFFE
; +,-
SYM SET -1
FFFF
; = ,- znaménko +5,
; aritmetické operátory
OPERÁTORY
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
21
sym set HIGH 1234; vyšší Byte
sym set LOW 1234; nižší Bytet
0004
00D2
sym set 12H OR 177
sym set 12 XOR 15
0003
sym set 0FFH AND 12H; logická AND operace
sym set 2 SHL 4
00B3
0020
sym set 1234
04D2
; SHR, SHL POSUN DOPRAVA, DOLEVA
sym set NOT 5 ; negace - jedničkový doplněk
; NOT
FFFA
;
BINÁRNÍ OPERACE
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
22
;
NOT EQUAL EQUAL LESS THAN GREATER THAN
; <> / NE
; = / EQ
; < / LT
; > / GT
; OPERATORY <>= není nutno oddělovat mezerou
; .... je nutno oddělit mezerou od operandu
; OPERÁTORY GTE, LTE, NE, EQ, LT, GT
LESS THAN OR EQUAL TO
; <= / LTE
; >= / GTE GREATER THAN OR EQUAL TO
RELAČNÍ OPERÁTORY
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
23
NOT, HIGH, LOW =, - JAKO ZNAMÉNKO *, /, MOD, ^ +, - SČÍTÁNÍ, ODEČÍTÁNÍ SHR, SHL
; 2.
; 3.
; 4.
; 5.
; 6.
; AND, OR, XOR ; >=, <=, =, <, >
( ZÁVORKY )
; 1.
; priorita - pořadí použití operátorů při vyhodnocení symbolu
PRIORITA OPERATORU
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
24
;
; výsledek v ostatních případech nemá typ
; jeden seg. typ, pak má stejný typ
; 3) Pro binární operace + A - pokud má pouze !!!
; (MIMO + A -) nemá segmentový typ
; 2) Výsledek všech binárních operací
; NOT, LOW, HIGH) mají stejný typ seg. jako operand
; 1) Výsledek unární operace (+,- jako znaménko
; BSYM bitový symbol
; XSYM adresový symbol DATOVÝ (EXT. PAMET)
; ISYM IDATA symbol (INT. DAT. paměť nepř. adresov.)
; DSYM adresový symbol DATOVÝ - INTERNÍ PAM.
; CSYM adresový symbol (SEG.) kódový
; NUMBER - (CISLO) nezávisí na segmentu
; v tabulce XREF uveden TYP SYMBOLU
; NUMERICKÉ VÝRAZY - TYP SEGMENTU
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
25
= TYP CODE
DB LEN,'HLASENI',0
; CSYM + CISLO = TYP CODE
; CISLO + CISLO = CISLO ( BEZ TYPU)
; DSYM - DSYM = CISLO (BEZ TYPU)
; CSYM + (DSYM-DSYM)
EQU $-MSG-1 ; spočítá délku řetězce
MSG:
0070 53454E49 00 0008 LEN
006C 08484C41
;
OPERACE SE SYMBOLY RUZNÉHO TYPU
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
26
ANO_NE_Suma:
dbit
1
; nejdříve definovat typ seg. (CSEG, DSEG, BSEG, XSEG a výraz, až pak je možno použít návěští DSEG (at 40h ) DS výraz (např. DS 2, ) rezervace v pam. DATA XSEG (např. at 0A400h) DS 6; rezervace místa pro 6 bajtů v paměti typu XDATA CSEG HLASENI: DB VYRAZ [VYRAZ,...] BYTE v paměti CODE 0075 000141D2 DB 0,1,'A', LOW (1234D) ; DW VYRAZ [,VYRAZ,..] SLOVA v paměti CODE BSEG ; DBIT vyraz ( počet míst pro bitové proměnné) bseg at 20h.0 ANO_NE_Pr: dbit 1
REZERVACE MÍSTA V PAMĚTI, DEFINICE KONSTANT
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
27
BIT 30h 34h
20h.2 ; definice bit. sym. vypnutí na adr. 20h.2 ; definice datového symbolu CISLO1 ; (lze použít MOV R1, # CISLO1
( jaký je rozdíl mezi MOV R1, CISLO1 a MOV R1, #CISLO1 ? )
VYPNUTI CISLO1 DATA CISLO2 DATA
; DIREKTIVY PRO PŘIŘAZENÍ JMÉNA SYMBOLU
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
28
0013 B295 0015 32
000B B295 000D 32
0003 B295 0005 32
0000 802E
0000 0003 000B 0013 0030
RESET code 0000 ; reset - začátek prog. pro resetu Intr0 code 03 ; adr pro obsluhu přer. INT0 IntrTF0 code 0bh ; adr pro obsluhu přer. čas. T0 Intr1 code 13h ; adr pro obsluhu přer. INT1 pos_zac equ 30h ; posun začátku programu CSEG at Reset JMP reset + Pos_zac CSEG at Intr0 CPL P1.5 RETI CSEG at IntrTF0 CPL P1.5 RETI CSEG at Intr1 CPL P1.5 RETI
PŘÍKLAD POUŽITÍ JMEN SYMBOLU S PŘIŘAZENÝM TYPEM
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
29
CSEG at Reset + Pos_zac ; povolení přerušení a ještě další instrukce 0030 opakuj: 0030 00 NOP 0031 00 NOP 0032 80FC JMP opakuj END
PŘÍKLAD POUŽITÍ JMEN SYMBOLU S PŘIŘAZENÝM TYPEM -2
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
30
CSEG ; TYP_PROC 0 - AT89C2051, 1 - AT89C8252, 2 - C8051F020 Silic. Lab. $ SET (TYP_PROC = 0); 0 nebo 1, nebo 2 $ IF (TYP_PROC = 0) ; program inicializace UART pro AT89C2051 ZASOBNIK SET 40h LED SET P1.5 TLAC SET P 1.4 $ ELSEIF (TYP_PROC = 1), KONSTUKCE S ; ELSEIF mozna POUZE s $ ; program inicializace pro AT89C8252 ZASOBNIK SET 80h LED SET P2.5 TLAC SET P 1.4 $ ELSEIF (TYP_PROC = 2) ; program inicializace pro C8051F020 ZASOBNIK SET 80h LED SET P1.5 TLAC SET P3.5 ; program inicializace pro AT89C8252 $ ENDIF
; PODMÍNĚNÝ PŘEKLAD - 1
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
31
Využití jednoho programu pro více variant zařízení, zadání parametrů pro podmíněné přeložení jednotlivých částí programu. Modifikace, podle velikosti záznamové paměti, zobrazovače v přístroji, klávesnice, rozhraní....
CSEG ZAC: ; tady je hlavní a společný program MOV SP, # ZASOBNIK ; Inicializace SP podle typu proc. NOP ; NOP ; ......................... END ; konec programu
; PODMÍNĚNÝ PŘEKLAD - 2
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
32
1 2 3
konst set -1 mov a, #konst end
MOV A, # konst (do 8- bit. aku dosadí dolní byte konst)
FFFF 0000 74FF
vyhodnocení symbolu 16 bitově MOV A, # symbol ? jak je možné (8-bitový registr, 16- bitová hodnota ?) ---- přesune se pouze dolní Byte stejné jako - MOV A, # low ( symbol) Jak u dvojkového doplňku? číslo -1 ve dvojkovém doplňku: FFFFh (16-bitově) -1 FFh (8-bitově) dolní byte je stejný FF proto možné konst SET -1
Vyhodnocení symbolu záporná čísla - poznámka
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
33
seg_a seg_b seg_c seg_d seg_e seg_f seg_g seg_h
EQU 00000001B EQU 00000010B EQU 00000100B EQU 00001000B EQU 00010000B EQU 00100000B EQU 01000000B EQU 10000000B
více k zapojení a ovládání zobrazovače na: http://measure.feld.cvut.cz/groups/edu/pmt/uloha6.html
0001 0002 0004 0008 0010 0020 0040 0080 data bus
P1
89C52
T1
SA1
Rk8
Rk1
R4
R3
R2
R1
74HCT573
Tl.4
Tl.1
+5V
8
SA2
T2
SA3
T3
SA4
T4
Popis připojení 7- segmentového zobrazovače ; Pripojeni tato cast definuje propojeni jednotlivych segmentu na bity budiciho slova v katodach, pokud se zmeni obvod, predefinuje se pouze tato tabulka
Využití pseudoinstrukcí - připojení 7- seg. LED
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
34
v A cislo 1, nebo 2,… Získání kódu MOV DPTR, #(GENER_ZNAKU-1) MOVC A, @A+DPTR ( pro cislo 1 ukazuje prave na Gener_znaku
; definice generatoru znaku v pozitivni logice, toto je jen priprava 0006 JEDNOTKA EQU seg_b OR seg_c 005B DVOJKA EQU seg_a OR seg_b OR seg_g OR seg_e OR seg_d 004F TROJKA EQU seg_a OR seg_b OR seg_c OR seg_d OR seg_g 0066 CTYRKA EQU seg_f OR seg_g OR seg_b OR seg_c ; vlastni generator znaku je v negativni logice, protoze segment sviti pri nule na katode 2200 F9 GENER_ZNAKU: DB NOT jednotka ; toto již kód vlastniho generatoru 2201 A4 DB NOT dvojka ; umisteneho v pameti 8051 2202 B0 DB NOT trojka ; od adr 22 00 h 2203 99 DB NOT ctyrka ; pokud by svitlo při 1 , odpadne NOT, Je možno použít další možnosti …
Definice generátoru znaků
A3B38MMP, X38MIP, 2011, kat. měření, ČVUT - FEL
35