A família 80C51 • Organização: – – – – – – – Microcontroladores versus microprocessadores Os microcontroladores da família 80C51 Interface com o exterior Modelo de programação Processamento dos pedidos de interrupção Modos de endereçamento e tipos de instruções Exemplo: Simulação de um registo de deslocamento Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 1 Microcontroladores (Cs) e microprocessadores (Ps) • Um microcontrolador é fundamentalmente um componente que integra os três blocos principais na arquitectura de um computador: CPU, memória e E/S • Entre Cs e Ps existem as seguintes diferenças: – Os Cs dispõem de E/S interna de vários tipos – Os Cs podem dispor de ROM / EPROM – Os Cs são sobretudo vocacionados para tarefas de controlo, onde 8 bits são a solução mais comum Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 2 Os Cs da família 80C51 • A família 80C51 apresenta uma arquitectura interna algo complexa, o que a poderia desaconselhar como veículo para a introdução a este domínio. Contudo: – Trata-se de componentes com grande uso na prática, para os quais existe uma enorme variedade de aplicações de apoio ao projecto, comerciais ou do domínio público – A complexidade não é tanto devida à arquitectura do CPU interno, mas mais pela necessidade de se multiplexarem muitos sinais em poucos pinos Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 3 80C51: Arquitectura do núcleo de base In te rru p çõ e s e x te rn a s C o n tro lo de in te rru p çõ e s S in a is d e co n tro lo 4K ROM 128 RAM CPU O scila d o r (crista l e x te rio r) In te rru p çõ e s in te rn a s 4 p o rta s d e E /S p a ra le la P o rta sé rie P0 P2 P1 P3 TxD RxD E n d e re ço s / d a d o s Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 4 T e m p o riza d o re s / C o n ta d o re s (2 T /C d e 1 6 b its) E n tra d a s d o s co n ta d o re s Variantes dentro da família 80C51 • As variantes principais que estão disponíveis nesta família têm as seguintes características principais: F unção V a ria n te s RAM 6 4 b y tes a 1 .0 2 4 b y tes (E P )R O M 0 a 3 2 K b y tes T im ers / co u n ters 1 a 3 (1 6 b its) E /S p a r a le la 2 a 7 p o rta s (8 b its) In te rfa ce s sé rie R S -2 3 2 C , I 2 C , C A N In te rru p çõ e s e x te rn a s 1 a 10 F re q u ê n cia d e re ló g io 32 K H z a 40 M H z E n ca p su la m e n to 2 4 a 8 0 p in o s (D IP , L C C , Q F P ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 5 Organização de memória • A família 80C51 distingue entre memória de programa (MP) e memória de dados (MD): – A MP contém o programa a executar (instruções e operandos), enquanto a MD serve apenas para dados – Uma vez que existe apenas um barramento de endereços e um barramento de dados, a distinção entre MP e MD é feita através do sinal de leitura (MP: /PSEN, MD: /RD) – Na MP efectuam-se apenas operações de leitura, sendo que na MD se efectuam operações de leitura e escrita Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 6 Organização de memória (cont.) • Ainda a distinção MP / MD: – A existência de dois tipos de memória obriga o 80C51 a ter internamente dois apontadores (PC, DP) – A selecção do sinal de leitura apropriado (/PSEN ou /RD) é feita automaticamente pela instrução a executar – MP e MD não são necessariamente ROM e RAM, podendo mesmo coexistir no mesmo componente de memória, e.g. uma NVRAM (de onde viria o sinal de leitura, neste caso?) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 7 Organização de memória (cont.) • Os recursos internos de MP e MD podem ser complementados externamente: M e m ó ria d e p ro g ra m a (M P ) M e m ó ria d e d a d o s (M D ) FFFFh h (e x te rn a ) FFFFh (e x te rn a ) 1000h (in te rn a ) 0FFFh /E A = 0 (e x te rn a ) 0 0 0 0 h /E A = 1 (in te rn a ) /P S E N Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 8 FFh 00h 0000h /R D /W R Organização de memória (cont.) • O 80C51 inicializa a execução do programa a partir do endereço 0 (zero), que poderá ser de MP interna ou externa, de acordo com o estado do pino /EA: – Quando /EA=0, o 80C51 começa a execução do programa pela MP externa – Nos casos em que existe MP interna, forçar /EA=0 significa que esta memória não deve ser considerada (no entanto, se existir MP interna, será normalmente por aí que se iniciará a execução do programa) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 9 Organização de memória (cont.) (in te rn a ) FFh 00h • Alguns aspectos importantes quanto à MD: – Os 128 endereços superiores permitem de facto aceder a 256 posições, de acordo com o modo de endereçamento (conforme seja directo ou indirecto, como veremos adiante) – Do total de 384 posições assim existentes, 128 correspondem aos registos de funções especiais (SFR, special function registers) (por exemplo, o DP ocupa dois destes 128 SFR) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 10 Interface com o exterior • Barramentos: +5 V V CC XTAL1 8 crista l XTAL2 P o rto 0 (o u b a rra m e n to d e d a d o s e e n d e re ço s — A D [0 :7 ]) 8 P o rto 1 RST 8 /E A -V P P A L E -/P R O G /P S E N V SS Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 11 8 P o rto 2 (o u b a rra m e n to d e e n d e re ço s — A [8 :1 5 ]) P o rto 3 (o u o s se g u in te s sin a is: R x D , T x D , /IN T 0 e /IN T 1 , T 0 e T 1 , /W R e /R D ) Interface com o exterior (cont.) +5 V V CC XTAL1 8 P 0 / A D [0 :7 ] crista l XTAL2 • Repare-se ainda que: 8 P1 8 P 2 / A [8 :1 5 ] – O barramento de endereços é partilhado com os portos de E/S paralela 0 e 2 – O porto 0 é também partilhado com o barramento de dados – AD[0..7]: A multiplexagem dados / endereços (oito bits menos significativos) é feita no domínio temporal (primeiro o endereço e depois os dados) 8 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 12 P3 / … Interface com o exterior (cont.) • Atendendo à multiplexagem temporal em AD[0..7], o 80C51 proporciona o sinal de controlo (ALE) para uma latch externa que memoriza a metade menos significativa do endereço: 80C 51 M e m ó ria P o rto 0 A D [0 :7 ] 8 8 D [0 :7 ] R e g isto 8 A [0 :7 ] ALE P o rto 2 A [8 :1 5 ] /W R P o rto 3 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 13 /R D A [8 :1 5 ] Interface com o exterior (cont.) • Barramento de controlo: – – – – – RST (reset) /EA-VPP /PSEN ALE - /PROG /INT0 e /INT1 (entradas de interrupção) – T0 e T1 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 14 – /WR – /RD – XTAL1 e XTAL2 (pinos do oscilador interno) Configuração de pinos P 1 .0 P 1 .1 P 1 .2 P 1 .3 P 1 .4 P 1 .5 P 1 .6 P 1 .7 RST P 3 .0 - R x D P 3 .1 - T x D P 3 .2 - /IN T 0 P 3 .3 - /IN T 1 P 3 .4 - T 0 P 3 .5 - T 1 P 3 .6 - /W R P 3 .7 - /R D XTAL2 XTAL1 0 V 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 15 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 +5 V P 0 .0 - A D 0 P 0 .1 - A D 1 P 0 .2 - A D 2 P 0 .3 - A D 3 P 0 .4 - A D 4 P 0 .5 - A D 5 P 0 .6 - A D 6 P 0 .7 - A D 7 /E A - V P P A L E - /P R O G /P S E N P 2 .7 - A 1 5 P 2 .6 - A 1 4 P 2 .5 - A 1 3 P 2 .4 - A 1 2 P 2 .3 - A 1 1 P 2 .2 - A 1 0 P 2 .1 - A 9 P 2 .0 - A 8 Diagramas temporais • Leitura da MP externa: 1 4 0 n s (m ín .) ALE /P S E N P o rto 0 80 ns (m á x .) A 0 :A 7 In stru çã o A 0 :A 7 3 9 7 n s (m á x .) P o rto 2 A 8 :A 1 5 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 16 A 8 :A 1 5 Diagramas temporais (cont.) • Leitura da MD externa: ALE /P S E N 4 4 0 n s (m ín .) /R D 1 5 2 n s (m á x .) P o rto 0 A 0 :A 7 (R i ou D PL) D ados A 0 :A 7 (P C L ) 6 4 8 n s (m á x .) P o rto 2 P 2 .0 :P 2 .7 o u A 8 :A 1 5 (d o D P H ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 17 A 8 :A 1 5 (P C H ) In str. Diagramas temporais (cont.) 80C 51 P o rto 0 M e m ó ria 8 D [0 :7 ] R e g isto 8 A [0 :7 ] A D [0 :7 ] 8 ALE • Escrita na MD externa: P o rto 2 A [8 :1 5 ] A [8 :1 5 ] /W R P o rto 3 /R D ALE /P S E N 4 4 0 n s (m ín .) /W R 7 0 n s (m ín .) P o rto 0 P o rto 2 A 0 :A 7 (R i ou D PL) D ados P 2 .0 :P 2 .7 o u A 8 :A 1 5 (d o D P H ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 18 A 0 :A 7 (P C L ) A 8 :A 1 5 d o P C H In str. Modelo de programação • Diagrama de blocos da arquitectura de base: 8 RAM 8 P 0 d rivers P 2 d rivers P 0 la tch P 2 la tch EPROM S ta ck p o in ter R eg. B P ro g . co u n ter A cu m . C o n tro lo IR PSW ALU D a ta p o in ter SFR P 1 la tch P 3 la tch P 1 d rivers P 3 d rivers 8 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 19 8 A RAM (MD) interna revisitada FFH (1 2 8 b y te s su p e rio re s) A ce ssív e l p o r e n d e re ça m e n to in d ire cto (R A M ) A ce ssív e l p o r e n d e re ça m e n to d ire cto (S F R s) 7FH 80H 7FH (1 2 8 b y te s in fe rio re s) 0 A ce ssív e l p o r e n d e re ça m e n to d ire cto e in d ire cto (R A M ) R e g isto s d e fu n çõ e s e sp e cia is (S F R s) B its d e se le cçã o d o b a n co n a p a la v ra d e e sta d o (P S W ) E sp a ço e n d e re çá v e l a o b it (e n d e re ço s d e b it e n tre 0 e 7 F ) Q u a tro b a n co s d e o ito re g isto s ca d a (re g isto s R 0 a R 7) V a lo r in icia l (a p ó s reset) d o a p o n ta d o r p a ra a sta ck (S P ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 20 30H 2FH 20H 11 10 01 00 18H 10H 08H 0 1FH 17H 0FH 07H Os registos de funções especiais (SFR) (co n ju n to s d e o ito b y te s) F8H F0H FFH B F7H E 8H E 0H EFH ACC E 7H D 8H D 0H DFH PSW D 7H C 8H CFH C 0H C 7H B 8H IP BFH B 0H P3 B 7H A 8H IE AFH A 0H P2 A 7H 98H SCO N 90H P1 88H TCON TM OD TL0 TL1 80H P0 SP DPL DPH SBU F 9FH 97H Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 21 TH0 TH1 8FH PCON 87H Pedidos de interrupção • A arquitectura do núcleo de base do 80C51 suporta cinco fontes de interrupção: – Duas interrupções externas (pinos /INT0 e /INT1) – Duas interrupções provenientes dos timers – Uma interrupção proveniente do porto série • Cada uma destas fontes pode ser habilitada ou inibida e a cada uma pode ser atribuída alta ou baixa prioridade (em ambos os casos, individualmente) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 22 Pedidos de interrupção (cont.) • Sobre a prioridade das interrupções: – O atendimento a uma interrupção de baixa prioridade pode ser interrompido por uma interrupção de alta prioridade, mas não vice-versa (e se forem interrupções da mesma prioridade?) – No que respeita a pedidos simultâneos, será atendido primeiro o que tiver mais alta prioridade; se forem iguais, será realizada uma sequência de pooling para determinar qual será atendido primeiro Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 23 Pedidos de interrupção (cont.) • O atendimento a um pedido de interrupção começa com o armazenamento do valor actual do PC na stack, a que se segue uma chamada à respectiva rotina de atendimento: F o n te d e in te r r u p ç ã o E n d e r e ç o d e a te n d im e n to P in o e x te rio r E x tern a l In terru p t 0 (/IN T 0 ) 0003H O v erflo w n o tim er 0 (T F 0 ) 000B H P in o e x te rio r E x tern a l In terru p t 1 (/IN T 1 ) 0013H O v erflo w n o tim er 1 (T F 1 ) 001B H C o n clu iu -se u m a re ce p çã o o u tra n sm issã o sé rie (R I, T I) 0023H Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 24 Modos de endereçamento • Será adoptada nesta apresentação a mesma classificação e organização que são seguidas na folha de características do componente (Philips) • Por cada modo de endereçamento, apresenta-se uma explicação sumária e alguns exemplos ilustrativos da sua utilização Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 25 Endereçamento directo • O operando é especificado através de um endereço de oito bits que se encontra na posição de MP seguinte à que contém o código da instrução (só pode ser usado com as posições internas de RAM e com os SFR): M n e m ó n ic a O peração F la g s C ó d ig o m ov r0 ,5 fh (r0 ) (5 fh ) nenhum a m ov a ,p 1 (a ) (9 0 h ) nenhum a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 26 # B y te #M A8 5F 2 2 E 5 90 2 1 Endereçamento indirecto • É usado um registo para especificar o endereço do operando (tanto pode ser usado com as posições de RAM internas como externas): M n e m ó n ica O p e ra çã o F la g s C ó d ig o m ov a,@ r1 (a) ((r1)) n en h u m a m ov x a,@ r1 (a) ((r1)) m ov x @ d p tr,a ((d p tr)) (a) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 27 # B y te #M E7 1 1 n en h u m a E3 1 2 n en h u m a F0 1 2 Endereçamento ao registo • O próprio código da instrução contém um campo com três bits que identifica qual dos registos R0 a R7 deve ser usado (dentro do banco seleccionado): M n e m ó n ic a O peração F la g s C ó d ig o m ov a ,r1 (a ) (r1 ) nenhum a in c r5 (r5 ) (r5 )+ 1 nenhum a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 28 # B y te #M E9 1 1 0D 1 1 Endereçamento específico dos registos • No caso das instruções que são específicas de certos registos (por exemplo, do acumulador): M n e m ó n ic a O peração F la g s C ó d ig o cp l a (a ) /(a ) nenhum a in c d p tr (d p tr) (d p tr)+ 1 nenhum a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 29 # B y te #M F4 1 1 A3 1 2 Endereçamento imediato • O valor do operando está contido na posição de MP seguinte à que contém o código da instrução: M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o cjn e r5 ,# 2 a h ,m a rca (p c) (p c)+ 3 se (r5 ) 2 a h se (r5 )< 2 a h (p c) (p c)+ re l # B y te #M B D 2A F1 3 2 74 76 2 1 (c) 1 se n ã o (c) 0 m o v a ,# 7 6 h (a ) # 7 6 h Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 30 nenhum a Endereçamento indexado • É usado para a leitura de valores armazenados na MP, servindo como apontador um registo de 16 bits (DP ou PC): M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o m ov c a ,@ a + d p tr (a ) ((a )+ (d p tr)) n en h u m a m ov c a ,@ a + p c (p c) (p c)+ 1 (a ) ((a )+ (p c)) jm p @ a + d p tr (p c) (a )+ (d p tr) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 31 # B y te #M 93 1 2 n en h u m a 83 1 2 n en h u m a 73 1 2 Ainda os modos de endereçamento • Apesar de a folha de características do 80C51 não o referir explicitamente, este componente suporta também um modo de endereçamento a que é habitualmente dada a designação de endereçamento relativo (e.g. jb P1.2,marca) • Neste modo, e em vez do endereço de destino, o operando consiste na diferença (offset) entre esse endereço e o endereço actual Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 32 Ainda os modos de endereçamento (cont.) • O offset é apresentado como um byte em complemento para dois, o que permite saltos de até 127 bytes para a frente ou 128 bytes para trás: Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 33 D e c im a l C o m p le m e n to p a r a d o is -1 2 8 1 0 0 0 0 0 0 0 (h e x a d e cim a l 8 0 ) -1 2 7 1 0 0 0 0 0 0 1 (h e x a d e cim a l 8 1 ) -1 2 6 1 0 0 0 0 0 1 0 (h e x a d e cim a l 8 2 ) ... ... -2 1 1 1 1 1 1 1 0 (h e x a d e cim a l F E ) -1 1 1 1 1 1 1 1 1 (h e x a d e cim a l F F ) 0 0 0 0 0 0 0 0 0 (h e x a d e cim a l 0 0 ) 1 0 0 0 0 0 0 0 1 (h e x a d e cim a l 0 1 ) 2 0 0 0 0 0 0 1 0 (h e x a d e cim a l 0 2 ) ... ... 126 0 1 1 1 1 1 1 0 (h e x a d e cim a l 7 E ) 127 0 1 1 1 1 1 1 1 (h e x a d e cim a l 7 F ) Ainda os modos de endereçamento (cont.) • Esta solução permite poupar um byte na especificação do endereço, sendo o valor do offset calculado pela aplicação que gera o código objecto • Exemplo: E n d e re ço s n o e x e m p lo co n sid e ra d o : 0006 01100000 (6 0 h , có d ig o d e j z m a r c a ) 0007 00000101 (0 5 h , v a lo r d o o ffset) 0008 C ó d ig o in str. 0009 000A 000B 000C m a rca : 0 0 0 D Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 34 C ó d ig o in str. e n d e re ço d a in stru çã o se g u in te (d e v e rá se r in cre m e n ta d o 5 v e ze s p a ra ch e g a r a o e n d e re ço d a m a rca ) e n d e re ço p a ra o n d e se p re te n d e sa lta r Tipos de instruções • O importante não é conhecer todas as instruções (nem isso seria possível), mas sim conhecer bem as características dos seus cinco grupos principais: – – – – – Instruções aritméticas (arithmetical) Instruções lógicas (logical) Transferência de dados (data transfer) Instruções Booleanas (Boolean) Instruções de salto (jump) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 35 Instruções aritméticas M n e m ó n ic a M o d o s e n d e re ç a m e n to Tem po de d ir. in d . re g . im . execução ( s ) (a ) = (a )+ < b y te > 1 a d d c a ,< b y te > (a ) = (a )+ < b y te > + (c) 1 su b b a ,< b y te > (a ) = (a )-< b y te > -(c) 1 in c a (a ) = (a )+ 1 in c < b y te > < b y te > = < b y te > + 1 in c d p tr (d p tr) = (d p tr)+ 1 dec a (a ) = (a )-1 dec < b y te > < b y te > = < b y te > -1 m ul ab (b ) b . a [1 5 :8 ], (a ) b . a [7 :0 ] (e sp e cífico d o A C C e B ) 4 d iv ab (a )= In t[a /b ], (b )= M o d [a /b ] (e sp e cífico d o A C C e B ) 4 da a A ju ste p a ra d e cim a l (e sp e cífico d o A C C ) 1 add a ,< b y te > O p e ra ç ã o Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 36 (e sp e cífico d o A C C ) 1 1 (e sp e cífico d o D P ) 2 (e sp e cífico d o A C C ) 1 1 Instruções aritméticas (cont.) • Exemplos: M n e m ó n ica O p e ra çã o F la g s C ó d ig o ad d c a,#3 bh (a) (a)+ (c)+ #3 bh c, ac, ov m ul b b . a[15:8], a b . a[7:0] c= 0, ov ab Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 37 # B y te #M 34 3B 2 1 A4 1 4 Instruções lógicas Mnemónica Operação Modos endereçamento dir. ind. reg. im. Tempo de execução (s) anl a,<byte> (a) = (a)<byte> anl <byte>,a <byte> = <byte>(a) 1 anl <byte>,#data <byte> = <byte>#data 2 orl a,<byte> (a) = (a)<byte> orl <byte>,a <byte> = <byte>(a) 1 orl <byte>,#data <byte> = <byte>#data 2 xrl a,<byte> (a) = (a)<byte> xrl <byte>,a <byte> = <byte>(a) 1 xrl <byte>,#data <byte> = <byte>#data 2 clr a (a) = 0 (específico do ACC) 1 cpl a (a) = /(a) (específico do ACC) 1 rl Rotaciona (a) à esquerda (específico do ACC) 1 rlc a Rotaciona (a) à esquerda através do c (específico do ACC) 1 rr a Rotaciona (a) à direita (específico do ACC) 1 rrc a Rotaciona (a) à direita através do c (específico do ACC) 1 (a[3:0]) (a[7:4]) (específico do ACC) 1 a swap a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 38 1 1 1 Instruções lógicas (cont.) • Exemplos: M n e m ó n ic a O peração F la g s C ó d ig o o rl 4 e h ,# 3 b h (4 e h ) (4 e h ) # 3 b h nenhum a clr a (a ) 0 nenhum a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 39 # B y te #M 43 4E 3B 3 2 E4 1 1 Instruções de transferência de dados • Estas instruções sub-dividem-se em três grupos principais: – Transferência de dados na MD interna – Transferência de dados na MD externa – Leitura de tabelas armazenadas na MP • Cada um destes tipos será agora considerado individualmente Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 40 Transferência de dados: MD interna M n e m ó n ic a O peração M o d o s e n d e r e ç a m e n to Tem po de d ir. in d . re g . im . e x e cu çã o ( s) 1 m ov a ,< fo n te > (a ) = < fo n te > m ov < d e st> ,a < d e stin o > = (a ) m ov < d e st> ,< fo n te > < d e stin o > = < fo n te > m ov d p tr,# d a ta 1 6 (d p tr) = # d a ta 1 6 p u sh < fo n te > in c (sp ); 1 2 2 2 2 m o v ((sp )),< fo n te > pop < d e stin o > m o v < d e stin o > ,((sp )); d e c (sp ) x ch a ,< b y te > x ch d a ,@ ri (a ) < b y te > (a [3 :0 ]) ((ri[3 :0 ])) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 41 1 1 Transferência de dados: MD interna (cont.) • Exemplos: M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o m ov 7 fh ,3 b h (7 fh ) (3 b h ) n en h u m a m ov d p tr,# 3 b 0 7 h d p tr[1 5 :8 ] # 3 b h d p tr[7 :0 ] # 0 7 h x ch a ,r7 (a ) (r7 ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 42 # B y te #M 85 3B 7F 3 2 n en h u m a 90 3B 07 3 2 n en h u m a CF 1 1 Transferência de dados: MD externa B its d e e n d e re ç o M n e m ó n ic a O p e ra ç ã o Tem po de e x e cu çã o ( s) 8 b its m o v x a ,@ ri (i= 0 o u 1 ) C a rre g a (a ) co m ((ri)) 2 8 b its m o v x @ ri,a (i= 0 o u 1 ) C a rre g a ((ri)) co m (a ) 2 1 6 b its m o v x a ,@ d p tr C a rre g a (a ) co m ((d p tr)) 2 1 6 b its m o v x @ d p tr,a C a rre g a ((d p tr)) co m (a ) 2 M n e m ó n ic a O peração F la g s C ó d ig o m o v x a ,@ r1 (a ) ((r1 )) nenhum a m o v x @ d p tr,a ((d p tr)) (a ) nenhum a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 43 # B y te #M E3 1 2 F0 1 2 Transferência de dados: Leitura de tabelas na MP M n e m ó n ic a O p e ra ç ã o Tem po de e x e cu çã o ( s) m ovc a ,@ a + d p tr C a rre g a (a ) co m o co n te ú d o d a M P e m ((a )+ (d p tr)) 2 m ovc a ,@ a + p c C a rre g a (a ) co m o co n te ú d o d a M P e m ((a )+ (p c)) 2 M n e m ó n ica O p e ra çã o F la g s C ó d ig o m ov c a,@ a + d p tr (a) ((a)+ (d p tr)) n en h u m a m ov c a,@ a + p c (p c) (p c)+ 1; (a) ((a)+ (p c)) n en h u m a Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 44 # B y te #M 93 1 2 83 1 2 Instruções Booleanas M n e m ó n ic a O peração anl c,< b it> (c) = (c) < b it> 2 anl c,/< b it> (c) = (c) /< b it> 2 o rl c,< b it> (c) = (c) < b it> 2 o rl c,/< b it> (c) = (c) /< b it> 2 m ov c,< b it> (c) = < b it> 1 m ov < b it> ,c < b it> = (c) 2 clr c (c) = 0 1 clr < b it> < b it> = 0 1 se tb c (c) = 1 1 se tb < b it> < b it> = 1 1 cp l c (c) = /(c) 1 cp l < b it> < b it> = /< b it> 1 jc m a rca S a lta p a r a m a rc a se (c)= 1 2 jn c m a rca S a lta p a r a m a rc a se (c)= 0 2 jb < b it> ,m a rca S a lta p a r a m a rc a se < b it> = 1 2 jn b < b it> ,m a rca S a lta p a r a m a rc a se < b it> = 0 2 jb c < b it> ,m a rca S e < b it> = 1 e n tã o [sa lta p a ra m a rca ; < b it> 0 ] 2 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 45 Tem po de e x e c u ç ã o ( s ) Instruções Booleanas (cont.) • Exemplos: M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o orl c,/a cc.4 (c) (c) /a cc.4 c clr p 2 .7 (p 2 .7 ) 0 jb p 1 .2 ,m a rc a (p c) (p c)+ 3 ; se (p 1 .2 )= 1 en tã o (p c) (p c)+ rel Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 46 # B y te #M A0 E4 2 2 n en h u m a C2 A7 2 1 n en h u m a 20 92 D 3 3 2 Instruções de salto • Estas instruções sub-dividem-se em dois grupos principais: – Salto não condicional – Salto condicional • Cada um destes tipos será agora considerado individualmente Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 47 Instruções de salto não condicional M n e m ó n ic a O p e ra ç ã o jm p m a rca S a lta p a r a m a rc a (ljm p , sjm p ) 2 jm p @ a + d p tr S a lta p a r a ((a )+ (d p tr)) 2 ca ll m a rca C h a m a a su b ro tin a e m m a rca (lca ll, a c a ll) 2 re t R e to rn a d a su b ro tin a 2 re ti R e to rn a d a in te rru p çã o 2 nop N e n h u m a o p e ra çã o (p a ra a lé m d e (p c) (p c)+ 1 ) 1 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 48 Tem po de e x e cu çã o ( s) Instruções de salto não condicional (cont.) • Exemplos: M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o # B y te #M ljm p m a rca (p c) m a rca nenhum a 02 80 00 3 2 lca ll m a rca (p c) (p c)+ 3 ; (sp ) (sp )+ 1 ; nenhum a 12 80 00 3 2 nenhum a 32 1 2 ((sp )) (p c[7 :0 ]); (sp ) (sp )+ 1 ; ((sp )) (p c[1 5 :8 ]) (p c) m a rca re ti (p c[1 5 :8 ]) ((sp )); (sp ) (sp )-1 ; (p c[7 :0 ]) ((sp )); (sp ) (sp )-1 ; Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 49 Instruções de salto condicional M n e m ó n ic a jz O peração M o d o s e n d e r e ç a m e n to Tem po de d ir. e x e c . ( s ) in d . re g . im . m a rca S a lta p a r a m a rc a se (a )= 0 (e sp e cífico d o A C C ) 1 jn z m a rca S a lta p a r a m a rc a se (a ) 0 (e sp e cífico d o A C C ) 1 d jn z < b y te > ,m a rca D e cre m e n ta < b y te > e sa lta p a r a m a rc a se < b y te > 0 cjn e a ,< b y te > ,m a rc a S a lta p a r a m a rc a se (a ) < b y te > cjn e < b y te > ,# d a ta ,m a rc a S a lta p a r a m a rc a se < b y te > # d a ta Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 50 2 2 2 Instruções de salto condicional (cont.) • Exemplos: M n e m ó n ic a O p e ra ç ã o F la g s C ó d ig o jz (p c) (p c)+ 2 ; nenhum a nenhum a m a rca # B y te #M 60 C A 2 2 D 5 5F C 7 3 2 B 7 22 C 4 3 2 se (a )= 0 e n tã o (p c) (p c)+ re l d jn z 5 fh ,m a rca (p c) (p c)+ 3 ; (5 fh ) (5 fh )-1 ; se (5 fh ) 0 e n tã o (p c) (p c)+ re l cjn e @ r1 ,# 2 2 h ,m a rc a (p c) (p c)+ 3 ; se se ((r1 )) # 2 2 h e n tã o ((r1 ))< # 2 2 h (c) 1 (p c) (p c)+ re l se ((r1 ))< # 2 2 h se n ã o e n tã o (c) 1 ; se n ã o (c) 0 (c) 0 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 51 Exemplo de aplicação • Para consolidar os conhecimentos adquiridos, consideraremos agora o caso de pretendermos simular o funcionamento de um registo de deslocamento, como o que se apresenta a seguir: OU T[0] OU T[1] OU T[2] OU T[3] IN D Q D CL K Q D CL K Q D CL K Q CL K CL K OU T[4] D CL K Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 52 Q OU T[5] D CL K Q OU T[6] D CL K Q OU T[7] D CL K Q Exemplo de aplicação (cont.) • Os pressupostos são os seguintes: – O sinal de relógio é activo à transição ascendente – No estado inicial, todas as saídas deverão estar a 0 – A relação entre as entradas (IN e CLK) e as saídas (OUT[0..7]) deverá ser tão próxima quanto possível da que teria lugar através da implementação em hardware IN CLK Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 53 O U T [0 ] O U T [1 ] O U T [2 ] O U T [3 ] O U T [4 ] O U T [5 ] O U T [6 ] O U T [7 ] Sequência de passos • A sequência de passos até à solução é a seguinte: – Efectuar a atribuição entre os sinais exteriores e os pinos de E/S paralela do microcontrolador – Reflectir sobre a sequência de operações que implementem a funcionalidade pretendida – Codificar esta sequência em assembly – Obter o código objecto, simular o seu funcionamento (verificação de projecto) e implementar na prática Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 54 Atribuição de recursos • A simplicidade do exemplo considerado dispensa-nos o uso de recursos externos a um 87C51, pelo que poderemos especificar a seguinte atribuição: – Linhas de saída OUT[0..7] do registo de deslocamento estarão ligadas ao porto 1 (respectivamente P1[0..7]) – Linhas de entrada ligadas ao porto 0 (CLK em P0.0 e IN em P0.1) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 55 Sequência de operações a realizar • A sequência de operações a realizar pode especificar-se como se segue: – Aguardar pela subida no sinal de relógio (CLK) – Após a subida em CLK, deslocar o conteúdo de OUT[0..7] uma posição, no sentido de OUT[0] para OUT[7] (para a esquerda, considerando que OUT[7] está à esquerda) – Se a entrada IN estiver em 1, colocar OUT[0] em 1; caso contrário, colocar OUT[0] em 0 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 56 Codificação em assembly 0003 0000 0004 0000 E4 0005 0001 F5 90 0006 0003 30 80 FD 0007 inicio clr a mov p1,a ; coloca OUT[0..7] em 0 jnb p0.0,marca1 ; espera que CLK suba 0006 A2 81 mov c,p0.1 ; coloca IN no Carry 0008 0008 33 rlc a ; realiza o deslocamento 0009 0009 F5 90 mov p1,a ; actualiza as saidas 0010 000B 20 80 FD jb p0.0,marca2 ; espera que o CLK desca 0011 000E 80 F3 sjmp marca1 0012 0010 0013 0010 marca1 marca2 .end tasm: Number of errors = 0 (analisar com pormenor; para que serve a linha 10?) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 57 Verificação de projecto • É necessário esperar pela descida do relógio (linha 10), para evitar que uma única subida em CLK provoque múltiplas operações de deslocamento (dependendo da relação entre CLK e o relógio do 87C51): CLK O U T [0 ] In te rv a lo co rre sp o n d e n te à e x e cu çã o d a s lin h a s 0 0 0 6 a 0 0 0 9 , a p ó s o q u e te m lu g a r a a ctu a liza çã o d a s sa íd a s P 1 [0 ..7 ] Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 58 Verificação de projecto (cont.) CLK O U T [0 ] • Considerando CLK a 1 KHz e o relógio do 87C51 a 12 MHz, quantas operações de deslocamento ocorreriam se não tivéssemos aquele cuidado? inicio marca1 marca2 clr a mov p1,a jnb p0.0,marca1 mov c,p0.1 rlc a mov p1,a jb p0.0,marca2 sjmp marca1 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 59 1 1 2 1 1 1 2 2 s s s s s s s s (1 (1 (2 (1 (1 (1 (2 (2 ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclo m á q u in a @ 1 2 M H z) ciclos m á q u in a @ 1 2 M H z) Verificação de projecto (cont.) • É ainda também importante atentarmos na diferença entre o tempo de propagação de um circuito com FF-D e a simulação via 87C51: • Poderão daqui advir problemas (funcionamento incorrecto)? t 1 – M o m e n to e m q u e é e fe ctu a d a a le itu ra d e C L K (j n b p 0 . 0 ) t 2 – M o m e n to e m q u e é e fe ctu a d a a le itu ra d e IN (m o v c , p 0 . 1 ) IN (P 0 .1 ) C L K (P 0 .0 ) O U T [0 ] (P 1 .0 ) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 60 2 s Expansão da funcionalidade • Suportar uma entrada Habilita (em P0.2): inicio marca1 marca2 .org 0 #include def8752.asm clr a mov p1,a ; coloca OUT[0..7] em 0 jnb p0.0,marca1 ; espera que CLK suba mov c,p0.1 ; coloca IN no Carry jnb p0.2,marca2 ; Habilita activo? rlc a ; realiza o deslocamento mov p1,a ; actualiza as saidas jb p0.0,marca2 ; espera que o CLK desca sjmp marca1 .end Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 61 “.org...”? “#include...”? Expansão da funcionalidade (cont.) • Suportar entradas de Habilita (P0.2) e Sentido (P0.3): .org #include inicio 0 def8752.asm clr a mov p1,a ; coloca OUT[0..7] em 0 jnb p0.0,marca1 ; espera que CLK suba mov c,p0.1 ; coloca IN no Carry jnb p0.2,marca2 ; Habilita activo? jnb p0.3,dir ; Sentido para a direita? rlc a ; deslocamento para a esquerda sjmp actual dir rrc a ; deslocamento para a direita actual mov p1,a ; actualiza as saidas marca2 jb p0.0,marca2 ; espera que o CLK desca sjmp marca1 marca1 esq .end Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 62 Avaliação do resultado • Comparando as duas alternativas (FF-D e 87C51) para a implementação do exemplo considerado, que conclusões podemos tirar relativamente a: – Tempo de desenvolvimento? – Flexibilidade da implementação? – Rapidez de funcionamento? • Como é que a resposta às questões anteriores é afectada pela complexidade do caso em estudo? Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 63 As interrupções revisitadas / IN T 0 0 1 IT 0 IE 0 TF 0 / IN T 1 0 1 IT 1 TF 1 TI RI Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 64 IE 1 F o n tes de in te rru pç ã o IE 0 e IE 1 sã o f l a g s de i nt er rup ç ã o q ue p er te nc e m a o r eg is to T C O N ( SF R c o m e nd er eç o 8 8 H ) Gestão das interrupções • O código executado pelo microcontrolador pode activar / desactivar (set / cleared) todas as flags de interrupção • Cada fonte de interrupção pode ser habilitada / inibida individualmente (registo IE nos SFR) • A cada fonte de interrupção pode ser atribuída uma prioridade alta ou baixa (registo IP nos SFR) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 65 /IN T0 Interrupções externas 0 1 IT 0 IE 0 TF 0 /IN T1 0 1 IT 1 IE 1 TF 1 TI RI • /INT0 e /INT1 podem ser activos ao nível ou à transição, de acordo com o conteúdo do registo TCON (SFR com endereço 88H) • Se as interrupções forem activas à transição, as flags que as geram são limpas pelo hardware quando a respectiva rotina é executada (caso contrário, terá que ser o código do utilizador a fazê-lo) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 66 /IN T0 Interrupções dos T/C 0 1 IT 0 IE 0 TF 0 /IN T1 0 1 IT 1 IE 1 TF 1 TI RI • As interrupções pedidas pelos temporizadores / contadores são geradas por TF0 e TF1, activadas por “rollover” nos registos dos respectivos T/C (excepto T/C 0 em modo 3, como veremos adiante) • Quando é gerada uma interrupção proveniente dos T/C, a flag que a gerou é limpa pelo hardware quando a respectiva rotina é executada Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 67 Interrupções da comunicação série /IN T0 0 1 IT 0 IE 0 TF 0 /IN T1 0 1 IT 1 IE 1 TF 1 TI RI • Os pedidos de interrupção do periférico de comunicação série resultam do OR entre as flags RI (recepção) e TI (transmissão) • Nenhuma destas flags é limpa pelo hardware quando a respectiva rotina é executada (o código da rotina tem primeiro que identificar a causa da interrupção e depois limpar a flag) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 68 O registo IE (end. SFR A8H) – endereçável ao bit • Este registo permite-nos habilitar / inibir cada fonte de interrupção: IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA - - ES ET1 EX1 ET0 EX0 – EA inibe todas as interrupções se estiver em 0; se estiver em 1, estarão habilitadas as que tiverem o seu IE.x em 1 – ES: periférico série; ET1 e ET0: dos T/C; EX1 e EX0: externas (pinos /INT1 e /INT0) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 69 O registo IP (end. SFR B8H) – endereçável ao bit • Este registo permite-nos atribuir a cada fonte de interrupção uma prioridade alta ou baixa: IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 - - - PS PT1 PX1 PT0 PX0 – Uma fonte de interrupção terá alta prioridade quando o seu bit IP.x estiver em 1 baixa quando estiver em 0 – PS: periférico série; PT1 e PT0: dos T/C; PX1 e PX0: externas (pinos /INT1 e /INT0) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 70 O registo TCON (end. SFR 88H) – endereçável ao bit • Para além de controlar os T/C, este registo também se relaciona com as interrupções externas: TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 – IEx: O hardware activa (set) esta flag à transição descendente em /INTx e limpa-a (cleared) quando a respectiva rotina de atendimento é executada – ITx: Se estiver em 1 a interrupção em /INTx é activa à transição descendente; caso contrário, é activa ao nível 0. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 71 Atendimento das interrupções • Ao atender uma interrupção, o hardware do 80C51 determina a execução de uma instrução LCALL para a respectiva rotina de atendimento: – Endereços de atendimento: IE0 - 0003H; TF0 - 000BH; IE1 - 0013H; TF1 - 001BH; RI ou TI - 0023H – A flag associada à interrupção é limpa pelo hardware nuns casos, mas noutros terá que o ser pelo código – LCALL força o PC na stack, mas quaisquer outros registos (e.g. ACC, PSW, ...) terão que ser guardados pelo código Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 72 Retorno das interrupções • A execução da rotina de atendimento continua até que seja encontrada uma instrução RETI (return from interrupt): – RETI informa o processador que terminou o atendimento à interrupção e extrai da stack o endereço de retorno – RET (retorno de subrotina) faria algo semelhante, mas manter-se-ia a indicação de estar em curso o atendimento a uma interrupção (qual o problema?) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 73 Exemplo (KEIL): Interrupções via /INT0 ; código para ilustrar o atendimento de interrupções ; externas em /INT0, activas à transição salta: cseg at 0 jmp inicio ; uma vez que 0003H tem que conter o código de atendimento ; a /INT0, em 0000 cabe apenas uma instrução de salto cseg at 0003h intext0: inc r1 reti ; o atendimento a /INT0 apenas incrementa o R1, pelo que o ; seu conteúdo nos diz quantas interrupções foram atendidas cseg at 0010h inicio: mov r1,#0 ; inicializa R1 com 0 mov tcon,#01 mov ie,#81h ; programa o funcionamento das interrupções via /INT0 ciclo: mov a,p0 add a,p1 mov p2,a jmp ciclo ; está sempre a colocar em P2 o valor de P1+P0 endcom Sistemas Digitais e Microcontroladores Introdução ao Projecto A família 80C51 - 74 Int. via /INT0: Visualização no dScope Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 75 Os temporizadores / contadores (T/C) do 80C51 • Existem dois T/C com 16 bits, podendo cada um funcionar como temporizador (T) ou contador (C): – Como temporizador o registo é incrementado por cada ciclo máquina (12 ciclos de relógio) – Como contador o registo é incrementado à descida do sinal no pino (T0 ou T1) – sendo T0 / T1 amostrados uma vez em cada ciclo máquina, a detecção de descida leva 24 ciclos de relógio (primeira amostra 1, segunda 0) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 76 Controlo de funcionamento dos T/C • O controlo de cada T/C é feito através dos registos TMOD e TCON (dois dos SFR): – O estado (activo / parado) é controlado através do registo TCON – A definição da função pretendida (temporizador ou contador) é feita pelo bit C-/T em TMOD – Para cada T/C (seja como temporizador ou como contador) existem quatro modos de funcionamento, definidos pelos pares de bits (M1,M0) em TMOD Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 77 T/C: Modos 0 e 1 (iguais nos dois T/C) TCON: TMOD: – Este modo é compatível com o temporizador do 8048 (8 bits com pré-divisão por 32) – No modo temporizador, e com Gate em 1, podemos medir a largura do impulso em /INTx – O modo 1 é igual ao 0, mas agora em 16 bits Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 78 T/C: Modo 2 (igual nos dois T/C) TCON: TMOD: – A contagem é em 8 bits (TL1) – Quando se excede o limite da contagem (“overflow”) é pedida uma interrupção e TL1 é automaticamente recarregado com o conteúdo de TH1 (que se mantém) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 79 T/C: Modo 3 TCON: TMOD: (diferente para cada T/C) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 80 T/C: Modo 3 (cont.) • Comentários ao modo 3: – Neste modo, o T/C 1 está parado (como quando TR1=0) – TL0 e TH0 funcionam de modo independente (em 8 bits) – TH0 funciona como temporizador, controlado por TR1 e pedindo interrupções via TF1 (repare-se que TR1 e TF1 pertenciam ao T/C 1, nos outros modos de funcionamento) – Nota: O T/C 1 pode ainda ser usado (retirando-o do modo 3), mas sem poder controlar TF1 Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 81 O registo TCON (end. SFR 88H) – endereçável ao bit • Os bits TFx e TRx estão associados aos T/C: TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 – TFx: Pede as interrupções do T/C x (set por hardware quando ocorre overflow; limpa por hardware quando se salta para a rotina de atendimento) – TRx: controlo de estado (activo / parado) do T/C x (controlado por software para activar / parar o T/C x) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 82 O registo TMOD (end. SFR 89H) – endereçável ao bit • Existem quatro bits por cada T/C: TM.7 TM.6 TM.5 TM.4 TM.3 TM.2 TM.1 TM.0 Gate C-/T M1 M0 Gate C-/T M1 M0 – Gate: Em conjunto com TRx, controla o estado (activo / parado) do C/T (ver esquemas que descrevem os modos de funcionamento) – C-/T: Define a função (0: temporizador; 1: contador) – M1,M0: Definem o modo de funcionamento (0 a 3) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 83 Exemplo (KEIL): Funcionamento do T/C 1 ; exemplo para ilustrar o funcionamento dos T/C com interrupções ; T/C 1 funciona como contador de 8 bits com auto-reload ; deve complementar-se P1.0 quando forem contados três impulsos exteriores inicio: tc1int: cseg at 0 mov mov mov mov setb jmp tmod,#60H ie,#88H tl1,#0fdh th1,#0fdh tr1 $ cseg at cpl reti p1.0 ; ; ; ; ; ; contador, modo 2 (quando TR1=1 e T1 desce) permite interrupções do T/C 1 para contar apenas três vezes para recarregar o TL1 permite início da contagem apenas para ficar aqui parado 001bh ; complementa o bit P1.0 end Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 84 T/C 1: Visualização no dScope Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 85 A porta de comunicação série no 80C51 • Pode transmitir e receber em simultâneo (é do tipo “full duplex”) • Os registos de recepção e transmissão são ambos acedidos através do SBUF (SFR c/ end. 99H): – A escrita no SBUF carrega o registo de transmissão – A leitura do SBUF acede ao registo de recepção (fisicamente diferente) • A porta série tem quatro modos de funcionamento Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 86 Porta série: Modos de funcionamento 0 e 1 • Modo 0 - Transmissão em 8 bits (LSB primeiro), com taxa de transmissão (baud rate) de 1/12 da frequência de relógio. Os dados entram e saem via RxD, estando o relógio de transmissão em TxD. • Modo 1 - Transmissão em 10 bits: Start bit (0), bits de dados (LSB primeiro) e um Stop bit (1), com baud rate variável. Envio por TxD e recepção por RxD. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 87 Porta série: Modos de funcionamento 2 e 3 • Modo 2 - Transmissão em 11 bits: Start bit (0), bits de dados (LSB primeiro), um nono bit programável (e.g. o bit de paridade no registo PSW) e um Stop bit (1). O baud rate pode ser 1/32 ou 1/64 da frequência do relógio. Envio por TxD e recepção por RxD. • Modo 3 - Como no modo 2, mas agora com baud rate variável. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 88 Taxas de transmissão (baud rate) • No modo 0, o baud rate é fixo e igual a 1/12 da frequência de relógio • No modo 2, o baud rate depende do bit SMOD no registo PCON (SFR c/ end. 87H), sendo dado por (2SMOD / 64) x (frequência) (1/64 ou 1/32, portanto) • Nos modos 1 e 3, o baud rate é variável e determinado pelo T/C 1 (e também depende do bit SMOD) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 89 Uso do T/C 1 para determinar o baud rate • Nos modos 1 e 3 o baud rate é determinado pela seguinte expressão: (2SMOD / 32) x (ritmo de overflow do T/C 1) – As interrupções através deste T/C devem estar inibidas – O T/C 1 pode funcionar como temporizador ou como contador, em qualquer modo de funcionamento, excepto o modo 3 (recorde-se que neste modo o T/C 1 está parado) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 90 Geração do baud rate via T/C 1: Forma habitual • No caso mais comum, o T/C é usado no seu modo 2 (modo 2 do T/C 1) (como temporizador com auto-reload) • O baud rate da porta série, nos seus modos 1 e 3, é (modos 1 e 3 da porta série) então dado por (2SMOD / 32) x (frequência / (12 x (256-(TH1)))) – (TH1): Conteúdo do T/C 1, oito bits mais significativos – Para uma frequência de 11,0592 MHz, quais os valores de SMOD e (TH1), para resultar um baud rate de 19.200 bps? Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 91 O registo SCON (end. SFR 98H) – endereçável ao bit • Bits SM0, SM1 e SM2: SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI – SM0 e SM1: Definem o modo de funcionamento (0 a 3). – SM2: Habilita a capacidade de comunicação em sistemas do tipo multiprocessador, nos modos 2 e 3. Neste caso, o nono bit em 1 dá origem a um pedido de interrupção, para indicar que chegou um endereço de nó. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 92 SCON (end. SFR 98H) – endereçável ao bit (2) • Bits REN, TB8 e RB8: SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI – REN: Controlado por software para permitir (1) ou inibir (0) a recepção. – TB8: Nono bit a transmitir nos modos 2 e 3 (controlado por software). – RB8: Nos modos 2 e 3, é o nono bit recebido. No modo 1, se SM2=0, é o stop bit recebido. No modo 0, não é usado. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 93 SCON (end. SFR 98H) – endereçável ao bit (3) • Bits TI e RI: SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SM0 SM1 SM2 REN TB8 RB8 TI RI – TI: Flag de interrupção por envio. Activada por hardware no final do oitavo bit em modo 0, ou no início do Stop bit nos restantes modos. Deve ser limpa por software. – RI: Flag de interrupção por recepção. Activada por hardware no final do oitavo bit em modo 0, ou a meio do Stop bit nos restantes modos. Deve ser limpa por software. Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 94 Exemplo (KEIL): Escreve em P1 o byte recebido ; segmento de código para ilustrar a recepção série no 80C51 ; cada byte recebido é escrito na porta 1 cseg at 0 salta: jmp inicio cseg at 0023h int_psr: clr ri ; limpa a flag que indica interrupção por recepção mov p1,sbuf ; copia para a porta 1 o byte que acabou de chegar reti cseg at 0030h inicio: mov scon,#70h ; porta série em modo 1 (SM0,SM1)=(0,1), recepção habilitada (REN=1) ; activa RI quando lê o Stop bit (SM2=1) mov tmod,#20h ; T/C 1 como temporizador (C/T=0) em modo 2 (M1,M0)=(1,0) mov tl1,#0fdh mov th1,#0fdh ; com SMOD em 0 por omissão, resulta um baud rate de 9.600 bps mov ie,#90h ; habilita apenas as interrupções da porta série setb tr1 ; activa o funcionamento do T/C 1 jmp $ Introdução ao Projecto com Sistemas Digitais e Microcontroladores end A família 80C51 - 95 Porta série: Visualização no dScope Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 96 Outro exemplo: Recepção de uma tabela de valores • Requisitos (assuma-se a frequência de 11,0592 MHz): – Baud rate de 19.200 bps (gerados pelo T/C 1), palavras de 10 bits (start bit, dados, stop bit) – Armazena os bytes recebidos em MD interna, a começar em 30H – Termina quando receber a sequência ASCII “FIM”: 46H49H-4DH – Quando terminar, reinicializa apontador para a tabela e salta para 2000H Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 97 Conclusão • Objectivo principal do capítulo: Apresentar a arquitectura em que se baseia a família de microcontroladores 80C51 • Pistas para a continuação do estudo: – Evolução da arquitectura 80C51 (e.g. arquitectura XA) – Outros microcontroladores (e.g. Motorola 68HCXX e Microchip PIC) Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 98