Sie sind auf Seite 1von 21

PROGRAMAO ASSEMBLER A linguagem de programao Assembler do PIC 16F84 composto por 35 instru es! As instru es so e"pressas na #orma de mnem$nicos!

! % mnem$nico composto por &erbos e argumentos! %s &erbos de#inem as a es 'ue so completadas e especi#icadas pelos argumentos! (erbos ou termos )ingl+s* )mnem$nicos * A,, A-, 2 C CA77 C75 C%6 d ,0C F <%=% I-C I%5 > 7 6%( -%P 50=FI0 50=7@ 50=3557 55 B B700P B32 B@AP = add and bit clear call clear complement destination decrement file go to increment inclusive or constant literal move no operation return from interrupt return with literal in w return rotate right rotate left set ou skip sleep subtract swap test

Ao do &erbo ou traduo do termo Adicionar Fa.er um /0/ l1gico 3m bit de um #ile)#ile4posio de 5A6* 7impar8 colocar em .ero C9amar 7impar Complementar ) e"emplo: o complemento de 1 .ero* 5e#ere em 'ual #ile de destino &ais ser arma.enado o resultado da operao: se d4; aema.enado em w(registro de trabalho), se d41 arma.enado no f (file) ,ecrementar um 5egistro8 uma posio da 5A6 (ai para!!! Incrementar um Fa.er um /ou inclusi&o/ l1gico ? uma contante8 pode ser um literal ou um label ? uma constante 6o&er -o #aa nen9uma operao 5etornar de uma interrupo 5etornar com um &alor literal em A 5etornar de uma subrotina 5odar para direita 5odar para es'uerda Bet4 colocar em 1 C B>ip4 ao de pular 0ntrar em modo standbD8 ou modo de espera8 )economia de energia* Bubtrair trocar =estar

@ @,= F%5 G

work watch dog timer exclusive or zero

? o #ile de trabal9o8)registro de trabal9o* ? o registro de 5A6 onde estE o tempori.ador do peri#rico /Aatc9 dog/ #a.er um /ou e"clusi&o/ l1gico Gero Conjunto de instrues do PIC16F8

As instru es so di&ididas em tr+s grupos: H instru es orientadas a bDte )registradores*I H instru es orientadas a bitI H instru es com constantes )literais* e de controle!
ArguJ Instruo ,escrio mentos %pera es de bDtes com registros A,,@F #8d A-,@F #8d C75F C75@ C%6F ,0CF # ! #8d #8d Adicionar w e f Fa. um A-, l1gico entre w e f Fa. todos os bits de f 4 .ero Fa. todos os bits de w 4 .ero 1 1 1 1 ; ; ; 1 1 1 d # # # # # # # C8,C8G ; ; ; 1 ; 1 d # # # # # # # G ; ; ; ; ; 1 1 # # # # # # # G ; ; ; ; ; 1 d " " " " " " " G ; ; 1 ; ; 1 d # # # # # # # G ; ; ; ; 1 1 d # # # # # # # G 2its a#etados Ciclos 2it no 13 1K 11 1; L 8 M 6 5 4 3 K 1 ; B=A=3B %PC%,0 14J2it

Complementa f )in&erte os bits de ;N1 1 ou 1N;* ,ecrementa uma unidade em f 1

,0CFBG #8d I-CF #8d

,ecrementa uma unidade em f e pula 1 ou ; ; 1 ; 1 1 d # # # # # # # J a pr1"ima instruo se f 4 .ero K Incrementa uma unidade em f 1 ; ; 1 ; 1 ; d # # # # # # # G Incrementa uma unidade em f e pula a 1 ou ; ; 1 1 1 1 d # # # # # # # J pr1"ima instruo se f 4 .ero K Fa. um %3 l1gico entre w e f 6o&e f 6o&e w para f -en9uma operao 1 1 1 1 ; ; ; 1 ; ; d # # # # # # # G ; ; 1 ; ; ; d # # # # # # # G ; ; ; ; ; ; 1 # # # # # # # J ; ; ; ; ; ; ; " " ; ; ; ; ; J ; ; 1 1 ; 1 d # # # # # # # C ; ; 1 1 ; ; d # # # # # # # C ; ; ; ; 1 ; d # # # # # # # C8 ,C8 G ; ; 1 1 1 ; d # # # # # # # J ; ; ; 1 1 ; d # # # # # # # G ; 1 ; ; b b b # # # # # # # J ; 1 ; 1 b b b # # # # # # # J

I-CFBG #8d I%5@F #8d 6%(F -%P 57F 55F #8d ! #8d #8d 6%(@F #

5oda o bDte O es'uerda passando pelo 1 CarrD 5oda o bDte O direita passando pelo CarrD Bubtrai w de f =roca nibles em f Fa. um F%5 l1gico entre w e f Gera o bit b em # Beta8)1* o bit b em # =esta o bit b em # e pula a pr1"ima instruo se o bit #or .ero =esta o bit b em # e pula a pr1"ima instruo se o bit #or 1 1 1 1 1 1 1

B32@F #8d B@AP #8d F%5@F #8d 2CF 2BF 2=FBC 2=FBB #8b #8b #8b #8b

%pera es de bits com registro

1 ou ; 1 1 ; b b b # # # # # # # J K 1 ou ; 1 1 1 b b b # # # # # # # J K

%pera es com constantes e de controle

A,,7@ > A-,7@ > CA77 > C75@, ! = <%=% I%57@ > >

Adiciona w e k A-, l1gico entre w e k C9ama a sub rotina k Gera o timer do Aatc9 dog (ai para o label k Fa. um %5 l1gico entre w e k 6o&e l para w ) A 4 >* 5etorna da interrupo 5etorna com w 4 k 5etorna de subrotina 0ntra em modo standbD Bubtrai w de l Fa. um F%5 l1gico

1 1 K 1 K 1 1 K K K 1 1 1

1 1 1 1 1 " > > > > > > > > C8 ,C8 G 1 1 1 ; ; 1 > > > > > > > > G 1 ; ; > > > > > > > > > > > J

; ; ; ; ; ; ; 1 1 ; ; 1 ; ; =%8 P, 1 ; 1 > > > > > > > > > > > J

1 1 1 ; ; ; > > > > > > > > G 1 1 ; ; " " > > > > > > > > J ; ; ; ; ; ; ; ; ; ; 1 ; ; 1 J 1 1 ; 1 " " > > > > > > > > J ; ; ; ; ; ; ; ; ; ; 1 ; ; ; J ; ; ; ; ; ; ; 1 1 ; ; ; 1 1 =%8 P, 1 1 1 1 ; " > > > > > > > > C8 ,C8 G 1 1 1 ; 1 ; > > > > > > > > G

6%(7@ > 50=FI0 ! 50=7@ > 50=35- ! B700P ! B327@ > F%57@ >

A tabela acima mostra o conPunto de instru es do PIC 16F848 com os mnem$nicos das instru es8 operandos8 descrio de cada instruo8 ciclos gastos8 c1digo binErio de 14 bits das instru es e bits de #lags en&ol&idos! Para entender mel9or a tabela8 abai"o estE o esclarecimento de algumas letras 'ue comp e o argumento: # J File8 registro 'ue estE sendo acessado8 uma posio da mem1ria 5A6 de dados8 como tem apenas M bits esse nQmero &ai de .ero a 1KM8 mas com o recurso do 6Plab8 usando a direti&a 0R38 equate 8 podemos escre&er os nomes dod registros 'ue a 6icroc9ip sugere8 como por e"emplo: B=A=3B8 %P=I%-8 =5IB28 com o e'uate o compilador substitui o nome pelo nQmero na 9ora de gerar o c1digo 9e"adecimal! d J ,estino8 indica para onde de&e ir o resultado da operao! ,e&ido ao conPunto redu.ido de instruo e uma instruo PE conter o opcode8 operando e o destino8 s1 e"iste duas possibilidades de destino do resultado: d 4 ;8 o resultado serE arma.enado no registro @ d 4 18 o resultado serE arma.enado no registro # b J Indica 'ual bit do registro esta sendo acessado8 podendo usar o mnem$nico do bit8 )da mesma #orma do # com o e'uatre*8 ou atra&s do numero do bit ); J M*8 note 'ue 9E apenas tr+s bits disponS&eis nas instru es orientadas a bits! T J Pode ser uma constante numrica8 8 ou uma indicao de posio de mem1ria de programa: Constante numrica de 8 bits ); J K55*8 &alor literal para as opera es matemEticas e l1gicasI Indicao de posio8 apenas nas instru es CA77 e <%=%8 possui 11 bits ); J K;4M*8 pode ser um nQmero imediato8 ou um label8 nesse caso toda &e. 'ue o compilador encontra um label no programa ele troca por um nQmero na se'U+ncia crescente! Por e"emplo: -uma instruo <%=% repete8 se o repete o primeiro label o compilador troca por <%=% ;;; " tanto #a.8 pode ser .ero ou 18 o compilador da 6icroc9ip gera o .ero8 e recomenda isso!
Constantes para o Compilador

Ao representar nQmeros decimais8 9e"adecimais e binErios na programao8 de&emos escre&er da seguinte #orma: Constante decimal J ,V&alorV ou dV&alorV! e"emplo: 55 decimal 4 dV55V ou ainda ,V55V!

Constante We"adecimal J ;F&alor ou &alorW! 0"emplo: 32 9e"a 4 ;"32 ou 329 ou 32W8 Importante: -o caso da constante comear com letra de&emos colocar colocar um .ero antes! 0"emplo: 039 #ica ;039*! Constante binEria J 2V&alorV ou bV&alorV! 0"emplo: 1;1;1;1; binErio 4 bV1;1;1;1;V !ESCRIO !AS I"S#R$%ES Como #oi &isto na tabela8 as instru es esto di&ididas em 3 partes: Instru es orientadas a bDte8 instru es orientadas a bits e instru es de opera es com controles e constantes!
Instrues Orient&d&s & B'tes

Cada tipo de instru es descritas tem um #ormato di#erente8 'uanto O #ormao da pala&ra )instruo*! ? esse c1digo binErio8 'ue &ai /di.er/ O CP3 do PIC 'ual a operao e o argumento para e"ecutar! -otamos ento8 'ue num Qnico %PC%,08 c1digo de operao8 temos todas as in#orma es necessErias para o PIC e"ecutar uma instruo completa8 )instruo J argumento J destino*

A!!(F )*d
Fa. a soma entre @ e # ) d 4 @ X #*! % &alor de @ serE somado ao conteQdo do registro #! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @ 0"emplo: Be @ 4 K; )decimal*8 e #)K;9* 4 15 )decimal* A instruo A,,@F K;98; J resultarE @ 4 35 A instruo A,,@F K;9 J resultarE #)K;9* 4 35

A"!(F )*d
Fa. a operao l1gica A-, entre @ e # )d 4 @ A-, #*! A operao l1gica serE #eita entre o conteQdo de @ e o conteQdo do registro #! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo : Be @ 4 bV;1;11;;1V8 e #);C9* 4 bV;;11;111V A instruo A-,@F ;C98; J resultarE em @ 4 bV;;;1;;;1V A instruo A-,@F ;C9 J resultarE em #);C9* 4 bV;;;1;;;1V @ 4 ;1;11;;1 A-, #);C9* 4 ;;11;111 5esultado 4 ;;;1;;;1

CLRF )
Gera o conteQdo do registro # indicado! 0"emplo: se =5IB2 4 bV;;1;1;1;V J A instruo C75F =5IB2 J resulta em =5IB2 4 bV;;;;;;;;V Fa.endo o #lag G 4 1

CLR(
Gera o conteQdo de @ 0"emplo: se @ 4 ;"3F J A instruo C75@ J resulta em @ 4 ;";; Fa.endo o #lag G 4 1

COMF )*d

Complementa #! %s bits do registro # indicado sero complementados8 ou sePa8 in&ertidos! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @ 0"emplo: Be #)1K9* 4 K29 4 bV;;1;1;11V A instruo C%6F 1K9 J resultarE em #)1K9* 4 ,49 4 bV11;1;1;;V A instruo C%6F 1K98; J resultarE em @ 4 ,49 8 sem alterar o conteQdo o conteQdo do #)1K9*!

!ECF )*d
,ecrementa #! ,ecrementa o conteQdo do registro # em J1 a cada instruo e"ecutada )d 4 # J1*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be #)1F9* 4 K; )decimal* J A instruo ,0CF 1F981 J resultarE em #)1F9* 4 1L A instruo ,0CF 1F98;)@* J resultarE em @ 4 1L8 sem alterar o registro #)1F9*! 0m 'ual'uer instruo #8d onde #or indicado para arma.enar em @8 pode ser colocado d 4 ;8 ou d 4 @!

!ECFS+ )*d
,ecrementa # e pula se # 4 ;! ,ecrementa o conteQdo do registro # em J1 )d 4 # J 1* a cada instruo e"ecutada8 e ainda testa o registro se c9egou a .ero! Be o registro c9egar a .ero8 pula uma lin9a de instruo! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o registro #);,9* 4 ;K98 e as seguintes lin9as de instruo #orem e"ecutadas: ,ecrementa ,0CFBG ;,9 I ,ecrementa o registro #);,9* <%=% decrementa I(ai para decrementa en'uanto ;,9 no #or igual a .ero 0-, IBe ;,9 4 ; termina o programa %bs: 0sta instruo le&arE dois ciclos de mE'uina se o registro # resultar ;8 pois a pr1"ima instruo serE e"ecutada como um -%P )<%=% decrementa*!

I"CF )*d
Incrementa #! 0sta instruo incrementa o conteQdo do registro # em X1 )d 4 # X 1*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o registro #);C9* 4 K; A instruo I-CF ;C9 J resultarE em #);C9* 4 K1 A instruo I-CF ;C98; J resultarE em @ 4 K18 sem alterar o registro ;C9

I"CFS+ )*d
Incrementa #8 e pula se # 4 ;! 0sta instruo irE incrementar o conteQdo do registro # em X1 )d 4 # X 1* e o testarE 8 pulando uma lin9a de instruo se o conteQdo do registro #or igual a .ero! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o registro #);C9* 4 K54)decimal*8 e as instru es abai"o #orem e"ecutadas: Incrementa: I-CF ;C981 I Incrementa o conteQdo do registro ;C9 em X1

<%=% incrementa I &ai para incrementa en'uanto ;C9 Y ; 0-, IRuando o conteQdo do registro ;C9 c9egar a .ero termina o programa! %bs: 0sta instruo le&arE dois ciclos de mE'uina se o registro # resultar ;8 pois a pr1"ima instruo serE e"ecutada como um -%P )<%=% decrementa*!

IOR(F )*d
Funo %5 entre @ e #! 0sta instruo e"ecutarE a #uno l1gica %5 entre @ e o registro # )d 4 @ %5 #*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o conteQdo de @ 4 3A9 )bV;;111;1;V*8 e o conteQdo do registro #);09* 4 A39 )bV1;1;;;11V*! A instruo I%5@F ;09 J resultarE em #);09* 4 229 J bV1;111;11V A instruo I%5@F ;098; J resultarE em @ 4 229 @ 4 ;;111;1; %5 #);09* 4 1;1;;;11 5esultado 4 1;111;11

MO,F )*d
6o&e para #! 0sta instruo trans#ere o conteQdo do registro # para @ ou para ele mesmo )d 4 #*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o conteQdo do registro #)K;9* 4 559 A instruo 6%(F K;98@ J resultarE em @ 4 559 A instruo 6%(F K;9 J ob&iamente no irE alterar o registro #)K;9*! Be #)K;9* 4 ;I A instruo 6%(F K;9 J irE a#etar o #lag de .ero G8 #a.endo igual a 1! 0ssa uma #orma de conseguir setar o bit de #lag G sem alterar o &alor contido em @!

MO,(F )
6o&e @ para #! =rans#ere o conteQdo de @ para o registro # )#a. # 4 @*! J 0"emplo: Be o conteQdo de @ 4 5A9 A instruo 6%(@F #)K59* J 5esultarE em conteQdo do registro #)K59* 4 5A9

"OP
-en9uma operao! 0sta instruo s1 ser&e para gastar tempo e'ui&alente a um ciclo de mE'uina!

RLF )*d
,esloca uma &e. os bits do registro # O es'uerda passando atra&s do #lag de carrD C! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o conteQdo de #);C9* 4 bV1;1;1;1;V! 5egistro ;C9 A instruo 57F ;C9 J resultarE no registro ;C9 4 bV;1;1;1;;V

0sta instruo a#eta o #lag de CarrD!

RRF )*d
,esloca uma &e. os bits do registro a direita passando pelo #lag de carrD C! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @!

S$B(F )*d
Bubtrai @ de #! Fa. operao aritmtica de subtrao do conteQdo de @ do conteQdo do registro # )d 4 # J @*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be o conteQdo de @ 4 K5 e o conteQdo do registro #)K;9* 4 5;! A instruo B32@F K;9 J resultarE em #)K;9* 4 K5 )positi&o*! A Instruo B32@F K;98; J resultarE em @ 4 K5 )positi&o*! % #lag de CarrD C 4 1 )positi&o*! Be o conteQdo de @ 4 5; e o conteQdo do registro #)K;9* 4 K5 A instruo B32@F K;9 J resultarE em #)K;9* 4 J K5 4 0M9 )negati&o* % #lag de carrD C 4 ; )negati&o*

S(APF )*d
=roca os nibbles em #! 0sta instruo troca os 4 bits mais signi#icati&os pelos 4 menos signi#icati&os no registro # ! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! J 0"emplo: Be o conteQdo do registro #)K;9* 4 5A9!

-ibble J conPunto de 4 bits

-OR(F )*d
%3 e"clusi&o entre @ e #! 5eali.a a operao l1gica %3 0FC73BI(% entre o conteQdo de @ e o conteQdo do registro # )d 4 # @*! Be d 4 18 o resultado serE arma.enado no registro! Be d 4 ; serE arma.enado em @! 0"emplo: Be @ 4 559 e o registro #)K;9* 4 559 A instruo F%5@F K;9 J resultarE em #)K;9* 4 ;;9

A instruo F%5@F K;98; J resultarE em @ 4 ;;9 % resultado acima a#etarE o #lag G 4 1! Com esta instruo possS&el comparar se dois nQmeros so iguais8 testando o #lag de .ero G! Instrues Orient&d&s & Bits -a instru es orientadas a bits o #ormato como na #igura abai"o! % #ormato da pala&ra passa a utili.ar tr+s bits para seleo dos bits contidos nos registros! A grande &antagem de trabal9ar com bits independentes8 'ue podemos alterar somente o bit desePado do

registro8 sem a necessidade de #ormar um nQmero de 8 bits para saber como de&emos colocEJlos no registro!

BCF )*.
Gera o bit de #! 0sta instruo #a. o bit ); J M* indicado por VbV8 do conteQdo do registro # ir para o nS&el l1gico ;! 0"emplo: Be o conteQdo do registro =5IB2 4 1;1;1111 A instruo 2CF =5IB28 M J resultarE em =5IB2 4 ;;1;1111

BSF )*.
Beta o bit de #! A instruo #a. o bit indicado por VbV8 do registro # ir para nS&el l1gico 1! 0"emplo: B o conteQdo do P%5=2 4 ;;;;;;;;! A instruo 2BF P%5=28 5 J resultarE em P%5=2 4 ;;1;;;;;

B#FSC )*.
=esta o bit de # e pula se b 4 ;! 0sta instruo testa o bit indicado por VbV8 do registro #8 se este bit #or .ero pula uma instruo8 Caso contrErio e"ecuta a seguinte! 0"emplo: =este 2=FBC P%5=28; I =esta a o pino 52; <%=% =0B=0 I 52; 4 18 testa no&amente <%=% 7I<A I 52; 4 ; &ai para rotina 7I<A

B#FSS )*.
=esta o bit de # e pula se b 4 1! Ao contrErio da instruo anterior8 esta testa o bit indicado por VbV8 do registro #8 e se este bit #or 1 pula uma instruo8 se ; e"ecuta a seguinte! 0"emplo: =esteK: 2=FBB P%5=283 I=esta o pino 523 <%=% =0B=0K I se 523 4 ;8 testa no&amente 523 <%=% ,0B7I<A I se 523 4 1 &E para rotina ,0B7I<A Instrues Orient&d&s & Const&ntes e de Contro/e -a instru es orientadas a constantes como na #igura abai"o! % #ormato da pala&ra passa a utili.ar oito bits para as constantes numricas 'ue so os dados dos registros8 ou on.e bits se #i.er re#er+ncia a endereo de mem1ria de programa! Be #or apenas de controle8 sem en&ol&er dados ou endereo de programa8 s1 o c1digo da operao!

A!!L( 0
Boma @ a constante >! 0sta instruo somarE o conteQdo de @ a uma constante )literal* imediata >! 0"emplo: Be o conteQdo de @ 4 ;58 e se desePa somar um &alor imediato K;! A instruo A,,7@ K; J resultarE em @ 4 K5 )@ 4 ;5 X K;* 7embrando 'ue ; 4Z > Z 4 K55

A"!L( 0
A-, entre @ e constante >! A instruo e"ecutarE uma #uno l1gica A-, entre o conteQdo de @ e a constante imediata >! 0"emplo: Be o conteQdo de @ 4 ;1;11;11 e se de sePa #a.er uma l1gica com um &alor >4;;;;;;;1! A instruo A-,7@ bV;;;;;;;1V J resultarE em @ 4 ;;;;;;;1

0sta uma #orma de se isolar um bit )mascaramento*8 no caso o bit ;!

CALL 0
C9ama subJrotina! A instruo CA77 c9ama uma subJrotina endereada por >8 com isso o contador de programa PC atuali.ado com o &alor de T8 sal&ando no B=ACT o endereo de retorno da subJrotina! 0"emplo: no endereo 4;9 da mem1ria de programa c9ama uma subJrotina locali.ada no endereo 1;;9! 4;9: CA77 1;;9 I c9ama a subJrotina8 e o endereo 4;9 X 1 sal&o no B=ACT8 e o PC so carregado com o &alor 1;;9 419: """" """ I 3ma instruo 'ual'uer 1;;9: FFFFFF I 3ma instruo 'ual'uer 1;19: 50=35- I 5etorna da subJrotina8 carregando o PC com o &alor do B=ACT J 419 Importante: =odas as &e.es 'ue ocorrer um CA778 o endereo atual sal&o no B=ACT para ser recuperado mais tarde! % PIC aceita at 8 c9amadas consecuti&as8 ocorrendo mais um CA77 sem o retorno de nen9um8 ocorrerE um %(05F7%@ )estouro da capacidade* no B=ACT8 PrePudicando o programa!

CLR(!#
Gera o =imer do @atc9,og! 0sta instruo irE .erar o conteQdo do tempori.ador @atc9 ,og8 e&itando um reset se este esti&er 9abilitado! 0"emplo: se @,= estE com um tempo de 1; ms! A instruo C75@,= J resultarE em @,= 4 ; ms ,ois bits sero a#etados no B=A=3B: e 'ue sero setados!

GO#O 0
,es&ia para o 7abel >! 0sta instruo #a. com 'ue o programa des&ie para um no&o endereo indicado por >8 com isso o &alor do PC atuali.ado com o &alor de >8 o endereo anterior no sal&o no B=ACT! 0"emplo: supon9a 'ue no endereo 3;9 da mem1ria de programa ocorra um <%=% 559! 3;9: <%=% 559 I des&ia para o endereo 559 559: """"" """"" I o programa passa a ser e"ecutado deste ponto

IORL( 0
%5 entre @ e >! A instruo reali.arE a #uno l1gica entre o conteQdo de @ e um &alor imediato >! 0"emplo: Be @ 4 bV;1;;11;;V! A instruo I%57@ bV1111;;;;V J resultarE em @ 4 bV111111;;V

MO,L( 0

Fa. @ 4 >! 0sta instruo #a. o registro @ assumir o &alor imediato indicado por >! 0sta instruo muito utili.ada8 principalmente 'uando 'ueremos alterar o conteQdo de algum registro8 ou sePa8 toda &e. 'ue se 'ueira inserir um &alor imediato em um registro 'ue no sePa o @8 esta instruo serE necessEria! 0"emplo: (amos #a.er o conteQdo de um registro #)K;9* 4 559! 6%(7@ ;"55 I A'ui #a. @ 4 559 6%(F K;9 I =rans#ere o &alor 559 para o registro #)K;9*: #)K;9* 4 559

RE#FIE
5etorna da interrupo! =oda &e. 'ue o PIC atender uma rotina de interrupo8 ao #inal desta de&erE ter estE instruo! 0"emplo: ;;49: 6%(@F @[=06P Iendereo ;;498 &etor de interrupo ;;59: """""" """"" I instru es 'ual'uer ;;F9: 50=FI0 I 5etorna da interrupo8 atuali.ando o PC com o &alor arma.enado no B=ACT PC 4 1;K9 =rec9o em e"ecuo ;1;;9: -%P I Instruo 'ual'uer ;1;19: 6%(7@ "" \\ I \\ ocorreu um pedido de interrupo! Bal&a o ;1;K9: """"" """ I pr1"imo endereo no B=ACT e atuali.a o PC com o endereo do &etor8 PC 4 ;;49

RE#L( 0
5etorna com o &alor de >! A e"ecuo desta instruo #a. o conteQdo de @8 retornar de uma subJrotina com o &alor imediato indicado por >! 0sta instruo muito usada para teste8 por e"emplo8 de c1digos8 testado o &alor do c1digo8 se realmente o desePado 8 o @ retorna com o &alor do c1digo! 0"emplo: ;1;;9: CA77 decodi#ica I C9ama rotina decodi#ica decodi#ica: mo&A# c1digo Isal&a @ em registro denominado c1digo mo&lA bV111;11;1V Itesta se 1 "orA# codigo8A I compara se os &alores so iguais com a instruo F%5@F bt#sc status8. I=esta o Flag de G8 se ; salta uma instruo retlA bV;;;;111;V I se c9egar a'ui8 G418 retorna com o &alor decodi#icado indicado por > 4 bV;;;;111;V

RE#$R"
5etorna da subJrotina! 0sta instruo estE sempre no #im de uma subJrotina c9amada pela instruo CA778 e"ceto 'uando utili.a a instruo citada anteriormente! 0"emplo: ;1;;9: CA77 1559 Ic9ama a subJrotina locali.ada no endereo 1559 sal&ando o endereo seguinte do PC no B=ACT )1;19* ! ;1559: 2=FBB B=A=3B8G Iuma instruo 'ual'uer

;1569: <%=% G05A I&ai reali.ar uma operao 'ual'uer ;15M9: 50=35- Iretorna para endereo sal&o no B=ACT )1;1*

SLEEP
0ntra no modo B700P! A instruo #a. com 'ue o PIC entre em bai"o consumo8 o oscilador pEra8 @atc9 ,og e Prescaler so .erados! 0"emplo: ;K;;9: B700P I 0ntra em modo B700P %s #lags 4 1 e 4 ;

S$BL( 0
Bubtrai > de @! 0sta instruo subtrai o conteQdo do registro @ pelo &alor imediato indicado por > )@ 4 > J @*! 0"emplo: Be o conteQdo de @ 4 K5 A instruo B327@ K6 J resultarE em @ 4 18 C 4 1 )B=A=3B* indicando um nQmero positi&o! A instruo B327@ K4 J resultarE em @ 4 FF98 C 4 ; indicando um nQmero negati&o8 o 'ue corresponde a J1! Para se c9egar ao &alor negati&o como no e"emplo8 basta aplicar complemento de dois! @ 4 FF8 em binErio 11111111! 11111111 complementa ;;;;;;;; soma X 1 resultado ;;;;;;;1 J1

-ORL( 0
0"clusi&e %5 entre @ e >! Fa. a #uno l1gica %3 e"clusi&o entre o conteQdo de @8 e um &alor imediato indicado por > )@ 4 @ >*! 0"emplo: se o conteQdo de @ 4 bV;11;;11;V! A instruo F%57@ bV1;;1;;1;V J resultarE em @ 4 bV1111;1;;V

"o1e do Port e .it 2ino 5A; 5A1 5AK 5A3 5A4 52; 521 52K P%5=A8; P%5=A81 P%5=A8K P%5=A83 P%5=A84 P%5=28; P%5=281 P%5=28K

#i2o de entr&d& ==7 ==7 ==7 ==7 B= ==7 C B= )1* ==7 ==7

#i2o de s&3d& ,ri&e #ull C6%B ,ri&e #ull C6%B ,ri&e #ull C6%B ,ri&e #ull C6%B 6os#et dreno aberto 2u##er =ristate 2u##er =ristate 2u##er =ristate

Fun4o 0ntradaCBaSda 0ntradaCBaSda 0ntradaCBaSda 0ntradaCBaSda 0ntradaCBaSda ou entrada de cloc> e"terno para o =imer; 0ntradaCBaSda ) 5esistor de pull up programE&el * ou entrada da interrupo e"terna 0ntradaCBaSda ) 5esistor de pull up programE&el * 0ntradaCBaSda ) 5esistor de pull up

programE&el * 523 524 525 526 P%5=283 P%5=284 P%5=285 P%5=286 ==7 ==7 ==7 ==7 C B= )K* 2u##er =ristate 2u##er =ristate 2u##er =ristate 2u##er =ristate 0ntradaCBaSda ) 5esistor de pull up programE&el * 0ntradaCBaSda ) 5esistor de pull up programE&el * 0ntradaCBaSda ) 5esistor de pull up programE&el * 0ntradaCBaSda ) 5esistor de pull up programE&el * ! Pino usado durante a programao /cloc>/ 0ntradaCBaSda ) 5esistor de pull up programE&el *!Pino usado durante a programao /dados/

52M

P%5=28M

==7 C B= )K*

2u##er =ristate

RO#I"A !E !ELA5 POR I"S#R$%ES F/u6o do 2ro7r&1&

E-PLICAO !A RO#I"A !E !ELA5 Co1o )&8er 2&r& 9ri&r rotin&s de &tr&so:

Primeiramente temos 'ue pensar em rotinas 'ue #icam decrementando uma &ariE&el e e"ecutando alguns comandos 'ue perdem tempo8 como o nop8 lembrando 'ue o nQmero mE"imo de uma &ariE&el no PIC K55! -a nossa 5otina #i.emos a &ariE&el "4K4L8 numa rotina 'ue perde 4 ciclos de mE'uinas a cada decremento8 apenas na Qltima passagem so 3 ciclos8 pois a instruo dec#s. 'uando a &ariE&el .ero8 usa dois ciclos e salta a pr1"ima instruo 'ue no caso um goto ) K ciclos*8 ento #ica 1 do nop X K do dec#s. 'ue somam 3! Calculando os ciclos de mE'uina rotina: 1! ,e&emos le&ar em considerao a c9amada a subrotina o call ) K ciclos *I K! Iniciali.aa da &ariE&el " )mo&lA K4L J mo&A# "* ) K ciclos* at a'ui total de 4 ciclosI 3! Como " 4 K4L8 isto dE um tempo de: ] 4us)nop X dec#s. " X goto msK* F K48 4 LLK^ at a'ui total de LL6 ciclosI 4! _ltimo decremento ) 1 ciclo do nop X K ciclos do dec#s.8 pula o goto* 3 ciclos8 at a'ui LLLI 5! Agora c9egou no return )K ciclos* totali.ando 1;;1 ciclos de mE'uinaI 6! ,ependendo da aplicao essa di#erena de 1 us tolerE&el! =em como #a.er dar e"atamente 1 milisegundo` Bim l1gico8 para isso no programa tin9amos 'ue #a.er " 4 K488 isto daria um tempo de:] 4 us) call X mo&lA K48 X mo&A# "*^ X ] 4us)nop X dec#s. " X goto msK* F K4M 4 L88 )rotina de decrementar*^ X ] 3us do Qltimo decremento^ 4 LL5! Como teremos mais K us do return8 #altam 3us para completar 1;;; ciclos8 colocaJse ento 3 nop antes do return! Faa a modi#icao8 compile o programa no&amente e &eri#i'ue!

Au1ent&ndo o te12o do &tr&so


0 se precisarmos de mais tempo8 por e"emplo 1;; ms` Be essa rotina 'ue #i.emos gera apro"imadamente 1 ms8 basta e"ecutEJla 1;; &e.es! Fa.emos ento uma rotina para decrementar uma outra &ariE&el 1;; &e.es8 e a cada decremento e"ecutar a rotina de 1 ms!

ES#R$#$RAS !OS PROGRAMAS EM GERAL In39io

!e)inies

Rotin& Prin9i2&/

Su.;rotin&

F/&7

Ini9i&/i8&4o do Cont&dor

Rotin& de Con<ers4o Bin=rio > !is2/&'

Das könnte Ihnen auch gefallen