Você está na página 1de 270

C O M P I L A D O R C C C S s:

Y S I M o L A D O R P R O T E U S
P A R A
M I C R O C O N T R O L A D O R E S P I C
Eduardo G arcia Breijo
11. Alfaomega
m a r c o m b o
ediciones t s c n t o a s
COMPILADOR C CCS
y
S.MULADOR PROTEUS
PARA
M.CROCONTROLADORESPIC
Eduardo Garcia Breijo
1 1 . Alfaomega ediciones r e c n t c a s
Datos catalograflcos
Garcia. Eduardo
Compilador C CCS y simulador PROTEUS para
Microcontroladores PIC
Primera Edici6n
Alfaornega Grupo Editor, S de C.!., Me"ico
IS#$% &'()&'*)+,)+-&').
/ormato% +'" .- em P6ginas% .'6
Compilador C CCS y simu0ador PROTEUSpara Microcontroladores PIC
Eduardo Garcia #rei1o
IS#$% &'()(2).6')+2&,)2. edici6n original pu3licada por MRCOM#O, S, #arcelona. Espana
Derec4os reser5ados 6 MRCOM#O, S..
Prirncra edici6n% lfaornega Grupo Editor, Me"ico, 1unio de .**(.
7 .**( lfaomega Grupo Edltor, S.. de C. !.
Piragoras ++-&, Col. Del !alle. *-+**, Me"ico D.E
Miern3ro de In Camara $acionnl de la Industria Editorial Me"icana
Registro $o. .-+'
Pag. 8e3% 4Up%99:::.alfaomega.com.m"
#)mail% li3reriapitagoras6alfaomega.com.m"
;S#$% &'()&'*)+,)+-&').
Derec4os reser5ados%
Esta o3ra es propiedad intelectual de su autor y los derec4os de pu3licaci6n en lengua espanola 4an
sido legalmente rransferidos al editor. Pro4i3ida su reproducci6n parcial * total por cual<uler medio
sln permiso por escrito del propietario de los deree4os del cop=rig4t
$ota importante%
>a informaci6n contcnida en esta o3ra tiene un fin e"clusi5amente clidlictico y, por +*tanto. no est6
previsto su aprovechanuento (I ni5el profesional * industrial. >as indicacloncs tecnicas y prograrnas
lncluidos, 4an sido ela3orados con gran cuidado por e0 autor y reproducidos 3a1o estrictas normas
de control. >/OMEG GRUPO EDITOR. S de C.!. no sera 1urfdicarnente responsa3tc
POI':errores u ornisiones dniios y per!uicios <ue se pudieran atri"uir al uso de la infor#acion
co#prendida en esre li"ro y en el CD)ROM ad1unto. ni por In utili?aci6n inde3ida <ue pudiero c>irscle.
@lici6n autori?ada para 5enta en Me"ico y todo el continente arnericano.
Impreso en Me"ico. Printed in Me"ico.
fl.%mpresas del grupo%
Me"ico% Alfao#ega Grupo Editor.S.. de $%&% ' PiulgofAd,B I +-&. Col. Del &ulle% (e)ico, D.P. )C.P. *-+**.
Tel.% C,.),,D ,*(&)''2* ) /a"% C,.),,D 5575-2420/2490. Sin coste% *+E(**E*.*)2-&6
E)moil% li3reriapitagornF6ulfaorncga.corli.mlC
Celom3la% lfaornegG Colom3iana S ) Carrera +, $o. 62 .& ) P#H C,'E+D .+** +..
flu"% C,')ID 6*6(62( ) E)mail% scliontcCI4llfnomegn.com.co
C4Ue% lfaomega Grupo Editor, S.. ) General del Caruo -'*)Pro5ldenciu. Santiago. C4ile
Te>% C,6).D .-,)2.2( ) /a"% C,6).D .-,E,'(6 ) E)mail% ngec4ile6nlfaomegll.cl
rgentina% Attaorncga Grupo Editor rgentino. S.. ) Paragua= +-*' P.#. JIIJ. Capital /ederal.
#uenos ires. C.P. +*,' Tel.% C,2)IID 2(++)'+(-I(-,., E)mail% info6nlfaomegacditor.com.ar
,
Indice analitico
1. ISIS de PROTEUS VSM 1
1.1 Introduccion 1
1.2 Captu ra electronica: entorno gcifico ISIS 2
1.3 Depuracion de lo ite!a "aado en PIC!icro .l2
2. Co!pilador CCS C 23
2.1 Introduccion 23
2.2 Etructura de un progra!a 2#
2.3 Tipo de dato 2#
2.# $a contante 2%
2.% Varia"le 2&
2.& Operadorc 2'
2.&.1 (ignacion 2'
2.&.2 .(rir!etico 2'
2.&.3 Relacionale 2)
2.&.# $ogico 2)
2.. &.% De "it 2)
2.&.& Punrcro 2)
2.' *uncione 2+
2.) Declaracione de control 3,
2.).1 I*-E$SE 31
2.).2 S.ITC/. 33
2.).3 *OR 3#
2.).# .III$E 0 DO-./1$R 3%
2.).% Otro 3'
2.9 Co!entacio 37
2.1, Directi2a y funclone 3preproceor co!!and y "uilt-in function4 3)
2.1,.1 Direcri2a 3)
2.1,.2 *uncione 5 #,
2.11 $i"rerfa5 dri2er y e6e!plo .#3
2.12 Entornc de rra"a6o de CCS C Co!piler #3
2.125 1 lntroducci&n #3
2.1252 Enrorno de tra"a1o ##
3. $a geti&n de lo puerto %%
3.1 Introduccion %%
3.2 7ction de pucrto en C %'
3.2.1 ( cra2e de la R(M %'
2
3.2.2 ,\ craves de las dircctivas 60
3.2.3 Con punrcros 62
3.3 Entradas )' salidas 65
3.3.1 LCD 65
3.3.2 LCD gr:ific() 70
3.3.3 Teclado !e"pad #)$) 75
$. Las inrerrupciones y los te%pori&adores '3
$.11nt.roducci6n '3
$.2 (nterrupciones '3
$.2.1 lnrcrrupciones en C ''
$.3 'rn\(E)* +$
4.3.1 Tl iV L E R O cn C 9 5
$.$ T1l\lE), )' Tll\1E)2 ++
$.$.1 T(,\-E)1 .TTh1E .R 2 en C 102
5. Convertidor /nal60ico 1 Di0ital 117
5.1 (ntroduccion 117
5.2 2odulo Convcrtidor 0a%a %edia) 11'
5.2.1 )e0isrros r3) 11+
5.2.2 4roccso de conversion 122
5.2.3 E-cceo del %odo 3LEE4#, )E3ET en el %odulo Al) 12$
5.3 2odulo /D en C 125
6. 2odulo CC4 1 Co%parador, Captura y 452 137
G .1 lntroduccion 137
6.2l\lodo Caprura 139
6.3 2odo Cornparacion 1$0
6.$ 2odo 4\'6'2 1$1
6.5 2odulo C C P en C 143
7. Trans%ision seric 167
7.1 lniroduccion 167
7.2 E( %odulo 73i\)T83Cl 16'
7.2.1 (rnroduccion 16'
7.2.2 E !"#$l" %&AR T en C 174'
7.2..3 La nor%a )3232 1'0
7.3 4uerto sene sincrono 334) 1+0
7.3.1 lnter-a& (%er1Circuiros l2C) 1+0
'. 9a%a /lta 1 4(C1' 213
'.1 (ruroduccion 213
'.2 *r0ani&acion de la %e%oria 21$
'.2.1 /r:uitectura (AR )V AR ) 215
'.2.2 2e%oria de 4ro0ra%s 215
'.2.3 Ccntador de 4ro0ra%s 216
'.2.$ *e!"ri+ de Con-i0uracicn 217
vi
8.2.5 Pila 21-
8.2.6 Memoria de Datos 218
8.2.7 Memoria EEPR01vl 219
8.2.8 Modes de Direccionamienro 220
8.2.91nrerrupdones , 220
8.2.9. Re!isrros de salva!uarda 222
8.2.10 Re!istro " 22#
8.2.11 $scilador 22#
8.2.12 %nidades &uncionales 22#
8.2.12.1 Puertos de entrada'salida 22(
8.2.12.2 )empori*adores , 225
8.2.12.# +onvertidor ,nalo!ico-Di!iral 226
8.2.12.( +anal de +omunicacion -erle .E%-,R)/ 227
8.2.12.5 Modulo Master --P .M--P/ 228
8.2.12.6 Modulo de +ornpracion'+aptura'P0lvl .++P/ 228
8.2.12.7 Modulo +omparador 2#0
8.2.12.8 Modulo de re1erencia 230
8.2.12.9 Modulo detector de ,lto'2a3o 4olra3c 2#0
9. R)$- - Real )ime $peratin! -5stem 2#9
9.1 lntroducci6n 2#9
9.2 R)$- en + 2(0
10, %-2 - %niversal -erial 2us 251
10.1lntroducci6n ,.251
, $.l.l11i!racion de R-2#2 a %-2 252
6$.t.l.1 %-2 +D+ .+ommunication Device +lass/ 252
10.2 %-2 con 7-7- y ++- + 8 25#
10.2.1 %-2 en 7-7- 25#
10.2.2 %-2 en ++- + 25(
vii
Introduccion
EI estudio de los microcontroladores PIC no consiste solo en dominar su arquitec
tura intema 0el codigo rnaquina sino tambien en conocer programas auxiliares que
facilitan el disefio de los sistemas donde intervienen.
Entre los muchos programas para el desarrollo de sistemas con PICmicro desta
can, par su potencia, el PR!E"# $#% de &'abcenter Electronics y el compilador
C de &Custom Computer #ervices Incorporated (CC#).
El programa PR!E"# $#% es una herramienta para la verification via soft*are
que permite comprobar, practicamente en cualquier disefio, la eficacia del progra
rna desarrollado. #u combination de simuladon de codigo de programacion + si
mulacion mixta #PICE permite verificaciones analogico,digitales de sistemas basa
dos enmicrocontroladores. #u potencia de traba-o es magnifica.
Por otra parte, tenemos el compilador C de CC#, +a que despues de conocer y .do
minar. ellengua-e ensamblador es mu+ uti! aprender a programar con un lengua-e
de alto nivel como el C. EI compilador CC# C permite desarrollar program as en C
enfocado a PIC con las venta-as que supone tener un lengua-e desarrollado espe
cificamente para un microcontrolador concreto. #u facilidad de usa, su cuidado
entomo de traba-c + la posibilidad de compilar en las tres familias de gamas ba-a,
media +alta, Ie confieren una versatilidad + potentia mu+ elevadas,
/l escribir este libro se planteanmuchas dudas, sobre todo a la hera de concretar
el temario. Escribir profusamente sobre losPIC 0sobre el PR!E"# 0sobre el CC#
C supone, casi seguro, escribir un libro para cada uno de estos temas. Por ello, el
planteamiento ha sido diferente, desarrollar los conocimientos basicos necesarios
para mane-ar cada prograrna, apo+arlo con elma+or numero de e-ercicios + de-ar
al lector la posterior arnpliacion de conocimientos. /si 00he decide en base a Ia
, experiencia que me da estar impartiendo dases sobre PIC en Ia carrera de Ingenie
ros !ecnicos Industriales, especialidad de Electronica Industrial, de la "niversidad
Politecnica de $alencia.
Con estas premisas espero que ellibro sirva a lector para aumentar sus conocimien
tos sobre el PIC 0para iniciarlos en el caso de los que descono1can este mundo.
ix
1. ISIS de PROTEUS VSM
C pitulo 1
ISIS de PROTEUS VSM
11 Introduccion
illentorno de disefio electronico PROTEUS VSM de LABCENTER ELECTRONICS
(W1.ow.labcenfer.co.lIk) ofrece la posibilidad de simular c6digo microcontrolador de
alto y bajo nivel y, simulraneamente, con la simulacion en modo mixto de SPICE.
Esto permite e 1 disefio tanto a nivel hardware como software y realizar la simula
cion en un mismo y unico entomo. Para ello, se suministran tres po tentes subentor
nos como son ellSlS para e ldisefio grafico, VSM (Virhtaf SystemModelling) para la
simulaci6n ye lARES para el disefio de places !figura "#.
The VM Advantage
s_k
~+
$%%% ~
~ . . . . ~ " ~ _ : d ~ W : . : N : ! M ~ O : ~ ~ . . _ _ - - - - " ~
% .... . . . _ ,
, Con las herramientas tradlcionales de disel'io. al desarrollo del software y la comrobaci!n del sisl"ma
no #ede reiifli$ars% hasta &#e sa dasarrolla #n rototio real. esto #ede s#oner semanas de retraso.
'demas. sise &ocalrza alg#n error en el aiseno hardware. la totalidad de( roceso debe ree)*rse.
+sando ,rote#s VSM. al desarrollo del software #et-)ecomen$ar tan ronto como ales&#smatiC! e s
c)*b#)adoy la combinac./n de software yhardware #ede ser testeada antes del montar a& rol0tio.
Figura 1. Entomo de trabao PROTEUS !!uente" #ab$enter Ele$troni$s%
1
C o m p l l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
1.2 Captura electronica: enterne grafico ISIS
JSIS es un potente programa de disefio electronico que permite realizar esquemas
que pueden ser simulados en el entomo VSM 0pasados a un circuito impreso ya
en el entomo ARES.
Posee una muy buena coleccion de Iibrerfas de modelos tanto para dibujar, simular
o para las placas. Ademas, permite Ia creacion de nuevos componentes, su mode
lizacion para su simulacion e, Incluso, la posibilidad de solicitar al fabricante (Lab
center Electronics) que cree un nuevo modele.
Sin entrar profundamente en como utilizar dicho programa requeritia un Iibro
solo para ello!, a continuacion se e"plican las bases para dibujar cualquier circuito
electronico. #l programa ISIS posee un entomo de trabajo figura $! fonnado por
distintas barras de herramientas yla ventana de trabajo.
%ontuna de #dicl&n
)l e n t a jJa d e T r a ba jo
CQI7Iando.s de:
rolllclclnoj r~f[exl6n
Barra deslm~elOn
BaI1il de estadc>
'() .. * t+ I,(, I. j --.- .. -,. IooI/ / *r- 0
Figura 2. EI e"tor"o de trabaJo del programa ISIS
%aries de estos menus tambien se pueden utilizar con la ayuda del boton derecho del
raton, Al pulsarlo en cualquier parte del entomo de trabajo aparece un menu conte"
tual donde se puedenir obteniendo los distintos submenus de trabajo figura1!.
$
:{> Comoonent
s..ItIct All O b J e cts
+.Mctl)nOot
;; le ><l:Sc...,r
J
; ; ' 8 u S
:Q:~
gT~
I~De WaPin
L< i t1 lP >s
!Ml r_ R~corder
~@
D C
~olooeP r!e stIlE
~ Cll"ent P ro#e Pl.lSf:
~ .t!all$ ..tr% roent & lCP
/UM
Sf"M
D eo'
P ( ) 1 .1 *
OCl( de
"IL#
~At<
+lO,O
#:>Pat$
O S%A%E
+T --t
D & D . &
& l/0m#oi
MA.SE
.M&Irl<e t
D C1 OC2
.....,..,.,.,.. ~A%%E'(
). ISIS *e P'O %E+S ,SM
"i-!ra .. S!b /e n!s*e trab aJ 0*e l b 0t0n *e re c$0*e l rat0n
P 3r3 di #% 43r5 1 67ri mero es coloe3r J os di s ti ntos com7onentes en l3 8o43 de tr3#34o5
P 3r3 ello5 s e s elecci on3 el modo corn7onenres 9"i g% r3 :) 05 3cto s eg% i do5 re3li ;3r % n3
7% ls 3ci <.n s o#re el #oron P de l3 =enl3n3 de com7onentes 1 li #rer"3s 9"i g% r3 >).
"i-!ra &. M0*0c0/20ne nte s "i-!ra 3. 40t0n 52lc67
Tr3s 3cti =3r el #oton P s e 3#re l3 =ent3n3 73r3 l3 edi ci on de com7onentes 9"i g% r3 <)
donde s e 7% ede #% s c3r el com7onenre 3dec% 3do 1 com7ro#3r s % s e3r3cteri s ti c3s .
+l loc3li ;3r el com7onents 3dec% 3do s e re3li ;e % n3 do#le 7% ls 3ci <n en et de tal
"orm3 ?% e 373re;c3 en l3 =ent3n3 de com7onentes 1 li #reri 3s 9"i g% r3 @). /e 7% eA
de re3li ;3r es t3 3cci on t3nt3s veces como com7onentes s e ?% i er3n i ncor7or3r 3l
es ?% em3. Bn3 vez "i n3li ;3do el 7roces o s e 7% ede cerr3r l3 =ent3n3 de edi ci on de
com 7onentes .
C
Com pilador C CCS V Sim ulador PRO TEUSpara M icrocontroJadores PIC
Perm ite locallzar por tlpo, clase y fabricante
Encapsulado
para placa
Pequeilo editor de las caracterisllcas
de un com ponente situar el raton sobre el!
Figura 6. Ventana para la edItion de componentes
PI "J
#n$lI%IIII$&
E ' _ C 1 6f 8 7 6
RE' S
S( )SPST)M O M
w
Figura 7 . Los componentes anadldos
Para situar un componente en e es!uema tan s61 " de#emos seleccionarlo de la
lista. *I $acerlo se puede compro#ar su orientacion (tal como se representara en el
es!uema% en la &entana de edicion 'f igura 8 %. (i deseamos modif icar la rotacion +
la ref le)ion del components podemos acceder a ella a tra&es de La#arra de $erra*
mientas correspondiente 'f igura +%.
,aciendolo de esta f orma- .todos. los componentes de la Iista tendran Ia misma
orientation 'si se desea orientar un unico componente de#eremos $acerlo una &e/
0a situado ell el es!uema%.
,
1. ISIS de PROTEUS VSM
B~
~
+ .
E : i
: Q :
PI L I
LE D BLU E
~
PlC16fIYS
;~
'-
.
C>
ft : CI S 'W S PS T M O M
r:
Figura 8. Seleccion yorientacion
del componente
Ahora solo falt a realizar una pulsacion sobre la vent ana de t rabajo y se colocara
el coponent e. !l cursor del rat on se conviert e en un lapiz blanco "fi#ura 1$%. Se
pueden colocar varios coponent es del iso t ipo sipleent e realizando varias
pulsaciones& Para t erinar de colocar un coponent e se debe selecdonar ot ro co'
ponent e de la list a $pasar a ot ro odo de t rabajo.
Figura 9. Barra de rot a ci ony refleion
~ (p)* blanco: die en boronIz+uierdo co,oen el cO mpoocolC
Figura 10. !ur"or en el modo de colocacion
!s iport ant e act ivar la herraient a de referenda aut oat ica (Real Tillie Annoia
tion). -e est a fora& los coponent es t endran una referenda dist int a y de fora
consecut iva; en los circuit os int e#rados con varios cornponent es encapsulados t a'
bien se referenciaran se#un dicho encapsulado "(IA& (1.& et c.%. !st a herraient a
se act iva $ desact iva desde 1aopt ion de enu TOOLS /0 Real Time Annotation.
(na vez sit u ados los coponent es en el area de t rabajo se pueden over& l pasar
por encia del coponent e el cursor se conviert e en unaano "fi#ura 11%y al rea'
lizar una pulsacion& el cursor se t ransfora en una ano con una cruz& lndicando
+ue se puede over el coponent e "+uedan seleccionados al ponerse enIOjO) y se
puede arrast rar "at encion: si se vuelve a realizar ot ra pulsacion del bot on iz+uierdo
se edit an las caract erfst icas del coponent e%. 1 aen se puede cabiar su orient a'
don ut ilizando los coandos de rot at ion yrefle2ion a t raves de una pulsat ion del
boron derecho del rat on "fi#ura 13% y se pueden eliinar con dos pulsadones con el
bot on derecho sobre elios "$ con el bot on derecho y el coando Delete Objet).
4 P5 l
4 .., Seleccion del coponerne
Figura 1&.el cur"or en modo de "elec!ion y mo#er
6
C o m p l l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
+D r a o Object
Edit PI ope.tles CttI't-
D elete O b ) oj tt
CRo ta te Clo d<l\llse Ted~l)e.SusU a ctio n
:0f!)":a te #nt$%o c~"&S. Tedetle'#dicio n
CRo ta tellSOde(%lees
.. ) 1 .0 1 '1 1 " 0 1 a d... M
t)~(fi<
f) D "s*la + M a llei Hdp Cb lH1
O J ~ey ~ta sl\eet CtI!"
Fi gu r a 12. M e n u c o n t e xt u a l d e u n c o m p o n e n t e a c t l a d o p o r e l !o t o n d e r e c "o d e l r a t o n
#oda s esta s a $eio%es ee p&ede% ea li'a i%dl(id&a l)e%te 0 de fo)a $ole$ti(a * es
de$i* se p&ede% a +&pa (a ies $o)po%e%tes a ta (es de p&lsa $io%es $o%se$&ti(a s
sob e e%os ,)a %te%ie%do la te$la -Co%tol. p&lsa da ) 0 dib &j a %do &%a (e%ta %a $o%
el b ot/% I'0&iedo + a a sta %dola sob e los )is)os ,fi+&a 1 1) .
"(leo illft ,
2"I
2fi1 3
R0-l.O&
/ Ulo "
24a
2IIfliP5C
R0,,.1O
. 0 1
" * 6EO -4l7~
1 S2,
\ S3S.ST.&Of4,
1 -
2CO I#IO 8O 9#IC:I
RC!,T,0S""CC.5
2C3 ICCI'I
~~6"
RCil7SOO
RCf""T87C$
ReT7""8,0!
n R,
+l~
Fi gu r a 1#. $o s c o m p o n e n t e s e n e %&'r e a d e t r a !a %o
7%a (e' sele$$lo%a do e1 $o%j &%to de $o)po%e%tes ,se )a $a % todos e% oj o) deb e
)os &tili'e 1 a ;ea %ie%ta de +& po ,fi+& a 1 <) * 0&e ta )b ie% a pa e$e ta s p&lsa el
b oo% dee$;o* Co% esta ;ea )ie%ta se p&ede% $opia * )o(e* ota 0 ell)l%a los
$o)po%e%tes sele$$io%a dos*
/
1. ISIS de PROTEUS VSM
'" ...... '* u.... ,.,. ~ .... ,.._ ... ,.... :w... ,..
[;
a_iii lilt) .QQ, +'1""D 1... CrSII .........
.''''''~ !:I.a., 'Dil
!Ir~
------ --
I',
I I
" k
..
f !:
'l' ,
#
.~:;
I) $#PCtl%lUli&
l.
[ !
..
0;
'"
v,
&i
.'
~
.,. -
_ '
~
...' u
F ;l
-'= 11
!(I
/
~
)
-~
.~:..
...,..,....
!
...... I&t
-.
.
*
._
+Ii
CI
1,)
~i,
"'
~~)u
lit
........ ,., lOt
._ H
-
if
-
")+;"V
$
$
1CWt\'I
.
~- .
, "'f t
/%r~ ~,
0t..00&"OIIi" ...
... ....

".........
).
-
~.
$
.,.
....
'"",,",)
F i!"#a '$.%&l&'()*(& va#l+,'+-.+*&*t&,
I~~1 1 I
a a"
F i!"#a 1/.0a 1&2'a-l&*ta(& !#".+
3a#a "*i# l+, '+-.+*&*t&, '+* 'a4l&, 1a5 6"& ,it"a#,& &* l+, &7t#&-&, (& l+, t&#-i8
*al&,, &l '"#,+# ,& '+*vi&#t& &* "* la.i9 v&#(& :f i!"#a 1);.<1+#a ,& ."&(&* &=&'"ta#
(+, a''i+*&, 2i# -a#'a*(+ &l 'a-i*+ 1a,ta &l (&,ti*& '+* (i,ti*ta, ."l,a'i+*&,
:f i!"#a 1>; 2#&ali9a#, (i#&'ta-&*t&, "*a ."l,a'i)* &* &l (&,ti*& 3 (&=a# 6"& [ S I S
#&al i'& &l 'a-i*+. 3a#a &ll+, (&4& &,ta# a'tiva(a la 1&##a#*i&*ta TOOLS ~ Wire
Autorouter.
.
21
0E2.400
F i!"#a 1). '*.(+ (& 'a4l&
F i!"#a 1>.Cl#'"lt+-a -a*+5
6
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Las uniones entre cables se pueden realizer de forma autornatica. Para ella, mien
tras se traza un camino debemos realizar una pulsacion sabre el cable objeto de la
union electrica (figura 18). Tambien se pueden realizar de forma manual mediante
el modo de union (figura 19)i en este modo tansolo hay ue ir hacienda pulsacio
nes sobre los puntos donde deseamos realizar la union.
Fi gu r a 18. U n i o n e hkt r .c a e n t r e c a bl e s Fi gu r a !". M o d o d e u n i o n
#e puede modificar el trazado de los cables. Para ella, se realiza una pulsaci$n so
bre el cable, en ese instante el cursor se con%ierte en una doble flecha (figura &') y
se puede arrastrar el raton para modificar el cable.
t (oble flccha) mo%er cables
Fi gu r a 20. M o e r l o s c a bl e s
Tambien se pueden utilizar buses para las uniones multicable. Los buses permiten
conectar %arios terminales entre si utilizando un unico elemento (figura &1)* en este
caso, el cursor se con%ierte en un lapiz azul (figura &&). Pero para distinguir los
distintos cables ue forman parte del bus y distribuirlos en la entrada y en la salida
se deben etiuetar mediante labels. +n el caso de los cables se indicara una etiueta
,mica LCDO, LCD1, etc., y al bus una etiueta conjunta segun el formate LCD[O..3 1
ue indiue el nombre y la cantidad de cables ue 1'forman.
l-..
l-(&
/.-'0
Fi gu r a 21. C a bl e a d o p o r bu s
8
1. ISIS de PROTEUS VSM
, Lapi azul: trazado de buses.
Figura 22. Cursor en modo de trazado de bus
1 : : . 1 etiquetado tambien permite unir cables virtualmente. Para eliot tan solo es nece
sario que los dos cables se llamen igual almque no esten conectados entre sf. Para
etiquetar cables 0buses se utiliza el modo label (figura 23. !l activar este modo y
realizar una pulsaci"n sabre un cable #bus se abre una ventana donde podernos in
troducir la etiqueta, adem a s de seleccionar posicion, orientacion y estilo (.$igura2%.
.,,.
.I.ctt Cerit., A .: .Q I
1& Midrit. !OIImI
Figura 2". Modo #abe# Figura 2$. Ventana de ed#%ion de eti&uetas
'tro modo de union virtual es a traves de terminales. !l activar e1modo terminal
(figura 2( se pueden seleccionar distintos tipos de terminales, entre ellos el utiliza
do por defecto (default). !l utilizar este terminal en varies componentes y darle el
mismo nombre en todos ellos se consigue una union electrica.
: f > -
+
~ : I
lAlfl )*&
-=0,;
&+
n-
,.
: (J:
PI
"1 '
~
II:
<: >
'-.P-.
CI / f'0 1
2 *
POWER
QROUND
L
BUS
3
\0)
~ ".
Figura 2'. Modo termina#
4
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Figura 26. Union e'ectrlca it traves de termfna.es
Mediante este modo tambien se pueden colocar las masas y alimentaciones del
circuito utilizando las opciones Ground y Potier (figura 26). De esta forma se puede
finalizar el circuito (figura 27).
OSC1/CLKIN
OSC21CLKOUT
L-_":""; MCLRNpp/lHV
RAOfANQ
RAANl
RA2!AN2NR"#$
RA3lAN3I\IREB
RA4fTDCKr
RASlAN4ISS
Figura 27. Orculto cab'eado
%an solo &ueda modificar las caracteristicas de los componentes &ue ' re&uieran(
POt e)emplo modificando el *alor de los componentes pasi*os. +ara e,o(se seleccio$
na un components realizando una pulsacion conel boron derec-o( aparece el menu
conte.tual y se selecciona la opcion "D/%PROPERTIES; tambien se puede utilizer
el modo edicion (figura 20) en el cual tan solo es necesario -aceruna pulsaci6n con
el boton iz&uierdo sobre el componente1 en este modo el cursor se con*ierte en una
flec-a (figura 22). A/ e)ecutar esta acci6n se abre la *entana de edicion donde se
pueden cambiarlas caracteristicas de los componentes (figura 3')( pOI e)emplo la
.resistencia de lO4a 0' o-m. %ambien se puede editar directamente la referencia '
el *alor de un componente sila pulsacion se realiza encima de estes elementos.
10
1. l8l8 ae PR0TLu8 V8H
Figura28. Hoaoea'cl6n
Flecha: modo edici6n
Figura29. Cursorenmoaoealcion
- - - - - . = - = .. - = - = - .. . ..','- - .- - '--::0
CooT_'", B e4 . . . oc. lliil
Hla!lln'
l
1lr
l
R....w.c. [ iii" ~odden
l
Jjdo
l
b :
HoaelTl'0 !'
I A A l! " --- ~ rH- Al
.
l
'' ''
l
RL8c0 -
# "
I 'C$ %oo&'e
-
()I 6A #
-J
ou' ' eo- tle,
l
* iI ! I Jdo', . . . ~ . . # CI '# _# +'. d# I . ,I J! " A o-.
._". . . %C$~
Lat .. ' , , , , , , , , , , , , , ., , .''
I :::
Con e/-o 01eda-ia 2inali3ado el ci-c1i4o elec4-onico 52i'1-a 6# 7. %e-o en el ca/o de
lo/ /i/4ema/ b a/ado/ en 1n mic-ocon4-olado- a1n 01edan 8o- modi2ica- Ja/ ca-ac9
4ed/4ica/ del mi/mo mic-ocon4-olado-.
Figura30. Ventana ae eaicl6n ae uncomponente
08C1/CLKN
08C2lCl1(0uT
'- - - - '- - l HCLRNppl'lHV
MOlANO
RA1/AN1
RA2lAl'l2NReF
RA3/AN3NRLF+
RA4rr0CKl
RA5lAl'l- 88
R8W- T- - - - - - - - - - - - - - -
R81H- - - -
RB2
R83lPGH
R84
Re s
:B 6I %" C
R871PG0
RCorr108orr1CKl
RC1rr108VCCP2
RC2lCCP1
RC3l8Cl /8Cl
RC4/80V80A
RC5l800
RC6iTXlCK
RC71RX10T
8W1
0# 8W- 8P8T- H0H
' t
Figura3'. Ll esquemacompleto
# #
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Enel caso de los microcontroladores, Ia ventana de edicion aporta mucha infor
macion (figura 32). Tal vez lo mas importante es que permite cargar en el micro
controlador el archive de programa ("'.HEX) generado en la compilacion: tambien
se puede modificar la frecuenda de relo (por !" tanto no es necesaria el usa de
cristales e#ternos en la simulacion), cambiar la palabra de configuracion y otras
propiedades avanzadas,
,
. .
1. \'
" ,', $)r
$ompono.ll % .eIer& & ,,' &
( I If_
QI
I
$orr) * m... ')!otvo: I' I$!lif+l, - odde..
* dl.
I
/ TI. 0 1 llm/ ile
iaeTON_4col . . . li H'~AI
~
II& '..
I
2' 3. ::3m4l$lod / ,equere5
C I. IH%
6- l78I
~
H_flt I
!!l!c1 / fii
999
2,: $o* ' ll1 l.o(ion;oot - rdo8i
.
I
'!ii"itIA#
.
z: ~AI .:1
$ . . ,. . ,. )
2$% 2<47:
9
A%van&eo 2iope3!1 eo:
'
.3 - rde=
Ilan%:i(ie2tog>am )'. . . . y' * ,No
::tfs :, :\':'+
:. ,. !:! >=
#an%o. &e ?a!. * etn4Il' !
?ump C ooIl-llaiion;ol' @l
. . .
)o%!I.IC /14It012!~3
)o%el .IC 4 ai+e'12 o=,.,
/ or3re84$<!0 oa7porrv.d A& & ' lifeT=
Wom" AtacI3( ndeli4.....9iIoBs!
"
~5a(~'. 1lllli): 88oclllllff=' =
El+&lv%e:o( .C 6 l,=
C dit.ollol(' I' ' ' ' tIeA ... te. d.,
,'"
>' : " ',~'~ 7 ,&'
Fi gu r a 32. Ve n t a n a d e e d i d o n d e u n micro
1.3 Depuracion de los sistemas basados
en PICmicro
Da caracteristica mas importante del PROTEUS VSM es la capaddad de depurar pro
gramas fuente de distintos lenguaes de programacion, 8demas de aceptar elarchi vo
de programaci,n Intel Hex (- C E), tambien adrnite ficheros I8F UBROF (!"), B#te$
%m&t %O' (%O'), M()*o)+(, %om,-t(.le%OF (%OF) G %*o/m+(l0 P*oton P(llS (B1S). 8l
utilizar estos archivos se puede abrir una ventana de codigo fuentellamada SOURCE
%O'E mediante Ia cual se puede seguir el programafuente linea a linea de codigo.
8demas permite visualizar elementos intern os del PIC como son Ia memoria de
programs, la memoria de datos F8* "la EEPROM, los registros especiales (FSR)
y !a pila (Stack).
8demas, el entomo PROTEUS VSM permite compilar program as fuente en c,digo
ensamblador directamente, 2ara ello, se utiliza el comando SOURCE (figura 33).
12
1. I S I S d e P R O T E U S V S M
*De Fine Cod e Ge ne ration 10015...
S e tup E xte rnal T e xt ,dltor ...
uild ! 11
1. "orra.a#$
Fi%ura &&. Ge ne rad or d e '(d l%o d e )l'*e ro# )ue nte
En el caso del compilador CCS C, despues de compiler se generan, entre otros, los
archivos " . H E X y ".COF, los cuales se pueden urilizar para trabajar con el entorno
PROTE US VSM. Para ejecutar el program a desde [SIS se debe abrir la ventana de
edicion del microcontrolador (figura 32 + en el item PROGRAM FILE se puede
indica! el fichero de codigo fuente urilizado.
"dernas, en esta ventana se puede indicar la frecuencia de trabajo can la opcion
PROCESSOR CLOCK FREQUENCY (debemos observar #ue para la simulacion no
es necesario colocar elementos e$ternos de %&%1aci'n en el P(C, tan s'1%hacen falta
en caso de realizer la placa. En la opci6nADVANCED PROPERTIES podemos ha)
bilitar % configurar muchos mas elementos* configurar el uacihdog, habilitar avisos
de desbordamiento de pila, accesos no correctos a memoria, etc.
+na vez cargado el microcontrolador con el programa fuente, se puede proceder a
,asimulacion del circuito empleando la barra de simulacion (figura 3-. Esta barra
se compone de la opcion MARCH A, PASO A PASO, PAUSA , PARADA.
I I
a
Fi%ura &-. arra d e #l$ula'l(n
Con la opcion MARCH A la simulacion se inicia (e. boron se vuelve verde y fun)
dona en modo continuo. ,a simulacion /0 es e11tiempo real + dependera de la
carga de rrabajo del Pc. En la barra de estado se indica la carga de 1a CPU del PC
(a mayor carga menos real sera 1a simulacion + el tiempo de ejecucion* este tiempo
indica el tiempo #ue tardaria, en la realidad, e. circuito en realizer un proceso (por
ejemplo esto implica #ue, dependiendo de la carga de trabajo de la CPU, un tiempo
de . s en e circuito puede significar varies minutes de simulacion.
11 I . I /0I M /T I 0G1 00'000!.6" 2CP U load 233l
Fi%ura &5. arra d e e #tad o e n #$#l$ula'l(n
1 3
Com pUador C CCS y Sim ulador PRO TEUSpara M icrocontroladores PIC
La option STOP para totalmente la simulacion mientras que PAUSE Lapara de for
ma momentanea permitiendo hacer uso de las herramientas de depuration.
La opcion PASO a PASO permite trabajar en tramos de tiem po predefinidos y, ade
mas, permite utilizar Lasherramientas de depuracion, Esta opcion esta ligada a
Laconfiguracion de L a animacion figura !"#$ SYSTEM %& SET ANIMATION OP
TIONS %& SINGLE STEP TIME donde se puede definir el incremento de tiempo
que se desea que pase cada 'ez que se pulsa esta tecla.
%% Sindabon SpE(dt%%%%
fr)**+, P<'I S;ocood: ~
-m.,.repper/...., 0
SInIeS!ep Tim e: pm% S"o#$~e%oltae&!lCc'(u)
M a*+ SPla-,,0 Ps;;, S"o#$reCm ent #it" -no#+)
il1 II ~el
,%oIt./l'lC#eriRaner,
M 01!I1UI'%dtaa Is
2meri -l3e4hold, l;2'lu,,,
SPlCE O ption<
/igura !". Set animation options
En este cuadro de dialogo tambien se pueden cambiar los siguientes parametres$
FRAMES PER SECOND: numero de 'eces que 5a pan talla de ISIS se refresca
en un segundo par defecto 67#.
TIMESTEP PER FRAME: indica el tiempo de simulation par cada uno de los
frames; +7ideal es que sea el 'alor in'erse del escogido en la opci"n FRAMES
PER SECOND.
ANIMATIONS OPTIONS: permite habilitar la 'isualization de las sondas de
tension, y corriente, mostrar los ni'eles +"gicosen.los pines, mostrar e+ni'e+ de
tension en los cables mediante colores .mostrar la direccion de La corriente en
los cables mediante flechas.
VOLTAGE/Clm-RENT RANGES: permite determiner el umbral de tension
89# y corriente para utilizar en la 'isualizacion de las correspondientes ANI
!"rATIONS :P-*:;S.
En este punto se puede simnlar 3y animar# un sistema con el PICm#$r% /igura !&#.
+.7mas interesante de la simulaci"n can microcontroladores es +autilizacion de las
.herramientas de depuracion Es decir, 'isualizar mediante 'entanas las distintas
partes internes del microcontrolador$ memoria de programa, memoria de datos,
pila, etc. La mayor parte de estas 'entanas solo se pueden 'isualizar durante una
PA&SA.
+<
1. ISIS de PROTEUS VSM
R1
S V V 5

1M
R2
1M
OSC11CLI(IN RAG I-ii:------'
O~~ AAI~~-- J
4 MCUI ~ H-------------'
RMIlOClll
RBOiINT ~--------l
RBI E---!-I
Ra2: P---~-i
A8l R..--':--l
RI34 1-!~--:-I
RBS ~i:--!-i
RBIII-':-!'~--"'-i
R!!7
PIC#$%~
S&-SPST
S''2

Figura 37. Una simuJacl6n en marcha


Desde el menu DEBUG (figura 3! "am#ien se $uede ini%iar la simula%i&n $er&
$ensand& en la de$ura"i&n. C&n la &$%i&n STARTIRESTAR DEBUGGING se $ue'
de ini%iar la simula%i&n $er& (a%iend& una $ausa $ara )er las dis"in"as )en"anas
de de$ura%i*n. +am#ien se $uede e,e%u"ar el $r&grama dire%"amen"e %&n Ia &$%i&n
EXECUTE, EXECUTE ()*+,) BREAKPOINT -EXECUTE FOR SPECIFIED
TIME .ue $ermi"e e,e%u"ar dire%"amen"e un $r&grama/ e,e%u"arl& sin $un"&s de
ru$"ura (en -l%as& de "enerl&s! . e,e%u"arl& en un "iem$& %&n%re"&.
R..../l'+0:1l2*3I(+4
,,_ Pe t ,_ . . _ 5a/a
. Co t f q x . ~ . . .
Use 0.....1eDe#u23
Figura 3. Ef menu DEBUGantes de la slmulaci6n
'%
15
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
Desde esta ventana tambien se puede reinicializar la memoria EEPROM del rni
crocontroJador mediante RESET PERsrSTENT MODEL DATA. Al producirse una
pausa, el menu DEBUG se modifica (figura 39) mosrrando las correspondientes
herramientas de depuracion.
Llbrm !"!!# $stem %elp
., 5t4lt/l!dtO! tl"Il#l!
&'(
E$eat. ) lthotA a.... "pOi%ts !* !!.+ !, !(
E$eate lot "Jied -ime
,.!& ,stop . ... , &l/
"0topll!t1 2'3
,l.,0l.p4lul. arf+ &''
'.# Remote '(truo MOllitor
& & I Til.. )O#"& or*te+,
5) -, 3... tIoiII-
!6 0lll!7lo(r8, ll9, l
l& . . atc/ . lrO01
!. 2lr /:7 s...,.4od ;; 7 '
0. 2'4 /:7 <=,.>.!# %*%
2. 2'4 ? .uf) @ A b(c("6 <'
B. 2'4 /:7DateCv 67'
D . 2'@ E9(i:7F''r.f! G'3(!'(<H,7'
8 p'4 cpu99.A !, , , , , , #emor I ul
!. PIC CPU3l4+ 111
5i6ura 37. EI menu 8E9U:en una pausa
Jstas herrarnientas son (figura 1.)E
SIMULATION LOG: #ensaKes resultantes de la simulacion .
WATCH WINDOWS: <entana de visualizacion de posiciones de memoria.
2ermite afiadir la ? ue el usuario desea ver.
PIC CPU REGlSTERS: #uestra los registros FSR del PIC.
PIC CPU DATA MEMORY: #uestra la memoria de datos (RAM).
PIC CPU EPROM MEMORY: #uestra la memoria de datos (EPROM).
PIC CPU PROGRAM MEMORY; #uestra !amemoria de programa.
PIC CPU STAC: #uestra la pila.
!=
1. ISIS de PROTEUS VSM
/
o
o
" "
~
A
l S I
...
Figura 40. Ventanas de depuracion
La ventana WATCH WINDOW es la mas versatil puesto que se pueden aiiadir
variables y modificar su visualization. Al pulsar el boton derecho sobre la ven
tana se abre un menu contextual (figura 41). on ADD ITEMS (name/address) se
made la variable a visualizar directamente can el nomhre predefinido (figura 4!)
en el PIC "# en el caso de varia
bles propias del programador# se
pueden visualizar par direccion
(figura 4$)# donde se le indica el
nombre# la direccion en hexade
cimal# el tipo de dato (byte, word,
etc.) y el formate de visualizacion
(binario# decimal# etc.). %1tipo de
dato yel formate tambien se pue
de cambiar desde DATA &'(% '
DISPLAY FORMAT.
vatue
Ot;oOOlll:;l;O
abuu..u-u
ws.ten e ..
S 1I V6
" )*Aad*)
*l+1)ffi , - o. / ./
"'S "'cM'k.!I td"l E~1
..__
/ s.e
I i. 0ctfor) ...
J5<l _ ...
Figura 41. Menu contextual de
WATCH WI!"W#
11
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Can WATCH,POINT CONDITION se pueden habilitar puntos de ruptura median
te condiciones sabre las distintas variables (figura 44)i se indica la variable, la mas
cara de la condicion (NONE, AND, OR, XOR) Yel tipo de condicion (NONE, ON
CHANGE, EQUALS, etc.).
ET
Fi gu r a !". Add by Na m e
Oala#$%
A& ' %Cl( ) slti1q
~B}'te
(' Word (2 bjite;1
(' O~W",d(4b)te:1
c- QYOdW""dlS b*te.)
,.. ( EEE floa( I"b! "" l
# ( EEE + Olilie (, - )l%. e' l
& /0ecO#$""t (1bY """ )
# 2 ierochip#Io%I (!bjq:)
& ::1
')~(Ql)*I:
(+"SirloI
3% Oel%4
& /e5l6adec#
4 ~dr,t-iiO.
( l5mignedlliege,
Fi gu r a 43. Add by Addr,ess Fi gu r a 44. P u n t o s d e r u p t u r a
/a* una ventana de depuracion 7ue solo se visuali8e si se .ha incorporado un fi
chero COD 9COF al microcontrolador, se trata de la ventana CPU SOURCE CODE
(figura !:). Can esta ventana se puede seguir la simulacion linea a linea del archive
de codigo fuente.
En esta ventana (tambien en el menu DEBUG) estan disponibles unos botones de
control (figura !;).
18
1. ISIS de PROTEUS VSM
OP. void mainO {
---- char kj
lnt V,Xj
0137
018a
0199
(lISe
1)1~;;
OJ.::l
01'8
019
01-".1-
Ol!S
O:JJ" #
du:>
----II
----II
---II
---- 1/
---II
OIJ'-(" )
$ $ $ $ }
l%d&in;$ tOi
'(d&inltO:
)%*t&(&)+ll +),(-." /);
, %d&)+t0:1234i ,*o... !"):
5ilil e (-." /) {
k"#$%d&'e(cO )
&k*
)(;1(.-48; 11w.30
i3'*~O)
11('6)
, %d...)4lt7(23);
e#+#,,
l%d&)+te(')j
)*i nt38 %d )+t% 1J7%1 'j
)*lnt3 lo4P.+t%:&11# :1:1.;
)I1int3 1%d&)+t%, 1)911,' ;
)*lnt1 %d&)+te.1~1.v :
Pr"#- l%d&)+t%, 1n+1 ,: ;
;;3m)*ln1188 %a*a%t:e*
iJ;~*n)*8me %a*a%t:~*
Ijlm)*llne %a*a%te*
l;im)<mI88 valo* e, %t (
;;im)*ime valo* Md.
I;im)*ime valor numer1co
$ 0
$ ~
$ ~
$ ~
$ =i>
$ ,0$ .1
?i@+*a 9A. 4a ventana 7P" So+*%e %ode
I
".(
)( . u a ,
?i@+*a 9B. 4o,%ont*ole, )a*a Aa ,im+3a%ion
Sim+la%ion en modo %ontin+o, no )e*mite ve* la, ventana, de de)+C
*adon.
Pe*mite eje%+ta* +na ln,t*+%%ion; ,ie, +na ,+(*+tina 0+na 3+n%iBn #a
eje%+ta di*e%tamente,
Pennite eje%+ta* +na in,t*+%%iBn; ,i e, +na ,+(*+tina 0 +na 3+n%ion
ent*a en ella.
-*a(aja en modo %ontin+o Da,ta 0+e en%+ent*a +n *eto*no de %+alC
0+ie* ,+(*+tina.
-*a(aja en modo %ontin+o Da,ta 0+e ,e en%+ent*a %on +n )+nto de
*+)t+*a.
Ea(ilita 0de,Da(ilita lo,)+nto, de *+)t+*a.
1F
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Hay una ventana de diagnostico que facilita la depuracion, almacenando los erro
res, rnensajes de diagn6stico y avisos producidos durante el proceso de simulacion
(figura 47). En la barra de estado (ona inferior del area de trabajo) se muestra un
aviso (figura 4!)i con una pulsacion en el aviso aparece la ventana de diagnosis .
......ag. S O I A ce
al" # $ R ....... 7% & tr(' # .( # c# ) i6" * # t+ l# .4boo, l .. - .... .,,,,, rml( ( 7
., " ( ... , / # do ou# d c.,..,.& ed ( $
0c & t1gdotogn + ,# oi# t2 .. d34.5( #.... $ 5. [leell_I F,O (....& 4& ..... on.r.s67f5lE
o08 + , fl9 4lot.oo _lc1od( ,$
,.. rl .. b. 6.... & & g "",""""td o r
., 4.,# & # .,.,..,ylotO I I I 1I i > I < ' ! edor.
0" ...5l# # 1lpbl..., & 4:!f+ ;f7<
.04=( " 4i+ E & & % % % # >ul, 3?6?@& (+ ) & .o# A.., .. E# oor,,..., & @@:B?% % 7
0loaded .... li tr (1C( + D$ 5E5# 1Ed01+ ( 8 ElF 5# # 9 omp1G# H6,lem" ( rl.,d7# In 5Fi" ?.# l;769 + 5H
.4# + & 6$ ,.# .... 7% % % :& !...:6!5& ) ...# It# & g4l+ & 66?!,.,... I ,! ! ;
oJ l....,., & & ?! I;o j eI 4., .... & .& JJ46( l6 dol. ! .! lI
.0load,ng HE)(lie j,4ocK..HE/ . & & -
0=.od & L, & % & f( ( lbIlM,.omlM t.HF# ...,ftC15 :,r
0loaded 5 3 11$ % & & & 5. W I I I d ed! tlol.3# j# (et # iF
Fi gu r a 47. M e n s a je s d e d i a gn o s t i c o d e fa s i m u fa c i n
" e pueden configurar las opciones de esta Kerrarnienta desde la opcion DEBUG~
CONFIGURE DIS GNOSTIC (figura 4@). En la ventana se muestran los componen
tes del esquema susceptibles de un diagnostico en la simulacion y las diferentes
posibilidades de diagnostico y el tiempo de diagn6stico (figura ;% ).
FI gu r a 4!. M e n s a "e s d e l i t #e r r a m i e n t a d e d fa gn o s t i c o
.5lbr6tN9 !f& 5# # )# .Ite$ Ha# tI
+ KloH5l$
".... #O llJ $ _
_ _ ._ t , , , .
Fi gu r a 4$. %a c o n fi gu r a c i o n d e d i a gn o s t l c o s
20
1. ISIS de PROTEUS VSM
r , , , , , . C 4 t 0 0 U l " "
InSYSl l ~ (ISIS/PROSPl C EI
~ ~ILr OR0 -4 X20 Il KP (US)
0 524 0 5 l U l l
0 524 0 5 IU 21
OS24 0 51U 3
- III PIC 1!"#2$% (UG)
&
I I'IO(l &)L&*+*r
. . , I, . , . ,-.,&n~. . ,
.. M el 1' l Ol )l l SF RIC .&n /.
!R. . . + E" *&0,
I SI" " " " , " " E1*nt .
Inten\l l l l EYer' l l
I 2 II3I1+.004n5l 6 &.U &
PSPM o dIA e
II_l nl l l mo .l !o n "II#.I
78(-r 5 50 . O9.l &n*: +* .&n"l (-r 5.l !n
;r 5: 15:8)-l 5.8&n 595r *.*n l &: +8"*r *nt *: r *:-l t 5+&: +*l 5n5l 8:8:< *n *= 8t *) SOUR
C E 595r *.* 8n+8.5+& *l +8:9&:8t 81* "-*nl * +*l 5n5l 8:8: $ t r 5: -n5 9-l :5.8&n :* 9-*+*
5..*+*r 5 *l ("8(-r 5 %1)&
> OI2 10 C %C -$ 'o de %S?
. , C l l @" '10 A51. " ~, ''4 , 9(&> 1 "8*
U L&5+*+ 12$ ()*tet C I t " 0 " , , 1, , , , 1 EEPRO6 +&l *
d "+d!,? EX l *l o ' M o o I1r-m .E/'
._. F l o o dtd0l -)l 123 ()*tet 4o m5 *l e ' M o e4l.... .6)(&
d"-o ded %78 9l o ,t0m #0d : 1 do l o ,B8t *C
M eU; O< =
:P*n 9l e(e &n U OOOOI I5 +&(. l 5l
:9>& PIOI?o n Uo o o .>S> 8o &l 0I
.r>Pl &,, (DI ~1~1~!, +(II"
09l r@P I " t J < , , . , A o o ro .@:I d.l l ' I' >
'8"'.=l C Ot &n UO(l (t32 > +8(8t 5l
'8"'8n 9t 5,& o n UOO13B & 8,!l 0I
.Pl n Pl o l ? o n UOO< -.**l t +&(. l . .
+ PIC 1!m0deI , " " '*:t 0 E0 0 0 31$-8+ 3!$5" " '&,n( PIC I!!2$ +*&, 8&.<&.
'/IOl 2 IOI 7,l l . , =F -" +* l "=&l
182 C . G '. G . 111H t '
" , '
78(-r 5 51. R*:-l t 5+& del +l 5(n!:t l .&
E= l 8:t 5+& +* n&+*: $ 95t 8l l 5: :* 9-*+*n *n.&nt r 5r .&n =5 5F -+5 +*l DESI GN EX
P"ORER (5 *:t 5 &9.8!n 9o derno C5..*+*r 0 .r 51*: +* d*Cr*nt0C &9.8&n*:G .&)5nI
+& JESIKL, ,&t &n +*r *.4&, *t .. . En :- 1*nl 5n5 +* t r 5,5B& :* )-*:t r 5n t &+&: l &:
n&+*: $ 95t 8l l 5: M-* "&r )5n *l .8r .-8t & (78(-r 5 52,
21
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n l r o l a d o r e s P I C
i5"''''
~.~
Lb ....
c l
.......- .
! ' " L...
-
t..
!
Ed(Qc~PrOOCllbe''''
I
." ...." .
- ...._
""
t'
-
....... n
"#o .l $ ~
.....
..
-
fdt $'oOI"'_ tIH, ..
i" ' " M
'1"'- ~,KII'l
~.
l
-
l I ! I ~%I I " "
""%& -
" ' .. "' """"' - I ~'
-
tdil""..... '_ ...
.....
. ....
""# - ......( I I i " " ' ( ~( "
!-
..
- Corltoo.. ~""', ..
%"~
"'~#
"
.....
- )I ' .... .M ..~,
... ,$ .... '"
"
!
% or.% !
~ tIOo' *+& o I
I.1&IC_
::::,r
...
...." " ' I I " ' l I l ' - n .." ...' ' " '
~.~'"',(I
..
-
." .,i l l )I O ' " .
"
-
)*- - -
I
.. -.... .I ~l 'l o . ~ ..
-
....,....." ' " ,+
"
-
~,~."""~
~-
- .....
"""~
"
~' i O 'I
- " -
.
-Il ~5.eot .l %- P .
fil.c% otO./ o.e0
ililfIel,n~or ../0 +-
fir
" l 1oot.t.o( I
c o m p o n e n 'e s
~! '
lo5',.'lI'! ~"
"".
r " L" .
" - -
"- ""i .
"r
!/
..-
! !
- ' .I 1' I ' C I
- "
.
IICO'"
""~
2"'i - " "...
! ..
I
" " .
2 " ~3.. - .....
E l
I I )I I 4' )4
Y
" ""'"
- '....
5
I I C U ' "
% !1
" " " ..
"',
3t4o"
-
" .....
'1'....
t% % !% % '"
,,,.,,.
" ( I d I )l .
' '5.)
.
1% % %
6! t''....... .......
... - 6o.~~
Y":II'
% 7 Y " " I '
.....~
6!
~# .......
..."'"
6!
~7
.......
-
t.( ...... "ol
.,.~...
.
~I
n o d o s
8i9:r*5;. La <ent*n*=e/ i9nE>?lorer
2 2
2. C o m p i l a d o r C C S C
Capitulo 2
C o m p i l a d o r C C S C
2.1 'ntroduccion
EI Compilndor C de ces ha sido desarrollado espedficamente para PIC MCU, ob
teniendo la maxima optimizaci6n del compilador con estos dispositivos. Dispone
de una amplia libreria de funciones predefinidas, comandos de preprocesado y
ejemplos. dernas, suministra los controladores (drivers) para diversos dispositivos
como !CD, convertidores D, relojes en tiempo real, EE"#$% serie, etc. !as ca
racteristicas &enerales de este compilador y mas informacion adicional se pueden
encontrar en la direccion http'(())).ccsinfo.com.
*n compilador convierte el len&ua+e de alto nivel a instrucciones en codi&o rna
,uina- un cross-compiler es un compilador ,ue funciona en un procesador .normal
mente en un PC) diferente al procesador objeto. El compilador CCS C es un cross
compiler. !os pro&ramas son editados y compi/ados a instrucciones ma,uina en e/
entorno de trabajo del "C, el codi&o ma,uina puede ser car&ado del "C al sistema
"IC mediante ellCD2 (0 mediante cual,uier pro&ramador0 y puede ser depurado
.puntas de ruptura, paso a paso, etc.0 desde el entorno de trabajo del "c.
EI CCS C es C estandar y, adernas de las directives estandar (#illc/udc, etc.0, surni
nistra unas directivas especificas para "IC (ltdc'vice, etc.0' ademas induye funciones
espedficas (bif_sefO, etc.0. 1e surninistra con un editor ,ue permite controlar la sin
taxis del pro&rama.
NOTA
En el manual de CC1 se da rnucha mas informacion de la ,ue a continuacion
se va a dar. En este capitulo solo se describiran los elementos mas basicos y
esenciales para comenzar a pro&ramer.
23
Com pilador C CCS y Sim ulador PROTEUSpara M icrocontroladores PIC
2.2 Estructura de un programa
Para escribir un programa en Ccon el ccs Cse deben tener en cuenta una serie de
elementos basicos de su estructura (figura 1).
DIRECTIV! DE PREPR"CE!D"# controlan la con$ersion del programa
a codigo ma%uina por parte del compilador.
PR"&R'! ()*+CI"+E!# con,unto de instrucciones. Puede -aber uno
o $aries# en cual%uier caso siernpre debe -aber uno definido como principal
mediante la inclusion de la llarnada maint).
l+!TR*CCI"+E!# indican como debe comportar el PIC en todo momento.
C"'E+TRI"!# permiten describir 1 0 %ue significa cada linea del programa.
18161>
dela. aloc/
XT m0D11
21.ndrd3 2o
.33333 Directi$as
3333 44444 )uncion
Tf'*" ur ..
v.,O -
$.at" OUtput bit PUI. &0
It11oi output 151c )T+ 1( .
t31u..... t" 4 4
333444444 )unci6n principal
'in .4
7.t.. 3tl8D..#3" P..TCCI27ER+9 711Tee DIV #
" ..
"to
..
..
"
71
Fiura 1 .Estructura !aslcade un proram a
2.: Tiposde datos
ccs Cacepta los siguientes tipos de datos#
Tipo Tamaiio Rango Descr;.E3cion
Inn
1 bit "al Entero de 1 bit
!-ort
2 4
4444444444444444444
2. Compilador CCS C
Tipo Tamaiio Rango Descripci6n
Int
8 bit o a 255 Entero
Int8
Int16
16 bit o a 65.535 Entero de 16 bit
Long
Int32 32 bit o a 4.24.6!.25 Entero de 32 bit
"loat 32 bit
#1.l!5$l%&3'' a
Coma (lotante
#3.4)2$l%*+S
C,ar 8 bit o a 255 Caracter
-oid *
*
Sin .alor
Signedlnt8 8 bit *128 a /12! Entero can signo
Signed lnt16 16 bit *32!68a /32!6! Entero largo can signo
Signed lnt32 32 bit
023+a /1231-1)
Entero 32 bit can signo
2.4 Las constantes
Las constantes se p2eden especi(icar en decimal3 octal3 ,e$adecimal ) en binario4
123 Decimal
)123 %ctal 1)5
%$123 6e$adecimal 1%$5
%b%l))1) 7inario 1%b5
'x' Caracter
89)1)8 Caracter octal
895c:S8
Caracter ,e$adecimal
2 5
:demas3 se p2eden de(inir constantes can 2n s2(i'o4
lnt8 12!)
Long 80UL
Signed I;T16 B O L
"loat 3.14"
C,ar Can comillas simples 8C8
Tarnbien se de.(inen earacteres especiales3 alg2nos como4
9n Cambia de linea
9r Retorno de carro
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U Sp a r a M i c r o c o n t r o l a d o r e s P I C
\t Tabulacion
\b Backspace
2.5 Variables
Las variable se utilizan para nombrar posiciones de memoria RAMi se deben decla
rar, obJigatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y e l
tipo de dato que se manejara. S e definen de Lasiguiente forma
T!"# $#%B&'( )*&!*BL' +,)*L#& !$!-!*L.
TlPO /ace referenda a cualquiera de los tipos de datos vistos en el punto 0.1. 'l
NOMBRE_VARlABLE puede ser cualquiera y el valor inicial es opcional. )eamos
u n ejemplo:
float temp_limic=500.0;
Las variables definidas en u n programa pueden ser de tipo LOCAL 2GLOBAL. Las
variables locales solo se utilizan en la funcion donde se encuentran declaradas; Las
variables globales se pueden utilizar en todas las funciones del programa. *mbas
deben declararse antes de ser utilizadas y Lasglobales deben dedararse antes de
cualquier 3unci4n y fuera de elias. Las variable globales son puestas a cera cuando
se inicia la funcion principalmain56.
~Lnclude <16f876.h>
#us !L"# $%L&%'=(000a&&)
intl6counter;
void FUNCIONtvo ia)
/1 V ariable g~obal
c/ar K, kens!"!# $$ V ariables lo%ales
voi& main' (
int8 temp; 1/ variable lo%al
Las variables pueden ser definidas can
7 *8T# 5usada par defecto, no /ace falta que se indique6 donde la variable
e9iste rnientras la funcion esta activa. 'stas variables no se inicializan a cero.
:u valor se pierde cuando se sale de Lafuncion.
04
- - - - ~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2. C o m p i l a d o r C C S C
STATIC: Una variable local se activa como global, se inicializa a cero y man
tiene su valor al entrar y salir de la Fundn.
!"T!#$: %ermite el uso de variables en oom&ilaciones multi&les,
2.6 Op er a d o r es
2.6.1 Asignacion
+= Asignacin de suma '()*yes 1 0 mismo +ue (*()y,
- *
Asignacion de resta (x--y es 1 0 mismo +ue x=x-y)
It*
Asignacion de multi &licacion '(.//./yes 1 0 mismo +ue (*(ry,
0* Asignacion de division (x/ = -y es 1 0 mismo +ue (c:(0y,
%= Asignacion del resto de la division '(1*y es 1 0 mismo +ue (*(1y,
22* Asignacion de des&lazamiento a la iz+uierda (xcc=y es igual +ue (*(3y,
44*
Asignacion de des&lazamiento a derec5a '(44- - yes igua6 +ue (*(7y,
&= Asignacion A$8 de bits '(9./,/ es 1 0 miS:;: +ue (*(9y,
;* Asignacion <# de bits '( ;*y es 1 0 mismo +ue (*(Iy,
" =
Asignacicn <# !"C=USI>Ade bits '(.*y es 1 0 mismo +ue (*(.y,
2.6.2 Aritmetlcos
+
Suma
-
#esta
*
?ul ti&licaclon
I 8ivision
%
?odulo, resto de una division entera
- -
Incremento
++ 8ecremento
sizeo@ 8elermina el tarna@io, en bytes, de un o&erando
!n las o&eraciones de decremento e incremento, en @uncion de la &osicion del o&e
rador, se consigue un &reincremento '))A,:un &ostincremento 'A)),.
27
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
II b-16 Y a~4;
2.6.3 Relacionales
< Menor que
> Mayor que
>= Mayor 0iguaJ que
<= Menor igual que
-
IguaJ
!= Distinto
?: Expresi6n condicional
2.6.4 Loglcos
! NOT
&& AND
II OR
2.6.5 De bits
-
Complemento a
& AND
1\
!" E#C$%&I'(
I OR
) *espla+arniento a derec,as
- *espla+arniento a i+quierdas
2.6.6 Punteros
. *irecdon
If
Indirecci6n
-> /untero a estructura
28
2. C o m p i l a d o r C C S C
Orden de precedencia de los operadores:
Expresiones en orden de precedencia descendente
(expr)
lexpr -expr ++expr expr++ --expr expr--
(type)expr "expr &value sizeof(type)
expr'expr expr/expr exprexpr
expr+expr expr-expr
expr!expr expr"expr
expr#expr expr#$expr expr%expr expr%$expr
expr$expr exprl$expr
expr&expr
exproexpr
expr & expt
expr && expr
expr && expr
expr' expr:expr
&value $expr &value+sexpr L value-$expr
&value($expr &va)ue/$expr &value$expr
*va*uex$expr lvaluecc$expr &value&$expr
&value$$expr lvalue &$expr expr+ expr
2.7 Funciones
,as funciones son -lo.ues de sentencias/ todas las sentencias se de-en en0arcar
dentro de las funciones. 1l i2ua) .ue las varia-les+ las funciones de-en definirse
antes de utilizarse.
3na funcion puede ser invocada desde una sentencia de otra funcion. 3na funcion
puede devolver un valor ala sentencia .ue *a4a lla0ado. El tipo de dato se indica
en la definicion de la funcion: en el caso de no indicarse nada se entiende .ue es
un int8 )' en el caso de no devolver un valor se de-e especi)icar el valor VOID. ,a
funci5n+ ade0as de devolver un valor+ puede reci-ir para0etres 0ar2u0entos.
29
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
La estructura de una funci6n es:
Tipo_Dar:.o
{
Npmbre_Funcion (ripo paraml, param2, ....)
(sentencias) ,.
float trunca (floae a)
float b,.
b-ttoor (a) ,.
a-a"laa,.
a-floor (a) ;
a..a~O.OJ.;
a-ba,.
return (aJ,.
La forma de devolver un valor es mediante la senten cia RETURN:
retum (expresion),
return expresi6n;
Donde expresi6n debe manejar el mismo tipo de dato que el indicado en la de
finicion de la funcion. En el caso de no devolver nada se finaliza con RETURN,
a1encontrar esta sentencia el compilador vuelve a la ejecucion de la sentencia de
llamada. Tambien se puede finalizar la funcion sin RETURN, tan solo con la ave
de cierre !"!.
Las funciones pueden a#ruparse en fic$eros de librerias <fichera.It>, que se pueden
utilizar mediante %a directiva !inc"#l$a <fichero.h.
2.8 Declaraciones de control
Las declaraciones son usadas para controlar el proceso de ejecucion del pro#rams.
Las que admite CCS son:
lj-Elsc.
While.
3 0
2. C o m p i l a d o r C C S C
Do-While.
For.
Switch-Case.
Return.
Break, Cantin ue y Gota.
2.8.1 IF-ELS E
Con 1aayuda de IF-ELSE se pueden tamar decisiones.
i:f (exp.t:esi6n)
sencencia_li
(else
sentencia _2;]
NOTA
1...05 elementos que se encuentran entre corchetes [J son opdonales.
rimero se e!alua."a EXPRESI0 y si es cierta !"R#E 01# e$ecuta 1a SE"ECI$._l,
en eJ caso contrario !F$LSE .0 0# e$ecuta la SE"EC"$_%.
ueden anidarse los IF-ELSE dando lu%ar a los ELSE-IF& esto permite tomar deci&
siones multiples.
if !e'(resi)n_l*
sentencia_l&
+else if !e'(resi,n_%*
sen tencia _2i J
-else
sencenClil_.&/
'n este caso las EXPRES",ES se e!ahian en orden( si al%una de e)as es cierta la
SE"ECI$ asociada a ella se e$ecutara y se temrina la *uncion. 'ncaso contrario
se e$ecuta "a SE"ECI$ del ELSE. 'n am+os casos si e,iste.n !arias se.ntencias
(ara e$ecutar se de+en utili-a las lla!es f I:
31
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
if (e.><presi6n)
sencenci<l_l;
sentenCid_n;
(else
sentenci<l_l;
sentencia_n;
JJ
Eiemplos:
IF (A==O) =!"#
E$SE C=%&
IF (A'=!) =!"#
E$SE C=%:
32
IF (A(!")
)IF (A(*") +=%#
E$SE +=!%#,
2. Compilador CCS C
IF (A>10)
{IF (A>20) B=15;}
ELSE B=5,

2.8.2 SWITCH
Swifch es un caso particular de una decision multiple
swit.cn (expresion)
case constante 1:
sentencias;
break;
case constanta 2:
sentencias;
breek:
detail 1t:
entencias;]
Evalua la expresi6n y en orden a la CONSTANTE adecuada realiza Lassentencias
asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DE
FAULT (este comando es opcional),
EJ comando BREAK provoca la salida de SWTTCH, de 10 contra rio se ejecuta el
iguiente CASE.
NO!
"#$o puedcn existir dos CASE can %a misma CONSTANTC.
&&
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n f r o l a d o r e s P I C
Ejemplo:
N O
2.8.3 FO R
Se usa para repetir sentencias,
Switch (A) {
case 0:
8=1;
break;
case 2:
8=2,
break;
case 3:
8=3;
break,
default: break;
for (inlcializacion ,. candicion de finalizacion incremento)
sentencias;
En las expresiones del FOR Ia inicializaclon es una variable a la cual se Ie asigna un
valor inicial con el que controlar el bucle, a condicion de !inalizacion sirve para
evaluar ANTES de ejecutar las sentencias si es cierta 0 no, en el caso de ser cierta se
ejecutan las sentencias "en caso contrario se sale del FOR. #or ultimo, la expresi$n
de incremento %decremento modi!ica la variable de control OeSPUES de ejecutar
el bucle&
NOTA
Se pueden anidar bucles fOR utilizand distintas variables de control&
34
2. C o m p i l a d o r C C S C
Si se ejecuta la siguiente expresion se consigue un BUCLE SIN FIN;
For ( ;)
Ejemplo:
sentenciils;
S!
1
NO
~
IMPRlMIR N
L
N-N'I
For (N=1 :N<=1 0;N++)
I{
I Printf("%u",N);
}
2.8.4 WHILE I DO-WHILE
WHILE se utiliza para repetir sentencias.
while (expresion)
sentencias;
L a expresi6n se evalua y asentencia Bejecuta mientras la expresion es ver!a!era"
cuan!o es #alsase sale !el WHILE.
35
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
DO-WHILE se diferencia del WHILE Ydel FOR en la condici6n de finalizacion, La
mal se evalua a l fi n a l del bucle, par Laque las sentencias se ejecutan a l menos una
vez,
Do
sencenci~s;
while (eApresion);
Si se ejecutan las Sig1.1 ientes expresiones se consigue un B UCL S!"FIN:
While (1)
(
DO
While (1)
jemplos#
3 6
s a r r c e n c i a s i
serit.erici.es:
Whi l e (N) $ $ M !"#)
$
%&"'
(&)'
2.8.50tros
Return: se emplca para devolver datos en las funciones.
Break: permite salir de un bucle, se utiliza para While, For Do Y Switch.
Goto: provoca un saito incondicional.
51
A=1,
8=2,
I~hile !"5 & & M<10);
~~
NO
,
2.9 Comentarios
#os cornentarios en el pro$rama facilitan la compresi%n de las distintas e&presiones
tanto para el pro$ramador como para 'uien tiene 'ue interpretar dicho pro$rama.
!o afectan a la compilaci%n por 1('ue pueden ser tan e&tensos como el pro$rarna)
dor 'uiera. *e pueden colocar en cual'uier parte del pro$ram a y con dos forma)
tos:
+. Comp il ad or CCS C
,tilizando /I. -l colocar estos si$nos se comienza el cornentario y finaliza en
el final de la linea.
/1 Comentario que termlnilrEi illuoe: de eet: #ned.
,tilizando /* y "l, *e debe utilizer al inicio y al final de cornentario, pero no
pueden reperirse dentro del mismo comentario.
/' eece comencer io no iinallzil al inal de e!ca linea
flnaliza cuando se clerre el comentario ~I
37
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M l c r o c o n t r o l a d o r e s P I C
2.10 Di r e c t i va s !u n c i o n e s "P r e p r o c e s s o r
c o m m a n d s y #u i l t $i n !u n c t i o n s %
2.10.1 Di r e c t i va s
Las directivas de pre-procesado cornienzan con el simbolo / I y continuan con un
comando especlfico. La sintaxis depende del comando. Algunos comandos no per
miten otros elementos sintacticos en lamisma expresion. Muchas de las directives
utilizadas par CCS son extensiones del C estandar.
ItDEFIE!"#!$I% !lI P expr !I "LI#!
&lEL#E IfIFDEF id %'$A%(Acmd
Estandar C
)*#! I tENDI P itUNDEFid
) E$$"$ illCL*DE +FiLEA(E+
)ILIE 'I!,%L"-AL )#E'A$A!E
Cualificadores
.I!,DEFA*L! &lI!,xxx
,, DA!E
-- --
LINR__
--
'C/,,
Identificadores
--
DE0lCE
--
, ,'C-
--
,, !I(E
--
,FILE
, - ,-
'C(,,
,, FILEA(E,,
RTOS 1I!A#2 ru#E$!3#
Especificacion
)DE0ICEC/I' IIID"filename" )F*#E#options
Dispositivos
.ID C/EC2#*( .ID*(-E$ II#E$IA*4E
)*#EDELA5CL"C2 m#EFl6ED,I" If*#E$#787
Librerias
)*#EFA#!,I" m#E17C 9t*#E#'I
predefinidas
russ #!ADA$D,1:
)A#( ItBYTEid=id II$"(
)-;!id<id.const )EDA#( #TYPE
Control de
)-I! id<const.const &IFILL,$"( !iZERO_RAM
memoria
=-*IlD )L"CA!Eid<const
II13YTEid<const il$E#E$0E
Control de
) CA#E )"'!n &t'$I"$I!5
compilador
b"$% ltI%"$E,>A$I%#
A 1: largo del presente libro se iran viendo varias directivas en su ambito de apli
cacion particular.
3 8
2. C o m p i l a d o r C C S C
Como ejemplo se pueden comentar:
IIDEVICE chip, permite definir el PIC con el que se realizara la compilaciOn.
#device PIC16F84
#F!E! options, la cual peunite definir Ia pala"ra de confi#uraci$n para pro#ra%
mar un PIC. &or ejemplo, en el PIC16F841as opciones posi"les son:
'&, (), *!, nc, +O,D), ,D), +O&lI), &), &-O)EC), +O&-O)ECf.
Hdevice PIC16F84
#fuses XT, NOWDT, PUT, NOPROTECT
III+C..l/E 0filename0, pennite mduir fichero en el pro#rama.
linclude <16F4!"#
11fuses XT, NOWDT, PUT, N$PROTECT
1l!E DELAY 'C.OC23!&EED4, permite definir las freruencia del oscilador del
PIC, el compilador 56utiliza para realizar caleulos de tiempo. !e puede utilizar 7,
7*8, 2 92*8 para de:i.nirla frecuenda.
3 9
%INC&UDE <16P8''!"#
;use del()*cl+c,-4../...0
#<!7 9#E+D<!7, perrniten utilizer codi#o ensam"lador en el pro#rama en C.
!e utilizan a= inicio y al final del "loque ensam"lador.
/iasm
bsf TATUS,RPO
movl", OxS
movwf PORT
bcf STA'I'US,RPO
ilendasm
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
2.10.2 Fu n c i o n e s
ces suministra una serie de fund ones predefinidas para acceder y utilizar el PIC Y
sus perifericos. Estas fundones facilitan la configuraci6n deJ PIC sin entrar en el ni
vel de los registros espedales. Las funciones se dasifican por bloques funcionales.
ASSE!"# $E!C%" # P&!C"#
'$E!C"# $E!C%A"# P&!C%A"#
E/S RS232
'$EIS" # $E!S"# P&!S(#
'PI)!'" # KBHlT() SE!*+A!*SPEE," #
'P&!C"# PE-"# SE!,P*&A!" #
'P&!S"# PI)!'" #
E.S /&S SE!&P*SPI" # SP0*,A!A*IS*I)"# SPI*1I!E"#
SPI23%IL-S SPl*4'E" # SPI*EA," #
$E!*!lS5" # l)P&!*6"#
-&IP&!*
SE!*!IS*/"#
'L-A!"#
I)P&!" # I)P&!*S!A!EC# -tJ!P&!*$" # SE!*!lS*C" #
I)P&!*A"# I)P&!*5"# -&!P&! Ji() SE!*!IS*,"#
I)P&!*/" # -&!P&!*A"#
-&IP&!*
SE!*!IS*E-
%I$%"#
I)P&!*C"# -&!P&!*/"# -&!P,!J"#
SE!*IlS*'" #
E/S
7)P&!*,"# -&!P&!*/I!e# -&!P&!*6"# SE!*IIS*$" #
,ISCE!AS
I)P&!*E"# -&!P&!*C"# -&I8P-!*L-1"# SE!*!IS*%" #
I)P&!*'" # -&!P&!*,"#
-&!P&!*!-3
SE!*!IS**9"#
$$LE" #
I)P&!*$-
-&!P&!*,I3 P-!*A*P&3
SE!*!lS*6" #
+E-
7L&PS-
I)P&!*%"# -&!P&!*E"# P-!*/*P&LL&PS" #
I)P&!*9" # -&!P&!:"# SE!*!lS*A" #
E.SP&E!- PSP*I)P&! '&LL"# PSP -+E'L-1"#
.PAAlEL-
PSP*-&!P&!*'&LL"# SETUP _PSP( )
ESCLAVO
I2C*1I!E" # 02C*SIaveAddr" # I2C 15R_STATEO
ElS/&S02C I2C*P-LL" # 02C*S!A!"#
I2C*EA," # I2C*S!-P" #
CLEA*I)!E3 $-!-*
ESE!*CP&" #
C-)!-L
RRUPT() A,,ESS"#
P-CES-S
,lSA/LE*I)3 lNTERRUPT_
!E&P!S" # AC!I+E"#
ES!A!*CA&SE" #
40
2. C o m p i l a d o r C C S C
ENABUUN-
JUMI'_TO_lSR SETUP _OSCILLATOR()
rERRUI'TS( )
CONTROL
EXT_lNT_ LABEL
PROCESOS
-
SLEEP( )
EDGE( ) ADDRESS( )
GEIENV( ) READ_BANK( ) WRITE_BAl'\lK( )
BIT_CLEAR( ) MAKE( ) _MUL( ) Sl-IT!T_LE!T( )
MANEJO BIT- BIT_SET( ) MAKEI"()
ROTATE
-
S#l!T_
BYTE
LE!T( ) RIG#T( )
BIT_TEST() MAKE$2( )
ROTATE_
SWAP()
RIG#T( )
ABS( ) COS#( ) LABS( ) SIN( )
OPERADORES
ACOS( ) DIV( ) LDEXP( ) SIN#( )
MAT.
ASfN( ) EXP( ) LDIV( ) S%RT()
A&AN() !ABS( ) LOG() TAN()
C'ESTANDAR
ATAN2() !LOOR() LOGlO( ) TAN#()
CElL( ) !MOD( ) MOOr()
COS() !REXP( ) POW()
TENS&"NDE
SETUP_VRE!( ) SETUP_LOW _VOLT_DETECT( )
RE!ERENC&A
A)DCONVER-
SET_ADC_ClIANNEL( ) SETUP _ADC_PORTS( )
Sl(N
SETUP_A DC( ) READ_ADC()
ATO!() ISLOWER(*+,r) STRCMP() STRRC#R()
ATOI( ) ISPRINT(-) S.COLL() STRSPN( )
AT/&$2( ) ISPUNC0(-) STRCP1( ) STRSTR( )
ATOL( ) 2SSPACE(*+,r) STRCSPN( ) STRTOD( )
CARACTERES
ISALNUM() ISUPPER(*+,r) STRLEN( ) STRTOK()
CESTANDAR
&SALPl3-lA(*+,r) rSXDIGIT(*+,r) STRLWR( ) STRTOL( )
lSAMOUNG( ) ITOA( ) STRNCAT() STRTOUL( )
rSCNTI4L(-) SPRINT!( ) STRNCMP( ) STRX!RM()
ISDIGIT(*+,r) STLKAT() STRNCP1() TOLOWER()
ISGRAPI l(-) STRCllR( ) STRPBRK( ) TOUPPER( )
GET_TTMERO() SET_RTCC( ) SETUP_T+VIER_O( )
TIMERS
GET TIMERI() SET_TlMERO( ) S5TUP_T&MER_' ()
GE'T_TIMER2( ) SET_T&MER&( ) SETUP_TlMER_2 ()
GET_TLMERJ( ) SELTIMER2( ) SETUP _TIMER $ ()
41
C o m p i l a d o r C C C S Y S i m u J a d o r P R O T E U S p a r a M i c r o c o n t r o J a d o r e s P I C
- - - - - - - - - - - - - - - - -
GET_1IMER4( ) SET_TIMER3( ) SETUP_TIMER_4 ( )
TIMERS
GET_TIMERS( ) SET_TlMER4( ) SETUP TIMER_5 ( )
CET:_TlMRRx( ) SET_TIMERS() SETUP_WDT ( )
RESTART_WDT( ) SETUP_COUNTERS( )
CALLOC() MEMCMP() OFFSETOFBLT()
FREE( ) MElYfCPY( ) REALLOC()
MEMORlAC
LONG]MP() MEMMOVE() SET]MP()
ESTANDAR
MAllOC() MEMSET()
MEMCHR() OFFSETOF()
STRXFRM() MEMCHR() MEMCMP()
STRCAT() STRCHR( ) STRCMP()
STRCOLL() STRCSPN() SIRICMP()
CADENAS
STRCOLL() STRCSPN() STRICMP()
ESTANDAR
STRLEN() STRLWR() STRNCAT()
STRNCMP() STRNCPY() STRPBR!)
STRRCHR() STRSPN() STRSTR()
STANDARD STRING FUNCTION( )
SET POWER PWM_OVERRIDE() SETUP_CCP"! )
SET_POWER_PWMX_DUTY( ) SETI#P_CCP3( )
SET_PWMl_DUIY( ) SETUP CCP4()
MODULO
SET PWM" DUTY() SETUP_CCP$( )
CCP
SET_PWM3_DUTY( ) SETUP_CCP%()
SET PWM4 DUTY() SETUP_POWER_PWM( )
SET_PWMS_DUTY( ) SETUP_POWER_PWM_PINS( )
SETUP_CCPl()
ERASE_PROGRAM_EEPROM( )
SETUP EXTERNAL_MEMORY()
READ_CALIBRATION( )
&TE_CONflGURA''ON_
MEMORY()
EEPROM
READ_EEPROM( ) WRITE_EEPROMO
INTERNA
READ_EXTERNAL_MEMORY( ) WRITE_EXTERNAL_MEMORY()
READ_PROGRAM_EEPROM( ) WRITE_PROGRAM_EEPROM( )
READ_PROGRAM_MEMORY( ) WRITE PROGRAM MEMORY()
CESTANDAR
BSEARCH() RAND() (RAND() )SORT()
(ESPEClALES)
RETARDOS DELAY_CYCLES() DELAY USC) DELAY MS()
42
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
o .PJT: fichero de proyccto; conriene toda Ia informacion rcJacionada con el pro
yecto.
o .lST: rnuestra un listado con el codigo C y el codigo ensamblador asociado
para cada linea de codigo.
o .SYM: muestra las posiciones y alores de los regisrros y las ariables del pro
grama.
o .ST!: rnuestra una estadistica de la utili"acion de la RAM, ROM Y#aPILA.
o .T$%: rnuestra un arbol del programs donde se especifican las funciones y sus
llamadas& con la ROM y RAM usada en cada una de e'as.
o .'%(: fichero estandar para la programad)n del PIC.
o .C*+: fichero binario ,ue inc#uye el codigo ma,uina y la informacion para la
depuracion correspondiente&
-.#-.- Entorno de trabajo
%#entorno de traba.o del ces en pew y peW H perrnite compilar y tarnbien sumi
nistra una gran aried ad de herramientas au/iliares& %n #afigure -se muestra los
disrintos elementos basicos del entorno de traba.o. %/isten dos forrnas de iniciar
una sesi)n: abriendo un fichero de codigo fuente 0crcando un proyecto .
Barra de
SubComandos
Pestaila
Del
Programa
IZON DE C!"l#O I
Barra de
$entanas
au%iliares
...&.&.&&&
...&' (
( ( (l( 'U) ( *&++'+( ( ( ( ( ( (
: : ' : : : : ' ; : : U : = . _ ....
u&&.&.1 ... t#..........
,-t ( ( ( ( ( &.)/&&& 11.,..1_ ,.. 1 t&
+igura -. %ntorno de TrabaJo
4 4
( (
2. C o m p i l a d o r C C S C
Para abrir un fichero fuente directamente se realiza una pulsacion sobre el icono
para el manejo de ficheros (figura 3) y aparece un menu donde podemos crear,
abrir, guardar 0cerrar ficheros. Con el cornando NEW podemos crear un fichero
fuente, un proyecto, un fichero RTF 0un fichero de diagrama de flujo.
45
FIgur a 3. l o s m enus p a r a el m a nejo d e l o s fJcher o s
Con la opcion NEW -7 SOURCE FILE, el program a pide el nombre del nueo fichero
y crea una nuea entana en blanco donde podemos empezar a escribir (!igura ").
. . . ' .
Fi gur a 4. Fl cher o fuente nuevo
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
51se ejecuta el comando PROJECTWIZARD, tras pedir el nombre del nuevo pro
yecto aparece la ventana de configuracion con dos pestafias, una para configurar
las distintas opciones que se muestran en la barra de 1a izquierda (figura 5) y otra
donde se rnuestra el c6digo resuHante de la configuracion (figura 6). ecorriendo
las distintas opciones (general, C0I111111111;catiolls, etc.) se llega a obtener el codlgo de
configuraci6n deseado (figura !), tras 1 0 cual ya podemos empezar a escribir el
resto del codigo del programa. "ebemos observer como se inc1uye un fic#ero de
cabecera * . 1 1 donde se encuentra la configuraci6n del dispositivo (figura $).
"'lIt.---- , :-,\\~.:~, %
"i
fl Jt
r&'() **** ..... ((l.+,
,r.; ,OnahMpor ... . . . c h
- . - -
- - -
Sf'I-.llCO
/&
l'OIT_
; ".q
00..
-".p,
0&.
1 ,0 ",,"
)fc)1oo23)oj4o
).. (...... C<rio
,. - no .
CAHIIU~
lCO_
MOOBU$
0..... c...
- -
r. c5 ..,
.. 0 10 - ., ...
,. 0. . 0!!!"l !l i #$ . %.
. o .. ~---:!
*6&110666666
&i 'u r a (. )e n t a n a d e c o n fl 'u r a c l o n d e l a s o p d o n e s
&i 'u r a *. )e n t a n a d e c o n fl 'u r a c l *n c o n e Jc *d l 'o r e s u Jt a n t e
46
2. C o m p i l a d o r C C S C
9 &e~Up_8dc_pores ANO
10 s",eup_ado !DC_CLOCK_INTERNAL
11 saeup "p !AL"E
1# "",r$ U% I& r$ ' ( er0 RTCC INTE% ( )ALRTCC I*I+ 1
13 "",cup-CiJDer-l Tl DISABLED. --
1~ seeU, & ~- er& # T#& DI. $ ( / LED
1. ( od ' e & &
16
10
18
19
Pl'uebal.c
1
2
!i
!
6
"
8
Of : ... CE\ p r u::l :'-"'i _l . b"
LCD C
- ar$ 1 1
Fi gur a 7.E. co d i go d esp ues d e una co nfi gur a ci o n
#l.C _ b .~ I ' "
>
..,076 b
1 .$IC
%
& '(I))iT
! JI S
6 , UT
~ l' I opp.oTtC1'
8 '*B1I(II'(+T
I )
NQLVP
1, I I OCPD
11 -(./T
12 '(DEB+C
l#
#& d e.1.y cl OC l C :
lS 1:'!I! ba ud
Fi gur a 8. EI fi c"er o d e ca becer a co n fa co nfi gur a d o n d e. #IC
.1..1 EI p r i m er p r o gr a m a
La 0pci01 2el PROJECT WIZARD e3 4u5 c0402a per0 para c04e16ar a $raba7ar
c01 CCS C, 3e rec04ie12a i1iciar l03 )ic8er03 2e c02i90 4e1$e 2irec$a.4e1$e 8a3$a
:ue el pr09ra4a20r a2:uiera l03 c010ci.4ie1$03 ba3ic03 para 4a1e7ar e3$a 0pci01,
A3; pue3 abri403 u1 )ic8er0 )ue1$e 1ue<0 2012e 3ee3cribira u1 pr09ra4a para e1=
ce12er 5apa9ar u1 led 2ura1$e 13-e9u120. Elled 3e c01ec$ara a la pa$iDa RB7 2e u1
PIC16F876 $raba7a120 a u1a )recue1cia 2e & >-6. E1 l03 3i9uie1$e3 $e4a3 3e ira1
e?plica120 ca2a u1a 2e la3 3e1$e1cia3 u$ili6a2a3, a8ara 10 i1$ere3a1$e e3 4a1e7ar I
e1$0r10 2-e$raba7a !10 $a1$0 1,:ue 8ace ca2a 3e1$e1cia
La pri4er0 e3 u$iJi6ar el )ic8er0 2e cabecera 2012e 3ee3peci)ica1 la3 carac$eri3$ica3
2el 4icr0c01$r0la20r PIC:
47
C o m p i l a d o r C C C S y S i m u J a d o r P R O T E U S p a r a M i c r o c o n t r o J a d o r e s P I C
#include <16F876.b>
Este fichero 10suministra CCS y 10incorpora en el directorio de dispositivos (devi
ces).El compiJador tiene una ruta de busqueda para los ficheros sinclude; esta ruta
se puede modificar en el caso de querer incluir ficheros que se encuentren en otros
directories. Con el coman do OPTIONS -7 PROJECTS OPTIO! -7 INCLUDE
FILES se accede a una ventana "fi#ura $% donde se puede afiadir& eliminar a mo'
dificar el orden de busqueda de los ficheros .liindude "tambien podemos observar
qlle se pueden confi#urar los ficheros de traba(o -FILES- a los ficheros de salida
-OUTPUT FILES-).
Fi gu r a 9. R u t a d e bu s qu e d a d e l o s i c !e r o s "i n c l u d e
) continuacion se definen& mediante las correspondientes directives& la velocidad
del PTC * el puerto utili+ado. Es importante definir la velocidad inmediatamente
despues del PIC *a que muchos drivers "como el LCD) Ja necesitan para confi#u'
rarse&
luse deLay (clock = (000000)
# !"e #uer"$% = O&0'
)hora se puede describir la funcion principal ()IN (). ,os cambios de color& letra&
etc.& se puede confi#urar desde la opcion OPTIO! -7 EDITOR PROPERTIES ...
)l escribir el pTo#rama "fi#ura 10% podemos observar como aparece un arbol de
funciones a la i+quierda de Ia ventana de pro#rama- esto permite e.pandir 0 "on'
/traer las funciones * declaraciones de control para optimi+er la visuali+acion de los
pro#ramas mas comple(os "fi#ura 11%.
48
2. Compilador CCS C
FIgura t t,Contrayendo eJ arbol
En ~Ieditor de texto se puede pulsar el boron derecho sobre cualquier lmea (figura
12) en el caso de los ficheros sinclude permite abrirlos en una pestafia adicional!
Figura 12! "as opclones del boto# derecho
1 ~876 h
Z delay cloek
$
!!
p\leceo_b
%
& vow 'in ()iI
*+
8 aee_trls_b
, pueno_b
1-
11
;II
12 ~lav_1IIS
I
1$ bit aee puereo_b
1.
d41.,,__
I/
blt_Clear puereo_b
16
17
vhlle nUl
18
Flgur !! 0)!EIprograma
Iuu
t876 b
dela, clock
puert.o_b
.(!t_trta_b
!eeto_b
U
..htl. "#!$
4%
Com pilador C CCS y Sim ulador PROTEUS para M icrocontroladores PIC
Como ayuda para escribir el programa, CCS ofrece el comando VIEW (figura ]3)
que permite visualizar las interrupciones (Valid Interrupts), fusibles de configura
cion (Valid Fllses), hojas de caracteristicas (Data Sht'ct) y una ventana completa don
de se describe el PIC (Device Table Editor) mediante distintas pestanas (esta opcion
tambien es accesible desde la opci6n TOOS ! DEVICE EDITO! (ver figura "#)$
%%&
"".
'('
) $$$$
,"#t
,'(.
...
I" *++*, $$$$$$
-(( "r' *.$'+()))
,,$$ /rl$$)$'***$01%
' ..' " ' ~ J { t~ r"it"""" ""' ' '
' "!l" '$%%,"""&""""""""""
' ' ' ~ ""llI#l ' ' ' ' ' """$
,$, "$$$$)))))*)) $$$ $
IU%"I" ". "iII' I' .. ' M I.' .$.$&~ .... r'
"$*)2 t"t~ """' .~
""""*** $$$$$ *'
' .' t """(....... $) $c
, ..... ...., ~--....- I' ...

Ii* + ...
'
333 )$ %) %*, %% 2 % r ..
'ltd ' t,
........ IJ l- +C.'a ...
.. " ' " ++ " II +' u* ** * ,$$* ++ no
t+ " II ,r * ,$ H " tt " It .. ! " ft
.i/ura 01. Com ando v%e4
5e puede proceder a la cornpilacion, que se puede hacer con el comando CO'PIE
! CO'PIE 2directamente con la teda de funcion &678$ 9urante la compilacion
aparece una ventana donde se inform a del proceso de compilacion y si hay errores
(figura ".)$:ras J a compilacion aparece una ventana con los mensajes de error si los
hubiese 2el porcentaje de utilizacion de la memoria !(' y !O' si %a compilacion
ha sido correcta (figura %5)$
;1:<
j<:=;C%6;+ 5i sc escribe un fichero fuente y a continuaci6n se abre 2se crea
un segundo fichero fuente, al compilar este ultimo se compilara el primero$
5iempre se compile siempre el ,>%?=> fichero abierto$
#2
2. Com pilador CCS C
F:I ...ATUR-\_PIClpracric<lsICLASElluz_l",_cllu%.c
COlllplol
No !""!.
FII##: $. Slal!"O"u% &. TIm .: ' S(c. 'I''!)$**
OUI+I,, f".~ERR -E. S/Il lST COF P+T TR% STA
RA0:
RO0:
$!
I',
1 !1 2 m;vtiJ com
Fi3ura '4. 5(,a,a 6( co7pllacl*,
)......,
-
~)
li! i
\ ~ H = ~ ~ r - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . i i
Fi3ura '8. 0(,sa+(s6( co7pllacl*,
Tras la co7pilacio, s( o9i(,(, (,r( oros, (l :ic;(ro HEX para pro3ra7ar " si<
7u+ar (l PIC. E, OPTIONS -= PROJECT OPT10NS ~ OUPUT FILES, s( pu(6(,
configurar los :ic;(ros 6( sali6a >:i3ura '*?.
8'
@ I(
o.A uol!
..... C<BroI(_Up
r N o n e . co_ Ho[mn.
,.. stoncllinj .COCl
r"""'''''' '
! ~" ocf
.:'
r A''? #$%
r&Id-.,
'ntm r.
r: (lcpandod,coo
r,%-
>. CO:!:
r,.,.._
o)."... O9iOCC
!I,.....
Dc.(lII .. "
r. *! ! I+! ! ! , r: ","i!III
'%'_!. r! -.! ! ! ! ,
r-.,
rsc,""! .... ("~ '~~
/0.........
E o ... P_B_
l
Fi3ura '*. Fic;(ros 6( sali6a
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
En Laparte izquierda del fichero iuente aparecen unas ventanas auxihares (Identi
fiers, Projects, Piles) en las que se pueden observar la estructura de fichero de) pro
grama compilado (figura 17). Hacienda una pulsacion en cualquiera de ellos se
abre una pestaria con su contenido.
.!
1"f#h
-ci:~
lJr ... ,
i$ o.% & ' % (
( u).( ( n
...... * 11+
l,.$ -
( ut.cc(
Iul.
lu... ta
1#+ + c* * * * ./
0igura 17. 1entana auxi$ iar pa1* aficheros
En $ a barra estandar 2figura 1#2 (para activarla3 OPTIONS -! TOOLBAR... -!
TOOLBARS, figura 14)! tambien aparecen distintos comandos entre los que se en
cuentran la visualizacion de los fichercs de salida!
i"
0igura 1#. 5arra estandar
l6%
% pen
s..#e$%
Close $I
6o
7( 68l9:d
;l68a* !d
Oesa&ptloru
0igura 14. <ctivacion barras de herramientas
5 2
2. Compilador CCS C
Hay un fichero de salida especialmenLe util para la simulacion con el PROTEUS
VSM, se trata del fichero RAM SYMBOL MAP (*.SYM) donde aparecen todas las
variables de la memoria RAM y sus correspondientes direcciones. Por ejemplo, si
en un program a exists una variable FLOAT lIamada TEMP, se puede consulter su
direccion a traves de este fichero figura 2!" para utili#arla en el WATCHdel PRO
TEUS figura 2$ y %igura 22".
ad&ntc.c 'd.c ad_lltc.sym
004-00$ QWAITE P()*(+, MEHO
OO~-005 QREAO PROGRAM MENOR
006 lcd _ _
1t15-1t16 CCP_1
!$- CCP $ L).
016 CCP-1-HIGH
It1B-01C CCP/021
018 CCP 2 L).
01C CCP-2-HIGH
!2$1!22 MAIH.tu
!2-1!23 ,+4Lt,.
u f i O ' P f 1 l 1 l t i J l t ' r m
020-00 H+IH 5.11
01-02 HRIH.u!lu"
0 lcd #$#t_#
0-04 QITO%.P1
0 ,+I6.asC(+7CH
04-0&'PRIHT%_(20_)08%P%
%igura 20. %lchero de salida S8,
9 "
D ala1Y Po <
r ASOIZ SUing
. B!"#
, . 2,d: 2bj$t.. l
;ouble<ll)Id "$$1
=uod<ll .. dra>l
I>? ? I%lo o I @ &.l"#s'
1m D O< A(lI#1)1*#o '
... HItecIIIA looI$B b: $t .. "
5 ,lcroclllP %lCaIIHlI$tes"
2 .i: $) tocioan
%igura 2$. Configuracion del . +7CHen el P()7? 4S
-B
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M j c r o c o n t r o l a d o r e s P I C
Address
OXl9
Fi gu r a 22. Ve n t a n a d e WAT C H c o n l a a r i a !l e
5 4
x
3. L a g e s t i 6 n d e l o s p u e r t o s
Capitulo 3
L a g e s t i o n d e l o s p u e r t o s
3. 1 Introducc.on
Los microcontroladores PTC tienen terminales de entrada/salida divididos en puer
tos, que se encuentran nombrados alfabeticarnente A, B, C, 0, etc. Cada puerto pue
de tener hasta 8 terminales que, de forma basica, se comportan como una entrada/
salida digital. Begun las caracterfsticas de PIC, cada puerto puede tener, adernas,
aslgnado un bloque funcional! convertidor AD, USART, "#C, etc.
$or e%emplo, en la familia $&C'()8*+ ,figura '-, pueden llegar hasta . puertos en el
$&C'()8** donde se pueden encontrar bloques de TIMERS, CCP, MSSP, USART,
PSP /convertidores A0.
CftrAct1rh.llrll1 &2C&()&&*3 l2&C'()8*3 l2&C'()8*( &2&C&(f8**
Galli. M~dla
4
~: [ : &2rccu1ncla de &rabi5o, 444 0C6'7'ih 8C6#07&&'. 0C6'819&!t: 0C6#07llL
;t2c< (y deln/l- $8;.n8; $8;,88; '20;,n8; $8;,B8;
,$=;5.8>5- ,$=;5.8>5 ,l2=;5.8>5- ,$=;58>n
71murl. d1 &2rogrllmll )&..A1 ? ~K 4K HK il@
,uuhll,rA, dll &.%..bll1-
lB
719'nrl. 8ucu.CllD&e- 'E# 'E# 3(8 3 6 1 1
7elllurim &-AC8.Et: P~OM '#8 '#8
.-
1 5 6 256
&ncenupdoo.s '3 '3 '.' t3
::!
$uerto, )-> l2omA.n.C $ori1A,B.C 0 e $87>A.B C $ur1 A.B.C.0.F
' ; i
5eon-Clrl!Gdor18
.' I l l l
7(dulo.CC&2 1 # 2 '
: :
Comu&&lcnCi8iiCio1 444 &B &>>$ 9>A;5 7>>$91A;54
71>$9sAii5 2iis>tH !9>A;5
C8lllun&Cllcl1n:::$::ruiCi8 4 $>&2 p&r
f
7odulo A0 ue c8bles 5 CAIALJ> 8CAIALt!<H . CAIAl r! " 8,,AIA&Kf.1
~' #$% d! I 1 1 M~&' .&&l (. (. K.K1KK L.K
l)(
14K4
t
FIg u r a '. Ca r a ct e r l s t l ca s d e fa fa mi l i a PIC' 6 F87X
Consideranco a los puertos como entradas/salldas dlgitales, los puertos se carac
teriMan por ser independientes, es decir, se puede programar cada terminal del
puerto para que se comporte como una entrada 0 una salida digital ,figura #-. La
5 5
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
habilitacion como entrada 0salida se realiza a traves del registro TR1Sx (TRISA:
85h, TRlSB: 86h, TRISC: 8h, TRIS!: 88h 0TRIS": 8#h en el BANCO $ de la memo%
ria RAM).
NOTA
&n valor 0en estos registros indica '(e el terminal corres)ondiente del )(erto
es de salida, mientras '(e (n valor $ indica '(e sera de entrada*
+a gestion del b(s de datos se realiza a traves de los registros PORTx (),RTA:
05h, -,RTB: 06h, -,RTC: 0h, -,RT,: 08h 0-,RT": 0#h en el BANCO 0 de la
memoria RAM).
r-,
..c--JTERMINAL
BUS DATOS
0 Q
V
$$0
-
.
ESCRlTURA Q
DATOS
-
0
Of--
ESCRITURA
Q
TRIESTADO
LECTURA
DATOS
Figura 2. Estructura basica de un terminal
Tambien e/isten alg(nos terminales '(e )oseen (nas caracteristicas es)eciales, )or
e0em)lo:
1 "n el )(erto A, el terminal Ril2 tiene salida en drenador abierto $0'(e obliga
a (tilizar i111a resistencia de pull-up en el caso de 3(ncionar como salida* "ste
terminal tiene entrada en trigger-schmitt $0'(e )ermite s( (tilizacion como
entrada de contador de eventos e/temos en con0(ncion can (n mod(lo tem%
)orizador (TIMER).
1 "n el )(erto B, los terminales tienen (na resistenda de pull-lip interna '(e se
)(ede habilitar a traves del bit RBPU del registro OPTION_REG (8Th, $8Th4*
5$ dicho bit es I, todas las resistencias de pull-up estaran deshabilitadas, si es
(n 0estaran habilitadas s6$0en el caso de '(e el terminal 3(ncione como en%
trada (3ig(ra 54*
56
3. La gesti6n de los puertos
R/W1 R/W1 II/W! RJ W, R/w' R/w.' RJ W,
R/W.,
II-BII.I r
IIIBPU IINTEOG I TOC I TOE Ip! I P" I PSI
Ipso
I
WoBI esetl#lr
$
U%II no I&pl .......ntado
' i(
L l t 7
ItO
). *+ ,o&o a
+***-alor pare un POR resel
t*i*
' '
*%
Figura 3. Regl st ro OPIO!"R#$
Bit 7 % RPB&% 'a (il it a l a s resist e)*ia s +e ,ul l -u,.
t -L es +es-a (il it a .
./L a s-a (il it a t o+a s.
L a s *a ra *t erist i*a s el e*t ri*a s +e l os ,uert os +el i0l t a ) su ut il i1a *io) ,a ra 0a )e2a r
*a rga s +e 3or0a +ire*t a .
4a 5i0a *orrie)t e +e sa l i+a a )i6el a l t o ,a r u) ,i) I/O 25 mA
4a 5i0a *orrie)t e +e sa l i+a a )i6el (a io )or u) ,i) 1/0 7809
495i0a *orri*)t * +e sa l i+a a )i6el a -a eor el ,uert o 9
.!. .!!!!)/
495i0a *orri*r)e +e sa l i+a a )i6el (a io *or el ,uert o 9 :809
4a 5i0a *orrieut e +e sa l i+a a )i6el a l t o ea r *I ,uert o B
~mA
4a 5i0a *orri*)t e +e sa l i+a a )i6el (a 2o ,or el ,uert o B IOO09
:7
Figura ;. <a ra *t erist i*a s el e*t ri*a s +e l os ,uert os +e u) PI<1=F>;
#st es )i6el es +e t e)sio) ,err)it e) t ra (a 2a r *o) *a rga s +e (a 2o *o)su0o *o0o leds,
displnys +e 7 seg0e)t os 8 LCD, ,ero ,a ra a *t i6a r *a rga s +e 0a ?or *o)su0o es )e@
*esa ria l a ut il i1a *io) +e t ra )sist ores.
3.2 Gestion de puertos en C
#) l e)gua 2e < se ,ue+e) gest io)a r l os ,uert os +e +os 3or0es%
Se +e*l a ra ) l os regisrros TRISX ? PORTX +e3i)ie)+o su ,osi*io) e) l a 0e0o@
ria RAM *o0o 6a ria (l es +e C.
&t il l 1a )+o l a s +ire*t i6a s es,e+3i*a s +el *o0,il a +or (/tUSE FAST_IO, /;USE
FIXED_lO, #USE SA!DARD_IO"#
3.2.1 A traves de la RAM
Se +e3i)e) l os regisiros PORTx ? TRISx *o0o (?t es ? se si)ia ) e) 1a ,osi*io) co
rres,o)+ie)t e +e l a 0e0oria RAM, L a +ire*t i6a ut il i1a +a +e <es IIBYTE:
IIBA#6a ria (l e/*o)st a )t e%
$%&E
'USA ( Ox8S 1/ Variable RISA en 8S!
$%&E
)OR$* +
OxOS // Variable PORTAe" OS!
il%&E
RIS% +
Ox8# /, Variable RIS% en 8#!
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
jBYTE PORTB = Ox06
#BYTE TRIse = Ox87
tBYTE PORTe =OxO?
II Variable PORTB en 06h.
II Variable TRISe en 87h.
II Variable PORTe en 07h.
Una vez definidas estas variables se pueden configurar y controlar los puertos a
traves de los eomandos de asignacion.
TRISA =OxIT;
TRISB c Oxoo;
TRIse = OxOF;
II 8 cerminales de entrada
II 8 cerminales de saLida
114 terminales de mayor peso de salida 4 terminales de
II menor !eso de en"
Escritura en los puertos:
PORT#= OxOA;
Lectura de puertos:
II salida del datos 00001010 !or e1 puerto C
$alor =PORTA; II Asi%na e1 dato del !&erto A a la $ariable $alor'
Manejo de sentencias:
TRIS()*xO+;
if ,PORTO& OxOF PORT( 1= OxAO; II com!r&eba los 4 terminales de
II meaos- !eso de" !&erto D y 51 son
II 1111 saca !ot- los 4 terminales de
II mayor !eso e1 data 1.1.'
Eisten unas funciones de ! "ue perrniten trabajar bit a bit con los registros 0varia#
bles definidas previamente. Estas funciones son las siguientes:
bit$clear %var&bit'i II(one a ) el bit especifieo %) a *' de la variable.
bit$set %var & bit'i II(one a+el bit especifieo %) a 7) de la variable.
bit$test %var& bit': / 1Muestra el bit especifico %) a *' de la variable.
s,ap %var'- / 1 +ntercambia los 4 bits de ma.or peso por los 4 de
// menor peso de lavariable
bit$set ,PORTe 4'- 1/ 0sacs0 &n 1 !ox e1 r-erminal R!"
if #bit$.e%&iPORTB'O((l bit$)leariPORTB'l; Iisi +"Oes 1 b*rre RBl
0e puede declarar unbit de unregistro con una variable mediante la directive ;iBIT
1) "ue permite trabajar directamente con el terminal:
i f 1+2 nombre =posicion. bit
#BIT RB" =Ox06."
RB" =0;
+1 FORTA(Ox06
5 8
3. La gestion de los puertos
Ejemplo 1: Se configuran los terminales RBI como salida y el RBO como entrada
(con resistenda de plill-lIp). La salida debe tener el mismo valor que la entrada. Se
utiliza un interrupter en Ja entrada y un led en 1asalida (figura 5). omponentes
ISIS: P1C16F876, RES, LED-BLUE Y SW-SPST-MOM.
RBO/INTH~------__,
!S1 "#$$$$%
RB2
R3/!"#
!& '
Res
!& ()*+
RB$/!"O
%
O&'lI'L(IN
O&'2I')*O)T
,$$$$$$1..$1#'LRNpp/l+-t,
!-.)-/.
RA1/AN1
R-2+-N2NR./0
!-0)-/0/!E12
R-1/TO'(I
R-2I-N1/&& R'3/T+3&3+T+'(I
R'+/Tl3&I/''n
R'2+''!+
R'3/&'(I&'L
!)3S.)3S4-
!5)S4.
R'"IT4I'(
R'$/R4IOT
&5+
&5-&!&T-#O#
3+
L.6-BL)7 %
/igura s. .Ies8ue9a del e:e9plo +
#include <16F876.h>
il'fuses XT,NOWDT
#use delay( clock" 4000000 )
IB1'!"#I$B %&8'
'BYTE PORTB - %&06
'B"! %("I%)*#!+ , %&8l
else
II #elo- de 4 ./0
/1 TRISB en 8'h.
II (%#"$ en 0'h.
II %("I%)*#!+ en Blh.
1oid 2ain () (
3ic*clea4(%("I%)*#!+5 1)5
3i6*se7("#I$B5%)8
3i6*clea4("#I$!5l)8
3i6*clea4((%#"B5l98
:hile ;+< ;
if (3i6.6es6(;o4635%) ,, 1
3ic*clea4(;o4635l)8
II /a3ili6acion (ull,u;
II B% co2o en64ada
II B1 co2o salida
II Apaga el LSD
II S~ #B% es J, apaga el <!=
3l6*se6(;o4635l)8 II $i #!% , 05 enclende el <!=
/igura =. .Iprogra9a del ejemplo+
2>
Com pilador C CCS V Sim ulador PROTEUSpara M icrocontroladores PIC
3.2.2 Atraves de las directivas
El compilador ofrece funciones predefinidas para trabajar con los puertos. Estas
funciones son:
output_X (valor);
input_XO;
set_tris_X(valor);
port_b_puUups (valor);
get_trisXO
II Por el puerto correspondiente saca el valor (0!"").
II Se obtiene el valor en el puerto correspondiente.
1 / #arga el registro TRISx con el valor (0!"").
1 / $ediante valor % TRUE 0 valor % FALSE &abilita
I/o des&abilita las resistencias de pull-lip en PORTB.
/ 1 'evuelve el valor del registro TRISx
'onde la X es la inicial del puerto correspondiente (() *) #) ... ).
Output A(OxFF); II sees por el puerto Ii e+ valor 11111
Valor~Tnput_B(); II Lee el valor del puerco B
Sec_tris_C(OxOF); II Coni!urae1 puertO C: CO"C# encradas$ C%"C& salidas
E,isten una serie de funciones asociadas a un terminal 0 pin-. E. para metro pin-
se define en un fic&ero include (por ejemplo) +/012/.&) con lin 0ormato del tipo
PIN_Xu, donde X es el puerto y n es el numero de pin.
. . define P. 3_(O40
5de/ne P. 3_(+4+
6as funciones ot/tput_xO e illput_xO depend en de la directiva tipo IIUSE -_+0 7ue
esre activa. 'irectivas:
6as funciones son:
output_lo8 (pin-);
output_&ig& (pin-9);
output_bit (pin- ) valor);
output_toggle(pin-);
output_float (pin-);
input_state(pin-);
input(pin-);
II Pin a O.
II Pin a +.
II Pin al valor especificado.
II #omplementa el valor del pin.
II Pin de entrada) 7uedando a tension flotante ...
II (simula salida en drenador abierto)
II 6ee el valor del pin sin cambiar el sentido del
I I terminal.
II 6ee el valor del pin.
IIUSE FAST_IO (PUERTO) [PUERTO A !!! :
#on la funci/n Olllpllt_xO se saca el valor al puerto y con la funcion input_xO se . ce
el puerto. 6a directive no modi fica previa mente el registro TRTS correspondlenle.
60
3. La gestio" de los puertos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hay que asegurarse de que los registros TRIS estan correcramente definidos. En
tonces, el ejemplo 1 quedaria :
#include <16FB16.h>
I fuses XT, NOWDT
Duse de1ay( clock = 4000000
Husefast_io (B) ~
void a!.n() (
"o#t_$_"lll.lu"s (%&'())
set_t#is_B(*+*l))
out"uc_!.o,(-./_Bl!)
,hile (1)
i1 (in"ut (-./_B*) =1
out"ut_lo,(-./_Bl))
else
ou#"ut_hi0h(-./_Bl))
ISE ST!"#!R#$I% &'ERT%( )'ERT%: !... *
+an la funcion output_x() el compilador se asegura de que el terminal, ,terminales
corresponclientes, sean de salida mediante la modificacion del TRlS correspondien
teo+on Ia funcion input_xO ocurre 1,mismo perc asegurando el terminal &termina
tes( como entrada. Es la direct iva por defecto. Entonces, el ejemplo 1 quedaria:
1nclude -1./01..112
ifuses XT,NOWDT
fuse delay( clock =4000000 )
juse standa#d_io(B) +-
v~ndain () l
"o#t_$_"ullu"s (TRUE);
out"ut_lo,(-./_Bl))
vn.i.Le (1)
(
if (in"ut(-./_B*) ==1
ou~"ut_lo,(-./_Bl))
else
out"ut_hl0h(-./_Bl))
61
3SE/I4E#$1, &'ERT%$%T'TS=pin56 I...))'ERT%: !...7
E1compilador se encarga de generar el codigo para definir los puertos de acuerdo
can la informacion que indica la directi8a &donde solo se inclican los terminales de
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
salida), sin tener en cuenta si la operad6n es de entrada 0de salida. Entonces, el
ejemplo 1 quedaria:
#include <16F876.h>
#fuses XT, NOWDT
juse delay( cloc =!"""""" #
fuse fi$ed%io(&%ou'(u's)(*+%&l# +
,oid -ain(# I
(o.'%&yullu(s ('I'RUE);
ouc(u'%lo/(01N%2l#)
/hile (1#
if (in(u'(01N%2O# = = 1
ou'0u'%+o/(01N%2l#)
else
ou'0uc%hi3h(01N%2l#)
3.2.3 Con punteros
En C se puede acceder a la memoria de datos mediante punteros. Los punteros se
deben definir como TNT:
#define TRISA (inc4# a$85
'define PORTA(iDL*J oxos
El registro es manejado mediante la utilizacion del operando ... :
inc ,<6lo.
,alo. 7(o.'a
Los terminates se pueden leer !escribir uti"izando operadores logicos:
4(o.'a 1= ObOOOOOOOl;
porta &= O&llll11"1)
If #$porta & ObOOOaOOOl) ...
//RAQ=l
11 89: ="
11 *ee e1 ,alo. de 89O
Entonces, el ejemplo 1 quedaria:
#include <16F876.h>
'fuses XT,NOWDT
#use delay( cloc !""""""
1deline T8*52 (in'+6 O$86 +
itdefine PORTE (int) Ox06 +
-fdei1ne OP'l'IOli !in!) OxSl +-
62
3. L a g e s t i o " d e l o s puertes
void main () {
"option G= ObOl111111;
"trisb - OxOl;
~portb ~ OxOO;
while (1)
(
if (portb & OxOl
*portb=OxOO;
else
"portb-Ox02;
II Pone a 0 el bit 7del OPTION RSG
II (pull-up habilitado)
II REOentrada, RBl saiida
II Apaga el .LED
/1 Lee el RBO si es !!
II "pa~ el L#$ (RBI ! 0%
/1 ss es 0 enciende el LED (RBI. = 1)
12
Ejemplo 2: Realizar un contador de a a 99 con un doble display de 7 segmentos de
catodo comun. La cuenta debe ser continua y de a a 9 el digito de las decenas debe
estar apagado. Componentes I"I"# $I%1&'()&, R!")"E*-+$,2-%--B./E 0
## $%$..-&.
t~ .'
; , ~
. .'
. ,
b&te '~NSt $LSPL"()lO*
Fi g ura 7. El e s que ma d e l e je mpl o 2
+in,l-de ./0123/!45
+6S# $#L"()'LO'7 ( 8000000%
+9OS#S :T;NO<$T;NOPROT#'T;NOP6T
I/"E fast=IO (B)
JUSE fast=IO (A)
##
>Ox?f;Ox0@;Ox/b;Ox8f;Ox/@;Ox@d;Ox3d;Ox03;Ox3f;Ox@f%;
63
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
main() (
byte ud=O,dec=O;
SET_TRIS_B(OxOO);
SET_TRLS_A(OxOO);
OUTPUT_B(0);
fori ;; ) (
for (dec=0;dec<10;dec++) /1 ue!t" di#i$o dece!"%
for (ud=O;ud<&O;ud++)
OUTPUT_A(Ox0'); (( cat_D =epeqeao, cat_U =encendi.do
OUTPUT_B(DISPLAY{ud); / )i#ito unidade
de&"y_*%(SO); (( +"r" e,ic"r -"r-"deo%
if (dec==O) out-ut_"(Ox0.); (1 Si decena = 0,
// cac_D ="-"#"do
(( Si dece!"% > 0,
(1 cat_D = e!ce!dido
1/ )i#ito dece!d%
II Paraevitar parpadeos
e&%e out-ut_"(OxO&);
O/T+/T_B()IS+LA01dec2);
de.!a"_.II!S(#0) ;
Fi gu r a 8. E . p r o gr a m a d e Je je m p l o 2
Losterminales delos dos displlTYs son comunes por 10 que e! data es comun; para
que aparezca el digito soloen Jasunidades, 05610en las decenas, sedebe apagar
elot'ro dip!a" mediante e] terminal decarodo, sdeci!r, si sedeseavisualizar las
unidades sepasa e1 codigo "10" al display y si son las decenas sepasa el"#l" $con
un 1el dip!a" estaapagado y can un 0estaencendido%! Laaltemancia entre!los dos
catodos debeser tan rapidaqueel o&ono sedecuenta del parpadeo! n el casoque
las decenas sean cero, su dip!a" seapagara!
'#()* +,)PL-./l#] =,#012,#006,#0)b,#032,#066,#06d,#04d,#004,#042,#062l permi5
tevisualizar de0a6 mediante lacombinacion dedigitos tipica delos displays de4
segrnentos $2igura6%! Par e&emplo, en el 0seencienden a, b, c, d, ey 2, 10 quesigni5
2ica111111, #017 en hexadecimal.
a
Fi gu r a 9. Lo s s e gm e n t o s d e . d i s p r a !
64
3. La gestio" de los puertos
3.3 Entradas y sa.idas
3.3.1 LCD
Se acosturnbran ha utilizar LCDdel tipo HD44780, con un nurnero de Iineas varia
ble y un numero de caracteres por linea tambien variable por e!emplo, con " # $%
se traba!a con dos lineas de $% caracteres cada una& ver 'i(ura )0&*
+
C)
lCDconar,v n I
$*,-ss .///S0l&
2.- -ee1limentlldon de 2.7V a 2*S-&
3*4 1!uste de c5ontrastede 0 ** 2*S6&
4/ 7Sscl8trlonde 8(,stro&
H
2*4 79:;ldura<escrtturll&
%*, = enable&
7*4 00 (dam LS>&
8*40$
~, :
?*,0"
$0*,03
@*40.
I i
$"*4 0S
$3*4 0%
$4,4 07 (dato ./28&
i
ii:
' , [
I
t, ~:
~.~
+

,A ,
= -,
%2
Bi(ura $0* CI patllla<e de un LCDtlplco
CI bus de datos es de 8 bits, aunDu*e tambien e#iste la posibilidad de traba!ar con 4
bits con un menor nurnero de caracteres&* Cl compilador C induye un 'ichero (dri
ver) Due permite traba!ar con un LCD. Cl archive es LCD.C debe Ilamarse como un
#ine/tlde. Cste archive dispone de varias 'unciones ya de'inidas5
lcdA init 0E
Cs la primera 'unci%n Due debe ser llamada*
>orra el LCD !" con'i(ura en el 'ormato de 4 bits, con dos lineas Y con caracteres
de 2 # 8 puntos, en modo encendido, cursor apa(ado y sin parpadeo*
Con'i(ura e< LCD con un autoincremento del puntero de direcciones y sin despla
zamiento del display real*
lcdA (oto#y byte # , byte y)i
Indica la posicion de acceso al LCD* #$l' e!emplo, $,$& indica la primera posicion de
la primera linea y $,"& indica la primera posicion de la se(unda linea*
lcd(etc byte # , byte Y )i
Lee el caracter de la posicion #*y&*
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
lcd_pute (char s);
S es una variable de tipo char. Esta funcion escribe la variable en la posicion corres
pondiente. Si, ademas, se indica:
\ se Jimpia el !".
\ n el cursor va a #a posicion (#,$).
\ b el cursor retrocede una posicion.
El compilador de ! ofrece una funcion mas versa til para traba%ar con el LCD:
printf (strin&)
printf (cstrin&, values ...)
printf (fname, cstrin&, values ...)
String es una cadena 'un arra( de caracteres, values es una lista de variables sepa
radas por comas yfiW/1I(! es una funcion,
El formate es )nt, donde n es opcional ypuede ser:
#*+: para especificar cuantos caracteres se deben especificar.
'#*'+: para indicar ,a cantidad de ceros ala i-.uierda.
#.#*+.+ para coma lotante.
t puede ,ndicar:
c !aracter.
s !adena 'caracter.
u Entero sin si&no.
d Entero con si&no.
u Entero lar&o sin si&no.
d Entero lar&o con si&no.
/ Entero 0e/adecimal (minusculas).
1 Entero 0e/adecimal (ma(usculas).
/ Entero lar&o 0e/adecimal (mimisculas).
1 Entero lar&o 0e/adecimal (ma(usculas).
f 2lotante con truncado.
g 2lotante con redondeo.
e 2lotante en forma to e/ponencial.
3 Entero sin si&no con decimales insertados. a ,ii ci. raindica el total,
la $4el rnrmero de decimates.
6 6
3. La gestio" de los puertos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A continuacicn, mostramos unos ejemplos de los distintos formatos:
Formato Valor = Oxl2 VaJor = OxFE
%03u 018 254
%u 18 254
o/ \ l2u 18
"
%5 18 254
%d 18 - 2
%x 12 fe
%X 12 FE
%X 0012 O O F E
%3.1! 1.8 25.4
Ahora, mostramos una serie de ejempLos de aplicaci6n:
by;;e x,y, !
prlncf("B.oLa") ;
printf "##$alor= %%2&#n \r" ,gec_rcce ());
princE "'(2)* i+ i4X\n ~r", x,y, zt :
_orinr:f(LC_!"#C, "n$%&)".ni ,
E ldri,er LC.Cesta pensado para tra-ajar con e* !'(# .e* !'(#B. /or defecto,
utilia e*!'(# a menos 0ue le indi0uemos 10 contrario mediante:
1defineuse2port-2lcd l34E , secomentao descomentatal comose5ind:icaen la fi6urall5
/or defecto, este )ri*er usa siete terminales para La comunicaci6n entre el L789el
!#C. E n 1afi6ura 11se o-ser,a parte del fichero LC.Cdonde se encuentran defini:
das las cone&iones u tiliadas " la posi-ilidad de cam-iar de puerto5
+& As )efine) in xtie follo,ing sr#ru$ture t%e pin connection i- a- follo,-:
..
;;
;;
;;
;;
..
/1
..
/1 LCD pin- '/0are noc used an) PIC D3 i- noC1-e).
+ + "n/co22entthe follo,ing )efine to use port B
..3)eii.e 1-e2port-_le) <34E
F i6ura 1,5 E &tracto de= flchero L7857
8O enable
Dl rs
D2 rw
D4
1>4
D5 D5
D5 05
D7 D7
&'
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Se puede trabajar con otros puertos, por ejemplo el PORTC, modificando el fichero
LCD.C. En la 6gura 12 se muestra parte del fichero LCD.C donde se definen los
puertos de trabajo (el 0 0el B);modificando estas sentencias se puede trabajar con
otro puerto (A, , etc!)!
#if defined USE_porch_led
Jllocate led ~ getenv("sfr:PORTB") // This puts che entire structure over
II che port
'define ser"#tris_led (x) set_cIJ;s_b (x)
$else
#locite led =!et"env(#srr"PORT$#) II This puts the ent ire str%ct%re over
II the port
#deflne ser_tris_lcd(xJ set_tris_d(xJ
#endif
Fi gu r a 12! E xt r a c t o d e l fi c he r o LC !C
Ejemplo %" &eali'er un menu de control mediante unpulsador! E( program a debe
mostrar un menu de % funciones! )ediante el pulsador se debe seleccionar uno de
los % elementos y con otro ejecutar la funcion (en este caso encender un letI)& *ispo+
nemos de los componentes I'I'" PC!"#$%"& &ES, ()TTO*+ L'(!"L.
R,
.i:
6 8
Fi gu r a 1%! E f e s "u e m a d e l e #e m p l o $
3. L a g e s t i o n d e l o s p u e r t o s
ijnclud~ <16F876.h>
Ifuses XT,NOII'IJT
luse del~Ylclock- 4000000)
Ijnclud~ <lcrl.c>
luse standardlot!)
luse standardloI")
enu# funclones $#ed%c&l%lni'(
void #edlrl)old)*
Ilal+odc#o corc,-s.ondlence
oucpuc_!:ogqle (pln_CO);
)oi a cal i/l0ar$)oid) $
Ilal+orit#o corros.ondiante
out.ut~o+1-le(PlIJ_Cl);
J
~ld inlclali2&t $)oid) *
Ilal+oric#o corr~s.ondfente
ouc.ucco++let.3n!45(
d runfunc$int nu#func)*
Sl>'lcch $nu#6unc5
case #ed0
medi r t ) ;
bH!lJk;
case cal0
c%11i/ral- $)(
bn'alc;
case ini0
l n t c ie t izaL ();
171n I) (
rIte#0
II "si+na un )alor a cada ele#en0o
II #cd - 0% cal - 1 e in3 - 2
II Funcion de #edlr
IIFuncion de call/ra1
II F8ncion de 3nlclall2ar
II "s3+nacion de la funci6n a reall2ar
/1 )iene dada .ar la )ana/le 9ite#-
II )aria/les de funclone
69
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
char n_menus - 3; /1 Numero de funciones
1/ bit_setITRISA,O);
lcd_lnit ();
while (1) (
if (input(IN_AO) 1) ( II !etecca boton de selecc"#n
II s1 pulsa aumenca la $ariable
/1 ara evr taz- rebotes
%&cemr';
de(a)_ms (*++);
lcd_pucc (,\f'I-
if (ieem > (n_menus-())
item - +- J
/1 Si la $ariable supers e( numero de &&&
II funciones la %&n%&ciali.a
stdtch (i tern)
case +-
lcd_/oto0)(l,l);
printf(lcd_purc, 123!IRH):
(cd_/oro0)4l,l5;
brea6;
case (-
printf Ilcd_putc, "CALIBRARH);
lcd_/oto0)4l,l);
brea6-
case 7-
printf(lcd_putc, 1INI8IA9I:ARH);
lcd_/oco0)(l,l);
brea6-
if (input(IN_Al)
(dela;_(I(s (7++);
run_func (i tern);)
1) II S( se pulsa e( baton de seleccion &&&
II se llama a 18 funci#n correspondienee
Figura 14. EIprograma del eJemp'o 3
3.3.2 LCDgraflco
Se puede utilizar un LCDgri!o !on una !ontroladora "S#1#8$!omo el de la %igura
1&'( por e)emplo la ASI-A-1286AS-Lj-ES! de la !asa *LL S+,-EI.D/S0-IES.
1#
_ . _ 3. L a g e s t i 6 n d e l o s p u e r t o s
Fi g u r a 15. L CD g r a fl co co n co n t r o l a d o r a KSO108
La distribuci6n de patillas es Ia siguiente:
VSS: masa.
VOO: alimentaciOn.
Vo: tension de contraste.
D(I: entrada de datos/entrada de c6digos de instruction.
RlW: Iectura/escritura.
: enable.
D!O. . D!": datos de entrada.
#Sl. . #S$: c%ip select.
&S':reset
(compilador #suministra )arios drivers para este tipo de LCD gni*icos+ el GLCD.C,
GRAPHICS.C ,+ el mas especi*ico+ -D.6/0S1$. #.
La cone1ion de*inida en estos *ic%eros es la siguiente:
II II II II II II II II II 1 1 / 1 / 1 1 1 1 1 1 1 / / 1 1 1 1 1 1 / 1 1 1 1 I 1 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1
I I I I I I I I
I I / I LCD P in eo n n ec t io n s: 1 / 1 1
I I I I (These C(l1 1 be dumged s n eeded in t he!o llo "il1 g de!in es#. I I I I
/ 1 1 / $%% is c o n n ec t ed t o G&D 1 I I I
1 1 1 1 $DD is c o n n ec t ed t o '($ I I I I
///1 va - LCD opemtiflg voltage (Cn st rst d)ust men t * Ifff
/ 1 1 1 DI T + Dt o r I n st ruc t io n is c o n n ec t ed t o ,- I 1 I 1
/ / 1 1 R/ W + Red o r Writ e is c o n n ec t ed t o ,.c 1 1 1 /
1 / / 1 /n ble is c o n n ec t ed t o ,( I I I I
I I I I Dt ,us ,t o " is c o n n ec t ed to 0o rt d I I I I
71
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
//// Chip Select 1is connected fa 80
Ilf/ ChipSelect 2 is connected to 81
If//
III/
1/11Reset is connected to C O IIII
//1/ Negative voltage is also connected to the 20k Ohm POT ////
/1// Positive voltngefor L! "acklight is connected to #$% f/&/
//// Negnvtive volfagefor L! "acklight is connected to 'N!&///
W W
1///////////////////////////////////////////////////////////////////////////////////
Las funciones definidas son:
gcd_iill t(mode)
Debe ser la primera fund6n en invocarse. Enciende el LC!(
glcd_pixel(x!color)
Establece el color del pixel. "uede activarse 0desactivarse.
glcd_fil#$creen(color)
%ellena at LC! de un color determinado. "uede activarse &desactivarse.
glcd_updateO
Escribe en la %'( del LC!) s6)&es posible si esta definido *+ST,'LC!(
glcd_line(x) !) x2 !2 color)
Dibu*a una linea desde el primer punto al segundo asignando color el cual a su
vel puede activarse &desactivarse.
g)cd_rect(x) !t x2 !+ fill color)
Dibu*a un rectangulo con un vertice en (xl !l) y el otro en (x2, y2). "uede ser relle,
nado &no y puede activarse un color &no.
glcd_bar(xl !l x2 !2 -idt. color)
Dibu*a una barra des de el primer punto a/ segundo0 se puede definir el numero del
rango de pixeles y puede activarse el color &no.
glcd_circle(x ! radius fill color)
Dibu*a un circulo con centro en (x y) y con el radio especificado0 puede rellenarse
o no ! puede activarse e/ color &no.
g/ cd_text12(x ! textptr si+e color)
Escribe el texto empe+ando en (x !)0 los caracteres son de 5 x 2 pixeles0 se puede
escalar el tarnafio y puede activarse el color &no. Esta funci6n envia .)&1caracteres
a la linea siguiente (se debe usar -define 'LC!,.&!T/ para definir el anc.o de
visuali+acion).
72
3 . L a g e s t i o n d e l o s p u e r t o s
Ejemplo 4: Visualizar en un LCDel estado de las entradas del PUERTOA (ver figu
ra 16). Disponemos de los compone.ntes ISIS: PIC16F877, RESPACKB, LGM12641-
BSIR Y SW-SPST-MOM.
PUERTO A
A O
ts.
AI
. ,
Fi g u r a 16.EI e s qu e ma d e . e Je mp . o 4
#include <16F877.h>
#fuses HS, NOWD1, NOPROTECT, NO!"P
luse delay(clc!"2#######$
%linclude <HD#6$%S1&.'>
#().*'+u,e <-./0h1's. '>
use s2/*,/.,314 5/6
&id 7/1* 56
CHAR AS ! -'(S')
CHAR A 4 ( *-'(4')
CHAR (+( lell(+')
CHAR A" ! #$A"$%
CHAR Al 1,'(l')
-.(R (O/ 1 '(O')
-.(R I0/ 189PUERTO A9:
-+',3+*1C.ON6:
t)*.1 cd1te2tS3 (++4 +54AS& 1& 16 :
6lcd te2t78 (494 +#4M4 1& 1);
6lcd1 te2tS8 (674 +#4(+4 1, 1) ;
6lcd1te2tS8 ('1& +#4(24 1, 1) ;
73
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
glcd_cext57(97, 30,AI, 1, 1);
glcd_cext57(113, 3~,AO, 1, ~};
glcd_cext57(30,5,TN, 2, 1);
while (1)I
if (input_scate(PtN_A5)--OJ
glcd cecc(J2,40,46,60,1,1);
else
glcd_ect(J2,40,46,60,1,O!;
glcd_cect(32,40,46,60,O,1!;
i" (i#$%t_st&te('IN_A4!~;0)
glcd_cect(4(,40,62,60,1,1!;
else
glcd ecc(4(,40,62,50,1,0);
glcd_ect(4(,40,62,)O,O,1);
i* (i#$%t_st&te('I~_A3)+" 0)
glcd_cecc (54,40,7(,50,1,1);
else
glcd_cecc(64,40,7(,60,1,0!;
glcd_ecc(64,40,7(,60,0,1);
else
if (i#$%t_st&te('IN_A2)~O)
glcd_ect(,O,40,-4,60,1,lJ;
glcd_cect ((0,40,-4,60,1,0),.
glcd_ect((0,40,-4,50,0,1);
if (i#$%t_st&/e('IN_Al!&;O)
glcd_ecc(-6,~O,110,60,2,1);
else
glcd_ecc(-6,i~,001,60,l,0);
glcd_ect(-6,40,110,60,O,1);
if (inpuc_ sCc'u:e (PTN_AO)=0)
.glcd_ect(112,40,126,60,1,1);
else
glcd_cecc(112,40,126,60,1,O);
glc&_cect(112,40,126,60,O,I);
del&2_3s(400)4
}
Figura' 7. EI programa conespondiente al ejemplo 4
7 4
3. La ges1i6n de los puertos
3.3.3Teclado (keypad 3x4J
Las entradas a traves de un pulsador son muy habituales en los sistemas con micro
control adores para trabajar con una mayor informacion 0informacion alfanumerica.
Por ejemplo, se utilizan los teclados matriciales de lx4, 3x4 04x4 (ver i!ura "#$.
i!ura "#. %lferentes tlpos de tedados matrlciales
&l cornpilador de ' incluye el driver KBD.C para manejar el teclado (3x4$. Las fun
clones (ue incorporan son las si!uientes)
*bd+init,
lnicializa el sistema, debe ser la primera funci-n en el pro!rama.
*bd+!etc,
%evuelve el valor de la tecla pulsada en funci-n de la tabla (ue tiene pro!ramada
(ver fi!ura ".$.
liP 0 !/ 0
char const KEYS[4][3] a {{'1','2','3'}.
1242 ,232 ,2-24.
1252,2#2,2.24,
1262,2,2,272448
f"!ura "..La deflnlcl-n de teclas en el archlvo 9:%.'
; traves de la modificaci-n de esta tabla podemos adecuar el resultado del pro!ra
rna a las dislintas caratulas del teclado.
&< archive KBD.C esta pensado para trabajar con el PORTB 0e/ PORTD (ver i!ura
=0$. ;ctivando 0no la linea #define Ilse_portb_lcd TRUE podemos seleccionar el
PORTB (ver fi!ura ="$.
53
Ccap||accr C CCS Y S|au|accr PR0TEuS para H|crcccr|rc|accres PlC
Hlr deFrn ~~portb_kbd
rtbl,ll kbd - 6 \
lIeIs!!
IIhl)t 1\ kbd - 8
tentJi f
"Nldif
I '111 | 0 lart r (I
I on I I I' 0 (I
IIlf defined use_portb_kbd ~
|||||'inp set_tris_kbd(,.,rset_triS_b(X) <, )
1l1'1s
Pdefinl set tris kbd(\l set tris d(x)
lendlf _ - --
Figura 20. La !nflgural6n de "uert!s
Figura 21. #aselel6n del $%&'(
#as !ne)i!nes *ienen dadas en el fi+er! "er! se "ueden ,!difiar-
.+1I' till' C! (1 ")
tltlefio~Cl# (1 6)
1lceF|r,. Cl$ (1 %)
111ft/fin &%0% (1 #)
[)
lId&i' RO~/1 (1 2)
'IIIefin
&%ll2 (# 1)
llce| | 111' (ll) (# 2)
r .
3%
3li 321
~ ...
~
r ,
(
1 2 1
/
&l
4
4 5 6
r|
f|a0|lN'!
~ R2
&5.
22
,e
7 4 6
(8$
71
. ~
R|l8lPOH
..
(8*
26
&1
-HI
+ ,
0 8
~\'
Rl|e
Hf9
: !
&(7i$;<
r91#
.~ ...
T<'c",",~'".f
Figura 22. La aslgnal6n de "atlllas
76
3. La gestion de los puertos
Se puede trabajar con el LCD yel teclado a traves de puertos separados 0compar
tiendo el mismo puerto (con ej ahorro de patillas que conlleva) (ver figuras 23 yM).
ompartir puerto suele eonllevar problemas si se quiere trabajar con el teclado y
las interrupciones RB4IRB7.
!!
"igura 23. #f$.%&el tec'ado en puertos distintos
(%2
~ j
.......
I Listo .
I
' 1
I I
)*+,0.
~~~ ~~~ B5ssa&Sa - -
.+ $
2 3
.
~;
.
$.$- $- /01
12
) 3
t
I ~ U 1
- l
r-
4 $
4 rci'5/2
< ! * ,
~ ~
= .,
1
~
6
7 7 8 lM8 8
~ ~ -
0 *
0 9 00$$M/
-
:!
_ o H J N _
-
;t
~ P..!- npt;
, .
~ ~ ! I " I # I l1 # $ % ' t, & ;'
I
00un00000/0
~ ~
..0+.+0;
000st/< St8 =
g
' '....+
..+.0.+..0.
M
(t)1 l~ U t!*r
' ' , +
~ ~
"igura 22. #f$.%&el tedado compartiendo los mismos puertos
#jemplo ); 8 ntroducir datos par el teclado Y visuali>arlos en el LCD. uando se
pulsa la tecla 1/*" borrar e$LCD (ver figura 22). Se dispone de los siguientes compo
nentes ISIS: P[C18F876,LM016L , KEYPAD-PH ON E.
#include <16FB76.h>
8 fuses XT,NOWDT,NOPROTECT,NOLVP
?use dela!cl"c#$ 4000000)
#include <lcd.c>
#incLude <#%d.c>
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
void main ()
char k;
int: x;
lcd_lnH (),.
kbd_lnit();
por.t_b_pullupS(TRUE),.
lcd_putc("!"i#t;o ... In");
$hil% (TRUE) (
k&kbd_'%r::ct) ,.
x - k - 4 8 , .
if(kJ"O) I
i!rk& 'W')
lcd_putc( '\f');
%l#%
lcd_pucc (k) ;
d%la(_m# (SOO) ;
)) *onv%r#ion num%ric#
)) )mprim% caract%r
prinr:!(+cd_putc, "If Car-flc",k),. )) )mprim% c%r%cc%,
d%la(_m# (SOO) ;
print!(lcd_putc, "Ie *ar& u",k); -+ )mprim% valor .S*))
delay_ms (SOO);
princtUcd_pu**, "It/um&tu",x); +- )mprim% valor num%ric"
delay_ms(500) ,.
lcd_putc("t"i#to ... In"');
)
Fi gu r a 25. e f p r o gr a m a d e . e je m p fo 5
Debemos observer que el valor leido en el teclado y el visualizado en el "*0 es
un caracter ACn. i deseamos convertirlc a su valor numerico corres!ondiente
deberemos restarle el valor "# $%& en 'e(adecimal)) esto se debe a que el caracter &
en ASCrr es %&', ell es %*', etc.
+,em!lo -. Disefiar un sistema basico !ara el control de accesos) a traves de un
teclado de %(" introducir una clave de % dl/itos que cuando sea correcta abra una
!uerta $con un !ulsu a un rele) y *& indique en una !antalla de 0CD. 1uardar la
clave de acceso en la memoria EE1R23 $fi/ure 2-). e dis!one de los si/uientes
com!onentes )S)S: 1)*+45467, 8E91.0&1H2/E, RES, 4:+;<, *E""9 RE".9.
78
3. L a g e s t i o " d e l o s p u e r t o s
LC02
~
I " YIn,. h,1I1
I I
I
. I
_ "
I
-
1 2 3
~
.
',,'
t o.
4 5 6
,-
"'"_:
: i f -
7 8
I
9
1I ~~
I t:
*
0 #
h l
. _
;;
-
~""
-
Sill
!Rl .l
1
III
'n
-tr;::::l
r
B A l l
N
f------
CFA:RAl)U}lA
Fi g u r a 26. EI e s qu e ma d e l e je mp l o 6
#;include <16F876.h>
#fuses XT,NOWDT,NOPROTET,NO!"P
#use del#$%cl&c'( )******+
,usesc#nd#-d./&%#+
# inc0112dl34 <led. c>
#include <'5d.c>
#include <s6dli5.h>
4l-&7O891**(%'7',' 2',' 3'} 11 P&sici&n *,1 y2 de l# Ee:-&7c&n l&s dezos.:
11 1,2, Y 3 -es:ec6i;#7en6e
;&id 7#in%+
ch#- k;
inc i:
ch#- d#c#<=>, cl#;e%=?; 11 @#6-ices :#-i4 quesdeA cie;e y d#6&s
lcd.in.i.6; %+;
'5d.in2.t ();
:&-6.5.:ullu:s%TRBE+;
Chile %TRBE+<
11 :&sici&n de l# 7#6-iD
:nn6f %lcd.:ucc, EF f:uls,u 6ecl# 1In" ); 1 1 P#-# :-i7e- d#6#
1~. I pl(1!-2)( 11 P#-# e-es d#6&s
'('5d.Ge6c<+; 11 !ee el 6ecl#d&
7 9
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
i-'-+;
1/ 5i se ha pulsado alguna reela
II se guarda en la posici6n correspondienre
// de la macriz
if (k!=O)
{data l i i=k:
pri"Ci'(lcd_putc,"lfpulsar teela ulnH,iH);, II Siuiente dato
for (i=!;i"=#;$++) II Pasa datos de eeprom a la matriz clave
clave[ij=read_eeprom(i);}
if ((data[OJ=clave (OJ)E.S (data%i&l =clavel) && (data(!"=clave(#'))
( print#(lcd$putc% "lf(ue)t:a &'ierca()) II *a+paralos datos , !aclave
*utput_+i+ (-I.$&/)) /1 5i es 101al da pu&)eo a' rele
dela,$tas (511) )
oucput_low(PIN_AO);}
else printl (lcd_putc, H, f(uerca Cerrada");
dela,$InS (OOO))
}
I *lave erronea
Fi gu r a 27,' P r o gr a m a d e l E je m p l o
Ejemplo 7: Introducir los datos, a craves de un teclado, de velocidad de un mo
tor y generar una serial modulada en ancho de pulsoproporcional al dato de la
velocidad (ligura28). Se dispone de los siguientes componentes ISIS2 -I*134356%
7E8-&/9-:O.E% ;ES% !S7l153% *E Y <O=O;.
Fi gu r a 28. E l e !s "u e m a d e l e je m p l o 7
80
3. L a g e s t i 6 n d e l o s p u e r t o s
Se genera una sefial modulada en ancho de pulse PWM (sin utilizar el modulo
CCP de los PiC) donde el sernlperiodo de sefial a nivel alto esta fijado por el valor
introducido en cl reclado. Para elJo, se uriliza lin registro de 8 bits para fijar el semi
periodo a nivel alto (PWMH) y el semiperiodo a nivel bajo (PWML) (ver la Figura
!". #omo el valor ma$imo del registro es %%, este debe coincidir con el valor
ma$imo del teclado, es decir !& por '( tanto, la relacion entre el valor del teclado y
el semiperiodo PWMH sera)
P*+,- (%%.!" $ /ecla, apro$imadamente P*+,-8It/ecla.
J P*+0
~
J
81
%%
Fi g u r a !. La mo d u l a cl 6 n PWM
Segun dicha ecuaci1n cuando el valor de teclado sea ( la salida sera ( de forma
conti nus y el motor esta ra parade. #uando el valor de teclado sea !, el semiperiodo
PWMH sera de % (no llega a %%" y el motor estara casi a toda marcha. 23 semipe
riodo a nivel bajo PWML se obticne de restar el PWMH a %%.
Hinclude <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOLP
R!"E DEL#$ %CLOC&'())))))*
++NCL!DE <,-d.c>
+!"E "T#ND#RD.+O %/*
VOID MAIN()
I
CH#R X,,/n0 1)12 3 , 4/l56 de eecl/d5, , 4/l56 /n0e6i56 de 0ecl/d5
ch76 PW8H9O,PW8L )2 ++ "e:i;e6i5d5 /l05 y -/<5
,-d.in,i0%*2
PORT.=.P!LL!P"%TR!E*2
WH+LE (1) {
,e,-d.>e0c %*..
if %,e91?O1* ,',/n0@
1/ =ucle in3:i05 %sie:;6e c5nsul0/ el 0ecl/d5*
13 Lee en #"C++ el 4/l56 de l/ 0ecl/ ;uls/d/
++ "1 n5 se ;uls/ cecl/ (10) se us/
1/ e.L 4/l56 /ncecA.56
++ "i se ;uls/ B 0 # se /siCn/
33 un 4/l56 ce6/.
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
kant-Jc; II Sa guarda tecla pulsada
k-k-48; /1 Se convierce de ASCII a valor numer.lCO
P!"-k#$8; II Proporci%n encre valor tecla.&# semiperiodo Alto.
P!'-$S(-P!"; II Semiper.lodo )a*o
+or ,P!";P!"-.;P!"--/, /1 O0cenci%n de la salida a nivel a1eo
O12P123"I4"5PI63A.J;&
7o.r,P!';P!'-O8P!'--/,
O12P123'O,PI6 A./;&
II O0tencion de la salida a nlvel 0a9o
FI gu r a 30. E I p r o gr a m a d e l e je m p l o 7
FI gu r a 3. !a s e n a l o "t e n l d a p a r a e l #a l o r $
8 2
4. L a s i n t e r r u p c i o n e s y l o s t e m p o r i z a d o r e s
Capitulo 4
L a s i n t e r r u p c i o n e s y
l o s t e m p o r i z a d o r e s
83
4. 1 In t r o d u c c i o n
Las intcrrupciones permiten a cualquier suceso interior 0exterior interrumpir la
ejecuclon del programa principal en cualquier memento. En el memento de pro
ducirse la interrupcion, el PTC ejecuta un salto a ]a rutina de atencion a la interrup
cion, previamentc definida por el programador, donde se atendera a la demanda
de la interrupcion. Cuando se termina de ejecutar dicha rurina, el PIC retorna a la
ejecuci6n del program a principal en la misma posicion de la memoria de prograrna
donde se produ]o la interrupci6n.
EI rnane]o de interrupciones permite realizar program as que no tienen que estar
continuamente consultando sucesos internes 0externos mediante tecnicas de con
sulta polling, las cuales provocan retardos paradas en la ejecucion del programa
principa!.
Los TIMER 0Lemporizadores son m6dulos integrados en el PIC que pennite reali
zar cuentas tanto de eventos internes como extemos. Cuando la cuenta es interna
se ha"la de temporizacion y cuando la cuenta es extema se ha"la de contador. Los
tinters estan intimamenle ligados al usa de las interrupciones, pero no por ella se
utilizan siempre de forma conjunta.
4.2 In t e r r u p c i o n e s
#$ producirse una interrupcion, el PIC salta automaticamente a la direcci6n del
vector de interrupcion de la memoria de prograrna y ejecuta %a porcion de progra
rna, correspondiente ala atenci6n de la interrupcion, hasta enconrrar %a instruccion
RETFIE. Al encontrar dicha instruccion, a"andons la interrupci6n y retorna a la
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
posicion de memoria del prograrna principal desde la que salto al producirse la
interrupcion.
Las fuentes de interrupcion depcnden del PTCutilizado, Por ejemplo, el PIC16F84
tiene 4 Fuentes de interrupcion y la familia PIC16F87X tiene entre 13 y 14.
Los PIC de gama baja y media tienen un unico vector de interrupci6n situado en
la direccion 04 de programa !figure 1", mientras que los de gama alta tienen dos
vectores de interrupcion de distinta prioridad, alta y baja, situados en la posicion
08h y 18h de la memoria de programa.
P C <12'O >
#$l.%..%%&'()* t H
)&'F1&.)&'l.+,-
ti
H l e l 1 d e l a P l l a
H l e l 2 d o l a P l l a
13
.
V
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
%t
"l e l # d e 1# P i l e
I i
$e c t o r d ! R e s e t
O O O O %
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! &! ! ! ! ! ! ! !
,0.
'
. .
i l
$e c t o r d o I n t e r r u p c l o n
((()%
(O O *%
P e +i n ! O
(,--%
. . /
(#((%
P a +l n a 1
O ---%
1(((%
P a +l n / 2
1. .
1,--%
1---%
0 1
P a 23l n a 4
Figura 1. /emoriade programa ,posicion del vector de interrupcl6n0
$l poseer un unico vector de interrupcion !dos en la gama alta", el PIC posee unos
registros de control donde mediante la utilization de banderas, 0flags, el usuario
puede deterrninar que es 1( que a producido la interrupcion1 ademas, en estos
registros, se pueden abilitar 0 no las distintas fuentes de interrupcion !mascaras
de %nterrupcion" e, inc1uso, permite una abilitaci6n general.
#uando %a abilitacion general esra activa y algunes, 0 todas, %a particulares tam2
bien 10estan, los flags se activan en el caso de producirse algunas de las interrup2
clones, de tal manera que el programador puede, mediante el testeo de dicos flags,
actuar de la forma mas adecuada.
8 4
4. Las interrupciones y los temporizadores
La familia PIC16F87X tiene hasta 14 fuentes de interrupcion. Posee un registro de
control, TNTCON (figura 2), que permite la habilitacion de interrupdones y el mancjo
de losflags. La habllitacion general se activa mediante e1 bit GIE (lNTCON<7, el cual
es desactivado en el reset; por 1tanto, ha! que habilitarlo por programa. "#isten 4
registros adicionales para $a gesnon de las interrupciones% PIR1, PIR2, PIEl &PIE2.
'uando se responde a una interrupcion, el bit Glf es inhabilltado para evitar inte(
rrupciones sucesivas. La direccion de retorno del program a principal se almacena
en la pila y el contador de programa se carga can $a direccion 4h. )na ve* en la
rutina de atenci+n a la interrupcion se puede deterrninar la fuente de la interrup(
cion mediante el testeo de los difcrentes flags. Losflags activos deben ser ,borrados,
antes de abandoner la rutina de interrupci+n para cvitar reentradas err+neas.
Registro ITCON Idlreccion RAM: OBh/8Bh/1 OBh/18Bh, [PIC16F87!
-$./0 -$...o -$./0 -12/0 -$./0 -$.30 -$...o -$.3#
4$" 5$ P"$"
$ 60l" $$76" $ -8$" $ 60$9 $$769 $ -8$9
I i1
8lt: 8lt0
~,
Figura 2. Reglstro I NTCON
bit :% GlE: 8it de habilitacion global de las interrupciones.
1; <abilita todas las interrupciones no enmascararbles.
5, Las deshabilita.
bil+% PElE: 8it de habilitacion de las interrupciones de perifericos.
1 <abilita todas las interrupciones no enmascarables de
perifericos.
; Las deshabilita.
bit =% TOlE: 8it de habilitaci+n de la interrupcion por desbordamiento del
TMRO:
1 ; <abilita la interrupcion del TMRO.
; La deshabilita.
bit 4% INTE: 8it de habilitacion de la interrupci+n e#tern a RBO/INT.
1 ; <abilita la inlerrupci+n del RBO/INT.
; La deshabilita.
bit >% RB1E: 8it de habilitaci+n de la interrupci+n por cambio en el PORTB.
1 ; <abilita la interrupci+n del PORTB.
; La deshabilita.
8 5
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
bit 2: TOIF: Bit de jlag de Ja interrupcion del TMRO.
1=EI registro del TMRO se ha desbordado (debe borrarse
por software).
o =EI registro del TMRO no se ha desbordado.
bit 1: fNTF: Bit de jlng de la interrupci6n del RBOIlNT.
I =Se ha producido una interrupci6n extea por RBOIINT
(debe borrarse por software).
!" #o se ha producido la interrupci6n.
bit !: $BI%: Bit de jlng de la interrupci6n por cabio en PORTB.
1=&l enos uno de los terinates RB7:RB4 ha cabiado de estado
(debe borrarse por software).
!" #o se ha producido cabio en dichas patillas.
Reglstro PIE1 (dlreccfon RAM: 8Ch, [PIC16F87x]
$f'..()
$f'()
$f'..()
$f'() $f'() $f'*) $f'*)
$f'..()
! PSPIE lADlE I RCIE I TXIE I SSPIE I CCP11E I TMR1E I TMR11E
!"
Bit+ Bit)
i" i
#!##! $ci#$
%igura ,. $egbtro -IE.
bit +: PSPIE: Bit de habilitaci6n de interrupci6n por lectura/escritura del puerto
paralelo escla0o:
1 " 1abilita la interrupcion por lectura/escritura del PSP.
!" 2a deshabilita.
bit 6: ADIE: Bit de habilitacion de interrupci6n por con0ersion AID.
1=1abilita la interrupcion.
!" 2a deshabilita.
bt 3: ReIE: Bit de habilitaci6n de interrupci6n por recepcion del USART.
% =1abilita la interruption.
!" 2a deshabilita.
bit 4: TXIE: Bit de habilitacion de interrupci6n por transisi6n del USART.
1 =1abilita 1ainterruption.
!" 2a deshabilita.
56
4. Las Interrupciones y los temporizadores
bit 3: SSPIE: Bit de habilitacion de interrupci6n del puerto sene sincrono.
] ""Habilita la interrupcion.
0==La deshabilita.
bit 2: CCPlIE: Bit de habilitacion de interrupci6n del modulo CCP1.
1 '" Habilita la interrupcicn.
0= La deshabilita.
bit I: TMR2IE: Bit de habilitaci6n de interrupcion por iualacion del
TMR2 y PR2.
1 = Habilita la interrupcion.
0= La deshabilita.
bit 0: TMRl1E: Bit de habilitacion de interrupci6n por desbordamiento del TMRI.
1= Habilita la interrupci6n.
o ! La deshabllita.
Regfstro PfE2 ,dlrecclon RAM: 8Dh, (PIC' 6F87xl
u! o "I# ! $ u! e "I# ! $ "]# %$ u! e u! o "&# ! $
I i. I I
~ r
I EEIE I BCLIE
I I
ICCP21E ,
81t7 61t$
~.
~
'Iura (. "elstro )I*2
bit +: ,o implementado. -e lee como $.
bit 6: "eser.ado.
bit /: ,o irnplementado. ! e lee como $.
bit (: EEIE: Habilitaci6n de interrupcion por escrirura en EEPROM.
1= Habi&ita la interrupcion.
0 .. La deshabilita.
bit 3: BCLIF: Flag de interrupcion por colision en bus
1 ""0olisi6n en el bus SSP 0 12C en modo master.
0= ,o ha1 colislon.
bit 2! 1: ,o imp&ementados. -e leen como $.
bit 0: CCP2JE: Habilitacion de interrupcion del modulo CCP2.
1 =Habilita la interrupcion2
0= La deshabilita
3+
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Los registros PIRl y PIR2 contienen los flngs de las distintas interrupciones, El com
pilador C se encarga de generar el codigo necesario para leer y borrar dichos flags,
tal y como podremos ver en el siguiente apartado.
4.2.1 I n t e r r u p c i o n e s e n C
En el compilador Cla directive habitual en el manejo de las interrupciones es
IIINT_xxxx. Especifica que la funcion que le sigue es una funcion de interruption;
edemas, no necesita mas parametres.
Las posibles directivas son las siguientes (en gris las posibles interrupdones en la
familia PIC16F87X):
Interrup clones Descripcin
!I"#$%D Conversion %D completa.
&tI"#$%D'( Conversion %D fuera de rango de tiempo.
)I"#$*+,C'L Colision de bus.
!I"#$*+#I'" -ar boton (./0001.
CI"#$C%"E22 Error en el modulo CAN.
IiI"#$C%"l23 4ensaje invalido en e. bus CAN.
!I"#$C%"23'
*us CAN redbe un nuevo mensaje en buffer '.
!I"#$C%"23I *us CAN recibe un nuevo mensaje en buffer ..
!I"#$C%"#3' *us CAN transmision completa en buffer '.
/I"#$CANDO *us CAN transmision completa en buffer l.
)I"#$C%"#35 *us CAN transmision completa en buffer 2.
!I"#_CANWAKE *us CAN even to de activacion 0 uiake-up.
i.I"#$CC-l +nidad . de captura, comparacion yP!.
IiI"#$CC-5 +nidad 5 de captura, comparacion y -64.
!I"#$CC-7 +nidad 7 de captura, comparacion 8 P!.
+"#$CC-/
+nidad / de captura, comparacion y P"#!.
!I"#$CC-9 +nidad 9 de capture, comparacion 8 -64.
!I"#$C'4- Comparador.
III"#$C'4-& Comparador 1.
88
4. las Interrupciones y los tem porizadores
Interrupciones Descripcion
!TINT_COMP2 Comparador 2.
/tINT_CR Encriptacion finalizada.
IIrNT_EEPROM Escritura EEPROM finalizada.
flINT_ET Interrupcion e!tema (RBO).
/lINT_ETl Interrupcion e!tema ttl.
ttlNT_ET2 Interrupci"n e!terna #2.
ttINT_ET$ Interrupcion e!terna 1 1 3 .
#INT_I2C Interrupcion 12C (1 4000).
#lNT_ICl Entrada capture tt l.
%&&&
ItINT_IC2 Entrada captura 1 1 2 .
ttINT_IC3 Entrada captura #$.
#INT 'CD (cti)idad LCD
RINT_'O*+O'T Detectado ,a-o )olta-e.
ItINT_'+D Detectado ,a-o )olta-e.
#lNT_O.C_/(I' /allo en oscilador.
!tINT O.C/ /allo en oscilador.
dINT_P.P Dato de entrada en puerto paralelo.
#INT_P*MT0 0ase de tiempo PWM.
!tINT .R( Cam,io de estado en (O&(..
ilTNT_R0 Cam,io de estado en 01&02.
f3INT_RC Cam,io de estado en C1&C2.
tiINT_RD( RS2 3 2 dato reci,ido.
/tINT_RO(O RS2 3 2 dato reci,ido en bllffer O.
#INT_RD(I RS2 3 2 dato reci,ido en buffer 1 .
IIINT_RO(2 RS2 3 2 dato reci,ido en bllffer 2 .
ItINT_RTCC Des,ordamiento del Timer 4 (RTCC).
ilINT_P.P Escrltura/lectura del puerto paralelo.
8 9
4. Las interrupciones y los temporizadores
Interrupcioncs
Descripcion
,ltINT_COMP2
Comparador 2.
~INT_CR
Encriptacion finalizada.
INT_EEPROM
Escritura EEPROM finalizada.
dINT_E!T
Interrupcion e"terna (RBG).
INT_E!TI
lnterrupcion e"tema #.
IiINT_E!T2
Interrupcion e"terna .Ii2.
INT_E!T$ Interrupcion e"terna 1 t 3 .
fNT_I2C Interrupcion 12C (1 ':1 000).
%lINT_ICI Entrada captura 111.
lNT_IC2 Entrada caplura 2.
~INT_IC$ Entrada captura $.
I#INT_&CD 'cti(idad LCD
INT_lO)*O&T Detectado +a,o (olta,e.
INT_&*D Detectado +a,o (olta,e.
I-NT_O.C_/'Il /allo en oscilador.
I#INT_O.C/ /allo en oscilador.
INT_P.P Dato de entrada en puerto paralclo.
ItrNT_P)MT0 0ase de tiernpo PWM.
ttlNT_R' Cam+io de estado en 'O1'..
ltINT_RB Cam+io de estado en 021l$3.
lNT_RC Cam+io de estado en C21C3.
INT_RD' RS232 dato rcci+ido.
lNT_RD'O RS232 dato reci+ido en lll~ffi. 'rO.
ItINT_RD'l RS232 dato reci+ido en buffer 1.
INT_RD'2 RS232 dato reci+ido en bllffer 2.
INT_RTCC Des+ordarniento del Timer 4 (RTCC).
INT_P.P Escritura5lectura del puerto paralelo,
8 9
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U Sp a r a M l c r o c o n t r o l a d o r e s P I C
Interrupdones Descripci6n
ItlNT_SSP Actividad en SP! 012C.
itINT_SSP2 Actividad en SPIo 12C Port 2.
#INT_TBE
RS232 ouffer de transmision vacio.
# INT_TB EO RS232 btiffer de transmision vacio.
#INT_TBEl RS232 buffer !de transmision vacio.
#INT_TBE2 RS232 bliffel' 2 de transmision vado.
IIINT_ TI"E#O Des$ordamiento del Timer %#T&&'.
ItlNT_ TI"E#! Des$ordamiento del Timer 1.
(tINT_ TI"E#2 Des$ordamiento del Timer 2.
#INT_ TI"E#) Des$ordamiento del Timer 3.
#INT_Tl"E#* Des$ordamiento del Timer 4.
#INT_TI"E#S Des$ordamiento del Timer 5.
#INT_+SB Actividad en el USB.
E,iste una directive #INT_DE-A+.T /ue irnplica /ue se utili0ara Ia (uncion /ue 1e
acornparia si se activa una interrupcion y nin2uno de losflrrgs esta activo.
.a directiva #INT_3.OBA. implica /ue la (undon sustituy e todas las acetones /ue
inserts el compilador al aceptarse una interrupcion. Se e4ecuta solamente !escrito en
dic5a (uncion6 No se sueIe utili0ar y si se 5ace de$e 5acerse con muc5o cuidado.
Si se utili0an las directivas de interrupcion6 el compilador 2enera el codi2o nece7
sario para e4ecutar la (unci6n /ue si2ue a la directive. Ademas 2enel8a el c6di2o
riecesario para 2uardar al principio y restituir al (inal el conte,to9 tam$ien $orrara
el flng activo por la interrupcion.
E!compilador & induy e (unciones para el me4or mane4o de las directives de 8inte7
rrupd6n:
ena$le_interrupts %nivel'6
nioel es una constante de(inida en un (ic5ero de ca$ecera %!6-;<=.5 >(i2ura 5-) y
2enera el codi2o necesario para activar las mascaras correspondientes6 a(ectando a
los re2istros ITeON6 PIEI y PIE2.
En el PI&l6-;<66 los ?niveles? permitidos son:
90
4. Las interrupciones y los temporizadores
enable_interrupts
ITCON(OBh) PIE1(8Ch) PlE2(8Dh)
(nivel);
GLOBAL
1 1 0 0 0 0 0 0
COh
INT_RTCC
0 0 1 0 0 0 0 0
INT_TIERO
2 0 h
INT_E!T
0 0 0 1 0 0 0 0
1 0 h
INT_RB
0 0 0 0 1 0 0 0
O S h
INT_"D
0 1 0 0 0 0 0 0
4 0 h
INT_RD"
0 0 1 0 0 0 0 0
2 0 h
INT_TBE
0 0 0 1 0 0 0 0
1 0 h
INT_##P
0 0 0 0 1 0 0 0
0 8 h
INT_CCPl
0 0 0 0 0 1 0 0
0 4 h
INT_TIER2
0 0 0 0 0 0 1 0
O T h
INT_TlERl
0 0 0 0 0 0 0 1
$u%
INT_EEPRO
0 0 0 1 0 0 0 0
1 0 h
&NT_B'#CO(
0 0 0 0 1 0 0 0
0 8 h
INT_CCP2
0 0 0 0 0 1 0 0
)*h
91
GLOBAL e+uivale a ,IE = PElE = 1 -.ebe a$tivarse .e /0r1a ln.epen.iente% El
rest0 a$tivaran la 1as$ara $0rresp0.iente%
.isable_interrupts (nivel);
Reali2a (a/un$i0n $0ntraria a (aanteri0r3 1habilita las 1as$aras .ela 1terrup$i0n
$0rresp0n.iente%
Ccap||a1cr C CCS y S|au|a1cr PR0TLuS para H|crcccr|rc|a1cres PlC
L_T0.H
H_T0_L
l e|u\C INT_TBt
INT_ItllA
INT_TUIERl
INT TIltER2
,. lNT:::CCPl
lNT_CCPZ
INT SSP
Mo:I~h. INT:::PSP
Figura 5. Parte el !l"hero I#"lue $%F&'(.h
4.2.1.1 'nterrupclon exterIor por RBO
E) u#a i#terru*"io# +a)i"), "orrui# a $a,a-oria e lo) PTe. Per,ite ge#erar u#a i#.
terru*"io# tra) e/ "a,+io e #i0el e alto a +a1o 2e +a1o a alto e# la e#traa RB3.
4a ire"ti0e utili5aa e) 6/NT_E7T - )e e+e a"o,*)!iar e la) )igui"#re) !u#"io
#e) 8a!e"ta# al +it % el regi)tro 3PTI3N_RE9, 0er !igura %:.
e(t_i#t_ege 8;_T3_4:<
4a I#terru*"io# e) *or Ila#"o e +a1aa 8a"ti0e el flag INTF:.
e(t_i#t_ege 84_T3_;:<
4a i#terru*"i%# e) *or !$a#"oe )u+ia 8a"ti0a el flag INTF:.
R$=>$ R$=>$ R$=>$ R$=>$ R$=>$ R/=>$ R/=>$ R/=>$
l RBPu llNTLDG l Tces l T0SL lpSA l PS2 l PS1
lpsc
Blt' Blt3
~.
"'A'-~~~~ .~??@A~
Figura %. Regl)tro 3PTI3N_RE9
+it %: INTEB9: Bit e )ele""io# el !$a#"oe i#terru*"io# e RB3.
1=4a i#terru*"i%# e) *or !la#"o e )u+ia el *i# RB0/fNT.
2C 4a i#terru*"i%# e) *or !la#"o e +a1aa el *i# RB3!lNT.
92
4. las interrupciones y los temporizadores
Ejemplo 1: Eticcuder y npagnr, cOlIsecutiVI111I1!11tc, un LED ell In paiilla RB7 cuando sepro
tiuzca U/I cauio de ulue! ell In patill RBO (ver figura 7). Compouentes: 1!1!" #I$1%&'7%,
RES, LED-GREEN 1) SW-SPDT-MOM.
asel/ClKIN
OSCgJClKOUT
1...---.J....4 MCLRlVpplTHV
RBo/lNT
RB
RB!
RB"#$%&
R B 4
R!
RB'($%C
RB)/$%O 1-""#-----...$
S*+S$,T+&-&
R.O/.NO
Ri\1!N1
R.!/.N!J0R123
R."(.N"NR124
R.4#TOCKI
R(%I()*I++
%
R$ooso$,I
RCl#T(5SUCC$!
RC!ICC$l
RC"/SCKISC6
RC4IS,IIS,.
RC7ISOO
RC8IT9ICK
R-7lR.lD/
5(
61,+%R11N
$IC('28)'
&igura 7. Ejemplo 1
0include 11!&'7%234
I5uses ./,)O6D/,#U/,)O6R/
luse delay7cloc89 *------:
luse 5ast;io 7B:
<ntl ca=io9O>
lI)/ E./
e?t;isr7: 7
II Varia=le de ca=io
I I (tenci%n a inten0upcic"in por ca=io en RBO
II #unci%n de interrupc<%n
output;toggle 7pin;B7:>
@oid ain 7: I
sec tris<BAO?Ol:> II +O coo entrada, B7 coo salida
outpuc;loBA#I);B7:> II (paga LED
porc;=;pulCup+7/RUE:> II #ull9up pe s: RBO
ena=le;interrupts 7lnt;e?t:> II Da=il<ta inc2 RBO222
e?t;int;edge7L;/O;D:> 1 por 5lanco de su=ida
ena=le;inteaupts 7ELOB(L:,2 II Da=ilita inc2 general
<3ile 11) ( II Bucle inCito de espera
&igura '. (rograma )el ejemplo 1
93
Com pilador C CCS y Sim ulador PROTEUS para M icrocontroladores PIC
4.3 TIMERO
EI bloque funcional TIMERO/WATCHDOG es un contador (registro) de 8 bits, mere
mentado por hardware y programable. La cuenta maxima es de 2 (el incremento
es constante e independiente).
! "ontador# cuenta los e$entos externos (a tra$es del pin %&'ff(")l).
! *empori+ador# cuenta Los pulsos internes de relo,.
-e puede insertar un prescaler, es decir, un di$isor de frecuencia programable que
puede di$idir por 2, ', 8, ./, 02, /', .28 12/. La frecuencia de conteo es una cuarta
parte de la frecuencia de relo, (fosc2'). 3osteriormente, con el uso del prescaler se
puede di$idir la frecuencia,
E.bloque del TIMERO puede fundonar como WATCHDOG, .1que permite que du
rante el funcionamiento normal del microcontrolador, un desbordamiento (1time
out) del Watdldog pro$o que un reset (Watcdog Timer Reset)! 3ara e$itar el desbor
damiento se debe, cada derto tiempo y antes de que llegue a4 limite, e,ecutar una
instruceion C"RWOT que borra el Watcdog y que hace comen+ar un nue$o conteo
desde cero. -e basa en un oscilador RC interno, independiente del oscilador del m i
crocontrolador y que no requiere ningun componente extemo. El Watclrdog cuenta in
cluso si el relo, conectado a (-"l2"LI5I #/o (-"2I"L)( esta parade, por e,emplo,
por la e,ecucion de una instruccion $"EE% 1por un defecto del cristal oscilador.
Los registros implicados en la configuradon del TIMEROIWDT son los siguientes#
! (3*I(67%E8# configura el9hardware9 del TIMERO/WDT.
! l6*"(6# permite traba,ar con la tnterrupcicn de: TlMERO/WDT.
! *%I-&# habilita la patilla RA&!
Reglstro OPTION_REG(direccion RAM: 81h/18th !PI"t#$8%&'
, M N - 1_ _ . - M N_ _ . 1 _ _ , - A A N _ _ . _ 1 - . _ A A N _ _ . _ 1 - . _ A A N . 1 - " A A N . 1_ _ . - R N V _ _ - 1 _ _ r - A A N _ _ . _ .77 ,;
I %<3= IIN TED GI Toes I r(-E IpSA I 3-2 I 3-. Ipso
!i"ura #$ Re"istro OPTION %REG
bit # *(e-#3rocedencia de las sefiales#
.&RA4ITOCKl.
1> %elo, interne.
bit '# *(-E#*ipo de flanco en el TOCK1/RA4:
. &?lanco descendente.
o &?lanco ascendente.
94
4. las interrupciones y los temporizadores
bit 3; PSA; Asignacion del divisor de frecuencias:
l=WDT.
O=TMRO.
bit 2:0: PS2:PS1;PSO:Deterrnina el divisor de frecuencias a actuar segun Ia
siguiente tabla.
Valor Rango!"RO Rango#D!
000
1:2 1.1
001
1: 4 1:2
010 1:$ 1:%
011
1:1& 1:$
100 1:32 1:1&
101 1:&% 1:32
110 1:12$ 1:&%
111
1:2'& 1:12$
El tie()o de desborda(iento del TIMERO se calcula segun 1asiguiente ecuacion:
T =TCM*Prescaler*+2'&, -arga TM RO)
Donde TCM es e1 ciclo (a.uina .uese )uede calcular (ediante la ecuaci&n:
TCM =4/Fosc
4.3.1 TIMERO en C
/a funcion )ara configurar el TIMERO es:
setu),ti(er,O +(odo0;
Donde modo esta definido en el fic1ero de cabecera +afecta a los bits ':0 del OP
TION_REG):
Setu) _Timer._O(modo)i OPTION_REG(81h/181h)
R!--,I2!3R2A/
00000000
O O h
R!-- 34!,/,!O,5
00100000
~
201
95
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Setup _Ti mer_O(modo); OPTION_REG(8lh/18lh)
RTCC_EXT_H_TO_L
00110000
0!
RTCC_"l#_1
00001000
O S h
RTCC_"N_$
00000000
OOh
RTCC_"I#_%
00000001
OIh
RTCC_"&#_S
00000010
0$!
RTCC_"N _1'
00000011
0h
RTCC_"I#_$
00000100
0%h
RTCC_"&#_'%
00000101
OSh
RTCC_"I#_llS
00000110
0'!
RTCC_"I#_$('
00000111
0)h
Lo* d+*t+,to* modo* se puede, -.rup-r med+-,te el empleo de *+m!olo I/
setup_eimer_O (R!l'CC_DIV_2 I R'l"CC_EXT_L_TO_H);
L- 0u,1+o, p-r- 1o,0+.ur-r el WDTe*2
*etup_3dt (modo);
"o,de modo e*t- de02+2,+doe, e& 0+1hero de 1-!e1er- (-+e1t- - lo* !+t* 20 del OPTION _
REG):
Setup_3dl(modo); OPTION_REG(8lh/18lh)
4"T_185S
00001000
08h
4"T_'5S
00001001
06h
4"T_)$5S
00001010
O5
9 6
4. Las interrupciones y los temporizadores
Setup_wdt(modo)i OPTION_REG(81h/181h)
WDT_144MS
00001011
D B h
WDT_288MS
00001100
DCb
WDT_!"MS
O O O O l l O l
O O h
WDT_112MS
00001110
O E h
WDT_2#04MS
00001111
O$h
Para %&ti'%( e) Watchdog *e de+e, uti)i-e( )o* +it* de &o,.i/u(%tio, medi%,te )%
di(e&ti'e 0$1SES2
I..u*e*WDT 3&ti'%do4
5 t.u*e* NOWDT De*%&ti'%do4
EI &omp2i)%do( 6 *umi,i*t(% u,% *e(ie de .u,&io,e* p%(% )ee( 0e*&(i+i( e, e) Tl
MEROIWDT. P%(% e*&(i+i( u, '%)o( e, e) (e/i*t(o 2
*et_time(O ('%)o()7
valor: e,te(o de 8 +it*4
P%(% )ee( el '%)o( %&tu%) de) (e/i*t(o2
'%)o( = /et_timeT() Oi
oalar: e,te(o de 8 +it*4
T%m+ie, pe(mite (e%)i-%( )% pue*t% % &e(o de) Watchdog (&omo 68RWD5 )2
(e*t%(t_wdt 09
E:emp)o 22 Generar una seiial cuadrada de 1KHz utilizando [a interrupcii del TIMERO
('e( .i/u(% 10)4 !oponentes I"[": #I!1$%&'$ e lnstruentos I"I": O"!I((O"!O#E y
!O)*TER TIMER.
P%(% /e,e(%( u,% *e.i%) de 1 ;h- *e ,e&e*it% u, *emipe(iodo de 00 1< )S4 Se/1, 1%
e&u%&io, de de*+o(d%mie,to de) ;7 uti)i-%,do u, &(i*t%= de 4 MHz >tID prescaler
de 22
T? T6M@P(e*&%)e(@(2" _ 6%(/% TMRO)
97
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
500 J . 1 S =(4!4000000)2C256-x)
donde x =6, es decir, se debe cargar el TlMERO con e] valor 6. Pero esta relation
5610 se c!"le si se traba#a en ensa!blador. $l traba#ar en C, el co!"ilador genera
l%neas de codigo &e a!entan e] tie!"o de e#eccion de] "rogra!a ', "or ello, es
necesario a#star el valor %inal. (n este caso se )a tili*ado n valor de carga de 2+
(,xl-).
Fi gu r a ' o. E je m p l o 2
NINCLUDE <16F876.b>
#use delay(clock=4000000
#!uses "#$N%&D#
!use s'a(da)d*+o(,
#+('*#I-E.%
/o+d #I-E.%*+s)(/o+d
ou0c1u'*'o22.le(3IN*,%4
se' 5+6eI% (%7I84
void !ain() (
se'u1*)+6e)*%(.#CC*IN55I.#CC*DI9*:4 II Co(!+2u)dc+6( '+6e)%
II 8e )eca)2e el c+!!5)%
set_ ti!er, (OxlE); II Ca)2e del '+6e)%
e(able*+('e))u1's(LN#*5'e.%4 II ;ab+ll'a +('e))u1c+6( '+6e)%
e(able*+(0ceL#u1cs(2lobal4 << ;ab+l=La +('e))u1c56( 2e(e)aL
>?+le (1). II bucle +(!+(+co
FI .gu r a 11. P r o gr a m a d e l E e m p l o 2
98
4. l a s i n t e r r u p c i o n e s y l o s t e m p o r i z a d o r e s
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EI compilador se encarga al entrar en la interrupci6n de inhabilitar las interrupcio
nes y al salir de borrar los flags, por 10 que no es necesario hacerlo por programa.
Se puede observar la serial con el osciloscopio digital y activando los cursores en el
menu de Trigger (figura 12 y la rnedida es de !!".#6 us.
9 9
Figura 12. Osciloscopio digital
4.4 TIMER1 Y TIMER2
El modulo TIMER1 es otro tempori$ador%contador con las siguientes caracteristicas&
' (raba)a con 16 bits (con dos registros de " bits& TMRlH y (*+l,.
' -mbos registros se pueden leer y escribir.
' Interruption por desbordamiento de ////h a 0000h.
Reset por clisparo del modulo 112.
' 1ontrolado por el registro TlCON (ver figura 13. 1on el bit TMRION
((l104506 se puede habilitar 0 deshabilitar.
Re gi s t r o T1CON (d l r e c c i o n RAM 1!"#$%IC1&'()*+
bit #&6& 4o Impiernentados& Se leen como 0.
bit 7&4& (I182Sl&(1182S0& Selection del valor del presenter del relo) del TMR1:
119 Prescaler a 1&".
Com pilador C CCS y Sim ulador PROTEUS para M icrocontroladores PIC
10= Prescaler a 1:4.
01= Prescaler a J.:2.
00= Prescalcr a l il.
u - e u ..o RIW - O R/wO RIW - O RIW - O R/wO RIW - O
I I
IT1CKPS1 I nCKPSO I nOSCEN I T1SNC I TM R1CS I TM R1!N
t
Bil7 Blt O
"# -
$"
"%&
Figu ra 13. Re glst ro neON
bit 3: T10SC!: Bit "e #abilit a$io % "e l o s$ila"o r "e l TMR1:
1 'Os$ila"o r #abilit a"o .
0= Os$ila"o r &ara"o .
bit 2: T1S'!C: Si%$ro %i(a$io % "e la e %t ra"a "e re lo ) e *t e +a.
Si TMR1CS '1:
1 '!o si%$ro %i(a"o $o % la e %t ra"a "e re lo ) i%t e r%o .
0= Si%$ro %i(a$io % "e la e %t ra"a "e l re lo ) e *t e r%o .
Si TMRJ CS = 0:
sre bit e s ig%o ra"o . T,Rl u rili(a e l re lo ) i%t ar%o .
bit 1: T,R1CS: Bit "e se le $$io % "e la Fu e %t e "e re Jo ) &ara e l TMRO:
1 = Re lo ) e *t e r%o "e s"e eI &i% RCOITlOSOIT1CKl -.la%$o "e su bi"a/.
0= Re lo ) i%t e r%e -F-014/.
bit 0: T,RIO!: Bit "e #abilit a$i2% "e l TMR1:
( 'T,RI #abilit a"o .
0= T,Rl &ara"o 3
EI TLMER1 &u e "e o &e rar e % lo s sigu ie %t e s +o "e s:
4 Co +o t e r%&o ri(a"o r.
4 Co +o $o %t a"o r si%$ro %o .
4 Co +o $o %t a"o r asi%$ro %o .
l +o "o "e o &e ra$io % se e st able $e +e "ia%t e e l bit T,R1CS -T1CO!516. %
+o "o t e +&o ri(a"o r3 e l TIMERl se i%$re +e %t a e % $a"a $i$lo "e i%st ru $$io %3 %
+o "o $o %t a"o r se i%$re +e %t a &o r .la%$o "e su bi"a "e la se rial e *t e r%a. Cu a%"o
100
4. Las interrupciones y los temporizadores
se habilita el oscilador interne del TfMERl mediante el bit TlOSCEN, las patillas
RClrrlOSI y RCO/TlOSOrnCKI se configuran como entradas ignorando el valor
de TRlSC!"#$% EI TlMCR7 tiene un reset interno &ue puede ser generado por el
modulo CC'% (as interrupciones de) TIMERl se controlan a traves de los registros
'IEl y 'IRl%
E)tic#!po de desbordamiento del TTMER1 se calcula segun la siguiente ecuacion"
T*T+%",-'rescaler-+.//0.1 Carga T,R!2
3onde Tt'M es e) ciclo maquina &ue se puede calcular mediante la ecuaci.n"
TeM *4/5osc
El TlMCR2 es un modulo ternpori6ador con las siguientes caracteristicas"
7 Tempori6aci.n de 8 bits +registro T,R92%
7Registro de periodo de 8 bits +'R92%
7 :mbos registros se pueden leer # escribir%
Presenter programable por programa +!"!, !"4, !"!.2%
7 'O;fcn/crprogra#!able pOl<programa +!"! a ="!.2%
7 lnterrupcion controlada por 'R9%
7 El modulo SSP utili6a opcionalmente el TIMER2 para generar una senal de
relo>%
EI TfMER2 tiene un registro de control T9CON +figura !42% El TIMCR2 puede ser
habilitado mediante el bit T,R9#N +T9CON9? para optimi6ar el consumo de
potencia%
!#!
Reglstro T2CON (dlrecclon RAM: 12h)[PIC16F87x
UO u1o RJWO Ri!o RJW!O RJWO RJW!o RJW."
'# .. $# TOUT%&' ( TOUT%&) ( TOUT%&* ( TOUT%&O ( TMR)+, ( T)-.%&* ( T)-.%&O ( ( (
/**0 /*t+
#
1i2ura *4. Re2lstro T)-O,
bit @" No implementado" Se lee como O%
bit ."0" TOAT'S0"TOAT'SO" Seleccion del valor del postscater del TMR2.
0000:: Postscaler a !"!%
### ! * Postscaler a !"9%
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
------ ------------
1110 =Poslscaler a 1:15.
1111 =Posiscater a 1:16.
bit 2: TMR.20N: 1Mde habilitaci6n del TMR2:
1>=TMR2habilitado.
o == TMRl parado.
bit 1:0: T2CKPS1:T2CKPS: Selecd6n del !alor del prescaler del TMR2.
00 =Prescaler a 1:1.
01 =Prescaler a 1:".
#$ = Prescaler a 1:16.
%1TIMf.R2 &e p'ede e(plear co(o ba&e de tie(po& para la (od'lacion en ancho
de p'l&o (PWM) (ediantela 'tili)acion del (od'lo CCP. %l TIMERl &e p'ede leer
o e&cribir * e& borrado en el re&et. +a entrada de relo, -.SC/"0 tiene 'n prescaler de
1:1. 1:"01:16 &eleccionado (ediante lo& bit& T2CKPSl:T2CKPS -T2CN11:02.
+a &alida&e obtiene a cra!e& de 'n postscaler -de 1:1 a 1:160 3'e per(ite 4enerar la
interr'pcion c'*o flag &e enc'entra en TMR2#.5 -P#R11.12. +o& contadore& de pres
caler y postscaler &on borrado& c'ando &e e&cribe en el re4i&tro TIMER2, c'ando &e
e&cribe en el re4i&tro T2CN 0en c'al3'ier re&et E1 TIMER2no &e berra c'ando
&e e&cribe en el T2CN.
%l tie(po de de&borda(iento del TIMER2 &e calc'la &e46n la &i4'iente ec'acion:
T = TcM57Pre&caler8-Car4a TMR2 + l08Po&t&caler9
:onde TCM e& el ciclo (a3'ina 3'e &e p'ede calc'lar (ediante la ec'aci6n:
TeM ="/.osc
4.4.1 TIMER1 YTIMER2 en C
+a con;i4'radon del (od'lo TMRI en e9 co(pilador de C &e reali)a a cra!e& de #a
;'ncion:
Tl<:#S=>+%:
00000000
D O h
&et'p<ti(eT<l -(odo0?
:onde modo e&ta de;inido en el ;ichero de cabecera -a;ecta a lo& bit& 5:0 del re4i&tro
TlCN0:
Set'p<Ti(er<l-(odo0? T#CN-lh0
102
4. las interrupciones y los temporizadores
Setup_ Timer_l(modo); TICON(lOh)
Tl_INTERNAL
1 0 0 0 0 1 0 1
85h
Tl_EXTERNAL
1 0 0 0 0 1 1 1
87h
Tl_EXTERNAL_SYNC
1 0 0 0 0 0 1 1
83h
Tl_CLK_OT
0 0 0 0 1 0 0 0
0 8 h
Tl_!I" _#Y_l
0 0 0 0 0 0 0 0
O O h
Tl_!I" _#Y_$
0 0 0 1 0 0 0 0
1 0 h
Tl_!I" _#Y_%
0 0 1 0 0 0 0 0
2 0 h
TI_!I" _#Y_#
0 0 ] ] 0 0 0 0
3 0 h
Lo& di&ti'to& modo& &e puede' ()rup(r medi('te el *mpleo de &im+olo I,
L( le*ture y e&*ritur( ell el modulo TMJU &e re(li-( ( tr(.e& de l(& &i)uie'le& /u'0
*lo'e&1
.(lor2 )et_timer3 O i
&et_timer3 (.(lor);
do'de valor e& u' e'tero de 34 +it&,
L( *o'/i)ur(do' del modulo TMRl e' el *ompil(dor de C &e re(li-e *o' l( /u'0
*io'1
&etup_timer_$ (modo5periodo5po&t&*(ier);
do'de1
peri odo e& u' .(lor e'tero de 8 +it& (67$55) p(r( el re)i&tro 8R$;
postscale: e& el .(lor del postscaler (3 ( 94), A/e*t( ( lo& +it& 413 del re)i&tro
T$CONiY
modo (/e*t( ( lo& +it& $16 del re)i&tro T$CON,
363
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Setup_Timer_2(modo,periodo,postscaler); T2CON(12h)
T2_DISABLD
0 0 0 0 0 0 0 0
DOh
Tl_DI! _B"_l
0 0 0 0 0 1 0 0
. 0 4 1 1
Tl_DI! _B"_#
0 0 0 0 0 1 0 1
O S h
rr, DI!_B"_1$
0 0 0 0 0 1 1 0
O S h
La lectura y escritura e% el modulo TMR2 se reali&e co% la a'uda de las si(uie%tes
)u%cio%es*
+emplo ,* Generar WIn [uncion que permiia realizar retardos de 1segundo empleanda el
TIMER1. Contponentes ISIS: IC1!"#$! .
-alor =(et_timer2 .;
set_timer2 (-alor);
do%de ualor es lID e%tero de / 0its1
2I31e)4S4T5l
.- __ . _l r W "i l I I !i i ""#i i I
_- - - --" "-$ - I
% " " "$" l
I .. &......... ' (%%$ ""$" ". - %
.. I
1111 I(4I41(67 7
)# .(O -)
Lt89Bl _+ 4111 t....,
:oA*t;7 M O C $ .$*I .$#(
. I AD . 1<<11111111,11
"v 1e714
=i(ura 1>1 +emplo ,
Se calcula u% periodo parcial de .1>se(tm7os y se repite dos -eces*
1.#
4. las interrupciones y los tem porizadores
0.5 =4/F osc(65536-x)P
con Posc =< I !"z y preeecaie #$%& e) TMRI =3036.
NOTA
Para o'ser(er m e)or el perioda conectar el Counter Timer a *+ y ponerlo en
m odo TiME (se,undos).
iinclude <J6f876.h>
#{lJses XT,NOWDT
#use delay (clock=4000000J
ruse st.$-nd$-rd./o(b)
luLl ("on(-O:
Nint_TIMER1
oid cempls (void)
II [ncerr!ci"n TIMERJ#
II $nclOn
i% (&OIl'()*l) ot!t to++le(,IN_-l).
sel:_ Clme.: 1 (/0/")(
conr;+-t:
II !ada 2 interr!ciones de 0." s
II #eca#$a del %&'(
main I )
set up_timer_l (Tl_TNTERNAL I %l)*(+),-)8J:
set_timer] (.0.6/0
en1ble_ inr(ern)!ts (INT_TINERl) .
enable_interrupt.s (+lob1l).
II rec1r+1 del %&'(
II habi li ta intert2!cion cimerl
/ habllita lnl:e##u1ci6n !eneral
"hile (1):
Fi,ura #6. Pro,ram a del e)em plo 3
0arn'ien se podria realizar sin inrerrupciones& esperando a 1ue e) TMRl se des'or2
dase.
23n4llJde<56f876.h>
*%ses #T$N%I&mT
luse de6d37(clock-4000000/
lse sCdnda"'d_:o (b)
#05
C o m p i l a d o r C C C S Y Slmulader P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
temp1 s()
(
int cont-O;
outpuc_coggle(?lN_Bl);
while tcontcs] II Pa~a conrar 2 voces D.S seg
set_timer~ (30361; II Inicializa e1 TNRl
while (geC_timerl(I~-3036); /1 Espera a que se desbocde (0. 5)
conc++;
main ()
secup_timer_l (Tl_INTERNAL Tl_DT_B!_"#;
while (11(
templs () ; II !lamada a la "#$ci6$ de cempori%acio$
Fi gur a 17. P r o gr a m a d e . e je m p l o s i n i n t e r r up d o n e s
Ejemplo 4: MeiI! ei a"cl"# e "n $"lso meiante el TIMr.Rl $ %&%inierr"$cion e'ierna p%l&
R(O (Figura 18). )oin$onentes I'I'( )I*1+,"-+ !/ *M+%,*. lnstr"mentos# %'*ILL%'.
)OP- . /enemores# P0*S-.
LC02
L M O I I ! I .
102.0uS
Fi gur a 1!. E "e m p l o #
106
4. l a s i n t e r r u p c l o n e s y l o s t e m p o r i z a d o r e s
A] medir el ancho de uri pulso se necesita detectar su flanco de subida y despues
su flanco de bajada. E510 se puede realizer mediante la interrupcion RBO ya que
perrnite configurar el flanco de disparo.
Al producirse una interrupci6n por ejemplo en el flanco de subida se puede inicia!
lizar el "alor del ternporizador (TlMER1) en ese momento# se cambia la acti"acion
de la intcrrupcion del RBO a flanco de bajada y cuando se "uel"a a producir la si!
gulenre interrupcion por dicho flanco se guarda el "alor del temporizador.
E$ ancho de pulso sera la diferencia entre el "alor del TlMERl en e% &%anco de subida
y 01flanco de bajada. E$ ancho de pu%so ma'imo para una frecuencia de 4 ()z &ci!
elo maquina de 1 ! - I S ) es de 655*6 ms &un cicio del TIMERl). E$ minimo dependera
del tiempo que tarda un program a en gestionar %a interrupci6n y los calculos En e%
ejemplo se puede conseguir medir anchos de pulso de entre 64+*4 ms y 6+ $%s.
(odificar e% fichero LCD.C para que se "isualice a tra"es del puerto ,.
s t nol ude ,,16f876.h>
Uuses XT,NOWDT
'use aelay(clockc4000000)
linclude <lcd.c>
I nt 1 T!"#
tloet: AP;
int l nue$o%ulso&O#
int l ca'(io'O#
lint )e*t
$oid +uncian)"*t )lnt () (
if(ca'(io&&O),
set ) t l'e- 1 (0)#
e*t )int )ed.e (0,lI )TO)/)#
ca'(io&l#
else (
T!"0.et )t l'e-l()#
e*t illt ed.e(O,/ T0 1)#
ca'(ia&O#
i+(nlle$o%ulso.2'O)I
nue$o%ulso&l#
-
-
$oid 'ain ()
lcd)3.nit ();
II Tie'%o Danco de (a4ada
55 6alo- +inal del anc7o de %ulso
/1 8ne-a ot -o %ulso
1/ 9a'(io de +lanco de dis%a-o
/1 !unci n I n-e--u%ci n
1/ !.lanco de :u(ida
1/ I nicial3.;a T<=l
I I 9on+l.u-a- %a-a +lanco (a3ada
I I 9ont -ol de ca'(io de +lanco
1/ !lanco de "a3ada
I I 6alo- del TI <8=l %a-a el +lanco de (a4ada
/1 9en+i.u-a- %a-a +lanco su(ida
I I 9ont -ol de ca'(ia de Danco
1/ !in de %ulso ...
1 5 >ulse a calcula-
107
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
set:up_timeL"_l(Tl_INTERNAL Tl_DIV_BY_l): // Coniiqurecion TillERl
ext:_int:_edge(O,L_TO_HI:
cambia = 0;
enable_inteupts(int_ext):
enable_!nteuptslgl"bal)#
d" (
if(nuevopulso==l)(
AP = TFB"l.O;
$/ %"n&iguapaa &lanca sub'lda
// %"nt"l de cambi" de uanc"
// Habilitaci(n Inteupci"n )aO
1/ Hab'llitaci"ngeneal
/$ .;Pulso nuet*"+
1/ ,ncn" de puls" en m : i crosequndos de ?'IERI_
/$ a -.H/ eI T = Ips*Timel
pint&(lcd_putc, "0n1u2" = 3('$&u4 "' API; $/ VLsuali5a medida
1/ en !.C"
nuevopulso=#$ /$ Puiso medida
67ile (T)89I# /1 %uc1e i&'in.!'o
Fi gu r a 19.P r o gr a m a d e . E je m p l o 4
EI generador PULSE se utiliza para crear laserial de entrada. Con eJ boron derecho
se pueden editar sus caracteristicas (figura 20).
';
G_.oIQlN_
l_llowlVoI._
J{l-
:
j~
PuI:ed lH..nl!""#
s

~
!l"#$=
$talt%$= l 0
&C
s.'! '!! (.... 's..".) ($* * n :
.~
:
Pwiln
r.I$....I%_& +1,-
~
."/0""#!
1 2 Jdoo
:
E'_'.'-j
3 2 2 fdnl$eocl
s()
4 5uia!!!!!(6')
+0

~
7'Jg8!(9pe3
*~)+lI,d
$tead9$l3
+"g.:dge - .~/I0.J
12.
:
$!'8l2 o1'ul; -o
P,34dI%..5)
~
~
P)I',.,
<'d=1>". :
Cuterl %o)oe6
~78I5e2
!.....8l:at.?
!'lido3'
?@
II
9:n";ej
'
-1
Fi gu r a ;<. P r o p i e d a d e s d~P=>%E
:)e?plo +:Geuerar un&sei i al cuadrada de 1()* uti li zad! la i i erru"ci ! del TI#E$%
(figura ;2&. &!m "!etes ISIS; PI&1'F()' e Istrum ei !s ISIS: OSOLL*S&OPE +
&OU,TE$ TI#E$
108
1. |a |r|errupc|ore ] |o |erpor|zadore
Para generar una serial de 1 Khz se necesita un semiperiodo de 500 t I . segun la
ecuacion deI desbordamiento del TIMERl, utilizando un crista! de 4 VEz. un pre
escaler de 4 ] ur postscale de 1:
T TQwl|Prescaler(Carga1'VR21)Postscaler)
500 j.|S (4/4000000) |4. (X1)'1|
donde X 125; es decir. se debe cargar e|,TIMER2 con el valor 125. Pero esta relacion
solo se cumple si se trabaja en ensamblador. AI trabajar en C. e| cornpilador genera
lineas de codigo que awnentan el tiempo de ejecuci6n del program a y. par ello. es
necesario ajustar el valor t inal. ln este caso se ha utilizado un valor de carga de 11.
109
_rr
, ;;-. !
, ! ,
". -. .. - - - ~\ . - .
RIl0 /I\ T
RBI
Be2
RB3.'PGV
RB4
Re5
ReffJPGg
R!!7!P(,1)
RC0 ITI0 0 t l' ICI (l
R01IT10 I/tCPZ
RC2ICCPI
RC'lI CKl Cl
Rc1|So||S0A
llCI51 lG
R0G!TX10K
R011RX10T
F|gura 21. EjerpJo 5
{(INCLUDE <16F876.!
luse aelay(clock=4000000)
-/Ffuses "T#N$%DT
ifuse $candard_ i.o(8)
t&'e TIMER2
void TLMER2_isr(void) {
ou|pu t(T$))LE (*IN( +$, -
ec_timer2 (11); !
. para se/&pe011&o2o a1!:0o
! se recarga e1 TrMER"
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
void main () f
setup_umer ,t!(T2_DIV_BY_4,124,l); 1/ contiqurecion TlMER2
enable_interrupts (INT_TTMER2); 1/ h!ilit" ~nterrCJpci6n TlMER#
enpble_interJ:upts(qlobal); II habl1~ta interxupci6n eneral
Ivh~le (1),.
1/ bucle inilnito
Figura 22. Programa del ejemp'o 5
Figura 23. Sma' de , KHz
jemplo !" lntro$ucir lo% $to%, tr&e% $el te$$o, $e In oeloci$$ $e un 'otor $e #o$
'ente continu y (enerr un %eiil 'o$ul$ en un ncho $e )ul%o )ro)orcionl l $to $e
&eloci$$* +ontroir l ueloci$$ en r)' y oi%uli,rl ell 1111-+D (%igura 2&). +o')onen.
te% i/I/" 0i+112134, 5EY06D708#NE, RE/, 2/5l9:1, +E--, -M914- ; M#T#R.
EN+#DER
Fu'#io'a igual (ue el ejemplo ! del )ema de lo* puer)o*, pero ahora *e le a%iade u'
#o')ador de pul*e* #o')rolado por e+ TlMER#* ,o* pul*o* pro#ede' de u' enco$er
(ue *umi'i*)ra el modele del M#T#R7EN+#DER* *)e modele permi)e o-)e'er
)re* )ipo* de *alida*" .l, .2 e m/.
.l y .2permi)e' #o')rolar el *e')ido de giro y la po*i)io' a'gular del mo)or (*e
#o'%igura' e' la op)io' PULSES 0ER REV#-<TI#N del me'u de edi)io' del mo$
)or). ,a *e%ial I01 *umi'i*)rau' pul*o por revolu)io' y e* la (ue *eu*ara para medir
la velo#idad del mo)or e' e*)e ejemplo2 a+ *umi'i*)rar u' pul*e por revolu#io' *e
puede' #o')ar lo* pul*o* por mi'u)o media')e el 34567vi*ualizarlo* e' el -+D*
118
4. Las interrupciones y los temporizadores
Figura 24. EJempio6
Sc pucde utilizar el puerto B conjuntamente para el LCD y el teclado, pero se ha
preferido utilizar el puerto C para el LCD (esto supone modificar el fichero LCD.C
para que en Iugar de utilizar el puerto DoE utilice el C), 6gura 2!
,
.. I
" # $ %ara laleccl6nar olro puerto
oc!ruc&t !Cld_'!"_#l6J$
lI()()'!t!I'l!nlll(le
,
Il))*tm c!!
Booum r+
I %&&'#%I (I n.... )
ln* CIa ,, *
let-
+
*e!'tJn)d _t,t-_
+
d.tl# /ell 0le .-1rl&23lc4
., )
led
" ,
.
. )
# )# " # !, 1 led ,."tEl
!!!
./
I
.' r
r
0 ,,,,,,,,,,,,
,
I
# I25# !1cd , 67892
I 'l!dotined 0lc3%6Et23loCS
.* )# , led 0
1c1 ,
*l$-L) led
.1lI25# !1Cd!:
3'
I1e1ld;
&&t
I - n0 1%'
I$ on to porte (ataddr !!! :)
.. ......
+
detlll!lCl (ol ++ 3poz&t2 l6CS
1! ..!. !!! t3ItI.!-Icd(!)!,, ," &.3,!c&(-)
u-
,,e cr# ! lad 7 ,, .tt# !2<
D, ,
I -11/C%'* a!t tt-u led I t .et ttl! d 12
-# # # # # #
%%%
Figura 23. Flc4ero LC".Ca modl--car
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
E1programa se basa en producir una interrupci6n del TlMERO cada 0.5 segundos y
leer el TlMERO que se utiliza como contador de pulsos externos. La Jectura se debe
multiplicar par 2 tpreescnler minima del TMRO) y par 120 (puesto que aJ ser revolu
ciones par minute si se mide cada 0.5 segundos se necesitara rnultiplicar par este
!actor". La carga del TMRI can un preescaler de # es de $0$6.
t;.nclude... 16fB76.h>
Ifuses XT,NOWDT,NOPROTECT,NOLVP
f!E DEL"# $CLOC%&'(((((()
IINCLDE *+,d.C>
t-nclude *lcd.c>
I!E !T"ND"RD.IO $/)
inr;16 c0unte12O;
D-nt.TINERl
30-d TI4ER1.5s1l30-d)
c0unte167et.t-8e1O$);
c0unte1&c0unte19:91:(;
II zeccura c0nt/d01 T;RO
II C0n3e1s-0n a 1<8
<1-ntf$lcd.<l=cc,>-61u rpm%counter" &
lcd.70t0?@$l,l);
s2t.c-8e1O $();
set.t-8e5 1$A(A6)B
II Re2n-c-/ cuenc/
II Rec/17/ a (.C s
/110 '" III ,.. It 'Ii'''' .j '" iii .;. ~ oj to ' .( % .( ..
VOID 4"IN$)
(
C;"R %,+/nt&DOD;
ch/r PW4;&O,PW;L (;
lcd.ln-t $);
+,d.-n-t $)E
PORT.B.PLWP! $TRE),.
setu< t;.8e1.($1tcc2e?t.1.t0.hIRTCC.DIV.:);
setu< tl8e1.lITl.lnte1n/=,Tl.DIV.B#.B);
set. t-8e1O $()r
set.t-8e1l $A(A6);
en/,le.-nce11u<cs$-nc.t-8e1J ) /
en/,le.l0te11u<csF7l0,/l);
IIC0nfl7u1/c-6n T4RO
II C0nt-7u1/c-0n TMRl
II!011/d0 c0nt/d01
II CcA17/ / (.C s
II ;/,-llt/c26n de -nte11u<c-0nes
WHTLE (l) I
+&+,d.7etc
-f (k-' \0') +&+/nc,.
112
4. L a s i n t e r r u p c i o n e s y l o s t e m p o r i z a d o r e s
if ((k 11 II (k--'II')) k-'O';
kant~k:
/("k-18 ;
PWMH-k'28;
PWML-2SS-PWMfI;
tor (f'WMH;['WMH>O;PWNH--)(
OUTPU:r_HIGIi (PIN_AD) ;}
for (PWML;PNML>O:PWML--) (
OUTPUT_LOv.'(PIN_AO) ;}
Fi gu r a 26. Pr o gr a m a d e l e Je m p l o 6
113
Fi gu r a 27. Se n a l m o d u l a y s a l i d a d e l e n c o d e r
Ejemplo 7: S e g , ;1 / In !"a#i$n e %&t/ 'a#i$/ & e L //I ($t$&& $ine ne t f"e ' fi%$' e f)&&#i$&/ e ':
1/ &in I, I/ I'n#i$&& #$"* #iaII/ g a" a 'III/ af l l l l c i6 11 (%$" e +e *%&, e n#e !e " 1111 &e "i e && e - %!e "t$ A),
!" #ri$%r" #l &"c i' $"('r )% Ir%& 'e g !n$' )" &!g a" " '*r" f c i'! (#'r %+%$#l ' %!c %!,
tie " /III &e e n e & %!e "t$ C) y 1 1 1 1 1 1 '#g !na %!&'a#i$n $"('r e i"e ' 'e g !n$' e I&&g a" fI$i"a
f *l l l c i'l l (%$" e +#&&&%i$ f&%ng n" #& &e e & %!e "t$ .). .!an$ /.t"a(ai# #a&& In'e g !n$ 0 te "#e "a
f l l l l - i6 11flO se"*%!)%!i! In' %!&'n#iane ' c 'r*"& (figura 28). - '$#'!%!*%& IS IS : PI- 18.8//0
1UTTON, 1230 L 2D-12D0 L 2D-4L U25
En este ejemplo se utiliza una tecnica e #'l l i!6 (compro!aci6n continua) el esta"
o el pulsaor pero empleano la interrupcion el TI721O; e esta forma no se
tenra al programa principal parao compro!ano el estao el pulsaor.
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
~.'
m)1"''8Pl .. .,
~ D 2 1 f 1 ! 1 1 2
1 tO~
. . , . . . . . .
~ ._I""'!-----,
,.,1"'&1'
Fi gu r a 28. E Je m p Jo 7
Se programa eJ TlMCRO para que provoque una interrupcion cada determinado
tiempo, en este caso de 2 0 ms. Cada vez que se produzca a interrupcion se com
prue!a si e !ot"n #a sido pusado. $n e caso de que #a%a sido pusado se com
prue!a si es una pusaci"n corta 0 ma%or de & segundos. 'ara este utimo caso
se comprue!a si e !ot"n esta pusado durante 1 SOinterrupciones de TIMERO
(&s)2 0ms * 1 +0,.
Si e !oron no #a sido pusado se designa como Fll1lciol1_D6 =0, si #a sido puJsado
una vez durante mas de & segundos se designa como Fll1ldolt_D6 * 1 , si #a sido
pusado mornentaneamente se designa como F,l/Icioll_D6 =2 -si #a sido pusado
durante mas de & segundos por segunda vez se designa como FllI1ci611_D6=&.
'ara distinguir si se #a pusado durante mas de & segundos una 0 dos veces se uti
iza una varia!e de contro (que se arnara CON_D6) que puede vaer cero 0uno,
dependiendo de si es a prirnera vez 0 a segunda vez que se pusa.
'ara controar e tiempo que esta e !oron pusado se utiJiza una varia!e (06) que se ira
incrementando si e !ot"n esta pusado % se produce una interru pci"n de TMRO.
IINCLUDE <16F877.h>
#device adc-10
#use delay(clock-4000000
I!"#e# $%&N'(D%&N')U%&N')*'%EC%&N'+*'(N'U%&N'L,)&N'C)D&N'(*%&N'-E+U.
IUSE F'IIST_10(8)
/+0%E %*I12 - Ox85
3+0%E )'*%2 - '4'1
114
115
4. las interrupciones y los temporizadores
~ ----------
IFloTE TRISC - Ox8?
ISYTb: PORTC - Ox07
IEn'TE TRTSD - 0.,<88
IBYTE POR'I'D..OxOS
IBYTE TIMERO OxOl
IBIT RAS - OxOS.S
IBIT RC2 - Ox07.2
CUAR DG, FUCIO!D"o, CO!D#$
ITI CNT;
tint_TIMERO
voln TIMERO_~srvol!"
rf "TPUT"PI!D#% && O%
'(' ([16 >- )*0+ ,
If' "CO!D#--0+ ,
D#-0,.
-o.-o!D#-)$
CO!D#-)$ /
ELSE (
0#-0$
FUC)0!D#-0,.
CO!D#-0$ +
II #$ %stD &'$s(!o
))D~t%*tR si J s 2+,s x $#+-
)) P'lsn!o 1 v%x 3 s
II P'ls(!o 2" vez 3 s
ELSE D6h,.
)IS$ no $$%.( ( los 3 s a~entd *ont(!(r
E/SE 0
'( ,D#1O 6& (2n.'C+n!D# --I/ "6aO,.
IF ID# > 0 && FUCIO D# !-1 &&
,FUCIO!D#-2 $
D#-0$/
$) 51 &'ls(!o (nr%s &OlO ,%nos
$) 3 s%1 borra *ont(!o*
-oCIO!D# 1-3 ) II 51 &'ls(!o snt%s_
// y O r-i Y O )'-0!
1/ %nton*%s F-2
S3T!TI4ERO uooi
$) R%lni*i~li2( %l %ont(!ol
/ /. " t '" t " ,. .. ~~-t .. ! " # . " t ' t ~ PRINe1 PAL ,..,. " t # . lit 1* ~ w " " t" .. " " " $ %" t $
5o'6 ,(in - I
!is(3l%_int%rr'&ts 4/OBA/-;
s%*'&_*i,%r_OIRTCC_INTERNA/IRTCC_DI5_$26-;
D#-0$ FUCIO!D#-0: COU!D#-0$ II /il77&l(*ont(!or%s t%%l(
TRTSA - O7OO$ '800000000
TRISC - O7OO$ )00000000
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
TRISD - OX40; 1101000000
BIT_CLEAR(PORTA,S);
BIT_CLEAR(PORTC,2);
enable_interr!t" (#LOBAL$;
SET_TIMf:RO (100): /1 TZNERO-20ms de polling: 20ms-(2S6-100}"1 iJs128
enable_i%1terr!t" (INT_ TIMERO) ;
C&T'(;
1) S1 %n*i+n I *n,*en+e RCL
// SJ. -nei+n J a!a.a RC2
t~empopara no !r/0/,ar na [un~j6n2
II no +e"ea+a1
1/ 2el0e a %*n,iDn 0
/, S1 %n,3On 2, *na 0e4 en,len+a led_
1/ "e.n+n 0e4 10 a!a.a, a"l ,/ntina5ente
I6 (FUNCION_D6--lJ RC2-1;
IF (67&CIO&_08--3) (
RC2-0; 1/ E"!era un
DE!"_MS (#00)$
67&CIO&_D8-0; I
I6 (67&CIO&_D8--2) {
I6 (C&9(-0) RAS-l;
ELSE RJl5-0;
67&CIO&_ D8-0;
J
1/ 2el0e a %nei+n 0
Fi gu r a 29. P r o gr a m .. d e l e je m p l o 7
!
5. C o n v e r t i d o r A n a l o g i c o - D i g i t a l
Ca .tulo 5
C o n v e r t i d o r A n a l o g i c o - D i g i t a l
5.1 In t r o d uc c i o n
Los microcontroladores PIC puedcn incorporar un modulo de conversion de sefial
analogica a serial digital. Los modules AD que utiliza Microchip hacen un muestreo y
retendon (snlllpl' &h()ld) con uncondensador y despues utiliza el modulo de conver
sion (figura 1). El modulo de conversion AID es dcl tipo de aprolmaciones sucesivas,
ENTRADA ~
ANALOGIA i v. 1
S/H
!ALIDA
DIGITAL
AID
"" #
Figura 1. Fases de la conversion anal6glcajdigltal
!I convertidor de aproimaciones sucesivas se utiliza en aplicaciones donde se ne
cesitan altas velocidades de conversion. "e #asa en realizar sucesivas cornparacio
nes de forma ascendente $descendente hasta encontrar un valor digital que iguale
In tension cnrregada por ol converser D% A &Ia tension de entrada.
Durante la fase de rnuestro el interrupter se cierra y el condensador se carga a
Ia tension de entrada (e' tiernpo que el intcrruptor pcrmanece cerrado es funda
mental para la corrects carga del condensador(. )na vez a#ierto el interrupter* el
condensador mantendra (teoricamente( la tensi+n de entrada mientras el modulo
A%D realize la conversion.
!I modulo de conversion se caracteriza por pararnerros como los siguicntes,
- .ango de entrada.
117
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M l c r o c o n t r o l a d o r e s P I C
Nu mero de bits.
Resolu d6n.
Tension de fondo de escala.
Tiernpo de conversion.
Error de conversion.
EI m6du lo qu e u tilizan los PIC de gama media tiene u n nu rnero de bits de 1! por
1 0 qu e su resolu cion es"
V
resolucion #$$%&
2"-I
siendo 'L'I la tension de entrada ( N el nu rnero de bits del convertidor. Es dedr! para
la tension ma)ima de entrada (5V) la resolu ci6n es de !*+' ,*!+ m'- por &./.
&a resolu cion 0 1 cambia si se modi fica la tension de fondo de escala! es dear! la ten1
si6n de referenda. &os PICs permiten cambiar la tension de referenda en u n valor
absolu to ,de a +V",,) 0 en u n margen ,de -Vr., a +V">I)'
&as tensiones a convertir siempre son positivas.
5.2 M o d u l o C o n ve r t i d o r (ga m a m e d i a )
+1 modu lo convertidor AID en la gama media posee 2asta + entradas analogicas.
&os 163+465+46 tienen 0 canales ,en el pu erto 7- ( los 163+445+4*tienen + canales ,0
en e8 pu erto 7( 6 en el pu erto E-. EI convertidor ,figu ra 9- es de 1 bits (! tal como
se 2a comentado! es de apro)imaciones su cesivas. Permite variar la tension de refe1
renda a la ma)ima ' a tina tension positiva menor a traves de AN3N RE3 (a la
minima '55 0 a tina tension positive ma(or a traves de AN2N RFF'
Vln_
~Ck -
Circuuo d
! " #
-V
$%ro&i'(cioo)
*uc)i+()
"
,(-o di.i-(l
/ l
01d2I1,3$4
~#
Figura 2. Bloques b,blcos de un convertJdor AID de aproxlmaclones suceslva$
Pu ede segu ir fu ncionando cu ando el PIC esta en modo SLEEP (a qu e dispone de
u n oscilador RC interne propio.
118
5. C o n v e r t i d o r A n a l o g i c o - D i g i t a l
Clrcuito
AID
ACIt .. H, .... _ ~'Il;._.
:~.OI)iOOolf.
r m..r NpfOI" de
_n:ro
IU, 1lUc;
r-r--c:::>--r-<=-
., , It,
1-001 I
Fi g ur a 3. A r qul t e c 1ur a d e l mo d ul o c o n v e r t l d o r AID
La funcion de transferencia del eonverlidor AID es el resultado de que la priera
transicion ocurra cuando Latension anal!"iea de entrada es i"ual a #m$10%&.
La resolution vendra dada por la si"uiente ecuacion:
ILSB = V. ' (('UF. -VRFf_)
Rf.F- 1024
(n el caso de que la #RlLf, =#00 )#RrF =#ssentonces la resolucion es:
5
1 LSB =-- =4 , 8 1 1 1 1 '
1024
de esta fora si la leetura es de 512 L*+,la tension analo"ica leida es:
5
V/N =512 --=51 24 , 8 mV=2, 4 576V
1024
5.2.1 e g i !t r o ! F"
,a- 11 re"istros asociados a este periferico:
. /efinicion de pines de entrada y sefiales aplicadas:
012*3 - 4O103 - 01I*(- 4O10(.
. 5ane6o de interrupciones:
I708O7 - 4I(l - 4I1l.
11#
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Control del conversor AID:
ADCONO- ADCON 1 - ADRESH - ADRESL.
I 't e gi s t r o d e c o n t r o l ADC O NO t d l r e c c l 6n 1lAM : !"# $P I C 6!%&'(
I ADCS1
R/W-O
R/W.() R/W.() RJ W -O R/W -O u -e R/W.()
I ADCSO I CHS2 I CHS1 I CHSO I GO/DONE I ' I ADON
SI (7 SI tO
!i gu r a )* R e gl s t r o ADC O NO
bts !:" DCS1:ADCSO: #Hsde seleccon del relo$ %&r& I& converson A/D.
'' =(osd).
'1 * (osc/+.
1' co Fosc/32.
11 =-FRC ,Relo$ del osdl&dor ntern 0 RC-.
bts .:/ CHS):CHSO: #ts de seleccon del c&n&l.
''' ...C&n&l &0 ,RAO/ANO-.
''1 =C&n&l L ,RA1/AN1-.
'1' =C&n&l )0 ,RA)/AN)-.
&ll =Canal /0 ,RA// AN/-.
1'' =C&n&l 10 ,RA1/AN1-.
1'1 =C&n&l .0 ,RAS/ ANS-.
11'=C&n&l "0 ,RA"/AN"-.
111=C&n&l !0 ,RA!/AN!-.
bt ) 2O3 DONE: #ts de est&do de l& converson.
51 ADCON =1
1 * Converson en %ro4reso ,& 1 nc& u n& converson-.
& * L& converson 5& 6n&l7&do ,este bt es bon-&do %or 5&rd8&re
&l terrnn&r l& converson-
bt 1 No u s&do: v&lor O.
bt & ADCON: Actv&con del converser A/D.
1* convertdor &ctvo.
'* convertdor no &ctvo.
120
5. Corver||dor Ara|og|co - Digital
Feg|s|ro de cor|ro| ADCCN1 (d|recc|6r FAM: 9FhJ[PIC16F87x]
BU7 BIIO
F/W.o u-e u-e u-e FJW.o F/W.o FJWC F/w.o [\
Ir-''''-C-F...,.M-,....--=-|-,|r-.'Y-.,r.:'-,.---T' 1- ... -'-''--'-',II'-p '','C-F-0 -1 --r1-P-C-F0 '','Z -''-1 P'':C','F'','0 -1 --r1-PC',_ ',_ F0 ','o---'1
Figura s. Registro ADCON1
bit 7: ADFM:Selecci6!e "or#ate !el resulta!o $"igura 6%:
1& 'usti"icacio a !erec(as. )os 6 bits #as sigi"icati*os !e
ADRESII SOl1 lei!os co#o +,+.
,& -usti"icaci6 a ./0uier!as. )os 6 bits #eos sigi"icati*os !e
ADRESL so lei!os co#o '0',
bit 612: No usa!o: *alor ,
bit 3-,: PCF43:PCF4O: Co"iguracio !e las etra!as al #o!ulo AfD $"igura 7%.
I ,,,,,,
ADFM=1 ACFM=C
151
7 5 1, 7 o 7 ,766
,,,,,,
AORESH AORESL
,- _ _ L_ _ _ ,
: Fesu||ado 10 b|| :
AORESH AORESL
Jus||f|cac|6r a derechas Jus||f|cac|6r a Izqu|erdas
Figura 6. -ustl"lcacl6 #e!iate bit ADFM
7CF$83 AN7 191+:6 ,\1'15
7+1+12
\\3 ;195
,,'
;;1+,,
'F'
,~V CIt",1
P C F ( i O REl RI+:I RliO FA3 RO R;o95 RAI RAG FF~
OOO( ) 1\ A II 1\ II A 7\ I-|\ voo VSS ~l()
orK'1 A
-
-8::-
v... r-x
--:-
A FAJ I-*ss 7:1 .,1 A A .~
$-$<I$% $% '% f)
A A A A A vor vss SIU
:
01)11 r , 0 A =>t-? A A A FA1 =oSS .. I
#oo I) I) I) r A
I)
A A vCC VSS 3,
:7
0101 I) I) "% I)
=Rrr? , A A VA3 VSS :@ II
@ :
rorx ~ D , 0 , , , , VOO =@ iS ,;,
1000 A
A A 1\
-
=A7
vu||~ A A VM RA1 615
B $II
"% I)
A A A A A A =DO 9+SS (-,0
1$11, I) , A A
V"..'
II A C9 =A3 VSS 6 I
lOll D A A =;u-;- =KL. A A
=C9. -=95 2+5
1100 IJ
I) I) A
=A7. 9 arr
A A =A% FA1 3 f 2
11,1 I)
o
I) 0
=AF"+
=Rrr A A VAl RAl 5:5
111, I _ , o 0 0
I)
~
A =DO VSS 110
L||J D
-,--
0 D =.;;-;- =.... 0
--A-
|v.u
-FA:!
1+1
A+; .......,
Figura 7. Dabla !e co"lguracl6 !e los caales
Compilador C CCS Y Simulador PROTEUS para Microconlroladores PIC
En las versiones PIC17F87xA existen unas pequefias variaciones en estos dos re
gistros.
En el registro ADCOO !direcci"n #A$%lF&' (PIC1"F87xA) los *its%
*it 7+"% ADC,l%ADC,O% ,eleccion del relo- para la conversi"n AID -unto con
ADCS2 que esta en ADCONI.
ADC,.%!' 00= rosc/ 01 1 roSC/8 10 1 roSC/32 11 =I#C
ADC,.1 1 00= roSC/4 01 rosc/re 10 10SC/64 II 1 f#C
En el registro ADCOI !direcci"n #A$% 2F&' (PIC1"F87xA3 el *it%
*it "% ADC,.% ,elecd"n de relo- para conversion AID -unto con ADCSI y
ADCSO.
Otros registros que afectan al 4odulo convertidor son los referentes a la interrup
d"n% I5CO6 PIEl Y erai.
5.2.2 Proceso de conversion
Para reali/ar )a conversion6 el fa*ricante reco4ienda seguir los siguientes pasos%
1. Configurar el 4odulo AID:
il. Configuration de pines analogicos7tension de eeferenda7E7, dlgitales
!ADCOl'.
*. ,eleccion de la entrada AID !ADCOO'.
c. ,eleccion de relo- para la conversion AID !ADCOO'.
d. 8a*ilitar 4odulo AID !ADO !ADCOO9O:
.. Configurar las interrupciones !si se desea'%
a. ADIF 1 0;
*. <IE =r PEIE =ADlE => 1.
?. Esperar el tie4po de adquisicion.
@. Co4en/ar la conversion poniendo a =1= el *it GOIDONE(ADCON0<2.
,. Esperar a que ter4ine la conversion. Puede ser de dos for4es%
a. $ediante lecture continua del *it GOIDONE &asta que sea =0=6 indicando el in
de la conversion.
*. Esperando a Ia interrupci"n.
". Aeer rei egisrro de conversion AD#E, y *orrar enf1ng ADIF si es necesario.
1 2 2
5. C o n v e r t l d o r A n a l o g i c o - D i g i t a l
7. Para la slguiente conversion se salta a los puntos I, 2 03 en funcion de 10 que se
necesite. EI tiempo de conversion por bit se define como TAO' Un minimo de 2!"o
son necesarios antes de la conversion #esto no es necesario para los PI$1%&'7()de*
bide a que el interrupter de muestreo se cierra en cuanto se obtiene el resultado+.
E(isten do" tiempos basicos de traba,o- el tiempo de adquisici%n #f)$.+ y el tiempo
de conversion TAl)'
/ !iempo de adquisid%n #!)$.+- tiempo necesario para que se cargue el con*
densador de retencion #$II0 1 0 2 con la tension de entrada. Este proceso de carga
del condensador depende de distintos Iactores, entre otros, la impedancia de
In &uente de tension de entrada #c1 fabricante recomienda que se situe por de*
ba,o de los 10 3o4m+.
EI tiernpo de adquisici%n dentro de los margenes tipicos es de, apro(imada*
mente, 20 , " , so
1 a adquisici%n no comien5a 4asta que no acabe la conversi%n. )si que se debe
espera un !)$0 tras una conversion. tras seleccionar un nuevo canal 0 tras en*
cender el modulo )6.
/ !iempo de conversion #!)0 +- tiempo necesario para obtener el valor digital de
la tension analogica de entrada. Este tiempo depende de la &uente de relo, que
se seleccione para la conversion. Para una correcta conversion AID, el relo,
debe seleccionarse para asegurar un tiempo minimo TAOde l,%lls. En la figura
' se rnuestra la tabla de seleccion de fuenles de relo, con su TADasociado, 7as
celdas sornbreadas son las que no se recomienda 8U uso.
&uente de relo9 #!)nl &recuencia del dispositi"
333.33 k:i'h 0 peracien ADCSI :ADCSO 20 Ml u 5 l:fll5 1.25 ;<5
2!==.
00 100 nsl=>
400 nsl>?,
1.%@ls % "I8
'!o"
-
01
A00 ns:B> 7.%gs %.A @l8
2A @l8I2 >
32!I1, "
10 1.% ).IS %.A J .lS
25.% @ls#7+ C' ,78ll+
C II
!-" us cu
2% ,78#A+
2% 778l>)> 2% ,7sD>+
...E" esFeFe
FIg ur a 8. Ta bl a d e se l e c c J6n d e fue n t e s d e r e l o J
1 as notas de la figura ' indican-
#1): $% fuente G$ tiene un TADtipico de A us.
#2+- Estos valores violan el minima tiempo requerido de TAO'
#3+- Para conversiones mas rapidas se recomienda utili5ar otra fuente de relo,.
#A+- En PI$s con frecuencias superiores a 1 ;<5, el modo G$ s%10 es recomen
dable en modo S L E E P .
El TAl) se configura en )6$0 H0 #relo, de la conversi%n+.
!)0 >2B!0 8$ !I0 '>!0 8$ !,,#7 32B!0 8$
123
Corp||ador C CC3 V 3|ru|ador PR0TEu3 para V|crocor|ro|adore PlC
Tambien en el PIC16F87xA.
I T~p 4Toe l TAJl-16'T03C1 TAD-V'Toe I
Para convertir 10 bits se requiere un tiempo de 12TA!"#i$ura %&.
r- - - - - -,- - - - r - -- , --- -,----r ---, --- -T ' ' ' ( ' ' ' ' r- - - - T ' ' ' ' r --- -
l l l l l l l l l l l|:
l l l l l l l l , f , l
T)*loT.l+lT(.C1,T)c2, T-.-&., T)/), T.:-t\' T0(/(6,T../.7, T'08, T'c%1.T)C/l0,T'/-.(
r
r
| 0% 118 117 b6 es b.l 1.2. 1.&2 /11 to
lNlCl0 C0NVER3l6N
EL C0N0EN3AD0RYA CARGAD0 3E DE3C0NECTADE LA FuENTE ANAL6GlCA
(T1PlCAVENTEA L03 100o)
l G0/D0NE3 1 l . .
3E CARGA ADRE3
EL BlT GO/DONE 3E P0NE A 0
3E ACTlVA EL FLAG ADlF
EL C0N0E3AD0R3E C0NTECTADE NuEV0 A LA FuENTE ANAL6GlCA
FI$ura %. Ciclosde conversi6n
Considerando los dos tiempos "de adquisicion y de conversion& la secuenda com4
plete de muestreo5retenci6n y adquisici6n en los PICs de $ama media se muestra
en la #i$ura 10. 6xiste una di#erencia entre los PIC16F877Y los PIC16F877Aien los
primeros es necesario esperar ||r tiempo 2TA0antes de iniciar una nueva adquisi4
cion( cosa que no ocurre en los se$undos.
nempo de m8+ltro * conv.rs8I+
. :
6n los
Plc16F87.
9. debe
epera2T . . .
TI:po d. eon:: iclrt
6I C;+l.!.. ducon.CI. de I<< nlr.da l
101 l++n( do =+.l.
TI.mpo de .dqul.lei6n
!urante .. te tllmpo .1 C;+I.I&
pormanteo .errado>ula 0eanear II
v.lor d. la le#tal do or!ru|.
l,
|
tn, .(.I0?2t+@ d~
<0 ...... &A100 . l(
l++n(
Iniclo do Convsrelon
=+I++B6'1
Fin d. Conv.rsl+n =+I++B6'+
Calor en A!D69.
9. activ. f|ag ',+IF
9elecel6n Canal "A+C+B+&
;abllillcl6n m6dulo A! "A+C+B+&
Inlelo d. odqulslcl6n
Fi$ura 10.Tiempode muestro y conversl6n
, ~. . .
E.2.. Efecto del modo SLEEPy RESET en el modulo AD
6n el modo dormido (sleep), el m6dulo A! puede #uncionar si se selecciona como
reloF para la conversion el DC interne "A!C9l3 1 GA!C9+ 3 1). 6n este caso( el
modulo espera 1 cicio de instruccion antes de iniciar la conversion( permitiendo la
eFecucion de la si$uiente instruccion SLEEP, eliminando asH todo posible ruido de
12I
5. C o n v e r t i d o r A n a l O g i c o - D i g i t a l
conmuradon durante la conversion. Al finalizar 1" conversion, eJ bit GO/DONE
es puesto a "0" el resultado se car!a en los re!istros ADR[SH ADRE.SL. En e"
caso de #ue la $nterrupcion del modulo %D este &abili.tada '%DlE( 1 )PEIE ( 1* el
dispositive se despierta, perc en el caso de no estar &abilitada, el modulo se apa!a
aunque el bit ADON si!a ali]".
En el caso de #tle la fuente de relo" no es la RC interna, la e+ecucion de una instruc,
cion SLEEP &ace #ue la conversion #ue se este realizando se pare y #ue el modulo
se apa!ue aun#ue el bit ADON si!a a "1".
En el caso de producirse un RESET, los re!istros del modulo %D se inicializan a los
valores indicados por el fabricante. E$ efecto del RESET es el apa!ado del modulo
y la parada instantanea de la conversion actual, los terminales se reinicializan a
entradas analo!icas (ADCONl parte ba+a a 0*- el valor de ADRESX no se modifies
en el caso de un Reset pero en et caso de un P ower-on Reset es desconoddo.
5.3 Mo d ul o A D e n C
En eJ compilador ' las funciones para mane+ar el convertidor %D son las si!uientes.
setup/adc 0modo*-
modo: para la confi!uraci1ndel modulo converser AID correspondientes a los bits
2.1 del ADCONO.
125
3'l4p/l$dc0l$lodo*- %O'ONO0$5&*
%D'/O5fi6
00000000
OO&
%O'/'7O'8/fN9E:N%7
11000000
'O&
%D'/'7O'8/O$; /<
000000000
OO&
%D'/'7O'8/D$) /=
01000000
>0&
%O'/'7O'8/D$"/?<
10000000
=0&
setup/adc/ports 0valor*-
Valor: definicion de las entradas anal1!icas correspondiente a los bits ?@0 del
A DCONI 0fi!ura 11*.
set/adc/c&annel 0canal*-
cnl: selecci1n del canal analo!ico correspondiente a los bits 5.? de ADCONO.
o 0%NO* $ 0%N$* < 0%A<* ? 0%N?*
> 0%N>* 5 (ANS) 1 0%N1* 2 0%N2*
Compllador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC
P<H:J
' ' ' 7
'Nfi
A' i~
"'i~
" ' ' ' l ' ' ' 1
'''I
\"n
setup_adc_portl l (vaJor);
l'i
PC-F(; 11!"1 #t:1 #F" l iA$ #A) #Al R \ #A
!!!! A " 1% 1% " A " A A& '_A" " '(
"
)))1 \ \
#
" '"$ $ $
1%
#
\
' " **)_" ' & ' ' ' 1 _ v.~,,~_"' _ ' ' ' 7 _+l l "' i" % #, 1
t$ %
))1) II 11 A $ $ A
#
\
' " ) 1%1' -1' ' ' 1 " **1%' .
& '
))11 (
I'
( "
"If'"
#
"
" % ' _A&' -&_A&' o1_/' ~_% ~*_ % &l 00
) ) %
l il
' '
11 A
I'
A
"
%:%,_"'"
_
' 1l
*2
)1)1 I' ) ) )
'In
) *% $ \ 1%11)) %" _+~' _%l tH
' :t
&l 3 II )
'
) ! 11 ) II 1' &)_1%' 1&%'C" ti#
&, \ \
#
A
% " t" % " 45
#
" ~' "&%" \I'I~%1$ %" " 7 ' #4 % #0 """"
i:
1))1
&)
Il A \ 1%
"
"
"
~" )_**1' 1 &_A' 1 ;" " )_" ' ~ "11""' 6
ii
1)1)
I' '
" %
'M*$
"""
\
"
" " ) " " &_/_ %" ~_A' 7_% l -"' _+#0F
8
1)11 I'
( 1\ A
\M*
' """
1%
#
~' _A" &_A' . " $_%&l H_' 8 H
il
11))
I'
11
1)
A \ ""#
\ 'II"$
"
#
*_**" A&"C_l t;%l _#Al 11"1;1
t%
IIUI )
I'
) )
' 9tu ' m.
" ~ 11"' )' ' 11 '% Iff %#4
r
111) II Il
I' 1)
II ) I' A
' ' ' )
P
1111
I'
II 11 n
'w
\ll'+t$
I' """
' $ " #0F %' #:r
i\
Fi;ura 11" Posl <l e va0ores de setup_adc_port(va0orJ
val or ,read_adc );
'ectura del resul tado do4de val or es u4 e4tero de 1= <its se;u4 l a directive I% D E V I
C:A D C .. e>pl eada" ?ic@a directiva tra<aAa se;u4 l a ta<l a:
?:+&C: B <it 1)<it && <it 1=<it
A?CCB -FF -FF -FF -FF
A?CCl D )-EFF -I$
.
A?CC&& D D )-7 FF D
A?CC1= o-rroo -HC -FF: -0H0
Por eAe>pl o* el 0ic@ero 1=0B7 ="@i4cl uFe co>o pri>era dircctiva Itd l!lJict! P&C1=F$7 ="Para
i4cl uir 1ai40or>acio4 del tipo de co4verser "I( se de<e a0iadir Gdevice adc ,1)"
READ_ ADCO ad>ite ires >odes de 0u4cio4a>ie4to:
A?C_$HA#H "A1?_#:A? $i 4o se i4dica nada es &4 opcic4 por de0eeto"
Per>ite i4ici4r y l eer el Co4vertidor"
--
A?C $HA#H 1'I $=1) i4icia Jo co4versio4"
A?C #":A? ONt y $=1) &cc l os re;isrros del co4vertidor*
1 2 6
lC01
u . o o . . .
I R D C = 511
I
f : i
Voltage = 2.49U
t ~~~ U...
ao!!8i 5~8B
4
.. ..
~I
[ : !
.
I
I i
U1
f:
P S C' ' ' ' ' ' ' '
R 9 O o I N ' 1 " "
ose>.c.KOVT
' !S .
~I
L - - - . L .
... cm~
~gz
I -J- BAT1
V1
J1:~~_,
! " ! ! # I t" " "
R S J . - = .
I $
AAtJANI R 850
%
&
tv,,,,,,,,' <!I I l"f# OOI " '(
l:
&

~
! ! ! ). *" I 1!f i *" 'O

.
1t+I " I O(,1
~
~
R A s r A . I I I 4 : S S ~toeO-*t.(I
%
R :C1$tt%&'l11CCf(
[ : i
- :. : !
'R C 2. 'C C P I
~
R ClI S C)lI *C.
/
f 0
f tt: A~
~
(1! 2.3t
R +ll!!!' !
%
R C 7A X ,oO l
.!.: !
%
4I *I ~m
5. (o56e-ti 7o- A5a*89i co ) :i 9i ta*
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
",+-.lo 1: Lecture de una tenskir: analogica par el canal ANO (figllrtl 1(/. Componenies
ISIS: PIC1!"#, PO$%LIN, C&LL ' L()1L*
0*gu 1' 1 1(. ",+-.lo 1
t2Dclude <16F876.h>
+ae,ice a-c.1)
;FUSES X'l',NOWDT
IFUSES
luse delay(clock=400000Q
!"#clude <LCD.C>
,oi- $a"# (%
int1 /:
Ilaet: PI
setu&'adc'&o(ts()*+%,
setup_ddc (DC_CLOC!_"NTE#NL$;
II-a#al 0 a#a16."co
I/Fue#ce de (0lo 1-
1)-_ .i %.i t: (0 ,*
2o( (,I0 (
set'adc'cha##el(+%,
del&'_us (()$ ;
1I2a3ili tacin canal )
1(2
C o m p i l a d o r C C C S V S i m u J a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
q
p
read_ade-() ;
5.0.* q , 1024.0;
IILectura canal 0
IIConversi6n a cension
printf(lad_pucc, "\fADe = MId", q);
pr~ntt-(lcd_pt1tc, "\nolca!e = e"Ol-2fV", "0);
dela#_$s (100) ;
}
Fi gu r a 13. P r o gr a m a d e l E je m p l o 1
Ejemplo 2: %ernui$etrocall IIna&%C &%'()*+,0- (figura 16). Co$ponentes .'I'/
prC160126, &%'()*+,0-, C3LL4 L5016L"
Se utiliza una N! NS"#$%2&'(on una )eta de *&+& yuna re,i,ten(ia a2+-! de
2& .o/m (figura 16)i e,ta, (ara(teri,ti(a, ,e pueden aju,tar a,i (omo latemperatura
amedir en el menu de edi(ion del (omponente ()oton dere(/o, figura 1+).
01 ..t.)~... t ..l !"#$n #r t l %&1
111111$i1,tln2
rr.J~,~t~
l3If3Ir""l4i/11(5rl
n l ' l m t t C T l m P
(6"."31
7 :
F",INllTltutt t1S(1 11#I8:l
' < ) n : : : !6r9: I
f:~~'
T""'"'1~:."',.
tk(lhlhl
! (( 1
i n ,1 o U
1In;"
N1<"&6t,.1#nlll= _'J 1~;3 f'~
I'"
11 11 1:)I1tl+
f:i
m>r,&14ll+&2!i7 f##
..
noo.?l1 Q 21 1.1
,
...tOlo l1 '
trn"t@6lI0lt:iEIAB 1& ' ' ' ' f i O.tt' l: . 0)3 1+ I;
,
8.,to 121
.lC.1 io,
. 'IL
n.,
11
.
1"1)I *1 25 n
~TK'OVlI\tJ! 1"~ 1& ",' !i : .1 : ' ' ' ' OJ1
I
J1 1.1
,
.oIlDl"31
1t:
#T$%l)&'..\('\.1O! 1)I* + , ..(JM ~ -t~. )1 .11
.
-' 1 ",1 25
~=
.~
Fi gu r a 1%. C a r a c t e r i s t i c a s d e J a +T C +T S ,O -./03
Matet3" !omiart
#i1I"" f.((or$r(
r------
nme!onllanlE,,"()
./p'0'1*23'1I*4
fiido"il
3F dt""
7 I8 ie(II
G 1 F "odo"H
0!%01
%1\., 5 , OO*1 I'I""",,6
r"""""78,'- .2+ _
#t/erfropojIltt
!9l81*lr(~
!::~ ~'0#C 9 "8 : "oo"/
!1i t JII,",op.,)eC.nt*lIr
Fi gu r a 11. E d l c U m d e l c o m p o n e n t e
1 2!
La NTC se linealiza mediante una resistencia Rl de 10 kohm, el valor de tension
de la NTC (V,) se puede obtener segun las siguientes ecuadones (temperatures en
grados kelvin)
R
_ ~. R[ 10000 ! VI
r-
V8AT - VT " # Vr
1
Tr= 1 Rr 1 #$%&!1"' 1 Rr 1
-In(--)+- --In(--) +--
f J RT25 T15 (0"0 $0000 $)*!1"
"! C o n v e r t i d o r A n a l o g i c o - D i g i t a l
$%&!1"
1++
,.,---r::::~'-"iP!~~-I RAOI_
RA11ANl
,-.$/i01210VR340
R.&5..&623,0
..(4T0C7 l
R15"5/lm5l8
LC01
1!6019
I T ~ 25.45C
Fi g ur a '6. Eje mpl o 2
/ /uecesex ie .or! los calculos matemaricos
+i nc.Iuae lQ875.b"
~deyice acic=10
"f uses XT,NOWDT
"use dla! "cloc#=$000000%
&i'clude (matb.b)
li'clude (lcd. c)
=oi.d mai' "% *
129
!aria"#es de e$%#aci&n float tv,tr,cemp,y:
int16 value:
lcd+i'it "%,
se'%#(yOr'_a ) A**_ANA*O+,-
seru(_a.dc ) -./+/01/2+I3TR3-I. l ,
Compilador C CCS Y Simulador PROTEUS para MicrocontroJadores PIC
set_eUO_chenneI( D ),.
delay_us (10);
UO (
veIue = Read_ADe();
tv =5.0 veIue 1024.0;
tr = tv 10000.0 / (5.0 - tv);
Y = lag(tr/20000.0);
y = Il.0/29B.15) + (y (1.0/4050.0;
ten=I.O/y;
te! = te! -2"#.15;
rntf(IcU_utc, "\n - $04.2%&1, 'err(.!);
vhIe (FLE),.
Figura 17.- Program a de ejemplo 2
Ejemplo 3: Realizar lin bar6metrolaltlmetro que mida en Kp, Psi, Attn D tnt!>median
te su seleccion por un pulsador (figura 20). omponenies !"!"# $!%6&'(61)$*+%%,,
NSAOWB2D3, eurto- CA1yLMD16L.
El sensor de presion MP!11" de 1" a 11" #Pa (2.2 $o 1%.7 psi) &on una $ension de
salida de 0.2a !.'! (a fun&ion de $ransferen&ia se mues$ra en la figura 1', la e&ua)
&ion de *a $ension de salida es:
"OUT = +s # (0.00, # P - 0.0,") $(Error Presion # Fa&$or-mp # 0.00, +s)
I I I I I I I I I I I % I I
./0
i&TR'()S*ER*+C(OO,! - 1 2
l-) i&Ol') 3,4 (!O(./P&!Oi0 $fao$ 1 2 !
s!/S!l dc
5....
%
%3 TO!4P = 0 10 as46
))
TYP-
))
i')(P
~~,
))
7 5a.
)
)
/&
*
)!
ij8.."
) 5!6
. 2"
9 2.0
1.."
1.D
0."
~~= ~~~~~~$~S~2= 2~g~88~= ~
.----"-_
Figura 1'. MP!1*9 (&or$esia de Mo$orola)
El error de Presion yel fa&$or de $empera$ura 3ienen definidos por el fa:ri&an$e
(figura 1,). El error de Presion se sima en ;1."yel fa&$or de $empera$ura 3aria en$re
130
Una vez calculada Ia presion en Kpa se reladona con Psi y Atm:
1 Kpa =0.0098692Atm.
1 Kpa =0.1450!! Psi.
"a altitud en metros se pu.ede calcular se#iln laecuacion:
5. Convertidor Anal6gico - Digital
1Y se#un $a temperatura. %ste &actor 'ace (ue sea necesario medir la temperatura
de tra)a*o +, por ello, se utilizara una -./.
.-- Temper;)ture Error Band
M!"##5A. M!A"##5A $e%ie$
0$1
11
#l&-
. . . . . .
....' ( '
-.
.40
$
ltm#) or* l ...
2l2lII #
3$Ill
141
#+, $
-a+...
1.01
'
& & & & & & & & & &
. -* && . 111 /I eo 110 1110 1 2 1 1 1 40
.45,6
.-- re//ure Error Band
& & & & & &
' ( ( ( ( ( 0 &% 1 2 &l7 6o8 l3)
40
98
110 100 11: 0
' ...... #a....l&&,r.4
15.1150 :tU;oP6I
-igura #5. Error de re/l6ny -actor de Temperatura<eertesra de Motoro%a*
"a ecuacion para calcular la presion con una =s de56 y un error de presion de >l.5
esde:
p
0.475+v'
___ ....!:O~f..,T~+ 1.5. FactorImp
0.045
H ? 1!990.652! .&n1 PKpa $
101.04
11
Com pilador C CCS y Sim ulador PRO TEUS para M lcrocontroladores PIC
LCD1
p = 99.S7 Kpa
T = 2S.35C
M 1
Figura 20. Ejem p'o
linclude <16FB76.h>
Idevice adc-10
#E'USESXT,NO!T
#FUSES
Nuse dela"lcl#c$-%000000&
'include <'ach.h>
#include <()!.)>
IB*TE T+IS, - !-BS
.B*TE /O+T, - !-!S
v#id 'ain0&
in116 23
il#a1 cv,44,1e'5,",c6,e44#43
6l#a15,54e7i#n,54e78a1',54e7857i,7l13
II9a4i7#le7 ecu7cl#ne7
I:9a4ia;le7 calcul# 54e7i#n
Il" al1u4a
inc cne-O3
;i187e1 0T+IS,, <&3
7e1u58adc85#4170+,O8+,l8+,=8,N,(O>&3 II+,O " +,l anal#?ica, +,< di?i1al
1 32
133
5. C o n v e r t i d o r A n a l o g i c o _ D i g i t a l
setup_adc(ADC_C~OCK_INTEFNAL):
lcd_ini c () :
Ear t t r! {
set_adc_channel(O};
delay_us (!";
# $ r - e a d _adc (};
p - %&! ' q I "!(&!;
p)esl*n$ (O&(+%,p}IO&!(-;
..Lec)u)a p)esi*n en /*lti*s
..~ectu)a p)esi*n en KPB
sec_adc_c~an~el(_I;
delay_us (!":
q = )ead_adc ();
tv - %&! 0 q I "!(&!;
tr - t/ * "!!!!&! I (-&O $ tvl;
y - l*1(t).!!!!&!);
y - (l&O.23&"-) + (y 4("&OI(!%!&!}";
.ILec~u)a t e m p e r a t u r a
ce5p$l&OI}6;
ce5p $ ce5p $+7&"-:
~8 (ce5p9:O && te~;$3-) TF:"&!;
else TF:7&!i
E<<C< aTF 9"&%; ICa"cul* del e r r or de p~esi=n con la ~e5pe)atu)a
.e" e r r or puede se r z pe)* a#ui usa**s $ 0+
pLoesion-presion-ERROR;
p)es_at5 =p)esi*n ~ !&!!23=2;
I.>)esi=n en Kpa
I/Presi6n en &(c5
p)es_psi =presion !&"(%!7++; I.>)esi=n en >si
alt: - -7990. 6!7"9#lo$%presion/l&l.'0(); IIAl:::u)a
i* (?IT_TE-T(>O<TA6)::!) cnt,,; Calcula) @A5e)a /eces pulsa Bat*n
If (cnt9:() cnt:C;
+Iatc, tcnc)
ca se 0:
lcd-$Ot./0 (1,1);
princ*Ocd-1l23.:c4 #5P6 is.!* 1rpa
I.-e1un nu m e r o /eces pulsa Bac*n sa eli1e 5enu
.., PRESION);
p)int8(Icd_putc6CDnT $ !04.2i C", ~ea:p);
B)eaE;
case 1:
lcd_1*tDFy(l6l);
pr:inc*%lcd-pur:c4 "\Fa 2(.!* a"1!' #. PRE7-a-:8);
print*%lcd-PL9c4#5n3 - i04.2f &#4 r:e8p);
B)eaE;
case :
lcd_1*caFy(l6l);
prine*%lcd-putc4 #5p ... H.2f psi C6 ><E-_psi);
C o m p i l a d o r C C C S y S i m u J a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
print(lcd_purc,H\nT = i04.2f CH, temp);
break;
case 3:
lcd_gor:ox.y(l,l) ;
printf{lcd_pur:c, "\Alt= %7. 2f m " , ale);
printr( lcd_putc, "\nT = i04. 2f en, tep!;
break;
delay_ms (100) ;
)
Fi gu r a 21. P r o gr a m a d e l e je m p l o 3
Ejem plo 4: Simlliacio/l dead!isici"# detensi"nes ne#ati"as ($i#ura22). C"p"nenies
%&'&: ('C)*+,-*, C.// 0 /10)*/.
Com o se ha com entado al inicio del capitulo, el convertidos AD del PC !"1# puede
ad$uirir tensiones (2&'T34&. %alcom o esta con&i'urada la entrada del converser,
el PC se "56.147'4" en e( caso de introducir una serial de tension ne'ativa
par los canales AD. Pero la sim ulacion es " m u) su&rida" ys& $u* penn.ite ad$uirir
tensiones ne'ativas sin $ue al PC le ocurra nada, pero la realidad es m ucho " m as
cruel" + jOJO can esta di&erencia entre la sim ulaci"n yla realidad,
Fi gu r a 22. E je m p l o 4
134
135
5. C o n v e r t i d o r A n a l 6 g i c o _ D i g i t a l
linclude <16F876.h>
Idev;.ceadc-IO
IFUSES XT,NOWDT
I ! SES
"u#e dela$%cl! c&-'(((((()
linclude <*+D.+>
void ,ain %-
in.16 /;
0l! a.p;
#1cu123dc21! .S%4NO256F.F256EF-;
#ecu12#dc%4O+ +*O+72INTE6N4*-;
lcd_ini e ( ) ;
.! %;;- %
#e. "dc_channel (0);
dela$ u#%8(-;
q reacl_adct t :
9 3 %-8.(- + %':/ I1(8'.(-;
print! (lcd_putc, ;<04D+ - 141dN, q);
pz-intf(lcd_putc, "\nolta!e - I"l#$fH, p);
dela$2,#%lOO-;
}
Fi g ur a 23. Pr o g r a ma d e l e je mpl o 4
La solucion practice para me dir te nsione s ne gativas e s de splazar la te nsion hasta
valore s positivos y de spue s re star e ste de splazamie nto po r software .
6. M o d u l o C C P - C o m p a r a d o r , C a p t u r a y P W M
Capitulo 6
M o d u l o C C P - C o m p a r a d o r ,
C a p t u r a y P W M
137
6.1 Int r o d u ccio n
Los modules CCP permiten realizar tres funciones basicas basadas en el manejo de
los temporizadores (Timer):
Comparador: compara el valor del temporizador COnel valor de un registro y
provoca una acci6n en el PIC.
Captura: obtiene el valor del temporizador en un momento dado, fijado por la
acci6n de un terminal del PIC.
PWM: genera una senal rnodulada en amplitud de pulso.
Los PIC de la gama media pueden tener hasta m6dulos CCP. Los dos modules CCP
se comportan practice men te igua! "menos en un caso especial #ue se estudiara peste$
riormcnte%. &rOI'producirse un reset, el modulo CCP se encuentra deshabilitado.
Cada m6dulo CCP posee un registro de (6 bits #ue puedc utilizarse de las tres
siguientes formas:
)egistro de (6 bits para capturer el valor del temporizador al producirse un
evenLo"C*P&+)*%.
)egistro de (6 bits para cornparar su valor can el valor del ternporizador
&,)l, pudiendo provocar Linevento cuando se alcanza el valor contenido en
este registro "CO,P*)*-O)%.
)egistro de (. bits para el ciclo de trabajo de una sefial PWM (PWM).
Cada uno de los registros CCP tiene asociados tres registros "la / indica CCPl .CCP2):
CCP/CO0: )egistro de control del CCP.
C o m p i l a d o r C C C S y S j m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
CCPRxH: Byte alto del registro de 16 bits del CCP.
CCPRxL: Byte bajo del registro de 16 bits del CCP.
CCPX: p i n del CCP.
Registro de control CCP.xCON fdireccion RAM: 17h/D1h, CPI
C16F87.x]
Figura t.Registro de control CCPxCO
Rr!O Rr!O Rr!O Rr!O Rr!O Rr!O
I C C P xX I C C P l t Y I C C P xM 3 I C C P xM 2 I C C P xM I C C P xM O
!t O
bit ":6 o usados: #alor O.
bit $:% CCPxX:CCPx&: bitl y bitOdel Duty Cycle de' PWM.
Modo captura: o se usa.
Modo comparacion: o se usa.
Modo P(): *on los dos bits +enos signi,icati#os de los 1- bits utili.ados /ara e'
DUhj Cycle del P(). Los oc0o bits de +ayor /eso del Duty Cycle se encuentranen
el registro CCPRxL.
bit 1:- CCPx)1:CCPx)O: bits de selecci6n del +odo CCPx.
0000 CCP in0abilitado 2reset del modulo CCPx).
0100 )odo de ca/tura3 cada ,lanco de bajada.
....." # "........................!..4!.!..!!!!!.!!!!!!.!!! $.!....!.............. !4!!!!!!$$$!....3..5........!.......%
0101 )odo de ca/tura3 cada ,lanco de subida.
............................ %%.....%$%.......&$$$$$$$.3.5!!!4!.! ....!!!.!!!!.!!!!!!!!4!........!$$$!!!!!!!!!!!!!!4455..5
0110 )odo de ca/ture3 cada % ,lancos de subida.
!!!!!!!!!!!!!!!!4!!.!.!!.!.!!!!.!!! $$!!!!!!.!!!!!!!!!!!!
D I l l )odo de ca/tura3 cada 16 ,lancos de subida.
1000 )odo de co+/aracion3 /in CCP a 1 al igualarse 2CCPx6F7 18.
$55$$$5.5.5$$$5.5$$$$$&$$5.5$$$$5$$$$5$$!.!5.!5.5$$$$$$$$%$$$$$$!4!.!
1001 )odo de co+/ara cion3 /in CCP a - al igualarse 2CCPx1F'18.
......!!..!$$$$$$$$%......." # # # "$$$!!!!4.!.!.!.!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!4!
.!5$$$
1010
)odo de corn/aracion3 genera interru/cion al igualarse 2CCPx1F7 13
CCPx no es a,ectado8.
!!!!!!!!!!!4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.!!
)odo de co+/ara cion3 lan.a accion es/eci.a12CCPxlF 7 63 CCPl resetea
1011 TMRl, CCP2 resetea TMRI y lan.a una con#ersion AID 2si esta 0abi!
litada8.
l l xx )odoP().
119
6. M odulo CCP - Com parador, Captura y PW M
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Debido a que los dos m6dulos CCP utilizan los temporizadores, cuando estan acti
vos los dos m6dulos se puede dar alguna interaccion entre elios. La siguiente tabla
muestra dichas interacciones.
Modo CCP" ModoCCPy nteraction
Captura Caprura Misma base de tiempos en!M"#.
Captura Comparacion
La comparacion debe configurarse para la ac$
cion especial de disparo que borra el TMRl.
Comparacion Comparacion
La comparaci6n debe con.figurarse para la ac-
cion especial de disparo que berra e% TMRl.
PW M PW M
Los PWM deberan tener la misma &recuencia
y tasa de actualization 'interruption TMR2).
PW M Captura (inguna.
PW M Comparacion (inguna.
6.2 Modo Captura
)n el modo de captura, CCP"*+,CCP"*L capturan el valor de los #6 bits del regis
tro TM Rl cuando ocurre un evento en e# pin CCPx. Los posihles event os son,
- .lanco de ba/ada.
- .lanco de subida.
- 0&lancos de subida,
- #6 &lancos de subida.
)stes eventos se seleccionan con los bits CCP*M1,CCP*M2 'CCP*C2(31,24. En
el momento de la captura, el bit CCPl. 'p% "#354 [y/o el CCP5#. 'P"532678se
pone a , produciendo una interrupcion en el caso de que este habilitada. )#flag ha
de ser borrado por so&t9are. :i sucede otra captura antes de haber eido el registro
CCP"*, el valor de #a captura previa se habra perdido.
)n modo captura, el pin "C5CCPl (:flo elpin "Cl&&#;<#CCP57 debe con&igurar
se como entrada poniendo a uno el bit !":C3z6 [y/o el !"<C3#68. <#el bit "C5=
CCPl [y/o RCVCCP2] se con&igura como salida, una escritura eneste pin podria
originar una captura.
)ste modo traba/a can el TMRl.>demas, es necesario q?ueeste &uncione como tern
porizador ; como contador en modo sincrono. )n modo asincrono no &uncionaria.
:i se produce un cambio en el modo captura, por e/emplo de &lanco de ba/ada a
cada 0 &lancos, se puede dar una &alsa interruption. Por so&t9are se debe borrar el
#1@
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
bit CCPxIE para deshabilitar las interrupciones, limpiar elflag CCPxIF y cambiar
el modo de captura,
Mediante el preescaler se puede alcanzar una resolucion mas precisa sobre Lasse
fiales de entrada. Hay cuatro confiuraciones de preescaler especificadas mediante
los bits CCPxM!"CCPxM#. Cuando el modulo CCPx esta inhabilitado no esta en
modo captura, el contador del predi$isor es puesto a cero, Cual%uier tipo de reset
borra el preescaier.
Para cambiar el tipo de preescaler se debe apaar antes el modulo CCPx &horrar el
preescaler) y posteriormente modificar dicho $alor, de 1 0 contra rio se puede produ
cir una interrupcion.
'i se utiliza el modo sleep &dorrnido(, el TMRl &confiurado en modo sincrono( no
se incrementa, pero el preescaler del CCPx si %ue continua incrementando el conta
dor de e$entos y, p#)1 0 tanto, cuando alcanza el $alor prefi*ado, el bit CCPxF se
pone a +,+,%ue pro$oca un despertar del PIC- asf el contenido del TMRl se uarda
en los CCP.x pero su $alor no es sinificati$o dado %ue el TMRl estaba parado.
6.3 Modo Comparacion
En el modo comparacion el $alor de +/ bits del reistro CCP.x se compara conti
nuamente con el $alor del temporizador TMRI. Cuando ambos $alores se iualan,
en el pin CCPx se puede producir, ,no, un e$en to de los siuientes"
'epone a +.
'e pone a #.
0o cambia.
Estos e$entos se seleccionan mediante la confiuracion de los bits de control
CCPxM!"CCPxM# &CCPxC#01!",2"
+,,, Modo de comparacion, pin CCP a + al iualarse &CCPxIF 3 +(.
...4 4 ..4 4 ...........4 4 ..4 4 ...5 ..5 5 ............~..........5 5 ...4 5 ........5...5.......- ...5 5 5 5 .5
+,,+ Modo de comparacion, pin CCP a , al iualarse &CCPx"IF3 +(.
5 ..5 .-~ ...5 5 5 5 ......4 5 5 5 .5 5 5 5 5 5 5 .5 .5 5 5 5 5 5 5 5 5 5 5 .5 5 5 .5 .5 .5 5 .6..5 5 5 5 ......... -.....~
+,+,
Modo de comparacion, enera interrupcion al iualarse &CCPxIF 3 I,
CCPx no es afectado(.
4 ..................4 5 5 4 ....--....4 ,. ......................4 . ......5 5 5 ..5 5 5 .5 65 .5 5 5 5 5 .....5 5 5 5 5 5 5 5 5 5 5 5 5 5 6...5 .5 5 5 5 .5 5 5 ..5 5 5
Modo de comparacion, lanza accion especial &CCPxIF 3 +, CCPl re5
+,++ setea TMRl, CCP2 resetea TMRl y lanza una con$ersion 7I8 &si esta
habilitada(.
Por otra parte, al producirse un e$ento en el pin, se producira +a interrupcion en
caso de %ue este habilitada, ya %ue elflag CCPxIF &dePl.+ , P+.9( se pone a +.
+:,
6. M o d u l o C C P - C o m p a r a d o r , C a p t u r a V P W M
El T'IMERl se debe configurar en modo temporizador 0modo contador sincrono
para que el modulo CCPx funcione correctamente en el modo comparacion,
Para trabajar en este modo, el pin CCPx debe configurarse como salida, poniendo
a 0 el bit del registro TRISC correspondiente, Cuando se selecciona uno de los
modos de comparacion, el pin CCPx toma el niel logico contrario a! que tiene
gue tomar cuando se produzca Ia igualdad "es dear si se tiene que poner a # en Ia
lgualdad, se pone a 0en estado normal$
%a& un modo de trabajo "CCP'()*CCP'(+* #0#0$ en el que se produce una inte,
rrupcion a- producirse la igualdad, se actia elflng CCP'I. y se genera la interrup,
cion, si esta /abilitada, perc el pin CCPx no se e afectado.
Por0timo,puedetrabajarenmododedisparodeaccionespeda-"CCP'()*CCP'(+*
#0##$. En este caso cuando se produce la igualdad, el temporizador TIMERl se re,
setea, por #0que se utiliza como marcador de la acd6n. En el m6dulo CCP2, ade,
mas de producirse el reset del TlMERl, se inicia una nuea conersi6n12 si dic/o
modulo esta /abilitado* esto permite realizar conersiones AID peri6dicas.
En e#modo sleep "dormido$, el TlMERl no funciona &, par #0tanto, Ia comparacion
tampoco. EI pin CCPx tendra el mismo alor que antes de trabajar en modo sleep.
2espues de cualquier reset, el modulo CCP esta des/abilitado.
OutPUL
6.4 M o d o P W M
si modo PWM (Puise WidthMQdulanon) 0MODULACTON DE ANCHO 2E PULSO,
permite obtener en los pines CCPx una sefial periodica enla que se puede modifi,
car su ciclo de trabajo (Duty Cicle). Es decir, puede ariarse el tiempo en el coal la
sefial esta a niel alto (TON) frente a! tiempo que esta a ruel bajo "To..$3erla figura
4. 2e esta fo.rma,la tension media aplicada a la carga es proporcional a! TON' centro,
lando, par ejemplo, #aelocidad de motores, luminosidad de lamparas, etc.
Vmod t
Too cc5 mod
T 6cte.
Ton
V mod L
1 4: 1
Figura 2. Sella. PWM
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
La resolucion de salida es de hasta 10 bits. Para que este modulo funcione correc
tamente, el pin debe estar configura do como salida, mediante la configuration del
TRIS correspondiente.
El periodo de 1a sefial PWM Be obtiene de configurar el TIMER2 Yel contenido del
registro PR2 (direccin 0!"2#$ %er la figura &. Este registro de ' bits contiene los '
bits mas significati%os de una cuenta de 10 bits. Para calcular el periodo de la serial
P() se utili*a la siguiente ecuacin+
P(), =(PR2 +1#-./,osc-(0alordel Preescaler del ,)R2#
1uando el %alor del TMR2 se igua2a al %alor de PR2, pueden ocurrir los siguientes
e%entos+
3 ,)R2 se borra .
3 El pin CCPx se pone a 1 (e!cepcin+ si el Duty Cycle es 04, el CCPx no se pone
a 1).
3 El %alor de 11PR!L se carga en el 11PR!5, el cual es el que se compara. con
el TIMERl para fi6ar el duty cycle.
PERIOOO
..
!
1ic7o dE8,raba6o +
TMR"=PR"
TMR"=PR"
TMR"=Clclo de Tra#a$o
97gura &. :e$$al de sanda PWM
El ciclo de traba6o (duty cycle) se define par el %alor del registro 11PR!L ; can los
bits 11P71<=>?+.8 antes de comen*ar un nue%o periodo. El registro 11PR!L
contiene los ' bit de ma;or peso ; e1 11P71<=>?+.8 contiene los 2 bits de menor
peso. Por 1% tanto, se consigue una resolucion de 10 bits (@1!A"+@1!A<#. E1tern
pori*ador base con el que se campara el contenido de estos registros es el TMR2.
La siguiente ecuacin permitecalcular el %alor del Duty Cycle:
P() duty dele =(11PR!L+11P!1<=>?+.B-,osc-,)R2pRE:1ClDR
Los registros 11PRlL ; los bits 11P71<=>?+.8 pueden escribirse en cualquier
memento, pero no se cargan en 11PR15 hasta que finalice e1 periodo de la onda
PWM actual (es decir que se produce la igualdad entre PRl ; TMR2). En este modo
el 11PR75 es de solo lectura.
1.2
6. Modulo CCP - Comparador. Captura y PW M
EI CCPx se pone a 0, terminando el cido de trabajo, cuando el TMR2 mas 2 bits se
iguala a CCPxH mas 2 bits
Si el cido de trabajo de la onda PWM es mayor que eJ periodo, la seiial que sale por
la patilla CCPx esta siempre a 1
!a resoluci"n maxima en bits #iene dada par 1a expresi"n$
,% osc &
resolucion ' FpWM bits
192
Par ejemplo, para una % recuencia de P() de 122 *H+ can un preescaler de TMR2
de 1" y una % recuencia de reIoj de 20 )H+$
1 1
-=(PR2 + 1& ,-,..,1"
1220 2010"
se obtiene un #alor de P/2 ' 200 12x33& , y una resolution de$
Ij20'106)
, 1200
resolucion ' > to bits
Ig2
Para porter en marc4a el modo PWM se deben dar los siguientes pasos$
1 Con% igurar el periodo PWM mediante escritura del registro PR2.
2 Con% igurar el DItty Cycle escribiendo en el registro CCP/l! y los bits
CCPIC2560$-7
8 Con% igurar CCPx como salida mediante eI TRlSC.
- Con% igurar el preescaler del TMRl y 4abilitarlo mediante escritura en
92C25
0 Con% igurar el modulo CCPpara la operacion en modo PWM.
6.5 Modulo CCPen C
EI compilador C suministra una sene de % undones para eI manejo del modulo CCP.
Con% iguracion del modulo CCPx:
setup:ccpx 1modo& ;
modo 4ace re% erenda a los bits CCPx)8$CCPx)2 del registro CCPxC25 1% igura-&
1 4 3
Ccap||accr C CCS Y S|au|accr PR0TEuS para H|crcccr|rc|accres PlC
SETuP_CCP|(H0D0); H0D0 RElJlstro CCPxCOII (17hID1b)
CCP_0FF Deshab|||lK|cr 00000000(00h)
CCP CAPTuRE_FE Captura per f|arcc ce bajaca 00000100(04h)
. .
CCP CAPTuRE RE Captura per f1arc. cce subfca 00000101 (05h)
CCP CAPTuRE_DlV_4 Captura tras 4 pu|scs 00000110(06h)
CCP_CAPTuRE_DlV_16 Captura tras 16 Pu|S05 00000111(07h)
CCP C0HPARE SET 0N HATCH Sa||ca a 1 er ccaparactcr 00001000(0Sh)
CCP_C0H~ARE_CLR_0N_HATCH Sa||ca a 0 er ccaparac|6r 00001001(0A9)
CCP C0HPARE lNT lrterrupc|6r er ccaparac|6r 00001010(0Ah)
CCP_C0HPARE_RESET_TlHER Reset THR er ccaparac|6r 00001011(0Bh)
CCP_PWH Hab|||tac|6r PWH 00001100(0Ch)
,.~
F|gura 4. Hcccs ce SETuP_CCPx(H0D0J
Los valores para comparar se fijan en los reistros CCPRx! En e| compila"or C,
estos reistros estan "efini"os en el fichero include, por ejemplo en eI1#$%7x!h&
1'nCCP(I) lon CCP(*)
+b,te CCP(1 - Oxl. +b,te CCP(* =O/l0
+b,te CCP(I(LO1)Ox12 +b,te CCP(*(LO1 - Oxl0
+b,te CCP(I(3I43 - Ox1# +b,te CCP(5(3I43 - OxIC
Definicion "el cicio "e trabajo para P16&
set(p7mx( "8t, (valor))
valor: "ato "e % ' 1# bits 98e "etermina el ci"o "e trabajo! Este valor: j8nto con el
valor "el preescaler "el TMR2, "etermina el valor "el ciclo "e trabajo: En la confi8;
ra"on "el T1lvlER2, el postcaler "ebe valer 1.
.<*!08. l
F|gura S. Ejeap|c 1
1==
6. M o d u l o C C P _ C o m p a r a d o r , C a p t u r a y P W M
Ejemplo 1: Medir III ancho de 1111 pulso mediante el modulo CCP (figura 5). COIIII'0Ilt'"tt':;
ISIS; P1C16F876v LM016L. Instrulllt!lltoS: OSCILLOSCOPE y Generadores: PLSE.
S e utiliza el modo captura del CCP! configurandolo para que detecte el Ilanco de
subida 0de bajada del pulso a medir. Este ejemplo es similar al ejernplo 4 del tema
de interrupciones pero en esc la deteccion era por interrupcion de "#O.
!ada VC7 que se produzca una deteccion de flanco el "alor del T'oARl pasara al
registro del modulo CCP.
I~nclude ~lbcblb.h~
Ifuses XT,NOWDT
/fusedelay t$lock-')OOOOOO)
K~ncludo <lcd.c>
~byte I!I-O"O#
$n%l nue&a'ulso-O(
$n%)* T+,--,)../O,0+ -1
floac 2-O.O1
$n%I ca3b$a-O1
4ln%5cc'l
&o$d cc'l56n%7)7
I/8n%0a o%0o 'ulso
I/T$763'o9lancos
//:alo0 %3al del ancho de %ul so
//#f63b$ode Danco de d$s'a0o
//#on%0al de ca3b$o de uenco
//+lonco de ,a;ada
II+unc$on $n%el.'0u'c$On
If<cf63blo--O)7 /I+I,nco de sub$da
T+8-##5l( //#,0=, del &alo0 del 0e=$se0o ##!l e n Danco sub$d,
se%u'5cc'l7##5#2T>!?5+?)1 //#onfl=u0ac$on 3odo #,'%uca en flanco ba;ada
T+8-##5l( //#ac=, del &alo0 del 0e=$s%0o ##!I en f6anco ba]ada
se%u'5cc'l7##5#2T>!e~!?)1 //#onfl=u0ac$*n 3odo ca'%u0a en fldnco sub$da
ca3b$a-O( //#on%0ol de ca3b$o de @6anco
ca3b$o-l(
else <
$f 7nue&o'ulso--O/ /
nue&o'ulso-l(
&o$d 3al n I J
lcd5$nA 7/(
seotup_tlm81_1 &''l()*)E"*+L,;
seeu'5cc'l/##5#2T>!?5!?) (
ca3blO - -1
//+6n de 'ulso ...
//'ulso a 3ed$.0
//#onfl=u0ac$on n~!l
//#onfl=u0ac$on 3odo Capcura en flanco sublda
//#on00ol de ca3b$o a -
145
C o m p l l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
enable_lnterrupcs(~nt_cCpl);
enable_interrupts(global);
do (
if(nuevopulso"-l) I
TF- (TFB-TFS) ,.
IIHab~litaci6n interrupci6n modulo CCP
I/Habilitacion interrupci6n global
/!Pulso nuevo"
I/#nc$o de pulso%
AP - TF"1.0; //#llc$ode pulso en microsegundos (a 4 &H'(l us)
pcinc)(lcd_pucc! H*nPulso - ~6%fu+ "% AP);
nuevopulso-,; /IPulso -a medido! ~spera nuevo
. /$ile (0123);
Fi gu r a 6. P r o gr a m a d e l e je m p l o ,
Ejemplc 2: Generar ulla seiia! cuadrada de 2 kHz mediante el modulo CCP (figura 7).
Componenies [SIS: PIC1F!" s #$01#. lnetrumentos: %SCI##%SC%P& ' C%()*
T&+ TI$&.
~OO(TI080ITI0I4
RCT0!"CC#2 t-=-J~ ..... ---~
RC2ICC#$
RClI!CI%I!Cl
RC4I!OI&!O'
RCilI!ClO
R08JTXlCV
RC7(l))T
II
Fi gu r a 7. E je m p l o
!e uriliza el m*+* c*r,paraci*, +el CC#$ c*,figura,+*l* e, m*+* c*,mu-aci*, +el
pi, ecp p*-. c*mparaci*,. E/-e ejempl* e/ /imilar a l*/ ejempl*/ y 0 +el -ema +e
i,-errupci*,e/$ per* e, e/*/ la +e-ec-i*, era p*r i,-errupci*, +el T+$% y T$+,-
re/ pec-i1ame, -e*
146
6. M l l d u l o C C P _ C o m p a r a d o r , C a p t u r a V P W M
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
E1m6dulo CCP compara continuamente el valor de TMRI con el valor prefijado:
cuando se produce la igualdad se produce el cambio de estado del pin CCP Y la
activacion de la interrupcion del. modulo CCP.
En cada conmutaci6n se debe fijar el valor a comparar para obtener una onda cua
drada (un cido de trabajo de150tyo), es decir un semiperiodo de 250 fls (a 4 MHz el
ciclo mauina es de 1 us!" por 10 tanto" el CCP2 se debe cargar con este valor (ajus
tando el valor final es de 1##!.
#include <16f876.h>
IIfusesXT,NOWDT
intI cambio=O! ""#a$iable de canc$ol de cambia
#in%&cc'(
vo.id cc'(&in% )*)
if)++cambiol*)
setup_ccp2(CCP_COMPARE_CLR_ON_MATCH) //Modo Co!p"#"cion, c"$n%io " 0
"",uncion de in%e$$u'ci6n
else{
se%u'&cc'()--.&-O/.012&32T&ON&/0T-4*!""/odo -om'a$acion, c"!%io a 1
se%&%ime$1)5*6
CCP_2 $ 1##%
'a$a un Du%7 del 859
&
:oid ma.i n (! (
disable_interrupts (global);
se%u'&%ime$&l)Tl&INT21N0; I Tl&DI#&<=&l*! ""-onfl>u$acionT/1I
se%u'&cc'()--.&-Ol1.012&32T&ON&/0?I?-4*! ""-onfi>u$aci6ninicial modulo cc#
--.&( =1##% "IIniciali@aci6n del #e&ist#o --.1(
""'a$a un Du%7 del 859
II<a$$ado de TMRl
I"InicAalA@acion del #e&ist#o --.1(
enable_interrupts(int_ccp2);
enable&in%eBi$u'%s)>lobal*!
do (
) wile (TR!");
II4abili%aci6n inte##upc'(n modulo --.(
Ilffabili%acion in%e$$u'cion >ene$al
Figu r a 8. P r o gr a m a d e. ejem p l o 2
Ejemplo ': Mediante #acon$iguracion del %odulo CCP lan&ar una conversion '() auto*
%dtica cada11115. Conel valor obienido se realisarti una conversion (' uiili&ando el P+M
y un$iltro paso,ba-o (figura 10!. Cotnponentes T.I./ PIC012341) C'P) C"##) #"(,5'R*
6R'P7,6R8) #M9:0;) P<T,#I8 = R"..lnstru%entos/ <.CI##<.C<P".
(econfigura el modulo CCP2 en modo comparacion can accion especial de disparo"
ruanda se produce la igualdad se resetea el TMR0 se y se lan)a una conversi6n*+"
si esta ,abilitada. -argando el registro de CCP2 -.n el valor adecuado se consigue
147
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
que, cuando coincida con el valor de TMR1, se produzca una conversion AD, en
este caso cada 1ms, Dado que la frecuencia de trabajo es 4 MHz (1ms/l f-ls=1000,
e 1 re!istro CCP2 se car!a a 1000"
Fi gu r a 9. S e n a l d e 2 KH !e "e m p l o 2#
#on e l valor obtenido de la conversion se puede obtener una serial PWM prop or$
donal a este valor" %ara ello se utiliza el modulo CCP1, dado que el valor de la con$
version es de 10 bits y e l re!istro del modulo PWM tambien es de 10 bits, el valor
puede ser transferido directamente"
&1 periodo de la sefial PWM viene fijado por el TMR2, con un prescalery un posicaler
de valor 1 y W1valor de re!istro PR2 de ''4, 10 que implica un periodo de ''( )-*s
+4444Hz"
,i dic-a serial es filtrada con un filtro de paso bajo se obtiene una corriente continua
proporcional al valor de la conversion" #omo aplicacion se pucde aplicar esta sefial
a una barra de leds y obtener una serial luminosa proporcional a la serial adquirida
(volill/eter). %ara ello se utiliza e. circuito inte!rado /M0114 +fi!ura 11"
2n la 3i!ura 10 se observa el funclonamiento del circuito4 con una pila 5 un poten$
ciornetro se varia la tension de entrada, la cual es muestreada cada 1 ms" #on este
valor se !enera una serial PWM +ver canal A del osciloscopio y mediante el filtro
de paso bajo se obtiene la tension media proporcional +ver canal B del oscilosco
pio, Dic-a tension se in5ecta a la entrada del /M0114 que proporciona 1a serial a
los leds.
148
6. M o d u l o C C P - C o m p a r a d o r . C a p t u r a y P W M
Figu r a 10. Ejem p l o 3
I FO
"
~, 1i n_1 11 'I
L[O
~O 10
11 11 n 14
1)
11 II 10
LM3914
r
I
I
I
ILE D
INO.1
I
I
....L
u..r.....,._.
I
I
I
I
L ~__ __,
l'
ov-sv
SIGNAl
SOURCE
Figu r a 11. Ap l l ca cl 6n t l p l ca d el LM 3911co r t e!ia "a t io na l #M $
#include <16f876.h>
Ifdevice adc=10
#fuses XT,NOIVDT
.i.n16 val!"#
$line%ad
19
C o m p i l a d o r C C C S y S l m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
void ad_int (){
valoc=read_adc(};
set_pwm1_duty (valor);
)
void main () (
disable_interrupts(global);
setvp_acc_ports(ANO);
setup_adc(lWC_CLQC!_"N#$%NAL);
set_adc_c&annel(O);
IIFuncion interrupcion AD
IIValor de fuente ana16gica...
Iia Duty de PWM
//a!ilitaci6n "A# ana$6gico
II"elo% interno %C
//C,mal 0
&etup_ti'er_(()(_DIV_*+_1,((-,1);
setup_ccpl (CC'_1(W));
setup_ccp* (CC'_CO)'+",%$_%$-$#_#")$%).+
I/."(=/(-, #pwm/**001
"1CC'l en modo 'W)
""CC'* modo CO)'A%AC"ON +++
II y dispare e&pecial
setup_timer_l"#l_"N#$%Nl2L #l_3"4_56_l); ""Conliguracidn #)%1
set_timerl (7) ;
cc2p_(=1333;
enable_interrupts("N#_A38;
enable_interrupts(global);
do I
) l9&i+"e (#%:$);
I IPuesta a 0
/I4ue&treo cada 1 '& a 4 4n5
"";abilitacidn Interrupci6n AD
I/Ha.oilitacion Interrupci6n global
Fi gu r a 12. P r o gr a m a d e . e je m p l o 3
Fi gu r a 13.S e n a l m o d u a d a y s e n a . !jl t r a d a
150
6 . M 6 d u l o C C P - C o m p a r a d o r , C a p t u r a y P W M
NOTA
Puede detectarse un error en el m6dulo CCP en modo PWM con valores altos
(ver el ultimo ejemplo de este capitulo).
Ejemplo 4: Mediallte In cO llfiguracion del modulo CCP lanzar Lit/a conoersion AD auto
nuitia; COli el tin/or ootenido representor In tension de entrada ell WI display grcifico (fi
gura 4). Conuxmeutes [I! P"C#$%&''( C)LL( *+I,( !"#$64%&I'. Instrumentos!
OSCILLOSCOPE.
En este ejercicio (a) *ue teneren cuenta dos +actores. Por un lado *ue ,a +recuencia
de muestreo de-e ser. por 10 menos. dos veces ma)or *ue la +recuencia a mues/
rrear: en este caso si la +rccuencia de muestreo es de 0 1l2l3 ($44 ,.,s). la +recuencia de
la serial a muestrear de-e ser in+erior a $ 563.
Por orro lado. (a) *ue ajustar e) rango de tension de entrada a valores positives. &e
utili3a una +uente de continua de $.0 7 para elevar una +uente senoidal de 0 7 de
pico a pico con una +recuencia de 4 63 (tam-ien se puede despla3ar la tension con
el offset de la +uente 7&INE). Para representar esta tension se ajusta el tama+io de la
pantalla: en el eje de las 8e, tiernpo (de9 a $:pl;eles). en el eje de las <la tension
(de 1 a 64 pi;eles).
!=O.
tO>?... @:0,+t
2A .
r B
r-;
0,
:
- .

C
,
..
-
- D
I
D ?
E.
t ' : ,
v v
.
!t
fl :
OI=?I=li(..
, .......... .
' R,
! : "
. . . .#$t -
$$$
't. F
::s. G% . . . . . . ... ..
' I& . ' : : $
i.
% l .
ACtt)roWE.. P 'iI
:H
(
$" " ' I -
r E, "
?lIAI????7N.? B III?I== ((
$
$. i' . l 1, t )*
t $i
' +- - AAJ 1C 11$l )I. ' :
: t
'P.6??????A
I" C 1t r t $
KI=$..(P
" : '
,-1' % $
$- .
1$t .l
At?:???@6I
- " - " " " " " ' "
:L 1=#l,+)(
II=.Am
....AA) F
f, i:
/$$ : '
//.
It
% .
?B MB B ?B F
H 0 11f 1U 1- ' 1'
: $:
" " II" "
' i
$
$$
0
Kigura 4. Ejemplo 4
linclude C16f817.h>
#device adc-10
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
luse delay(clock=20000000)
#fuses HS,NOWD'1'
#include <HDM6!S12"#$
#include <%&a'(ics"c$
in)16 *alo&+
floa)tension;
lin),ad
*oid ad,in) ()(
*alo&=&ea-,adc(.D#,/0.D,ON12)+
cc',231000+
)
*oid 4ain ()
in)5 6a=125"ya=O+
%lcd,ini) (ON) ;
disa7le,ince&&u'cs(%lo7al)+
se)u',adc,'o&)s(.NO)+
se)u',adc(.D#,#1O#8,9N20/N.1)+
se),adc,c(annel (0)+
::;unci6n in)e&&u'ci6n .D
9:<alo& de fuence ana16a=ca """
9l&einicia cuen)a
99Ha7ili)acion /.O anal6%ico
99/elo> ince&no RC
99#anal 0
se)u',cc'2(##?,#OM?./0,/0S0@,A9Ma/)+ ::##BC2modo #OM?./.#9ON",
secu',)i4e&,l (Al,9NA0/N.1
set_)i4e&l (0);
cc',2=lOOO+
ena7le,in)e&&u')s (INT_JW);
ena7le,in)e&&u'cs(%lo7al)+
%lcd nllsc&een(O)+
%=cd,l"ine{L, 64,1,1,1);
%lcd,line(l,D1,125,D1,1)+
do
)ension=(*alo&=E"0):102"0+
ya=l.0FG12"6H13ensi on;
%lcd,'i6el(6o,ya,l)+
// Y dis'a&o es'ecial
Al,D9<,I2,lJ+ 99#onn%u&aci6n 1=l
::'ues)a a 0
9:Mues)&eo cada 200 PS a 20 MHZ
::Ha7ili)acion 9n)e&&u'cion .D
::Ha7ili)aci6n 9n)e&&u'ci6n %lo7al
::5o&&ado de 'an)a91a
:9lineas de x e y
::0scalado de <in, y de 1 a 64 (y=1FE1E=<in)
//vin en *oltios (de 0 a E<)
xa._-;
if (6a<K)
(6a=125+
%lcd,flllsc&een(O)+
%lcd,,l=ne(l,6,1,1,lJ+
%lcd 11ne(1,D1,125,D1,1),"
lvhiJ.e (TRUE);
//E]e de =e4'os (6 de 1 a 125)
999=neas de x e y
Fi gu r a 15. P r o gr a m a d e l e je m p fo
152
6. M o d u l o C C P - C o m p a r a d o r , C a p t u r a y P W M
Ejemplo 5: Realizar 1 1 1 1 control PID parn regular la temperatura de 1 1 1 1 homo (figura
16). Componentes ISIS: PIC16F877 lR!I""# $%&' R&S ( C&!!. lnstrumentas: $S)
CI!!$SC$P&.
Rl
. . .
~ ~ E t J , J . . J
01
" , ." "
OVI
" " ' "
FIgu r a '6. Ejem p Jo 5
Un.O de los on!roladores mas omunes "ue se u!ili#an en el on!rol de !empera!ura
es el PW ($roporional%In!egral%&eri'ada(. )in en!rar en !eoria de on!rol, se pue*
de indiar "ue 1 .1 n on!rolador PID responde ala siguien!e euaion:
K I f de(t)
*+l) + , peel) +_ _ _ L _ e+t)dt +, p-d ..
r. dt
/ ()
donde e(!( es el errol' de la sefial , u(!( es la en!rada de on!rol del proeso. - es la
gananda propor!ional, ., es la ons!an!e de !iempo in!egral yTd es Ia ons!an!e de
!iempo deri'a!i'e.
En. el dominio 5, el on!rolador PID se puede esri/ir omo:
Un on!rolador PID !i.ene !res parame!res (-p' -/ .d) los uales in!eranian uno on
el o!ro y su ajus!e para o/!ener el mejor on!rol puede ser mu, ompliado.
153
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Ziegler/Nichols sugirieron valores para los parametres del control PID basados en
analisis de lazo abierto y laze cerrado del proceso a controlar. En lazo abierto, mu
chos procesos pueden definirse segun la siguiente funcion de transferencia:
-.IT"
G(s) = 1(e
(1 +sYo)
donde !oscoeficientes "l# #to$ Yo se obtienen de la respuesta del sistema en lazo abier
to a una entrada escalon. Se parte del sistema estabilizado en %(t& = $opara u(t& = ur Y
se aplica una entrada escalon de llu a " (el salto debe estar entre un 1y un '( del
valor nominal& y se registra la respuesta de la salida hasta )ue se estabilice en el nue
vo punto de operacion.
y(t) I
-----------I---=-=.-.:-~----
%o i
*++,.++,(-+++-++-++++++r+++++++++++++++++++++
II !
I :
I i
to
t(5)
Fi gu r a 17_R e s p u e s t a d e s a l i d a a u n a e n t r a d a e s c a l o n
!os parametres se pueden obtener de esta respuesta:
#=tl =!
Yo =t2 -II
K
- YI- Yo
0-
ul-uO
.egun Ziegler/Nochols, las relaciones de estos coeficientes con los parametres del
controlador son:
154
K =1.2yu
p
/o +rt&
6. M o d i J l o C C P - C o m p a r a d o r , C a p t u r a y P W M
La realizacion de un controJador Pill discreto viene dado por la transformada z:
U(z) = E(Z)KI'[I + T _ I +TJ_ ( I _ - _ Z _ - I . . ; . . ) ]
1;(1-.: ) T
tamien:
U(z) b ( - I
--=a+--+c l-z )
E(z) 1- Z-I
donde:
a=K,1
K-T
b=-P-
1' ;
!"isten distintas posiilidades de la realizacion practica de un controlador Pill;
una de las mas #aituales es la realizacion en paralelo (fi$ura 1%).
integral
u(kT)
155
Fi gu r a 1%. Dl seno p a r a l eJ o d el co nt r o l a d o r P IO
!1al$oritmo utilizado para pro$ramar elPI &se muestra en la fi$ura 1' de la pa$i(
na sl$uiente. !l muestreo dee ser muc#o rnenor )ue el tiempo de estalecimiento
del sistema en lazo aierto. !n el modele *ie$ler+,ic#ols se toma un valor - <-J.
(tarnien puede utilizarse - </JI 0).
1n prolema asociado a este tipo de disefio es el llamado "integral toindup", el coal
puede provocar lar$os periodes de soreimpulsos (overshoot), motivados por los
valores excesivos )ue alcanza I a serial de control deido a 1a acumulacion en eJ
inte$rador2 Para evitar este prolema se suele limitar la serial de control entre un
valor ma"imo yotro mirnmo2 impidiendo )ue el inte$rador actue cuando se supe(
ran esos limites.
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
( AD )
CALCULO DB- ERROR
e(kT)=l{kT)-y(kT)
cxcuro oe,
TERMINO INTEGRAl
~T)=be(kT)!"#(kTo)
cALcuLoD$
TERMINO DERI%ATI%O
&(kT')(Ce(kT)c(e(kT0 )
CALCULO DE LA )AUDA
AD
u(kT)=*(kT)*+,I~B-,T).&(kT)
. .
I
TR!l/)0ERENCIADE '(1I)
AL !$cTU,$oOR
J
"(kTo~T)
e(kTo2e(kT)
I
Fi gu r a ' 9. AJgo r i t m o d e p r o gr a m a c i o n del P I D
En el ejemplo, el control se realiza sabre un homo can una resistencia calefactora.
Se actua sobre dicha resistencia mediante una serial PWM generada en funcion del
control PID. Para lacilitar la simulation se alimenta la resistencia con una fuente
1!
6. Modulo CCP - Comparador, Captura y PW M
de corriente continua de 12 V Y se modifica su potentia de calentamiento (editar el
componerrte con el boton derecho) a 120 W (figura 20).
Ccrnponel'd8Er~EnCe Hldden
C I l' fol1O l100t ~oI vc O ! " # IbciM
r--
'H.!",#I
$%#Modcl&'de
$i%lllted I ' %op%ltlet
.....
& ' 112' lido ...
-
O t~(~(~.
tllC iI do () om~inuilllioo'
" .cI iI de 110m* C + ,) ~
" dit,* r- . lortle. aoleit&
/igura 20. C aracterist0cas del O ! " #
1ado 2ue I a corriente ma3ima es de 10 - se ha utili4ado un MOSFET de potencia)
elI 56l007.
C omo sensor de temperatura se puede utili4er cual2uier dispositive # 8C ) 5I 1)
termopares) etc.9 pero el OVEN tiene un terminal 2ue indica la temperatura del
homo en grades C elsius. :era este terminal el 2ue se utilice para introducir al * I C
la temperatura del horno dado 2ue la temperatura esta medida directamente en
grad os C elsius es conveniente utili4ar (para este e,emplo) un divisor par 100 2ue
permita obtener el valor en milivoltios de la temperatura (2; <C seran 2;0 m! ).
~.~
%~i.0~h C om~) .) ~nl =.o~> ~.... () .I ) o
rM'---
I
c...(.) .llef>...... ? @ O dm
%%~
I
C_YaIo=
~
? l0oo) oo
I I
~
$(#...odd&Ie.
....A
~d.> )
.
A1' B AA - ~...)."")..I *.*,' ...* ,. 1;
-~
.
I l%) C> ~~
..
I
~
e~from.i> ' l.D9on
A ............ 0llC dI e.
" d> i.> ...) * C :.... ' >
+~"i,-... ,...
/igura 21. C aracteristicas del O ! " #
1;E
C o m p i l a d o r C e c s y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
--- ----------------
La temperatura a alcanzar (0 set point) se podria introducir por teclado (yLCD)
pero, para simplificar, se establece directamente en el programa (se deja al lector
modificar dicho programa para podervariar la temperatura de set point). Latempe
ratura inicial se puede modificar en el menu de edicion del componente OVEN.
El res to de caracteristicas a modilicar en el componente OVENson (figura 22):
Temperature coefficient (V1~C):da una idea de latemperatura que alcanzara e
homo seg!n l" tension aplicada# $alor: L $1C.
Oven time Constant (sec): es Laconstante de tiempo del homo# %ara evitar una
larga simulacion se ajusta a &0 segundos#
Heater time Constant (sec): esla constante de tiempo del calefactor# %ara evitar
una larga sirnulacion se ajusta a 1segundo#
Thermal resistance to ambient ("Cl): resistencia termica homo'ambiente# (e
ajusta al mismo valor que el dado por defecto, 0#)#
!(* +adti *e:
*t#oncod ,,,-toe#:
_T'_'''t.lrelq
&helIIId &.e/autoAotlonl r,'*0)
1v+ TiIIe!:<matt!< 1
Ii_r"""c-.ntI see,
...,...... _(IIrcl
"! """'_
"_",,",#
E",,,%23""
"<il$l_#.....,%'"
Fi gu r a 2L C a r a c t e r i s t i c a s d e J O VE
%ara determinar los parametres (4 o' 5to6 6 o7 del control ! &1basados en el analisis de
lazo abierto seglin 8iegler9:ichols, se realize un analisis transitorio del homo can
una entrada escalon de 0 a 2 $ (&0; a 20; del valor nominal)< ver figura 2=#
%ara trazar la grafica se utiliza &a "imulation #raphs en el 0(0( (figura 2>)< el tipo
interacti$e. En el comando GRAPHADD !RACE (figura &'( se afiade la traza de
la sonda de tension colocada en la salida de temperatura del homo# *l realizar
la simulacion temporal de la forma habitual (0 con la barra espaciadora) se lanza
tambien la simulation grafica y durante el tiempo fijado en la grafica (editando
sus caracterlsticas 'figura 2?'), el valor dela sonda se reflejara en dicha grafica (se
deja abierto el interruptor un tiempo ydespues se cierra para provocar el escalon
158
6. M o d u l o C C P - C o m p a r a d o r , C a p t u r a y P W M
de entrada). Realizando una pulsacion en la barra de titulo de la grafica se puede
ampliar y utilizar un cursor para realizar las medidas; tarnbien se puede exporter
la gnifica a un fichero,
SW1

SW-SPST
HOM o r
BAT1
100
50 .11
111.00
e.ee
FIgu r a 23. Resp u est a a u na ent r a d a esca l o n
AN Al O G U E
DIG ITAL
M I ! "
FRE QU E tl tv
TRAN SFE R
'~DISE
I # $ % Rll% &
O U RIE R
' ( " I %
':II
) ) * % liroriM ' & * f
~ O C SWE E P
'" , , " AC SWE E P
r;;

Figu r a 24. im u l a t io n !r a p "s


:~!" # oul+, * , t1lu- T# !!! , , " " ~" '''''' tI oI .
$%t&l tO Il O l l!!!
I;O 'I" , (" !' n +/0111+/ 1
- o% I ,t. 2 C )rl " , " ! AN #I, !!
Figu r a 2#. M enu !r a p "
159
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
G,.,n,'j"
1 . , . . . , . . . .
itoolr. . ~
ITER!CTI"I#$I!%&'S,s
lit II
' ......'le .... "'" "
~:mJ. '* . "
Figura26. Caracteristicas del grafico
De la recta de maxima pendiente se deducen los parametres !' "Co##o definidos
para el analisis en la$o a%ierto de &iegler'(ic)ols *figura 2+,.
,..
-! = / , - / 0 ./. /"0. /. 1
rs= t- >', .J2. /"/. /.1 3
o (y, - Yo (2+6" 2/ . 1 2/. /
1I,-Uo 2- 0
...
..;... :"~.- r _ ,.,-::;, ~ -
21 4'C " 55
) I
, ,
" I
" ,
,)
'
I
,
I
I
I
I
*
+ ,
,
,
,
*
)
'
,
. . . .
i l'. 6.
. . i / .
'1 ' I ..f IS.' ~_. ".. ". 1 ~. . "Ii, .". ."
'to
77
0'. '
Figura2+. Determinacion de los parametros "8 " "to# #o
9os parametres p' -, #-~se calculan en %ase a estos:
K . 1 . 2: y .! ! _ . 1 . 2:1 3 .8 . 1 203
" Ko ", 1 2/. /:1
-, .2:-u.2:1 .2
T " . 8 . /: Tel (8 . /. 1 .8 . /
1 68
6. M o d u l o C C P - C o m p a r a d o r . C a p t u r a y P W M
Los parametres del controlador discreto se calculan en base al tiempo T que segun
Ziegler/Nichols es de 0.1 s por ser menor de T < 'to /4.
(I = Kp = 0.124
b= Kp T =0.124!0.1 = 0.0062
T, 2
c =_ K . . . . : . . . p _ . _ TJ ~ = 0.124!0." =0.621"
T 0. 1
HINCLUDE <16P877.h>
ildevice adc=10
lose delay(clock=4000000)
Itfuses X'I',NOWDT
#BYTE TI!" =O#$%
void main() {
i&'1( val)*+
i&'1( con!ol"
float a,b,c;
# leco!a de e$%e!a&!a
##'alo! del P()
##con*ane* del PID
#Ie$%e!a&!a a alcan+a!
l,'-lI./le* de ecuaciones
0loa 'e,p _ li,i'+
float rT, et, iT,dT, -T, cr. i. TO, eTO,iT_l, eT_1:
-loa ,a#,,i&+
$-n=1.1"
$a2=1000.03
14561=0.0"
eT_ l=",O+
a.=O. 1/0+
/=1.0064"
c=0.621!
e$%6l-$-=700.0"
TI!"=0+
1e'2p _ ci,e*_ / (46d-'6/y64844981#$
*e&%6cc%1(cc%6%:$)"
*e!33&%6adc6%o!*(all6analo;)"
1'e3c2p _ adc(4D"_ "5O"K _ INTEN456:
.e6adc6c/annel(1)"
"#ile (1) (
'a1o!=!ead6 adc ()"
y<='alo!.7000.0#104481-
l$T=bemp_limit!
eT=rT%&T:
-<=/=e<>-<1"
##l-$-!33e*$a2-$o % $-n-$o de con!ol
##-n-c-a11+ac-on 'a!-a/le*
##con*ane* del PID
II<e$%.a.UIa a alcan+a!
I#%e!-odo de la 'ena( )*+ alms
II)6d&.o CCP a $odo P()
##P&e!co A a&a~ (7ic)
I#!elo? con'e!-do! @D -n3e!no
IILec&!a por el canal 0
IILec&!a de la e$%e!ac&!a
Ilcon'e!*-6n a $A (0. /81' a /80,96
I#Calc&lo e**)*
l-calc&10 del e!$-no -ne;!al
161
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
dT..c (eT-eTO) ;
IJT.. iT+a*eT+dT,
if (uT>max) '{
//Calculo del termio deri!ati!o
//Calculo de la "alida PID
//#alida PID "i e" mayor $ue el MAX
uT-max; I
el"e {
if (uT%mi) (
uT-mi; I
//#allda PID "i e s meor $ue el NIN
//&uardar !aria'le"
cotrol-uTi
"et()*ml ducytcont cal i ,
iTO-+T,
eTO-I,T,
dela-(m"(lOO) ,
)
/ /Tra"ferecia de "al ida PID a "eilal PW/1
//Tiem)o de mue"treo
Figura 28. Programa del ejempJo S
La respuesta del sistema se muestra en la figura 29; si se reduce el tiempo de rnues
treo a J ms se reduce el sobreimpulso (figura 3!.
,.. 1I l T I '
.( r -,
""#
,...
!o ".
$%
# ,'
$I .
I
r$%
.....
$& $
-,
' ' (
.,.
r -,
$
)$$$*
.%.
& & ,
...
/
$$$
+$$
$ .
$( .( (
,$$
/
$$ $$$ $ $$$"
& ,'
1'
.%.. $
--
I
a ().1*+,
....
/
fi-iu.u%%"$
t ,'
....
ca../2( 0
$
$$$$$$$$ -
1---'
I-
1$( mt
t & l &
..
+%n%
/
M i n & O
+%
'
..
$!
t &
n.%
$$$
....
.-
'---
" .
##22+
.
.
Figura 29. 3espuesta con 1 $ t..ms
( /2
6. Modulo CCP - Comparador, Captura y PW M
,
". . ~..,
( ; i
. . . .
~
-
I
--
6'. 9
V
~ : : :
,e
/
I
~,:
".
/
i i
. . . .
/
i ~
. . . .
j
3"'0. 1243
: j
..
h:llMnnl
/
c:"S2. 151
...
IT=1......
I
Ma=1!!"
1":
,.
Min",n_
. . . .
/
# I
/
"'.
.. r. /
II
'j
,
. . . V
1""
....$ ~2;;. i;
~
%i &ura '!. ()*pu)*ta conT = 1ms
Eem!lo 6:Problenms en Lasimuiacian del mMulo CCP en modo PWM,con el ISIS "#i$%&
'( 16). Componentes ISIS: PIC16F876 lnsirumentos: !SCILL!SC!P",
Se h( *e+ec+(*o %n!'o,lem(, -%e !'on+o se'( 'es%e1+o !(' .(,/en+e', ene1 mo*%&
lo CCP +'(,((n*o enmo*o PWM .os 0(lo'es *el dutt# !%e*en i t *e 0 ( 1023 *(n&
*o %n( se'i(l mo*%l(*( *es*e ! + c(n el 0(lo' 0 ( 5 Vc(ne1 0(lo' 1023; !e'o enel
ISIS, ( !('+i' *el 0(lo' 900 l( se'i(l se con0ie'+e en%n( se#i(l c%(*'(*( c(n%n ,i do
*el 502y %n !e'io*o *o,le *el-%e +eni(. -. el eem!lo se o,se'0( es+e *e3ec+o.
()/ll0l
45l
4ll6
(ll'IP1I2I
454-
456
(i 3W P1C
457/89:
4/;##losom /1<1
4/li=10S1>//82
4/2>//81 ~'-- ...4
4/3/S/1"/S/.
4/?1S;l1So?
4/5/S00
(C65T6IC7
4/714@1:=
/8C11C9r40
/8C:1$597/I.IT
.. -. ----A. - M/.41B!!1=CB
M;l?D ;
4?11?D 1
$%&l%'&'$"F(
4?3/?D ~EEF
4?4/=;/G1
4?Hl?~
81/16#I7I
%i &ura '1, -j )mplo 6
163
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Fi gu r a 32. PWM c o n va l o r m e n o r d e !!
Figura33. rWM c o n valor m a y o r d e !!
1 6 4
linclude <16f876.h>
Ictuses XT,NOWDT
,use delay(clock-4000000)
~nc16 i;
void main (J (
setup_tle!_"(#"_$I%_&)'1,""4,l()
secup_ccpl (CCP_PwY,J,.
'o! ('*+)'<l0"4)l',)(
sec_pI':ml_duc(iJ!
delay_s("-()
)
6. M o d u l o C C P _ C o m p a r a d o r , C a p t u r a y P W M
I./0"*""4, 1p1*""2us
Ilcc/3 en =000 /h'
I/a $uty de PlfM
FIgu r a 34. P r o gr a m a d el eJem p l o 6
165
7. Transmisi6n serie
Capitulo 1
Transmision serie
7.1 Introducc;on
Los PIC utili zan, entre otros, dos modos de transmision en serie:
El puerto seriesincrono (SSP).
La interfaz de comunicaci6n serie (SO) 0receptor transmisor serie sincrono
asincrono uniersal (USART).
El SSP se suele utilizar en la comunicaci6n con otros microcontroladores 0can pe
rifericos! Las dos interfaces de tra"a#o son:
Interfaz sene de perifericos (SPI): desarrollada por $otorota para la cornu
nicaci6n entre microcontroladores de Ia misma, 0diferente, familia en modo
maestro%esclao: Full-duplex.
Interfaz Inter%Circuitos (FC): lnter!&az desarrol'ado por P(ilips, can una )ran
capacidad para comunicar microcontroladores y perifericos* Half-duplex.
L(!Iconfi)uracion USART (transmisor%receptor serie sincrono%asincrono uniersal),
tam"ien conocido como SCT (interfaz de comunicacion serie), permite la comunica
cion can un ordenador tra"a#ando en modo full-duplex asincrono 0Con perifericos
tra"a#ando en modo half-duplex. En )eneral, puede tra"a#ar de dos formas:
+sfncrono (full-duplex).
Sincrono (half-duplex).
Otros tipos de comunicacion soportados par los PIC son: J-Wire bus, UN (Local
I!er"#e"! Ne!$#r%), USB (Ui&ersal Serial Hus), el C+, (C#!r#ller Area Ne&#r%)
y '!here!,
167
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
7.2 E I m o d u l o U S AR T /S C I
7.2.1 rntroduccion
Algunos prc disponen del modulo de comunicacion serie USARTISCl, tal vez el
mas utilizado entre los modules de interfaz sene,
La principal funci6n del USART es la de transmitir 0 recibir datos en serie. Esta
operacion puede dividirse en dos categorias: sincrona 0asincrona. La transmision
sincrona uriliza una serial de reloj y una linea de datos, mientras que en la transmi
sion asincrona no se envia la serial de reloj, por 10 que el ernisor y el receptor deben
tener relojes con la misma frecuencia y fase, uando la distancia entre el emisor y
el receptor es pequefia se suele utilizer la rransmision slncrona, mientras que para
distancias ma!ores se utiliza la transmision asincrona,
El USART puede transmitir 0 recibir datos serie. "uede transferir trarnas de datos
de # 0 $ bits por transmision y detectar errores de transmision. %arnbien puede ge
nerar interrupdones cuando se produce una recepcion de datos 0 cuando la trans
miston &a sido completada.
Algunos "' tienen un USART direcdonable 0AUSART (Add1'eSnbleUSARD que
utiliza el noveno bit de datos para disringuir entre Ia reception de datos 0 de direc
cion. En algunos "' se &a mejorado el modulo USART dando lugar a1 EUSART 0
USART mejorado, el cual permite la deteccion automatica de baudios, el despertar
automatico al recibir la serial de sincronismo 0 la transmision del caracter B r eak de
1( bits, permitiendo su utilizacion en sistemas de redes de intercone)i6n local *bus
LJN).
+asicamente, 1atransrnision serie consiste en enviar los datos bit a bit a traves de
una linea cornun en periodos de tiempo fijos, dando lugar a ,a llamada velocidad
de rransrnision 0 numero de bits enviados p-%segundo *baudios.. %anto el ernisor
como el receptor poseen registros de desplazamiento para realizar la comunica
cion. Los bits estan codificados en NRZ *nivel alto: ', nivel bajo: 0., NRZI *cambio
de nivel: 1, sin cambio de nivel: 0., etc.
En e, modo sincrono se permite la transmision continua de datos y no e)iste un
limite de tamaiio, es un modo sem!d"ple# *la cornunicacion serie se establcce a tra
ves de una unica linea, en ambos sentidos, pero no se puede transferir informacion
en ambos sentidos de forma simultanea., En este modo de transmision se puede
trabajar de dos formes:
/ En modo 0aestro, donde el microcontrolador maestro genera la scfia1 de reloj
e inicia 0 finalize la comunicacion.
/ En modo Esclavo, donde el microcontrolador esclavo recibe la sefial de re,oj y
depende del rnicrocontrolador maestro para recibir 0 enviar informacion,
1!
7. T r a n s m i s i 6 n s e r i e
Datos
Reloj
Figura 1. Transmlsl6n sincrona
En el modo asincrono se emplean relojes tanto en el emisor como en el receptor.
Ambos relojes deben ser de iguaJ frecuenda y deben estar en Ease0sincronizados.
La frecuenda de reloj se aeuerda antes de la transmisi6n configurando la velocidad
miantras que Lasincronizacion se realiza durante Latransmision. Cada trama de
datos tiene lID tamafio fijoy poseen un bit initial 0de arranque (start) y un bit final
o de parada (stop) que permiten realizar dicha sincronizacion La transmision es
en modo full-duplex !se utilizan dos lineas. una transmisora -TX- y otra receptor a
"#$" transfiriendo informacion en ambos sentidos% se puede transmitir y recibir
informaci6n de forma simultanea&
Bit start Bit stop
' I ( I I I I I I I I ' ' , _ _ _ _ I
Figura 2. Transmlsl6n asincrona
El modo mas habitual de transmision par e' USART es e' modo asincrono pues)
to que permite comunicaciones en largas distancias. E*isten distintas normas de
transmision serie asincrona como LaRS232, la #+,-. etc. Los niveles de tensi6n
empleados en estas normas son diferentes al empleado par el /0C /or ello suele
ser necesaria la utilizacion de circuiros e*temos de adaptacion
Los terminales utilizados en el modulo USART son el RC6ffX1CK y el #C7' #$' 12%
3 En el modo sincrono maestro el pin #C6rr$lC4 se utiliza como seftal de reloj
!de salida& yel RC71RX1DT como linea de datos a enviar ( recibir.
3 En el modo sincrono esdavo el pin RC6fIXJCK se utilize como sefial de reloj
!de entrada& y el RC7/RXlDT como linea de datos a enviar ( recibir.
3 En el modo asincrono el pin RC6/TX/CK se utiliza como terminalde transmi)
sion de datos y el#C75#$012 como terminal de recepoon de datos.
Los registros asociadas a6 modulo USARTISCT son%
3 +/7#8% 8enerador del ratio de baudios.
3 2$+2A% Estado de transmisi6n y control.
16 9
Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC
RCSTA: Estado de recepcion y control.
TXREG: Registro de datos de transmisi6n.
RCREG: Registro de datos de recepcion.
pml: Flag de internrpcion.
PIE1: Hailitacion de !ainterr"pcion.
Registro TXSTA (direcclon RAM: 98hJ (PIC16F87x1
RI#$ RI#%&' RI#%&' RI#..&'
"( o
RI#%&' RI#%&'
I CSRC I TXEN I SYNC I SRGH I TRMT I TX9
)lt* Sit+
it 6:
!i"ura #$ E%re"istro TXST&
CSRC: )it de seleccion de la ,"ente de relo-.
En modo asincrono no inter.iene.
En modo sincrono:
1/ 0odo maestro &genera se,ial de relo- mediante )RG'.
1/ 0odo escla.o '(uente de relo- e2terior'.
TX3: )it de 4ailitacion de la transmision de 3 its:
1)Transmision de 3 its.
1/ Transmision de 5 its.
it *:
itS: TXE6: )it de 4ailitacion de la transmision:
1)Transmision 4ailitada
1/ Transmision des4ailitada.
1 )Transmision sincrona.
o )Transmision as,ncrona.
it 7: S86C: )it de seleccion del modo del USART:
it 9:
it ::
6o implementado. Se lee como +.
)RGH: )it de seleccion del .alor de a"dios.
0odo asincrono:
1 / Alta .elocidad.
o ))a-a .elocidad.
6o se "tili;a en el modo sincrono.
1*1
Z. Trarr||or er|e
bit 1: TRMT: Bit de estado del registro TSR:
4=TSR vacio.
o =TSR !leno.
bit 0: TX9D: 9 bit de datos transmitidos. Puede ser el bit de paridad.
. .. .' T- - - - 4' 4
!
,TX9=4 4b|t ;
. --- .- ------------ ---!
F|gura 4. Equera de proceo de trarr||or
"# USART puede con$igurarse para transmitir % 0 9 bit de datos con$igurando el
bit TX9 del registro TX&T'. &i se utili(a el )ormato de 9 bits* el novena bit debe
colocarse en el bit TX9D del registro TX&T' antes de escribir los % bit en el registro
TXR"+. ,na ve( estan todos los bits en dic-o registro* son trans$eridos alregistro
de despla(amiento de transmision .T&R/. Desde alli son transmitidos al cido de
relo0 por el pin TX comen(ando por el bit de start y terminando por el bit de stop.
1 7 1
F|gura 5. 4ervfo de la t.rara
Registro RCSTAfdireccion RAM: 18b) [pIC16F87xl
R$1.2
R$134 R$134 R$134 R.0 R.0
SPEN l RX9 l SREN l CREN lOERR l RX9D
BitT Bil4
bit 5:
F|gura 6~."6 reg|t.ro RCSTA
&P"7: Bit de -abilitacion del puerto serie.
1 =8abilitado (RXlDT 9TXl:; como puerto serie/.
0< Des-abilitado.
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n l r o l a d o r e s P I C
bit 6: RX9: Bit de habilitad6n de la recepcion de 9 bits.
J =Recepd6n de 9 bits.
o =Recepd6n de 8bits.
bitS: SREN: Bit de habilltaci6n de recepci6n sincrona.
No utilizado en modo asincrono.
Modo sincrono:
1=Recepci6n unica habilitada
!" #eshabilitada. $%e pone a ! despues de una recepci6n
completa&.
'REN: Bit de habilitacion de recepcion continua.
Modo asincrono:
1" (abilitada.
!" #eshabilitada.
Modo sincrono:
1 " (abilitada hasta )ue e1bit 'REN es puesto a *.
!" #eshabilitada.
bit +:
bit ,: No implementado. Se lee como *.
bit -: .ERR: Bit de error de trama.
1=Error $Se actualiza alleer R'RE/&.
o "No error.
bit 1: *ERR: Bit de error de ooerrrun.
1 ==Error $Sepone a ! si 'REN es !&.
*"No error.
bit !: RX9#: 9 bit de datos transmitido
pin REGISTRO DE DESPLAZAMIENTO DE ENTRADA
I
1 bit
8 bit
~ : I,
, " 9<............
00
r0000
f \
j
j
j
I RX9D I
; !f f "#
!
!.
;
,
u::
RX9=$
R%REG
t&
............. 0...000101 ..0
Figura 1. EI esquema del proceso de la recepcion de datos
172
1 . T r a n s m i s i o n s e r i e
El USART pue de co n fi gur a r s e pa r a r e ci bi r 8 09 bi t co n fi gur a n do e l bi t RX9 de l
r e gi s tr o RCST A. De s pue s de 1 a de te cci o n de l bi t de start, lo s 8 09 bi ts e n tr a n te s
por e l pi ll RX s o n de s pla za do s p! e l r e gi s tr o de de s pla za m i e n to de e n tr a da "RSR#
un o a un o . De s pue s de $ue e l %lti m o bi t &a s i do de s pla za do de n tr o ' e l bi t de stop
e s te s te a do y e l da ta "e l pa $ue te de bi ts # e s tr a n s fe r i do a un bllffer e l cua l' a s u (e z'
1 0tr a n s fi e r e al r e gi s tr o RCRE) s i e s ta (a do . El buffer y e l r e gi s tr o RCRE) fo r m a n
*i lla +!+ de do s e le m e n to s "e l pr i m e r da to $ue e n tr a e s e l pr i m e r da to $ue s a le #. En
e i ca s o de tr a n s m i s i o n de 9 bi t' el n o (e n o bi t pa s a la bi t RX9D de l r e gi s tr o RCST A
de l m i s m o m o do $ue lo s o tr o s 8 pa s a n a l r e gi s tr o RCE).
Algun o s di s po s i ti (o s ti e n e n un USART m o di fi ca da ' !la m a do A%SART 0USART
direccionabie, $ue pe r m i te fi ltr a r a uto r n a ti ca m e n te ci e r ta s tr a n s m i s i o n e s . *o s da to s
r e ci bi do s s o n s e pa r a do s e n do s ca te go r i a s ' di r e cdo n y da to s ' $ue s e i n di ca n po r
el n o (e n o bi t. So lo lo s b,te s de di r e cci o n s o n pr o ce s a do s po r e l USART, lo s da to s
s o n i gn o r a do s . Es te e c&o s e uti li za n o r m a lm e n ts cua n do &a , (a r i o s di s po s i ti (o s e n
un bus y la s tr a n s m i s i o n e s s e di r e cci o n a n a un o e n co n cr e to . *o s di s po s i ti (o s $ue
r e ci be n !a tr a n s m i s lo n i gn o r a n to do s lo s b,te s de da to s co n e l n o (e n o bit a 0y s o lo
r e ci be n lo s b,te s de di r e cci o n co n e l n o (e n o bi t a 1 . Cua n do s e r e ci be e l b,te de di -
r e cci o n y co i n ci de ' e l di s po s i ti (e pue de pa s a r a r e ce pci .n n o r m a l y r e ci bi r e l r e s to
de lo s da to s . Ene s te ti po de di s po s i ti (o s e l bi t / de l RCST A e s 0
1 12
bi t 20
ADDE30 4i t de &a bi li ta ci o n de de te cci o n de di r e cci o n
l56a bi li ta da "7.1 0s i RX9=1)
58De s &a bi li ta da
~REGISTRO DEDESPLAZAMIENTO DE ENTRADAI
t i l
ADDEN=1
RX9=1 I TEST I '9909a solo si 1
i 0:
.
. . . . . . . . . . .

! "i t
ttl
1 bi t
.

.
.

#~
....

$%&&e'
0
!*
RX9D R(REG
%) )
* +
,i -%'a !. Es.%e/a 0el 1'o2eso 0e 'e2e12i 3n en los A4SART
Registro SPBRG(0x99, [PIC16F87x1
*a (e lo ci da d de ccm un i ca ci o n s e co n tr o la pa r e l (a lo r ca r ga do e n e s te r e gi s tr o .
)e n e r a e l r e lo ; $ue pe r m i te 1 a co m un i ca ci o n . *a (e lo dda d s e e <pr e s a e n ba udi o s
"bi t=s #.
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
En modo asincrono:
BRGH=O(baja velocidad)
BAUD/OS = lose
64 (SPBRG + I)
BRGH=l(alta velocidad)
BAUD/OS = lose
16 (SPBRG + I)
En modo sfncrono:
BAUDIOS = lose
4 (SPBRG +I)
Siempre hay qe considerar n mar!en de error"
7.2.2 EI modulo USARTen C
#onfi!raci$n !enerics del USART:
%&SE RS'(' (opciones)
Esta directive permite confi!rar varies parametres del USART: velocidad de trans)
rnisi$n* pins tili+ados* etc" Se pede modificar en calqier parte del pro!ram a
pero siernpre despes de habet definido la directiva ::USE DELAY. Esta directive
habi,ita el so de fnciones tales como GTCH, PUTCHAR Y PRINTF. -ermite s
so en dispositivos qe no poseen modlo USART mediante soft.are UART.
#ando se tili+an dispositivos con USART, si no se pede alcan+ar na tasa de
badios dentro del ~%del valor deseado tili+ando la frecencia de reloj actal* se
!enerara n error"
!U"=# /elocidad en Badios"
0123=pin -in de transmisi$n"
R#/=pin -in de recepcion"
&sa n soft.are UART soft.are en l!ar del hard4
5OR#E6S7 .are an cando se especifican los pines del hard4
.are"
RES38R36793
Haee qe la fncion GETC(! pon!a a cero el 793
mientras espera n caracter"
R$%&'(
-ermite velocidades de transmision bajas en chips
qe tienen problemas de transmisi$n"
&)*
7. T r a n s m i s l o n s e r i e
ENABLE=pin
El pin especificado estara a nivel alto durante la
transmtsion. Utilizado en transmision 485.
Permite depuraci6n a traves del JCD. EI pin por de-
DEBUGGER fecto es el B3; usar XMJT y RCV para camiar e! pin
"dee ser el mismo en amos#.
RESTART _ WDT
Provoca $ue la funci6n GETCO orre el WDT si es-
pera un caracter.
Invierte la polaridad de los pines serie "normalmen-
INVERT
tc no es necesario con e! convertidor de nivel% como
el &'()3)#. *o puede usarse con el USART inter-
no.
PARITY=X +onde (es *% E% u ,.
BITS=X
+onde (es 5-- "no puede usarse 5-7 con el USART
interne#.
FLOAT_HIGH .e utiliza para las salidas de colector aierto.
Indica al compilador $ue /uarde los errores recii-
ERRORS dos en la variale RS232_RRORS para restalecer-
L o s cuando se producen.
*o se puede utilizar con USART interne. Provo-
SAMPLE_EARLY ca $ue el muestreo del dato a traves de la funci6n
GETC() se realice a0principle de un it de tiernpo.
Para FLOAT_HIGH 1 MULTI_MASTER, este pin se
RETURN=pin
usa para leer la serial de retorno. Por defecto% para
FLOAT_HIG! I es XMJT y para MULT/_MASTER es
234.
Usa el pin de RETURN para determinar si otro mas-
ter en el us esta transmitiendo al misrno tiempo. .i
se detecta una colislon% el it 6 se pone a 0en RS232_
MULTI_MASTER E22,2.5todos los posi!es PUTCO son i/norados
6asta $ue el it 6 este a ,. 7a sefial es comproada
al final y a! principle de cada it de tiempo. *o se
puede utilizer con USART interne.
LONG_DATA
Permite mane8ar INT16 a las funciones 9E:3"# y
PUTCO. En formatos de datos de - its.
Provoca la des6ailitacion de interrupciones cuan-
OISABLE_INTS do se e8ecuta GETCO y PUTCO evitando distorsio-
nes en los datos.
175
Com pilador C CCS Y Sim ulador PROTEUS para M icrocontroladores PIC
STOP=x Numero de bits de stop (por defecto 1)
Para establecer el tiempo que GETC() espera un ca-
TIMEOT=x racter (en ms)! Si no se recibe caracter en este tiem-
po" elRS232_ERRORS se pone a O!
Pro#oca una linea RS232 en modo escla#o sincro-
S$N%&S'()E
no" *aciendo la patilla de recepcion como entrada
de relo+ y la de transmision como entrada,salida de
datos!
Pro#oca una linea RS232 en modo maestro sincrono"
S$N%&M(STE- *aciendo la patilla de recepcion como salida de relo.
y la de transmision como entrada,salida de datos!
Pro#oca una linea RS232 en modo maestro sincrono
S$N%&M(TE-&%ONT
en modo continuo" *aciendo la patilla de recepcion
como salida de relo. yla de transmision como entra-
da,salida de datos!
(-Tl %onfi/urar el 0MlT 1 -%) para el USART1.
(-T2
%onfi/ura3 el 0MIT $-e) para el USART2.
case 0 ser_uart_speed(2400); break;
case 1 set:_uart_speed(4800) ; break;
case 2 set_uarc_speed(960D); rea!;
case 3 set:_uarr_speed(l920Q); rea!;
E.emplos4
#use delay (clock=2000000);
#-use rs232 (BACJD=9600, XMIT=PIN_C6 , RCV=PIN_C7 , BITS=8)
#use rs232 (BAUD=9600 , XMIT=PLN_A2 , RCV=PLN_A3)
setup&uart(baud)
audes una constante que define la #elocidad! n 1 enciende el USART y un 5 15
apa/a! %on cualquier #alor de #elocidad" el S(-T se enciende! En dispositi#os
que utili6an AUSART se admiten los si/uientes parametres4
(-T&(77-ESS (-T4 solo acepta datos con elno#eno bit a 1!
(-T&7(T( (-T4 acepta todos los datos!
set&uart &&speed (baud)
Identica a la funcion anterior!
"" se establece la #e$%c$dad &ed$a'te la combinacL6n de las pat$l1.as 80 y 81
s($ tc'( $'put_ () .. 3 )
189
7. transmtslen serie
Transmision de datos:
putc (cdata)
putchar (cdata)
cdaia es un caracter de 8 bits. Esta funcion envia un caracter mediante la patiUa
XMIT. La directiva #US RS232 debe situarse siempre antes de utilizar esta fun
cion.
puts (strin!)
string: cadena de caracteres constante "matriz de caracteres terminada con un #.
La funcion putst) rnanda los caracteres de la cadena$ uno a uno$ a traves del bus
RS-232 utilizando la funcion PUTCO; detras de la cadena envia un RETURN (13) Y
un retorno de carro (%").
printf (fname$ cstrin!$ values ...)
cstring: es una cadena de caracteres (constante) "matriz de caracteres terminada
con un #.
!IW/IIe: las funciones a utilizar para escribir la cadena indicada& por defecto se utiliza
Is funcion PUTCO, 'ue perrnite escribir en el bus RS-232.
v a l ues: valores a incluir en la cadena separados por comas& se debe indicar (nt. EI
forma to es (nt$ donde n es opcional y puede ser:
%)* para espccificar cuantos caracteres deben ser especificados&
"%)"* para indicar la cantidad de ceros ala iz'uierda&
1.1 - *.* para coma flotante.
t puede indicar:
177
c +aracter.
s +adena "caracter.
u Entero sin si!no$
d Entero con si!no.
Lu Entero lar!o sin si!no.
Ld Entero lar!o con si!no.
, Entero he,adecimal (minuscules)$
X Entero he,adecimal (rna-usculas).
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Lx Entero largo hexadecimal (rninusculas).
LX Entero largo hexadecimal (mayUsculas).
f Flotante con truncado,
g Flotante con redondeo.
e Flotante en formato exponencial.
w
Entero sin signo con decimales insertados. La Ii cifra indica e 1 total, la 2
el mrmero de decirnales.
!ecepcion de datos"
#al ue$getc%
#alue$getch%
#alue$getchar%
tmlue es un caracter de & 'its. Espera reci'ir un caracrer por la linea RS-232 y de(
#uel#e su #alor. Enlos dispositi#os con USART interne, se pueden almacenar hasta
tres caracteres) para e#itar esperas se puede usarla funcion KBHlT().
#alor =*'hit%
taler es + (FALSE) si GETCO de'e esperar a ,ue llegue un caracter" - (TRUE) si ya
hay un caracter listo para ser Iefdo por la funcionGETC().
E.emplo -" Enoiar los datosdel + allO, en modoaslncrono, entre dosPC. !is"ali#ar con
un LCD los datos enuiados $ los datos recibidos; la recepcion del data debera ser par inter
rupcion del USART. (#er figura 1 0). Componenies ISIS: PCl%F&'% $ L()*%L. lnsiru
mentes: +RTUAL TER(,AL.
ilinclude -l%r&'../0
#FUSES JIT,NOWDT
luse delay(clock=4000000)
fuse s!"!(#aud=$%00, 1mic234n5c%, rc6234n5c')
#include &'(D)(*
+oid ,ain () (
inc #a/.or)
lcd-ini&. ()/
01ile (l) (
7or (6a*.or2)86alor-2*)86alor9:99)
rurcte ior) 8
178
7. T r a n s m i s i o n s e r l e
print[ (lcd_pute, " I fenviando-%lD", VALOR);
delay_m (!"");
}
Fi gur a 9. Pr o gr a m a PIC_1de ' e je m pl o 1
AI ha n um e r i c LCD
r;::=~~~===illCO'
e n v i a n do =9 LMO'I I .
MO'ANO
~A1'AH'
FlA:)JAN?NPH
A!IA"l "#F ..
$$A%$l &Cl o
_ A ~
e-evec
:~~~'T
, Ii'iWWppl'l1lV
R AO/ N f J
:;~~~lVre
R .UJ .N l~Ft
R AAllOOK I
MlI'N~
AI ha n um e r i c LCD
r;::=====:::;==;llC02
I '(e c.i )i e n do =9 CO',I I a,
~~~ ~lw SoSS!!!
I I " O"#$
FIgur a 1*. #I e +e m pl o 1
#inelude $%&'()&*+,
-./0121 34,5O6D4
#ue delay(eloc789"""""")
#ue rs232(:aud-;&"", <mit=pin_c&, rcv-pin_c), :it->)
/include $L?D*?,
#>@42 4Rl1A-O3(!
179
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
IBYTE PORTA=OX05
ine valor;
~_nt_RDA
RDA_isr()
(
vaior=GE!I'C();
void main()
bit_lear(TR!!A"O);
lcd_init ();
en#Ie_ine$r%&#'(I(T_R)A);
en#ble_interr%&t'(G$OBA$);
*or (;;) (
l+_,oto-.(l"l);
printf (lcd_pul:C,"recibierrdo=%]J)",valor) ;
Fi gu r a 12. Vi r t u a l T e r m i n a l
Fi gu r a ' 1. P r o gr a m a P I C 2 d e l e !e m p l o "
Con el programa VIRTUAL TERMINAL (boton derecho: Hex disla! mode) se pue
den visualizar los datos del bus serie (figura 12).
#.2.$ %a n o r m a R S 2$2
La norma R"#$# es Ia mas habitual en 1a comunicacion serie, Basicamente cornu
nica un equipo terminal de datos (DIE a Data Terminal Equipment) y el equipo de
comunicacion de datos (D%E a Data %ontm&nications E'&iment)(
Las caracteristicas electricas de la sefial en esta norma establecen que 1a Iongitud
maxima entre el DTE el D%E no debe ser superior a los 1! metros 1avelocidad
maxima de transmision es de "#$### bps$ Los niveles Iogicos no son compatibles
1&'
7. Transmisilin sene
ITL, deben situarse dentro de los siguientes rangos: Llogico entre -3V y -15V Y0
logico entre +3Vy +15\1. Se utilizan conectores de 25 patillas (DB25) 0 de patillas
(DB) siendo asignado el conector !ac"o al DTE Yel conector "e!bra a1DCE.
#ara una co!unica cion full duplex desde el USART del prc, se debe conectar un
!$ni!o nu!ero de se$iales% &'( y )'D asi co!o la !asa (*+,)- Los #./ utilizan
se$ial TTL en el !odulo USART por 10 0ue se debe utilizar un con1ersor de ni1el a
RS232, co!o el MAX232.
NIVElES TTL ..... __ ...
2igura3 3- /one4ion basica $u, duple4 entre #./5 #/
6n .a !a5oria de los #/ actuales% sobre todo ellos porta tiles% estan desapareciendo
los puertos serie- /o!o solucion se pueden utilizar cables de con1ersion SERlE
USB 0ue utilizan el Unioersal Serial Port (USB, no se debe con$undir con la utiliza7
cion del !odulo USB integrado en el #./ can gestion de co!unicacion USB (1er
la $igura 18)-
2.gura 38- Dl$erencla entre un con1ertidor serie-usb 5 un !(dulo ,SBintegrado
6stos cables (1er .a $igura 15) se basan en integrados co!o el !T232BM de 2ill.
c"ip ($igura 19) ("ttp#$$%%%&tdi'"ip.'a(fProdu'ts$!T232BM.""n. 6n .a propia )e*
del $abricante se pueden encontrar los dri+ers para la con$iguracion de %indoioe
($igura 17) 5 los dise$ios de un siste!a de con1ersion SER,E-USB.
BUS USB
BUS USB
PI
!ISP"SITIV"
INTE#$%&
SE#'E(USB BUS
SE#lE
I
)*+,l* I
USB
PI
1:1
Com pilador C CCS y Sim ulador PRO TEUSpara M icrocontroladores PIC
Figura 15. Cable SERlE-USB
Figura 16. FT232BM
-JO )(
.!!I Adoo!do" .....# 11.
$%!" do$od
y ' Adoi>t!
. . . . . A d d : o d o I ' t J ~
&'l%
$ %%or" .!" do(.)*o." " " " $&"
$ !+C,drolador .. 1-lEAlA.AT" &"
$ .!+Cor*$....$... ./ .%
" J%do(.." .$$.
I .$%.$l0oodo!
" ! " " 1 22 o!do1OO-do. 0-deo % &3# # 4
#!lEllUl$'
2 .. --MO-1 -o-Sol" *-5--4AU" "
.o!.),~
!!d'-"
I )" $!6o$o78l!" " $JCilo-odor ..
- ..-51Je" (C%-l*l5)
.6!odo %%%%%' (COM&)
:I5u9l:il,,ll'!*)-.'-(;l&--)
lot ! 7..&" Po&t (CO-&1S)
$ .ulee" " " "
$ ..J i.l'>dodos do d' c>l
$ " 3$$%dedi<.el.
Figura 1=. U>i?er7al Serial 5or
B l / S T S del PROT EUS @ro@or8io>a u> @oe>e 8or>@o>e>e <ue @erAie la 7iAulaB
8io> a ra?e7 del @uero 7erieC COMPIM (,igura 1D).
182
7. Transmisi6n serle
o E.RRCR 0
COMPIM
FIgura 18. 1componente COMPIM
Utilizando este componente no es necesario aiiadir al esquema del PICun MAX232,
ya que el propio components gestiona la comunicacion con el puerto del PC, Utili
zando este componente podemos cornunicarnos con el propio PC si tiene ! puer
tos serie "1puerto seriey un puerto USB #utilizando el con$ertidor# como pode
mos $er en la %igura 1&' y rnane(ar los datos que proceden del PIC con cualquier
programa de aplicacion (Visual BAS1C, visua! C, etc.'.
COM1
COM2
CABLE SERlE
EMBRA!EMBRA
CABLE
EMBRA!EMBRA
" #SB!SERlE
Figura 1&. )as cone*lones serle#serle 0serle#us+
18,
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
La configuraci6n del puerto se realiza como en cualquier componente y se pueden
cambiar practicamente todas las propiedades de un puerto serie: ruimero de puer
to, velocidad, paridad, runnero de bits, etc. (ver la figura 20).
!"er#e$
pj
CoMponent %&'e:
c a MP tI - !
V S M MQ d eI
( i:) #* pon:
c ol on
+.oud&.
r, r
P hyl ic a l O! l l a 8~o:
"+
~P a rl t;r.
HONE
-.+#lod/at.:
2$%00
V irtua l 00.Bitc ! 8
V irt"ra l P ~;
tlml1
#I $I e%l
& #e%l
& #l Cl e%'
2 3lde&l
$$4:$$$$$$. t3ide&l
& #(%i
- . . . . --
3ide&l
2 3* de&l
)o..d e ho(~*++*l a ,-on
)d .l ehOl l l P CS ! .~
lol 5l6* #* 7"89ml) #ld
Fi gu r a 20. C o n i gu r a c i o n C O M P I M
Ejemplo 2: loo|ar |os ca|os ce ooa coovers|oo !l a| oer|o ser|e ce I l l ! IC (figura 28).
Caoooeo|es 8:8:: I1CIoIo COMIlM IO1LlN LMOloL. h|s|rooeo|os. ;< JOL-
1Ml1lR JlR1U!L 1lRMlN!L.
5ara probar este e=emplo se pueden utilizar dos 5< 0un 5< can dos puertos serie 0
un 5< con un puerto serie y un puerto US8 (utilizando un cable SlRll-US8;.
5ara observar los datos que envia el 5* < se utiliza un COMIlM y tambien se puede
utilizar un COMI|M para leer los datos que entran por el5<o, eneste caso, utilizar
e|hver1ero|||o| de F|ocos 0 cualquier otro program a emulador del puerto serie.
5ar el J|r|oa| 1ero|oa| se pueden comprobar los datos de salida y entrada. 1n este
caso se >an conectado los dos puertos serie del 5< (COMI y COM2 con un cable).
?e puede utilizar el hver1ero|oa| de F|ocos (!ccesor|os/Coooo|cac|ooes/hver1er-
o|oa|; configurandolo segun las siguientes figuras: figura 2@, figura 2%, figura 2:,
figura 26 y la figura 2A. 1n este caso se >an conectado el puerto COM| del 5< Bun
US8 configurado en <6C6.
184
Figura 21. EIejemplo 2
Figura 22. Virtual Terminal de salida (COM 1) Yentrada (COM2): las pantallas son Identicas
E:crilaLlflra;ob~y-8a~IC'QI'IOPllq-fa~
NolIi::
EJMI'l.ll ~
lcaa
Figura 23. EInombre de la coneJ!n
1"#
0 c p | | a a c | 0 0 0 8 ] 8 | a | a a c | P R 0 T C u 8p a | a | | c | c c c r | | c | a a c | e s P l 0
~ C JC | P L02
C6tigo de .| e a
c a a
, c r e
(!e a !wa r a c . C O M 1
~ l r n ~ M ~ 1 r - - - - - - - - - - - - - ~
CO M Z
l | | .
Figura 24. La seteeeten del puerto (CO M ' en el PRO TEUS] CO M 6 en el HperTer!inall
"#p$o %% r n . _
Figura 2&. 'a $on(igura$ion del puerto
C 0 l a Xl Ve | )*i)t)n+,t t(.-dor..
tiU,'l'. / CO )0 ,1 2 $n
-..
%dar
3di.'a!o.
0 "l | p f| !'.!0 !,..
.
C+2 . % 1 . g
Figura 26. E) $o!ando / r$#i4o5Propiedades para !odi(i$ar fa 4isua*i6a$lon
0 76
7. T r a n s m i s i o n s e r i e
187
Conocl.. Ccrill)l.r~
_.."''''''''''I
Itdlnllll''''''''''
.~"-:I.I'I'I~~?1'n,j = E"",""oe"I1i9o!C!OI"IPt:~:hljne&
Cl~.H Supo CJMI.E .... " (I~.a w ..... 1! " ... """" ..... "'#
$: ~~%&'jM'!ll(ClCl)&%%li""l~
InleI7ttf.-~elel ~-CCJit'IoASOI )te 7 b i b
'" AjUll!l' Iln e O}4'& rot.!petd'l. aneho de tem w : aI
Fr gur a 27 . Act;var ~Agr e ga r a va n ce de IIn e a ...
Sil*ol l&+ e = $.,9*
-11 *olt&ll'! = $. ,9*
5 *ol t"' ....= 2.49V
S.'Iollll/e 2.49V
-11 *olt &0e ~ $.'19*
Sll *olt&0e = $.,9/
Stl *oll&0e 2 $# ,9*
-11 *olt.! 9 3 $.,9*
-11*olt&oe 3 $.,9*
! " # $ *ollo0e = $.,9*
... 1 *oll.0e = $.,9*
-11 *ol I# lie 3 2.49V
S11 *ol t&SI4 $.,9*
Fi gur a $5. 6& s i m ula clo n e n tr e PROT !"y e l P#ut$li %a n do e l &'(e r T e r m ln a l
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
linclude <16F877.h>
JdeviCii! adc:lO
ffFUSES XT, NOWDT
luse delay(clock=400000D)
luse rs232(aud=!6DD, "#$%=&$'(c6, rc)=&*'(c7, +rs=8, &ar$cy=,)
#~nclude <*-..->
void main()
l'/6 01
float p
!etup"adc"po#t! (2,D)1
se%u&(adc(2D-(-*.-3(4,T56,2*)1
lcd( ini t();
fo# () (
se%( adc"c$annel (0)1
de1ay(us(10) 1
g =read(ade()1
p= 7.0 w q / 1024.0.
p#in tf(lcd"putc% &'f(De = )&*d&% +)
&r$'%8(lcd(&u%c, 9:';ol%.30e = ,Ol-.f/&% p)
p#in#f(&(DC : -%4.ld .. , +)
p#incf(&/olta0e = ~12-.f/'#&% p) 33 \r pe#mi)ce camhiar de l~nea-
delay(#s(100)1
}
Figura 29.E. programa de. ejemp.o 2
Ejemplo 3: Enuiar 1111 dnto desde el PC al PIC pOl' el puerto serie. Cuando 21reciba debe vi
suali!arlo en uu "C# $ enuiar In paiabra %recibido% al Pc. E&plear interrupciones (figura
'(). Co&ponenies I)I)* PICl+,-.+, CO/PI/ 0 "/1(+".
linclude <17F876.h>
<F/=5= XT,,.>DT
<use delay(clock=4000000)
?use rs232 (auc@=!600, "#$%9AB$'(c6, rc+$'(c7, 1%s=8, &ar$%Cy=,)
#include <*-D. C>
cnes* C2I
lint"#da
)o$d !e#i~l"i!#() (
c23ae4cner ();
&ur1s(9+ec$$dD9)1
188
void main()
7. Transmision serie
J cd_wit ()r
enable_incerrupts(global);
ellable_incerrupts (int_rda) ;
whiLetl ) ,
printf(lcd put:c, "\n\r Valor 8c",ch);
)
Figura 30. 1programa del ejemplo 3
nU l
OI>C"CUltl
lIl!Q.""" ..~
osel AKOU T "". 12
Al phanumeric LCD
MeIJI_'
" '"
~
I
!
I I
AAIl IAl Il _
"
# $ A'! I'l III
"
M."... N7OI!. %&I.ror%'
"
U a l o r
~"!".Nl!!~ #$7.!Fm
.o% o& .& l
""'.'..'(( """!)rl~"*!"
i
~!!"
ili ## +011i!a,l-i
itt*~r!O,.CC/0
( .
)C.*cc+,
,~
1
,~
I~J~I'I" # " ---
'l Ca./0i$ Al 1.
)
""""2 O
t3)J ~
2cT~
/!IC~t4"m
OIO)IA')C
+,
).
I
" 3
"!""
To
" " " " T S
! 4 .!
~ '5
*5
o% .
)I
5" " 5
6~% 7lr8lr"& ili% ",CII .' I6D~
Figura 31. 5I ejemplo 3
" 7I" " " 8CII
101 9n:i .. l i; do I# n ... ccn ,551 !0!....'.1del inea
o5& *odeloo""!a& !eI ... 9lo:a"!).
Figura 30.Co% 7igura& lo% del -;per<erml% al para
5% =iarj#e& i>ir
)_1o1.l r~ 5
#~I?dod.
& !I!"tIe!6
'>J'7d!.",O
l ~l "gtegl.. ;Ol!Cede@% eul7llal ere oat*i411% u Ildttda
o101+"''9 & ~ ere('.o>Joto""""' ",OI de 1~
63~I II" . . 2ue t& >I.p.r.e% .o7 9@odo~
1+A
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
F l _
~
' "
D~ ~ d U l l !ilia .. +,.," ,.i !I C ...
r .."
r J ~r a
[,
~~
" " ,,~
Ar \tM ~ .... u.... l'.:o'o!>olf ~
"~ # n1!J ~
..
' " ..
Rocibldo
r ,
o iW r i\!ii ,_
lRecibido
I i 1~t'~r .'1J1I I
!Rec"buJo
~ I f\'#JI I $',u" 'tfll.Al.
%"$ll$
I , &. lloltli&
JRftcibido
$ I ..%%$%&t " ~.,$..'c:':::"'l~
I " "
U ' ~I #
11 .. :( ' ~r
" ' < m
( i
..,..~en
!Recilndo
( t.tI JI iI )*.e~r
E ' . ." . . . .
t.. M'.+~,i-J".R
~I !ecibldo
.J/
~ ~t l ~~
i
i i i ' ~lUW
i
" " " " " " '"
(
)
#lJ%lI r
a ~'11
o
r
*
l'\
( .:t:
01
+%
~.~
[::
,\ .(
,
2 .,$##$
3
I i
( ( I ',
~~r !i .%" * l I " -" " ~
..(
$....,
i:"
i i
(
%
!
~..
c ~( ,. ,
,
o 14" '..... .5't .. _ 'oco .... " ' ./n 01.' I ... c. 611'"
,.,.7 I I i!
' ~%' %' $%' " ' ,~~~ ~. ~. " ( .
2i 3u r a 44. C o m u n ' c a c l 5n * u l l d u p l e 6 c o n e l P C
7.3 Puerto serie sincrono (SSP)
&o* do* 8odo* de tr aba+o *on:
3 I nter fa9 *er ie de 'er ifer ico* (S P T ): $e*ar r ollada 'or Motor ota 'ar a la cor nu:
nicaci;n entr e 8icr ocontr olador e* de la 8i*8a 7difer ente fa8ilia en 8odo
8ae*tr o( e*cla<o. F ul l -dupl ex.
3 I nter fa9 I nter ( 0ir cuito* (FC): lnter fa9 dc*ar r ollado 'or #=ili'*, con 7 r an ca'a:
cidad 'ar a co8unicar r nicr ocontr oledor e* y 'er ifer ico*. Hal f-dupl ex.
7.3.1 Interfaz InterCircuitos (J2CJ
>I bu* PC *e ba*a en la cor nunicacion a tr a<e* de ! =ilo*. 0ada di*'o*iti<e co:
nectado al bu* tiene una dir ecd;n. #uede confi7 ur ar *e co8o co8unicacion de un
8ae*tr o ? <ar ie* e*cla<o* 4 una confi7 ur aci;n Ml l l tim aestro. >n a8ba* confi7 ur a:
cione*, el di*'o*iti<o 8ae*tr o es el @ue tiene la iniciati<a en la tr an*fer encia, decide
con @uien se r eali9a, el *entido de la 8i*8a ,en<io 4 r ece'ci;n de*de eJ 'unto de
<i*ta del 8ae*tr o6 y cuando finali9e. 0uando el 8ae*tr o inicia una co8unicacion,
'r i8er o tr an*8ite la dir eccion del di*'o*iti<o con el cual *c @uier e co8unicar y lo*
e*cla<o* co8'r ueban *i la dir ecci;n concuer da con la *u?a. &a tr an*8i*ion 'uede
1A4
7. Transmisi6n serie
ser de lectura 0escritura, el ultimo bit de la direction 10indica; asi el maestro estara
en transmision y cl esc1avo en recepci6n 0viceversa, En cualquier caso la senal de
reloj la genera el maestro.
Los dos hilos del bus PC son dos Iineas de colector abierto: la sefial de reloj SCL
o pin RC3 y la linea de datos SOA 0pin RC4. Se deben utiliar unas resistencias
e!ternas 0de pull-up para asegurar un nivel alto cuando no ha" dispositivos conec#
tados a) bus.
EI nurnero de dispositivos conectados y la longitud de cone!i6n estan limitados
por 1 0 capacidad de dircccionamicnto $de 7 a 10bits% y por la ma!ima carga del bus
$&00p'%. La velocidad ma!ima estandar es de hasta 100(bps, la rapida hasta &00
(bps y 1 0 )lta hasta los *.& +bps
I,$%-
'igura *&. ,a.culo del valor de RL en /unclon de la capacldad y
velocldad del bus ,cortesia de S0%
La trensmlsion se inicia con W1 bit de inicio 0 START}' termina con el bit de .inali#
acion 0 STOP. STARTse establece con una transicion de alto a bajo en la linea SOA
$normalmente a nivel alto% cuando 1alinea SCL esta a nivel alto. STOP se establece
cuando se produce una transicion de bajo a alto en Ia linea SOA cuando SCt esta
a nivel alto; de esta .orma los datos en la linea SOA s610cambian en el estado bajo
de la Iinea SCL $.igura *1%.
_____ uART
SOA
s e l
s
'igura *1. ,ondiciones de la transmlslon
121
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M l c r o c o n t r o l a d o r e s P I C
AI iniciar la transmisi6n, el master envia la direcci6n del esc1avo con e) que desea
establecer la comunicacion. La direcci6n puede ser de 7 010bits con forma to de
byte (uno 0dos bytes respectivamente). Tras la direccion se adunta un bit de lee!
tura"escrirura (fi#ura $6).
DI R E C C I O N DE 7 BI T S
DI R E C C I O N DE 10 BI T S
S u m l n l s l r a d o p o r e l M a e s t r o
Dl r e c c 1!n d e 7 "i t # d o l E s c l a $o
P r i m e r "yt e #u m l n l %l r a d o p o r %1 M a e s t r o rr%.
& De l E s c l a $o
S e 'u n d o "yt e %u m l n l s t r a d o POt %1M ##(#l r o
)i 'u r a *!# +o s ,o r m a t o s d e d -r e c c l !n
&na ve' el master envia la direcci6n (0 datos), el esclavo #enera un bit de reco!
nocirniento (ACK), si el master no recibe este bit l a comunicacion se interrumpe,
#enerando la sefial de STOP. (I maestro tarnbien puede recibir datos, en este caso
es e l quien #enera la serial de reconocirniento para cada byte recibido menos para el
ultimo, en este caso el esclavo libera Ia )nea SDA y el master #enera u n STOP.
(*iste la posibilidad de que el master, tras una transmision"recepcion, no abando!
ne el bus y si#a en comunicacion con el esclavo+ en esta ocasion #enera una nueva
condition de START, )amada START REPETTDA (,r), identica a la anterior pero
despues de un pulso de reconocimiento.
(n los -I. de /a #ama media e*isten dos modules que permitcn reali'ar una cornu!
nicacion PC, el BSSP (Basic SyllchroJ/ous Seria! Port) y el MMSP (Master SYllchrollolls
Serial Port), y se diferencian en modo de trabao maestro. (I m6dulo MSSP permlte
detectar condiciones de START y STOP por interrupcion. (ste modulo puede tra!
baar en tres mod os%
0 1aestro.
0 (sclavo con direccion de 7 bits.
0 (sclavo con direcci6n de 10bits.
Los re#istros asociados a este modulo son seis% ,,-.23, ,,-.234, ,,-A55,
,,-6&7, ,,-,TAT y el ,,-,8.
194
R/W.O R/W..o RO RoO RoO RO RoO
7. Transmisi6n serie
Reglstro SSPSTAT,dlreccion RAM: 94h) [PIC16F87!
I SMP I eKE lOlA
I s I U A I BF
BI I 7 BilO
Figura 37. EI reglstro SSPSTAT
bit 7: SMP: Bit de muestreo.
SPI e modo maestro:
!" EI data se muestrea al #ial de $i$lo.
%& EI dato so ruestrea e el media del $i$lo.
SPI en modo es$la'o:
SMP debe (oerse a )%) $uado se traba*e e modo es$la'o.
PC e modo master % es$la'o:
! =+es,abilita$io del $otrol Slew rate (ara ua 'elo$idad
estadar -!%% \<Hz i ! MHz)
%& .abili ta$i/ del $otrol Sieu: rate (ara alta 'elo$idad (400 kHz)
bit /: e0E: Sele$$i/ de #la$o de relo* e modo SPI.
1P0&O
! & E2dato se trasmite e e2 #la$o de subida de 10S.
%&3! dato se trasmite e el #la$o de ba*ada de 10S.
10P&l
1=3! dato se trasrite e e2 #la$o de ba*ada de 10S.
%& Bl dato se trasmite e el #la$o de subida de 10S.
PC e modo master a es$la'o:
! =4i'eles de etrada $a #orme es(e$i#i$a$ioes 5MB6S.
%& 4i'eles de etrada $o#orme es(e$i#i$adoes P$.
bi75: +/A: Bit de datos/ dire$$io -solo e el modo F18.
! )9 Idi$a :ue el ultimo b;te re$ibido 0trasmitido era u data.
%& Idi$a :ue el ultimo b;te re$ibido 0trasmitido era ua
dire$$io.
bit <: P: Bit de Stop -5/!%e el modo 2= 18.
!& Idi$a :ue ,a sido dete$tada ua $odi$i/ de Slop.
a &" 4o se ,e dete$tado la $odi$io de Stop.
!>3
Com pilador C CCS Y Sim ulador PROTEUS para M icrocontroladores PIC
bit 3: S: Bit de Start (5610en el modo rC).
1 = Indica que ha sido detectada una condicion de Start.
0= No seha detectado la condici6n de Start.
bit : !"#: Bit de $ecrura" %scritura (5610 en el modo &C). %ste bit retiene la
in'ormacion de lectura 0 escritura des(ues de la )ltima deteccion de di*
recd6n correcta. S610es +alido desde la con'irmad6n de direccion hasta el
si,uiente bit de Start, Stop 0 no ACK
%n &C modo esda+o:
1=$ectura.
0= %scritura.
%n PC modo master:
1 =-ransmision en (ro,reso.
0= -ransmisi6n en no (ro,reso.
bit 1: ).: .ctuali/acion de direccion (solo en el modo PC de 10 bits).
1= Se necesita una actuali/ad6n de direcdon en el re,istro SS&.00.
I
0= $a direction no necesi ta una actuali/acion.
bit 0: B1: Bit de bttJ f e : r l1eno.
!ece(cion (mod os SPI e PC ):
1 =!ece(cion com(te tada2 SS&B)1 esta lleno.
o =$a rece(cion no ha 'inali/ado2 SS&3S)1esta 4ado.
-ransm ision:
1 = -ransmision en (roceso2 SS&B)1 lleno.
o =-ransmisi6n com(leta2 SS&B)1 +acio.
Reglstro SSPCON (direccion RAM: 14hJ [PIC16F87!
!I#35 !I#35 !I#35 !'#35 !I#35 !l#35 !l#35 !I#35
I wcoi, I ss=ov I SSPE I CKP I SSPM ! I SSPM ! I SSPM " I SPM O
'6:
i r
Bit7 Bil5
~~f '
1i,ura 38. %Ire,istro SS&C5N
bit7: #C5$:Bit de deteccion de colision.
9odo master:
1= Seha (roduddo una escritura en SS&B)1sin que las condiciones
del PC sean +alidas.
194
7. Transmisi6n serie
o =No hay co lisio n.
Mo do Esclavo :
1 = El registro SSPBUF ha sido escrito mientras se realizaba una
transmislo n revia.
!= No hay co lisio n"
bit #: SSP$%: Bit de ovel:f!ow &debe ser bo rrado ar so 't(are).
En mo do SPI:
1= Un nuevo dato se ha redbido cuando aun no se ha le'do el data
anterio r almacenado en SSPBUF. E 1 dato del registro SSPS* se ier+
de y se mantiene el anterio r. ,#1! se ro duce OllL>rJlOW en mo do
esclavo .
!= No hay ooetfkno.
E n modoFC:
1= Un nuevo byte es recibido cuando aun no se ha leido el registro
SSPBUF do nde se encuentra e- byte anterio rmente recibido .
$= No hay o ver'lo (.
bit ,: SSPEN: Bit de habilitacio n del uerto serie sincro no .
En ambo s mo do s" lo s ines han de ser co rrectamente co n'igurado s co mo
entradas ! salidas"
En mo do SP]:
1=.abilitacio n del uerto serie y co n'igura cio n de lo s ines S/0"
S1$" S12 3SS co mo 'uente del uerto .
o = Puerto serie deshabilltado y ines co n'igurado s co mo ElS.
En mo do P/:
1= .abilitacio n del uerto serie y co n'iguraci#n de lo s ines S14 y
Se5 co mo 'uente del uerto .
o =Puerto serie deshabilitado y ines co n'igurado s co mo E /5.
bit 4: eKP:BHde seleccio n de la o -aridad del relo 6.
E n mo do SPI:
1 =El estado de reo so ara e1.relo 6 es el nivel alto .
!= El estado de reo so ara el relo 6 es el nivel ba6o "
En mo do PC esc1avo : &co ntro l de liberaci#n de S/0).
1 = .abilitaci#n del relo 6.
!= Mantiene e1 relo 7 en estado ba6o .
195
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
bits 3:0 SSPM3:58PMO: Seleccion del modo del modulo S S P .
0000 = S P I , modo maestro, reloj =F r : : f 5 { . J 4 .
0001 = SPI, modo maestro, reloj =Fosd16.
0010 =SPT, modo maestro, reloj = Fosc/6.
. 001! =SP~ modo maestro, reloj =Salida del TMR2/2.
0100 =SPI, modo escla"o, reloj =pin5#$, pin5S %abilitado.
0! 01 =SPI, modo escla"o, reloj =pinS#$, pin58 des%abilitado,
Puede usarse como pinde E/S.
0110 = P C, modo escla"o, direccion de & bits.
0111 =P C, modo escla"o, direccion de 10 bits.
1000 = P# modo master, reloj= F'.//'(SSP)**+l,.
1011= F#en modo maestro controlado -or firmuare (esda"o inacti"o..
1110 =P C en modo maestro control ado porjirn1llmre (direccion &
bit con interru-cion de bit START / STOP).
1111 =P C en modo maestro controlado -or ji nnware (direcdon 10
bit con interrupcion de bit START / STOP).
1001, lOla, 1100, 1101 =0eser"ado.
R e gi s t r o S S P C O N2 I d i r e c c i o n R AM ; 9 !" #P $C %&'()*+
0112O 0312O 0112O 0112O 0112O 0112O 0112O 0112O
4#56 I )#$S7)7 I )#$O7 I )#$56 I 0#56 I P56 I 0S56 I S56
' H
8lt& auo
9',2::2;9: ,.<,.
~[
&i gu r a 3=. E I r e gi s t r o S S P C O N2
bit &: 4#56: 8it de %abilitacion llamada >eneral (5610en modo P# escla"o..
1=?abilita la interru-cion cuando se recibe una ?amada >enera!
(direccion OOOO%.en el SSPS0.
0= *es%abilitado.
bit 6: )#$S7)7: 8it de estado de reconocimiento (solo en modo P C master..
5n modo master transmision:
1 = 6o recibido )#$ del escla"o.
0= )#$ recibido del escla"o.
bit 5: )#$*7: 8it de dato de reconocimiento (s610en modo PC master..
9%
7. transmlslen serie
En modo master recepcion: Valor que sera transmitido cuando e1usuario
inicie una secuencia de reconocimiento a] finaJ de una reception:
l=NoACK.
O=ACK.
bit 4: ACKEN: abilitacion secuencia de ACK !solo en modo FCmaster".
En modo master recepcion:
1 =#nicia secuencia de reconocimiento de $OA y $C%& 'transmite
un ACKDT. (orrado por )ard*are.
+= ,esacti-ado.
bit .: /CEN: (it de )abilitacion de recepci0n !s01+en modo PC master".
1 =/ecepcion )abilitada.
+= ,es)abilitada.
bit 1: 2EN: abilitation de la secuencia de STOP !solo en modo FC master".
1 =#nicia condicion de Stop en $,A y seL. (orrado por )ard*are.
+= ,es)abilitada.
bit 1: /$EN: abilitacion de" $3A/3repetido !solo en modo PC master".
1=#nicia la condidon de $/en $OA4 sa. (orrado por )ard*are.
+= ,es)abilitada.
156
bit +: $EN: abilitacion del START !s01+en modo 2C master".
1=#niOOla condition de START en $,A y $C%. (orradopor )ard*are.
o =,es)abilitada.
El resto de re7istros son:
8 El re7istro $$2(9: !direccion /am: 1.)" es un buffer de transmision;recep<
cion serie: es el re7istro desde e1cual se leen + escriben los datos a transmitir.
8 El re7istro $$2$/ es un re7istro de despla=amiento SSP !no accesible direct a<
mente". ,espla=a e1dato para transmitirlo + recibirlo. En una transmision& el
dato se escribe desde el re7istro $$2(9:& mientras que en una recepcion& se
car7a el dato de $$2$/ a $$2(9:.
8 E# re7istro $$2A,O !direccion /am: 5.)" define #a direcci0n de1 esda-o +
los baudios de Ja comunicacion del master. En este re7istro se almacena la
direccion del esda-o> en el modo de 1+bits primero se debe car7ar el b4te aJto
!1111 +A9A$ +" 'despues el b4te ba?o !A6:AO".
Otros re7istros relacionados con el modulo MSSP son el 3/#$C !direction /am:
@6)" para definir RC3 y RC4 como entradas& E1 2#/l#2#El !direcciones /am:
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M l c r o c o n t r o l a d o r e s P I C
OO1/SO,) para la gestion de interrupdones (SSPIF/SSPIE). EIpm2lPIE2 (direccio
nes Ram: OO/!") para la gestion de la interrupclon por colisi#n del $us (%&'IF/
%&'lE) (el I)*&O) (direcciones Ram: O%/S%/1+%/1!%)para la a$ilitacion
de las interrupciones de peri,ericos,
-...1.1 12& en C
&on,iguraclon generica del F&:
Ituse 12&(opciones)
Opciones: separadas por comas, pueden ser las siguientes:
/0'*I1/2S*ER Esta$lece modo /ultirnaestro.
/2S*ER Esta$lece modo maestro.
S'23E Esta$lece modo esda4o.
S&'5pin Especi,ica el pin S&'.
SO25pin Especi,ica el pin SO2.
2"ORESS5nn Especi,ica la direcci#n en modo escla4o.
F2S* 0tili6e 4elocidad alta.
S'O7
0tili6a 4elocidad $a8a.
RES*2R*17"* %arra e) 7"* mientras espera una lectura.
FOR&E197 0tili6a las ,unciones PC ard:are.
)O,'O2*19I;9 )o permite se,iales ,lotantes.
</%0S 0tili6e el $us en ,ormate 5MBUS.
-.
S*RE2/5id 2socia un identi,icar stream.
Esta directi4a (#USE 12C) tiene e,ecto so$rc las ,unciones 12C_START 12C_STOP
T2C_READ, T2C_WRITC e 12C_POLL. S e utili6an ,unciones so,t:are a menos =ue
se especi,i=ue !ORCE_"#. EI modo escla4o <#1+ pucde sec usado can el modulo
,,sico SSP.
fuse 12C(master, sda-PIN_BO, scl-PIN_Bl)
fuse I2C(slave, sda-PIN_C4, scI-PIN e3, dddress~OxaO, rORCE_!I
Nuse 12C(mast~r, sc"-PIN BO, sda-PIN_#l, tasc$4#%%%%)
> 12&17RI*EO.
> I2&1S*2R*O.
'as ,unciones asociadas son
1?!
7. Transmlsion serie
12C_READO.
12C_STOPO.
I2C_POLLO.
I2C_ISR_STATEO.
12C_SlaveAddr().
I2C_STARTOi
En modo master, esta !n"ion ini"iali#a la transrnision. Des$!es de la "ondid%n de
Start, el relo& es $!esto a nivel 'a&o (asta )!e se es"ri'e "on la !nd%n 12C_WRlT().
Si se llama a otra !n"i%n 12C_START antes de !n 12C_STOP se esta !tili#ando !n
START r"$etido (Sr). Esta !n"ion de$endera de *a res$!esta del es"lavo.
i2c_start ();
i2c_write (OxaO);
12c_write(iJddress) ,
i2c_start () i
i2c_write(OKdl);
as ta-12c_l"ead (0) ,-
12c stcp(J;
IITnicializacion de la transmision
IIDireccion del esclavo
IIDatos a esclovo
IIRestact
IICambio it lectua
!IDatos del esclavo a1 master"
II#inalizacion de la transmision
12C_STOP +,
-inali#a la transmision.
12C_.RlTE(dato),
Dato es !n entero de / 'its )!e envla $or el '!s. En modo master, esta !n"i%n
0enera la senal de relo1 )!e mar"a la ve*o"idad de transmision del dato2 en modo
es"lavo es$era la serial de relo& )!e 0enere el maestro.
Dev!elve e* 'it de re"ono"imiento AC3 )!e envla e* re"e$tor "!ando la transmi4
sion (a terminado2 + indi"a AC3, l indi"a !n 5O AC3 6!n 2 indi"a !na "olision
en modo m!lti master.
EI 'it de menor $esor (Isb) de* $rimer dato transmitido tras !n START indi"a el sen4
tido de la "om!nl"a"ion (si el 'it es 7+7, 1ainorma"ion se transmltira de maestro
a es"lavo).
dato = 12C_REAO(8AC3*)i
Date es !n entero de / 'its leido del '!s. En modo master, esta !n"i%n 0enera la
seial de relo&, en modo es"lavo es$era la serial de relo&. 5o (a9 timeout $or 1+)!e
se l.1tili#a&!nto "on 12C_POLL $ara $revenir 'lo)!eos.
O$"ionalmente se $!ede in"l!ir !n AC3 donde 1 indi"a !n AC3 y !n + indi"a !n
5O AC3. Se $!ede 'orrar el Watchdogrnientras se es$era a leer el dato, $ara ello se
de'e in"l!ir 1ao$"ion RESTART_WTe! la dire"tive "use i2c().
1::
0cr p||aac| 0 008 y 8|r a|aac| PR0 TLu8pa|a H |c|cccr||c|aac|es Pl0
valor = 12C_POLLOi
Se utiliza 5610 si el PIC tiene modulo SSP. Devuelve un TRUE (1) si se ha rei!ido
el dato en el buffer y un FALSE (0) si no se ha rei!ido" Cuando devuelve un TRUE,
la #union 12C_REAOO $uarda el dato leido"
I2C_Slave%ddr(int& adr)'
Se es(ei#ia la direion de) dis(ositivo en modo eslavo"
estado = l2C_IS*_S+%+,()'
Se utiliza solo si el PIC tiene modulo SSP. Devuelve e) estado del !us en modo es-
lave des(ues de una i"nterru(i6n"
,stado es un entero de & !its.
0= India direion oinidente an un */0a ero"
110234= ,l master ha esrito un data5 se de!e utilizer l2C_READ{).
O2&0= India direion oinddente an un *60 a uno5 res(onder an 12C_
WRITE().
O2&11O244 = +ransmision terminada y reonoida5 se res(onde an 12C_WR!TE().
,7em(lo 8. Guarder y leer da!" ell la" 10 priiueras #!"$%$!&e" de 'e'!r$a de llll|| EE(
PRO) PC. Re#re"e&!r l!" *&l!re" e"%r$!" + le$d!" e& till d$"#la+ LCD (F|ga|a 80)" COIII
#!&e&e" ,S,S- P,C1.F/00, )21212, RES 3 L)41.L. l&"ru'e&!"- 12C DE5UGGER.
200
"" 0I011C1"I9:
O;I<C1"19O=><
! 0l. - H N 1 . . . . . . . . ' '
~ ffA0 l' ~
? @%l<%%I
fW)..,.,_
~AAl,VALF.
lcul,. &1 fccc|
p' ,,_
AB55_%>5
@,CI%Dr>E:
Fl.rtFF10
F|ga|a 14. Ll ejer p|c 4
7. transmislen s e r i e
La EEPROM PC 24512 ttene un byte de control (figura 41) donde la parte alta tiene
un valor fijo (Ah) y la parte baja consta de Ia direccion impuesta en sus patillas
(E2E!)y el bit de lectura"escritura# de tal forma $ue si se fijan las entradas de di
recci%n amasa# el byte de control puede tener los valores AOh para escritura y Alh
para ledura&
!&'()l)yp) td&nbllllr *hip En+bl& Ad!I&#& fffl
: ii'
1&1 en tl5 bJ b3 1)2 D b!l
Cew... f!."If"ct*od& I
I
0
I
I
I
, E2
I
E'
1
Ell RW
.= J
o-c. /c/# ACI .aCl!.
" " #$$ $$ % 1#1 ~~:;b~~i' l $$& $ 0)121f) III : $' A$ /3 1 1 0
t $$ $
$ .. ' (
V!
Fi gur a 41 . Byte de contr ol de l 2451 2 4eertesta de S T J
EI formate de escritura es el mostrado en la 5igura 42# donde tras un START se es6
cribe la palabra de control para seleccionar el dispositivo y el modo de trabajo# dos
bytes para Ia direccion de escritura en el dispositive y el dato a escribir&
Fi gur a 42. EI for mato de e s cr i tur a (cor te s i a de ST)
A continuaci%n se describe una funcion para la escritura en 1aEEPROM, $ue debe
se7llamada desde el programa principal donde se Ie pasa Ia direccion a escribir y
el dato&
void write_exl:_eeprom(long inc address# BYTEdata)
short int status;
i2c8start ()0
i2c_wrics(OxAO);
i2c_wri~e(address8}i
i2c_write(address);
i2~wrice(daca);
i2c_stop ()0
i2c8scart ()0
status9i2*8I'rite(OxaO);
llInicializa La cransmision
IIEscrie )a !alara de control (direcci"n
/IOIl T C !ara #esc$z i.tuire}
I(Parre alta de La direccion a escrLir en 1a
I%&E'(O)
II'arte a*a de )a direccion a escriir en La
%IEE'))
II+ato a escriir
II,inalizacion de la transmis~"n$
I%(einicio
I/Leccu.ra del bit AC, !ara e"itieu: e#criture#
Ilincorreceas
20 1
Com pilador C CCS y Sim ulador PROTEUSpara M icrocontroladores PIC
wbile (stiltus~l)
115i es 1 esperar a que responds el esclavo
i2c_start ();
status~i2c_1~rite(OxilO) ;
FIgura 43. Funcl6n de escrltura en la EEPROM
EI Formato de lecture puede ser de cuatro formas: lectura de la direccion actual en el
bus, lectura de una direccion cualquiera, lectura secuencial a partir de la direccion
actual y lectura secuencial a partir de una direccion cualquiera. La forma mas normal
es la de leer una direecion cualquiera (figura 44), donde el proceso es muy similar
al de escrirura y tras una reinicializacion hay dos ciclos donde se indica el modo de
lectura y se enia el dato. En este caso, el master debe deoler un !" #$%.
&....lI.OOM
.o.O RESS
&E#'
FIgura 44. !ectura de una dlreccl6n cual"ulera #cortesla de ()I
#continuacion se describe una funcion para la lectura de la EEPROM, que debe ser
lIamada desde el programa principal donde se Ie pasa la direccion a leer.
BYTE read_ext_eeprom (long int address) (
BY! data"
i2c_start ();
i2c_wrice(Ox#O);
$$$nicia1i%d *+ transmisi&n
'$!scribe la palabra de conerol (direccion ()
'1* + para escritura)
'',arte alta de 1- direccion a escr~bir en 18
''!!,.O/
'',arte ba0a de *+ dlrecclon a escrlblr en la
'$!1,.O/
$$.einiclo
$$!scribe la palabra de conerol (direccion O)
11* 1 para lectura)
$llectura del dato
'$2inall%aclon3 de *+ cransmislOn4
i2c_wri te (add546ess7+),
i2c_write(address) ;
i2c_sca4rt(I;
12c_wrlte(Oxal);
data6i2c_read(O);
12c_seop() ;
return (data)84
Flgur .. 4$. Funcl6n de lectura de la EEPROM
-.-
7. T r a n s m i s i o n s e r i e
Para la aplicacion del ejemplo se utilizan estas funciones en eJ program a princi
pal.
Hinclude <16F877.h>
'fuses X~,NOWDT,NOPROTET,N!"#P
luse del$%fcl&c'()******+
,use i-c./$s0e1,sd$2P3N4),scl2P3N45+
linclude <lcd.c>
66$nfl7u1$ci&n r2C
3defineEEPROM_ADDRESS l&n7 inc
8$i$ '&61i0e4e9f4:e:1&;.l&n7inc $dd1ess, BYTE d$0$+
.66 inc1 ua.r la funci6n exp iice$< $n 0e1i&1;en tie] ~
BYTE 1e$d4e904ee:1$;.l$n= inc $dd1ess>
.36inclui1 18 0un&i&n e9:lic$d$ $n0e1i&1;en0e? ~
8&id ;s in .+ .
inc@ 8$l&1(O, d$0&l
EEPROM_ADDRESS $dd1essA,B
lcd4ini0 .+,(
f&1 .$dd1essC'O,($dd1ess<DE,($dd1essFF+
WRITE_ EXT_ EEPROM .$dd1ess, 8$l&1>A
lcd47&0&9%.l,l+,(
print f(lcd_putc, "enviando-ilD", valor) ;
delay_ms (500);
8$l&1FF I
[or address!O "!addxess#!$ %address&&'
dato!READ_EXT_EEPROM address(%
lcd47$c$9%.l,-+,(
:1in0f.lcd4:u0c, C"'eci:Aiend&GG1DC, aecor ,
delaY_))ls (500);
Fi gur a 46. EI pr o gr a m a de l e je m plo 4
En el 12C debller se pueden seguir las transiciones del bus. En la figura 47 se
rnuestra una operacion de lecture tal como se ha explicado anteriormente. La
significa !T"#T, la ! es reconocirniento "!C#$% la Sr es !T"#T repetido, la & es &'
A*+ (la P indica STOP "cornpararla con la )igura 44% en este caso la direccion es
*+h ye) dato es 'lh$.
203
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
-.. 6_.l!3. 6_ Uo( S AO .1. .00 A 01 .l . Sr A .L 1. 01 Jl ,
.. E.12J s-
-t " ~.!~~ s.
t ~ 6.U3,.
... 4- 6.U4 J;
... !"#$%%.
-. L~w :~
& ' . 6.124 s ~O ( (
~_._. 6_.1_l~ __' _--------------------------------------_--~--_--~~ ) i l
~E *) ~~ ~!! ~(
I ~ t J
~~~~.,~~~~ ..~ ..~~~ ..~~~~~~~~~~~~,
" .~23So AD ..
'.1'2. .. s, 00 ~
E..1Z.f.
+
01 ..
C l24e $r

a
+
"'4
6.124 So 01 II
.!"4
+
#
$%&ra4'. L a o(era)%o* +e!e)t &ra)o* e!12C +e,&er
E-e.(!o /0 Leer la temperatura y hora de lectura y guarder los datos en una EEPROM;
utilizar un sensor de temperatura 12C (DS1621! un relo" en tiempo real 12# (D$1%&' y
una EEPROM eerie 12C (M24$12( La lectura se reolizarii en )uncion de una orden dada
par el puerto eerie; con otra orden se *isl+aiizaran losprimeros datos de la EEPROM en
un monitor del puerto eerie (2%&re 434. #omponentes +S+S, P+#16-.''! M24$12! RES!
#OMP+M! &$1621! DS1%&' / LM&16L( lnstrumentos, 12# DE0122ER(
t #C R T C
!U I !
r ) ,,,( ( t i l ( ( %. 1;.!!0...
-...
" '_" " *' I #C E e p r o m
5 S6 1!6
...... ,014 ~
~
"#C S E -S O R T E M P
$%&ra43. E1 e-e.(!o /
#ara2a)%!%t ar e! +esarro!!o +e! (rora.a se7a* 8a)rear 32%)8eros driver (ara)a+a
&*o +e!os (er&er%)os. #ara1aEEPROM ser%e 12C 924/12se&t %!%:ara* !os a!or%t -
204
7. T r a n s m i s i o n s e r i e
mos descritos en el ejemplo anterior (figura 49). La direccion asignada en el esque
ma es la O x O D .
void write_ext_eepromllong int address, BYTE data)
short int status;
i2c_start ();
i2c_write(OxaD):
i2c_write(address8);
i2c_wrice(address);
i2c_write(data} ;
i.2c_iiitop ();
i2e_start:: o ,
status=i2c_wr~te(OxaO);
r.hile(statusl)
i2c_start:();
status=i2c_write(Ox!O):
2 0 5
.!"#$ read_ext_eepro%(lon& int eaaxees) '
BYTE data;
i2c_start:();
i2(_)*rite(OxaO);
i2c_write(address8};
i2c_write(address):
lZC_SCctrt ();
i2c_write(Oxal):
data=i2c_read(O};
i2c_ scop ();
return (dar:.a);
Fi gur a 49. Fi che r o EEPROM_24512.C
ara el reloj en tiempo real !"#$%7 se necesitan conocer sus caracteristicas y es
cri&ir el driver. 'l !"#$%7 suministra segundos( minutes( )oras( dia( mes y afio en
tiempo real (mediante una &ateria y un cristal de cuar*o e+terior permite un fun
cionamiento independiente del sistema). osee una serie de registros donde apa
recen los datos necesarios (figura "%)( los cuales se suministran en codigo ,C! can
e- formato indicado en la parte derec)a de la figura. 'n este ejempLosolo se leeran
los segundos( minutos y )oras.
ara la escritura y lectura del integrado( el fa&ricante recomienda los cidos indi
cados en la figura "#. odemos o&ser.er que el dclo de escritura se inida con /a
0 c p | | a a c | 0 0 0 8 , 8 | a | a a c | P R 0 T C u 8p a | a | | c | c c c r | | c | a a c | e s P l 0
palabra OxDO, la de lectura con OxD1. En el ciclo de escritura, el segundo byte es
un puntero que debe indicar la direcci6n de inicio (en este caso 0). En el ciclo de
lectura se realizara la lectura de los tres primeras dlrecciones de la memoria del
D510! (los segundos, minutes , "oras), el ultimo byte debe indicar un NACK al
master. #an 5610queda con$ertir los bytes en B0 D a binario. E% &ic"ero se rnuestra
e r la &igura 5'.
l '"
- - r - - - - - - - - - r - - - - - - - - ~
-
8 C 0 0 N0 8
l -- | l Nu T C 8
HOURS
el& .. ...( ,. w.r a _: ...
.- , , --| | "l "l ' , 1 1 l -- .' "
t)))*r4. ))+)))))*)1 ( ,*
'" t 0 _:_| __ fu | " --. l '
|
,
01 ......
/ ,O*+,l | r . ,t..;jll)
r))t)).) 0,,,,,
| | -l ....... --' *.-,-l ... l C| -"~--| _--~- ~ ~~1 >
"'A/4 . ,( ( (
l J ( ,.. *
0 A .Y
().0#E
r))( iO1#2
| 3E45
.!2 6 708,%#5O- -
611 | 549
| FL ~.E_ .... l ~ t l % )r %%7:; / l
051 307 A DDR C 8 8 | A P
0 8 1 307T l | C KC C P C R R C Gl 8 T C R 8
<%gura 50. 5eglstros con dlrecc&ones , &ormilto.s (cortesia de Dallas =mc.)
I S !rT,,"'
*/ 4r.-roor
f "(| l >
4 *# i%7( ( O>?tx..E
,> *O( l%%,.<cno1 ti# *( .O,"
<igura 51. 7%cio de escrltura , lectura (cortesla de Dallas =mc.)
int BCDaBIN(incbed) (
int $aria@
ver ie bed;
varia - 1;
//ConverSJon de BCD B Binario
varia ~- Ox78;
~'ecurn($ar.a (VBrJlI ') (bed" OxO());
'06
7. Transmision serie
void tiempo(byte snox, byte &min, byl:essec)(
i2c_start(): //Escril:ura
i2c_write(OxDO); //COdLO de escrit!ra
i2c_wrire(OxOO): "/#$ncero a 1a primera direccion
l2c_start(%; "/Lect!ra
i2c_write(OxDl); //C&dio de 'ect!ra
sec = (CDa(")(i2c_read()&Ox*t): //Lect!ra de los 7 bit de los se!ndos
min; (CDa(")(i2c_read()&Ox*+): //Lect!ra de los 7 bit de ~os min!tos
,or =(CDa(")('2c_read(O)&Ox-+): //Lecr.!rade los 6 .oLtde las ,oras
i2c_stop (),.
Figura 52. Flchero RTC_DS1307.C
El termometro digital y termostato I2C 051621 ermite medir temeraturas e!tre
"55#C $ 125#C. % l &alor de temeratura se sumi!istra e! dos '(tes) el '(te alto es
el &alor e!tero co! resolucio! de 1 #C $ el segu!do '(te es el &alor decimal co!
resolucio! de 0.5 #C *+igura 53,.
rDI-ER..rrar DI/.II01 orrrt2r Dl/I3l. 4lT-l2T
(lbnOlr\') tHt:!:)
:'
"eST CIIII10. ceooccoo 7D4+lh
-2:"( 00011005 00000000 1600h
7I )5*2
ooooom I44C8l94 44S4l.
... o: c 00000000 4444C444 4"; ,I< 5lh
_))0*
111111111000c444 FrSllh
"55.5T 1110011100000000 El4Cll
h
"552* 11001001 00000000 C600h
Figura 53. Formato de < a temeratura +c5ortesia de Dallas Smc5.)
1a directio! asig!ada e! el es=uema es la 4>4l.Tie!e u! registro de co!trol ara el
+u!cio!amie!to como termostato =ue e! esta alicaci6! D4se utili?a. 1a ala'ra de
co!trol ara Ia Iectu.ra 0escritura es 1001030201"R< @ *+igura 55,. 1os coma!dos
de co!trol uede! ser) e!tres 4rr4S) 4>00 ara lectura de la temeratura) 4>EE
ara el i!icio de 1aco!&ersio!. Co! estos datos se uede escri'ir el +ichero ara el
co!trol del 051621 *+igura 5A,.
void init_temp(int address) (
i2c_start (),.
i2c_write(Ox/0'(address1l)); //2enera prLmer byte (lOD"323L3D4)
i2c_wrice(Oxee); //"nicia conversion
'2c_seop($,.
+loatread_foll_terop(int address) (
signed int data,,.
.int: datal:
Iloet: t!ra;
207
0 c | r p | | a a c | 0 0 0 8 y 8 | | r a | a a c | P R 0 T C u 8p a | a | | c | c c c r | | c | a a c | e s P l 0
i2c_starc (),.
i2c_write(Ox90 l (addressl)); IIGenera primer b.yce (lOOIA2AIAO-)
i2c_licerOxaa),. II!eer temperatura
l2c_start IJ;
"2c_wd ce (Ox9" l (addressl); IIGenera primer byte ("00"A2AIAO-#)
data$ ..i2c_read(),. II!ecwra parte alta
dacal-i2c_read(0); II!ect%ra parte ba&a y NACK
i2c'_st(p() ;
t%ra)*daca$; II+(n,ersi(n a -l(tante
if (datal.p"2/) (0")a-c%!a10.2;
ret%rn (ture);
Figura 54. Flchero TEMP_OS1621.C
&| .lc A ""IfAOA".... cc!.!4"O ##$ ... 1..#%1 C$&Iff$'$IAl(
u | .| | J1.J1.fu I.r)1.r)))1.f1.I1*JlI"'* r+
....u,# A..Ar.$-(./..0"$"...1"..2(#..23g;.l$3....2.0I".
III2O | , | |
$-""" | c .l | 0 l .64'| T 1A| 0| | 1V| 4."A.
00...J)lJl .. *** *ru)1J1 *..l1I1.*********.* .. *.r+
.... 5aJ 1\A..J>_| .VW'.| | .~l l Dl Dg:l ;r ~'4!!:).| .| .:V| , ~ fi
..... 1 .'I' 6
a1... M$ ..o*7*6 "I8ll .I .5C(.#.. %1...6 6 $ %4$..$). O9.I ... er
....... TO.f-%..:;<.c6 c;e$I"4JII41$#;.f| .)
u u J 1r r r r .. r r r | | r r | | r r r *r)1.11Il .. $11)1.I11)l.J)))'***l1I"
r_ l 6 %$"
~JYT f ""J.$ CIO--A.$C0."" ..$
u A.0 J"0 W.~"'.Yr f(l 0 l l l 1(1'| '0 O| \~| 0 N.w.0 l '| .~'f| | .)
--. r r .. r r r r l 1J| J J)1.Il.J1I1..***.*.*...r)lI=i 'J1..fl..I)lI1..f)1.1lI)1.11..21J .
|
\.I/i\AJr.'iifjJ4).. ,,_A.IIi~i;y.g;.J'~~".lfiiiBlrii!'SI'.!i)'!&1R~W-.'J;'
"". l | J$ | l ! ' l0. 0. l j|
ll")$ A'IOAIMe'T' O6 >#f#;$1 .$. l 'f '" =| c '| ""."$I$1?.A?CJIIIf$II OIl"$l Q.&.t ..".,
IJ2# ...# If"llf ....### .'I
Iill)O*'O-A 1"I$fIO.4;TCM@-l16 ". 'l .. f{""'~'
..a .~ 11f| !u "1l 1..f1J1J1.f| .!| J1.r ... r r r r r r .!| Ju 1.r .r r l V| .r r r r .->
0#a.J$"%. ... .l6 O.A.""iu....a..fi$2?AB(#"$ ~| | O~W:'~ ~~
SIl$ | I 6 | |
........
##a'##'a
.....
....CCC... I1J5I))1.J1J1..$1...ru0+
"!ijifii"l'~~'#" .."lSl!.$j,'j't"\...__fi"
~.... | l
l?DTf
Figura 55. Pro'ocolo %&lec'ura#le>cri'ura 4cor'e>ia Ee ?alla> SFc.(
Pue>'o 7ue la'eFGera'ura e> u* '()A* *o>e GueEe guarEar e>'e Ea'o Eirec'aFe*'e e*
la334#O5 >egu* la> fu*cio*e> EaEa> e* el fichero EEPHOM_24512.C;Gor 10'a*'o# >e
2 0 8
T. T r a n s m i s i o n s e r i e
puede utilizar el fichero suministrado por CCS Cllamado FLOATEE.Cpara guardar y
leer datos tipo FLOAT en una EEPROM. El fichero se muestra en 1afigura 56.
WRITE;_FLOAT_SXT_EEPROM(longint n, Itaet: data} (
lnt i,
for (i = 0; i < 4 i~)
!ite_"iX#_ee$!o%(& .,. n, '((in)* ~)(+daea) + i);
tioet: RE,A-_E.LOAT_EXT_EEPROl/t(long int n)
int i;
noe t ae ta!
0o! "1 # 0; ~ $ 4! ~1)
"lnt8 .) (+data) + i) = !ead_e2t_ee$!o%3i + n);
return (data) ;
Fi gur a 56. Flche r o FLOAT EE.C
%na &ez definidos 'os ficheros para e( mane)o de los perifericos se puede escri*ir
el programa principal. El programa se comunica con un terminal del puerto serie
de tal forma +ue mediante un menu se pueden elegir dos opciones Con 1se inicia
la lecture de temperatura , tiempo para almacenarlo en 'a EEPROM , con - se
&isualize. a tra&es del puerto sene. los primeros datos de laEEPROM "los 4*,tes
del FLOAT de 1a temperatura , los / *,tes del tiempo #seg.. min. , horas#0. La co1
municaci6n serie se realiza por interrupcion.
~in)l4de <loF876.h>
#fuses Xl',NOWDT,NOPROTECT,WOLVP
fuse dela!"lo"#$%&&&&&&'
'use (s)*)!+aud$,6&&, 2%i)5$in_)6, ("-$./01"7, +/2s$3,.a(/2$N'
;l47e 1-c (Ma7te!,7da5PI8_#9,7)l5P!8_#:)
#/0"lude <l"d.">
#/0"lude <EEPRO4 )%5L).">
lIin)l4de ;<~T#_d7&:=>.)?
1in)l4de ;TEMPd7&6@&.)?
Ain)l4de <floa2ee.">
BBF~)Ce)o7 d(/-e( de lo7 .e6/fe(/"os
209
int: dat_in, cnt:, ar s ini ee):
int&6 edd!ee75a:
in# dat_7e!ieD>E;
0loat dato;
7h021(da 88(02e((9.C)&0 para el $4e!to se(/e
C o m p l l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
rd,,_isr()
dac_~n~getc() ;
pr intt("\.c");
if (dat_i.n~'::')/15i as "2" se visualizan los primeros datos de 111 !"#$
%%&ee el pue.ctoserie
'or (cnt(#;cnt)(*;cnt++) %%&eccu.cade los 7 prlmeros ,-tes de la !"~
dat_serie.cnt/(read_e0t_eeprom(cnt);
J
'or(cnc..#:cnt)(*;cnt++) /%1~sua1iza los 7 pdmeros ,-tes de la !"#$
print'("2-te tu-13u \c",3'l' ,dac_serie[cnt));
}
void main ()
lcd_init(4;
ena,le_lntercupts(inc_rda);
ena,le_interrupts(glo,al);
address(#;
pnnc'("!u1sar para leer datos\r"); %%$enu para e1 term~nal serle
print'("!ulsar 2 para visualiza.cdatos\r");
56ile (1) (
''(dac_in(('l') %%71 es "I" se inicia %%% lecturll - gra,ado en 18 !"#$
init_cemp(#0#l); %%%nicializa e1 871*91
dela-_ms tioc) :
tiempo(6r,min,sec): %%&ee c~empo del 851:;<
dace ( read_'ull_cemp(#0#=): %%&ea temperatura del 851*91
>"%?_@&#A?_B?_!"#$(address,date); %/Cuaeda 4 ,-res del FLOAT
address(address+D:
>"??_B?_!"#$laddress'',6rl; %/Cuaeda byte de 6ora
>"%?_B?_!"#$laddress ~,min); %/Cuarda
,-te de minuto
HRITE_EXT_EEPROH(lIddnUJ . , A}: %%Cu':3da
,-te de se3/undo
lcd_goco0-(l,l):
prin3'(lcd_putc,~?emp(tD.4' 3\n",daco): %%1lsuallza 1a ce~peratur8
print' (lcd_pucc,.. t2u: 12c;:t2u" .nr,min,sec) ; %%14.sual1zala 6era
210
I. Trarsa|s|r ser|e
If (address--Oxf(ff) address-a: I/Cuando se termina la EEE'RON vtlelve
I/al pnncipio.
}
1
}
Figura 57. Programa principal del eJemplo5
Se puede uriliza el HypcrTermil1(1i para cornunicarse con el PIC. La configuracion se
muestra en 1aAgura 58; el resultado se muestra en la figura 5.
1j! n.... " # | ' ' ! de IIn$ con lot a% aI" I& e' delinea
, 1fe( de a C)1acle" " " " I*+" " 1,' JocaImerle
-ete.do do linea /
/eta' dode
ceraaler
o
/1.eciJ. /8C1
o/gregar e% etl0ode llnee " # finalde cada Irnea ,eao|da
. 1r' e,p' e' !' | caaclem rec1o|dos coao /8C11 de I o|.s
' A1utter Iineilt 2l.l' so3.epasen el an+ de lermin**l
1.Acepl*lf 11 C' 11' 1Ce|ar 1
Figura 58. Conflgurad4n del 56per7ermlnal
+ + 88 lt+ ft# .# # ........
& + + CiS #
Pulsar 1 pore teer datos
pulsor 9 | )t;1,.4' t % isu.;l |' dr ~to-;
J
2
:6l. & ; /
:6l# 1' 1)
B y / 9; /
:6*o S /
' Jy' o 4 ! 8
Byte Sa ! 2
Byte 3! !
Figura5. Pantalla de comunlcacl4n
< .<
911
Ccap||a1cr C CCS Y S|au|a1cr PR0TLuS para H|crcccr|rc|a1cres PlC
-------
En e1 comando DEBUG del PROTEUS se puede visualizar la EEPROM serie me-
dlante el comando 12CMEMORY INTERNAL MEMORY (figura 60).
0000 0 0 0 ! " 0 l.! " 1 0
000
1 )
16 " |s 0 0 #S llO ! 0 .............. "......
OO$O .! #S #0 ! a ! u S 0 0 ~S " .:I tII
0(#)
#% S L| 0 1 & "
&' #0 0 ! u #6#0 ....... 1.....S.
a0A0 a 0 ! u #6 (O ! 0 ! " 6 ilO ! 0 ..... s...... s...
00'0 0 lE) "
}6 no ! 0 0 16 " #6 *O ! 0 a ! . s ... s..+,-
O.l/O " #6 #0 ! 0 0 ! ". 37 1 30 ! 0 0 1 S 1 2
)]
.s..... ,w" .... ,.
0000 1 3L| ! 0 0 1 S 1 D 26 #0 a 0 0 ! 1 0 24 1 30 s ................
00S0 0 0 ! 0 "-/ #0 ll 0 0 ! 0 l1 #0 S 0 0 .................
0Q90 ! 0 l6-#0 ! 0 0 6 0 2(; 2#0 ! 0 0 ! 0 ................
(O3 27 1 30 ! 0 0 |.S 0 $0 #0 ! 0 0 ! 0 ~7 #0 ....... - ...........
00&0 ! 0 0 18 0 0.0#0 S 0 0 ! "1 0 "0 2#0 ll 0 ................
coco 0 ! 10 "0 #0 ! 0 0 ! 0 "! #0 ! 0 0 ! ..................
0000 0 zs no !
l)
0 ! 0 "! #0 ! 0 0 ! 0 "! ................
00.0 #0 6 D 0 6 0 2S 1 30 ! 0 0 ! 0 "4 #0 a .................
35O 0 0 #
)0
6#0 S 0 0 1 1 )0 .S #0 ! 0 0 ................
000 # #0 ' -2#0 ! 0 0 1 3 #0 % #0 ! 0 0 # #0 .................
7U)) 6 #0 !
l)
0 # #0 6 #0 ! 0 0 8.l #0 6 9#0 ................
0$0 !
l) 0 1 3 #0 . #0 S 0 0 # #0
: #0 ! 0 ................
on;) o # 30 l.0 #0 ! 0 0 1 3 #0 #0 ! 0 0 # ...... - .........
0140 30 0 #0 ! 0 0 1 3 #0 V#4 L| 0 0 # #0 1 .................
0'0 #0 ! 0 0 # #0 ! #0 S 0 0 1 3 ]0 ! #0 e ..................
OlOO 0 0 # #0 6 #0 ! 0 0 #0 ! .#0 E 0 0 .................
000 1 3 #0 ! #0 ! e e # #0 1 3 no s 0
l)
1 3 #0 ................
)U1O 4 #0 ! 0 0 <# #0 is #0 ! 0 0 # #0 4#0 ................
Ol9O ! 0 0 -2#
&.
4 #0 ! 0 a 9 #0 4 US ! 0 ................
7)=O 0 1 1 30 lO #0 l- 0 0 1 3 #0 "0 #0 !
.,
0 n ................
01 E0 #0 "0#0 l| 0 a # #0 20 1 30 S 0 0 # l( ~O ................
Ol7O .#0 ! 0 0 13 ]0 "0 13() ! 0 0 1 3 #0 $ #0 ! ................
OtoO 0 a # #0 "2.#0 ! 0 0 # #0 2n *O a 0 0 .................
OlEO l.# #0 " -2l0 ! 0 0 1 3 #0 21 UO ! 0 0 u lO ............ -..-
0>0 z / 0 ! 0
.
1 1 .0 II #0 6 . 0 1 3 3(1 u #0 ................
0"00 ! 0 0 1#0 "" #0 6 0 0 # #0 "" HO ! 0 .......- .........
DUO 0 U #0 Z2 #0 ! 0 0 ~3 #0 "2" 0 ! o 0 u .................
0220 30 1#20 ! 0 0 1 1 #0 11 30 e 0 0 1 30 #0 "# .................
ono *O s
l)
0 u #( 1 3 "'' "S' "Sc'"'' "'' "'' "'' "SS "SS .................
0"2.?0- "'S ;?SS 255 "'S "'' l'S *S "'S lSS "S9 SS "2'9lSS SS "'' 2iS ................
0"'0 "'' "SS 2SS "SS 9S' "'' "SS "S' $SS "'' $SS "SS 255 $SS .,' "'' ...............
0260 ..'' as lS' 255- "SS S' "'' "'' "'' Z5S ass 25-5 "'' "'' "'' "S' ...............
0"00 2Sl- 1 55 as *S "';6.'' "'<' "'' "'' "'/ "'' "'' "'S. "'' "SS zss ................
02eo lS' 2'' "SS "'. "'<''' "'' $'S SS @SS "'' "'' "'' "'' "SS "S' ................
OHO "'' "SS $SS "SS "S' "'' "'' "'' "SS 255 255 "'' "'' "'' "'' "SS ..................
0"-/0
$S' "'' "'' 255 "'' "'' "'' ass "SS 9'S- l'S "'S "S' lSS 9'S "'' ................
040 "'' 9SS "2;-9 "'' "'' "'' c55 ass "SS "'' "'%-2;SS "'' "'' "SS "SS ...............
)"7))
$'' $'' "'' 6;'S $S' "S' "'0 $SS "'' "'' ",SS "'' "'' zss "'' $'' ................
0200 zss "'' ass "S' "'' "'' zss 25S "'' zss zss "'' Z55 "'' "'' lSS ................
OlEO as $'S "'' "'' 255 "'' "'6$'' "'' "'' "SS lSS "'' "'' "'' "'' ................
GZFc "'-' 9'' "S' "'' ";6'"SS zss "S' "'' "'9 "'' lS5 "'' "'' "'' "'' ................
0#00 15S ess "'' "'' 2"SS "'' "'' ",.' 25"5 "'S lSS 255 "'' "'' "'' "'' .................. A .
0#0 "'' 9SS "SS 'S "'' US l55 "'' "'' "'' lSS "'' "'' lS' "'-S iss ................
(#"0 ;;'' lS5 "9' 9S' "'' "'' "'' @S' 2S"5 "'' zss "SS "'' $SS "'' "'' ................
tl#B$0 "S;6Z5S CsS ass lS' "'' "'' "'' "'' *' !SS "'' "'' lSS "'' 9S'
F|gura 60. Heacr|a |r1 eaa 1e |a LLPR0H 1 2C
""
8. Gama Alta - PIC18
213
Ca itulo 8
Gama Alta - PIC1S
8" 1 Introduccion
En los ultimos anos, Microchip ha lanzado varias gamas de PIC con elevadas pres
laciones, los PIC18, los PIC24 Y los dsPIC. Con la gama alta PIC18!, Microchip
rnantiene la ar"uitectura #asica "ue tan #uenos resultados ha o#tenido con la gama
#a$a % media %, adernas, reduce las Iimitaciones de estas dos ultimas, &os PICl8
tienen una ar"uitectura RISC avanzada Harvard con 1' #its de #us de programa y 8
#its de #us de datos (igure 1!.
16 8
ORIA
DATO
(H STA KB
M !"lOR#A
PROGRAMA
$%ASH
ASTA&'B
PIC18
RISC
CP(
)i*ura 1.Ar+ult,ctura PIC1S
&a memoria de program a aumenta hasta I M)ord en realldad se mane$an hasta
'4 *#%tes pero llegan hasta los 2 M#%tes con memoria e+terna! % desaparece la pa
ginad'n. &a memoria de datos RAM puede liegar hasta 1' + 2,' 4 *-%tes! % hasta
los 1 *#%tes de EEPROM.
&a pila aurnenta hasta .1 niveles. Inclu%en tres punteros FSR "ue perrniten direc
donal/ la memoria de datos de (orma indirecta Y sin #ancos. El$uego de instruccio
nes aumenta hasta las 0, instrucciones. Introduce un multiplicador hard1are 8+8.
&a (recuencia ma+ima de relo$ es de 42 M34 Y la velocidad de procesador l5ega a
los 12 M6P7con oscilador de 12 M3z. Inc1u%e peri(ericos de comunicaclon avan
zados (CAN y USB). Con la (iloso(ia tradicional de Microchip, los P8CI7 son com
pati#les con los PC1'C99y PC10C99. :demas ha desarrollado un compilador C
especi(ico para esta gama alta, e&C18.
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U Sp a r a M i c r o c o n t r o l a d o r e s P I C
Car.cteri~aH' PICI8F14%fI PIC18Fl51l1 PICI8F'~O PICIBT.IS!lI
ClImaAII.
Frceuencta ue ()("~O Vl l l z
DC4!."#I$ OC4O."l%I$ OClO'"fH$
& ' 1(
!rl).*+
l it,-.~l.-/0 PO1.BO1. PO1.BO1. PO1. BO1. PO1' BO1.
In/lrucciOn 12S2T. In3IT#cei4n12S2T. In/trurc.iOn 12S2T. Inmllccl+n 12S2T.
!
P U p nel1%l. Pilu#ena' Pi)l566' Pi) n+na.
Oe/)nnlamient+ .e Dc7)nnlamlrntD .~ Dc7)nr.aml~IO .e Dc7)nr..mien.+ .e
" !
P i #u ,P81T. OST0. PD. ,P81T. OST0. Pil. ,P81T. OST0. PI' . ,P81T. +m
i ~$ $
9C:1 ,+;cii%na%0. 9Ct.1 ,+;.+n.<. 9C:1 ,+;.+nall. M a R ,+;.OnaI0.
8OT 8OT 8OT ""OT
9+m+n. .e #%&'(# 7=>?8 #%&') 7=>?8
PrOOl'llma ,)-tt'S0 ~*
9em+rl. .. 81@1 #%&') '#+, #%&')
$ i $
P~+Arama
IIn/truc.+n .. 0
9em+ri. D%it+/ >?8 157? >?8 157?
,)l'''0
9em+ria O'IO~ =..6? 15? Z$6 !5?
~-
22l'1O"1
Inl#tul0Ciune% 1@ 1@ =! =!
Puert+B 2IS P+rliA.B.C.IC0 P+rt/ A.B.C.I20 POri. A.B.C.2 P+ru A./' c.D.2
r~mD%DI~ma.+re+ ~ ..
9?.ul+/CCP = 1 I I
l"l?.u%+.CCP ! ! I I
.I
n' eD+l'll.+/
C+mu.n%c.cl+nc/ 9SSP. COSA1I 9SSP .2#SA1I 9SSP..2#SA1T 'fSSP.C#SA1T
I /
mi.
C+n' unic( ac:+ne/ ;/; ;/;
0 1
Paral.ln
9O.l'l. AD .. 1! 1!C6~A#( S 1! CAEA:2S 17CASA:2S :1CAEA:2S
)it/
'"limer+ .e >5,8.1 2Ft.0 >S,87 2Ft+0 15 ,87 2F:0 15 ,87 2'f.0
In~lruc.+n?
Pr+AttDlllci.n SI SI SI S i
c( '
e+n )al+ .!1.. 16
Oet+c.?n .. )aDa
lSI
S i SI S i
2
ttn/itm
2rtCll;/ul..D. ,##(p i n #! 3##! =8;in PO8 4,0..;in PDIP 6,0..;i+ p o r p
~i
Ill;ln S O l e G8;inSOIC #;ln HF6 #;I+HF( "
GlI;luHFE G/Pl+ HfE .u.D' ill r+rr . w - i H n i Q F P
FiAura =. Caracteri/tlca/ .eP IC18F=4=!' P IC18F 2520, P IC18F44=! IPIC18F45=!
8.2 Organizacion de la memoria
2lPTC18P45=! .i/;+ne .e la/ /iAuiente/ mem+ria/(
J 9em+ria .e ;r+Arama( mem+ria F LASH intema .e 7=>?8 )-te/(
J Almacena in/truc.+ne/ y c+n/tante/K.at+/.
J Pue.e /er e/critaKlei.a me.iante un ;r+Arama.+r eFtem+ 3 .urante la
eDecu.?n .el ;r+Arama me.iante un+/ ;unter+/.
J 9em+ria 1A9 .e .at+/( mem+ria SRAM interne .e 1.57? )-te/ en la Lue
e/tan inclui.+/ l+/ reAi/tr+/ .e funci+n e/;ecial(
J Almacena .at+/ .e f+rma tem;+ral .urante 1aeDecuci+n .el ;r+Arama.
J Pue.e /er e/critaKlef.a en tiem;+ .e eDecuci+n me.iante .iMer/a/ i n s 4
trucci+ne/.
=14
8. Gama Alla - PIC18
Memoria EEPROM de datos: memoria no volatil de 256 btes.
Alma!ena datos "#e se deben !onservar a#n en a#sen!ia de tension de
alimenta!i6n.
I$#ede ser es!rita%lelda en tiem&o de e'e!#!i6n a traves de re(lstros)
Pila: blo"#e de *1 &alabras de 21 bits.
Alma!ena Ia dire!!i6n de la instr#!!i6n "#e debe ser e'e!#tada des&#es
de #na interr#&!i6n +s#br#tina.
Memoria de !on,i(#ra!ion. memoria en la "#e se in!l#en los bits de !on,i-
(#ra!ion (12 btes de memoria,lns./ los re(istros de identi,i!ation (2 btes
de memoria de solo 0e!t#ra/.
8.2.1 Arquftectura HARDVARD
EI PIC181252+ dis&one de b#ses dl,erentes &ara el a!!eso a Ia memoria de &ro(ra-
rna a la memoria de datos 3ar"#ite!t#ra Harvnrd):
4#s de la memoria de &ro(rama:
20 lineas de dire!!i6n.
16%8 lineas de datos 316 lineas &ara instr#!!iones%8 lineas &ara datos/.
4#s de la memoria de datos:
12 lineas de dire!!i6n.
8 llneas de datos.
Esto &ermite a!!eder sim#ltanearnente a la memoria de &ro(rama a la memoria
de datos. Es de!ir) se &#ede e'e!#tar #na instr#!!ion 31+"#e &or 1+(eneral re"#iere
a!!eso a la memoria de datos/ mientras se lee de la memoria de &ro(rama Ia si-
(#iente instr#!!i6n 3&ro!eso pipeline).
8.2.2 Memoria de Programa
El PIC181252+ dis&one de #na memoria de &ro(rama de *2.568 btes 3OOOO6-5-
1116/ 3,i(#ra */. 7as instr#!!iones o!#&an 2 btes 3e8!e&to las instr#!!iones CALL,
MOVFF, GOTO Y LSFR "#e o!#&an 2/. Por 1+tanto) Ia memoria de &ro(rama &#ede
alrna!enar .asta 16.*82 instr#!!iones.
Primero se alma!ena la &arte ba'a de la instr#!!ion l#e(o 0a &arte alta 3&ara las
instr#!!iones de 2 btes &rimero los btes menos si(ni,i!ativos l#e(o los mas
si(ni,i!ativos/. 7as instr#!!iones siem&re em&ie9an en dire!oones &ares.
7a o&era!ion de Ie!t#ra en 1a &osi!i6n de memoria &or en!ima de 51116 da $+$
!omo res#ltado 3e"#ivalente a la instr#!!ion NOP).
215
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Direcciones especiales de la memoria de programa:
Vectorizacion del Reset es OOOOH.
Vectorlzacion de las interrupciones de alta prioridad es la OOOSH.
Vectorizacion de las interrupciones de baja prioridad es Ja 0018H.
mPh
8 0 0 0 h
Fi gu r a 3. M e m o r i a d e P r o gr a m a
La memoria de programs puedc ser lelda borrada y escrita durante !s ejecucion
del programa. La operacion "ue se utiliza normalmente en tiempo de ejecuci#n es
la de lectura de tablas 0 datos almacenados en memoria de programa.
8.2.3 C o n t a d o r d e P r o gr a m a
$! %& 'contador de programa( tiene 21 bits (PCU, PCH Y %&L(. $! bit mcnos signi)ica*
ti+o del %& apunta a ,-.$sno a /O0Ds por 10 "ue es 101. $1%& se incrementa de
dos en dos. Se dispone de los correspondientes registros au2iliares PCLATU y PCLA
.H para actuar de )orma cornbinada con el %& cuando este se escribe 0 se lee.
21
r 3
%&456
53 13
3
r Nlvel 1 de ,; plla
-l
L
Nlvel31 de la !!!Ia
r +: Veclor de Rosel OOOOh
~r I~ ::a---p;! Or ld" d 0 0 0 8 h
Vec#or !n7 mupcion de $a%a pr ! ol&dad 0 0 18 11
8 emoria de %rogram. !ntelna
leldo9 como '0'
1: r: : : ; <
' -------------' 20 0 0 ( Oh
8. Gama Alta - PIC18
PCU: parte superior del PC, registro no cfuectamente accesible; las operaciones
de lectura/escritura sobre este registro se hacen a traves del registro peLATU.
Pell: parte alta del PC, registro no directamente accesible: las operaciones de
lectura/escrirura sobre este registro se hacen a traves del registro PCLATH.
PCL: parte baja del PC, registro directamente accesible. Una operadn de lee!
tura sabre PCL provoca "ue los valores de PCU y PCH pasen a los registros
PCLATU y PCLATH, respectivamente. # una operadn de escritura sobre PeL
provoca "ue los valores de peLAru y PCLATH pasen a peu $ PCH, respecti!
vamente. %l peL siempre tiene el bit menos significative a &'& debido a "ue las
instrucciones siempre empie(an en direcciones pares.
8.2.4 Memoria de Configuracion
)e trata de un blo"ue de memoria situado apartir de la posicion *''''+ dela me!
moria de programa ,mas alia de la(ona de memoria de program a de usuario), En
esta memoria de configuracion se inclu$en:
Bits de configuracin: contenidos en -.b$tes de memoria flash permiten la
configura cion de algunas opciones del P/C como:
0pciones del oscilador.
0pciones de reset.
0pciones del watchdog.
0pciones de la circuiteria de depuracion y programacin.
0pciones de protection contra escritura de la memoria de programa y
de -a memoria EEPROM de datos.
%stos bits se configuran genera1rnente durante la programadon C, aun"ue tambien
pueden ser leidos y modificados durante la ejecucin del programa.
2egistros de identificacion: se trata de dos registros situados en las direccio!
nes *3333%+ $ *33333+ "ue contienen informacion del modele y revision
del dispositivo. )on registros de slo 1ectura y no pueden ser modificados por
el usuario.
8.2.5 Pila
La Pila es un blo"ue de memoria RAM independiente, de *- palabras de .-bi -4# un
puntero de 4 bits, "5uesirve para almacenar temporalmente el valor del PC cuando se
produce una +amada a una subrutina 'interrupcin. %l "Top Of Stack" es accesible,
se puede -eer y escribir ,sera convenrenre "uitar previamente las interrupciones6.
%l puntero de pila ,contenido en el registro STKPTR) es un contador de 4 bits "ue
indica la posicion actual del final de pila. %l contenido del final de pila es accesible
mediante los registros TOSU, TOSH, TOSL.
217
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Cuando Seprocesa una interrupcion 0 se ejecutan las instrucciones CALL 0 RCALL
(el PC esta apuntando a la siguiente instruccion] se incrementa e) STKPTR y se
almacena e1 valor del PC en el final de pila. Cuando se ejecutan las instrucciones
RETURN, RETLW 0 RETFIE se copia en el PC el valor almacenado en 1a cima de
pila y se decrementa el STKPTR.
8.2.6 M e m o r i a d e Da t o s
Los PIC1S tienen basta un total de !"ytes agrupados en 1# ban cos$ con %&# bytes
cada uno. Como en el resto de las gamas$ e'isten los registros de prop#sito general
GPR y los registros especiales SFR; estes ultimos se sinian en Ia (ona mas alta (des)
de *++,,asta ***,).
-I PIC1.*&%0 dispone una memoria /01 de datos 1.&2# bytes (# bancos de %&#
bytes). 0demas dispone de 1%# bytes dedicados a los registros de funcion especial
(S*/s) situados en la parte alta del banco 1& (figura ).
"S/32405
M apa de m em oria
RAM de~os
~
DOll0tcess RAM -:
1~
"am6o+
SPR
_ ,
FflI +*l7 ,
8 +lI
100II 9
"anco 1
6PR
*0I l F 1 ' h
~.
00II
-
8aoo02
S P R
f*b %*f1I
1 ++,
:+an
.. B a n c o 2 PA
~Fl! .:f:15
"
#11100 00II ; 0010
..
$a%&o ' PR
FflI o I f f j l
#0101 00b
7 &00ft
$a%&oS
G P A
l#
F 1 ' h
&f/1
"anC+ de Al:&eso
00It
1+Il
Rapldo
$aooo6
FflI
4ra4
eo%
#0111
< +,
A&&ess RAM l( &l) *flI
"anco =
A&&ess RAM +I,- 111.5
m =f*b
00b .++t9
.SFRs/ f*lo
; 1000
I
"anco 8
0 %1 s1 ed
I
/ead u++,
2 o
>1110
$a%&:o 1'
I
fill -*0t
> 1111 003 0 %1 s1 ed
7 00II
??..
$a%&o 1*
f2 Rl
**,
S E R
, ( ( ,
Fi gu r a . M e m o r i a
Ffll!
R !M P I C "8F#2$
218
8. Gama Alta - PIC18
Para acceder a W1 byte de la memoria RAM de datos primero se debe selecdonar el
banco a] que pertenece el byte mediante el registro de selecci6n de banco (BSR) y, a
continuad6n, direccionar el byte dentro del banco. Ademas existe una modalidad
de acceso rapido a las 126 posiciones de la parte baja del banco y a los U6 bytes
de SFR !banco de acceso rapido".
#a memoria RAM de datos se compone de registros de prop6sito general !$PRs" y
de registros de %uncion especial (SFRs). #os SFRs son los registros mediante los cua&
les se puede monitori'ar(controlar el %undonamiento de 1aCPU y de las unidades
%unciona)es del pre. *n el P]+1,-./2 se situa en el bloque de memoria de 0x-,a
0x---!1igura /". 2e distinguen dos conjuntos de SFRs:
SFRs asociados con e3 nucleo del P3+4
+P54 WR*$, 26A652,7a28 etc.
3nterrupciones4 l96+09, P3*l, P3Rl, 3PR1, etc.
Reset4 R+09.
SFRs asociados con las unidades %uncionales4
6imers4 60+09, 6MRl:, 6MR3#, 6l+09, etc.
+on;ertidor AID: A<R*2:, A<R*s#, A<+090, A<+09l, etc.
*52AR64 6=R*$, 6=26A, R+26A, etc.
++P4 ++PRl:, ++PRl#, ++P3+09, etc.
M22P4 2sP26A6, 22P<A6A, s2P+-$, etc.
Puertos de E/S: 6R3sA, P0R6A, 6R32>, P0R6>, etc.
P0R6A 0x-, 2P>R$ 0x-A-
P0R6> OxF81
77
P0R6+ 0x-,2 63M*R3# 0x-+*
P0R60 0x-,? 61M*R3: 0x%+-
P0R6* O x F 8 4 -
--.--.-
63M*0# 0x-<6
6R32A 0x-@2 6lM*R0: 0x-<A
6R32> 0x-@? 777.7
6R32+ 0x-@. W*R$ O x F E 8
6Rl2< O x F 9 5 -----
6R32* 0x-@6 268P6R
O x F F c :
-igura 2. Reglstros 2-R
8.2.7 Memoria EEPROM
*l P3+1,-./2 dispone una memoria EEPROM de datos de 2/6 bytes. A1 ser una
memoria no ;olatil, los datos almacenados en ella se mantienen en ausencia de
21@
eompilador e ees y Simulador PROTEUS para Microcontroladores PIC
tension de alimentacion. EI acceso a esta memoria se realiza mediante los SFRs:
EECON1, EECON2, EEDATA Y EEADR. Esta memoria permite hasta 1.000.000 de
ciclos de borrado/escritura. Se puede leer/escribir de forma individual en cada una
de las 256 posiciones de memoria.
Cuando se realiza una operacion de escritura, la circuiteria interna del PIC se en
carga de borrar previamente la posicion en la ue se desea escribir, !a duracion de
un ciclo complete de borrado/escritura de un b"te en la memoria EEPROM suele
ser de unos # ms.
8.2.8 Modos de Direccionamiento
EI modo de direccicnamiento es 1aforma en la ue se obtienen los datos ue van a
ser uti$izados en la instruccion. E%isten # modos de direccionamiento& I'(E)E'
*E, !I*E)+!, ,l)EC*- e I',I)EC*-.
. /odo de direccionamiento inherente& en este modo, a bien la instruccion no
tiene operando 0 bien el operando viene especificado en el propio codigo de
operacion de la instruccion,
. /odo de direccionamiento literal& en este modo, el valor del operando viene
indicado de forma e%plidta en la tnstruccion.
. /odo de direccionamiento directo& en este modo, la direccion en la ue se
encuentra el valor del operando viene indicada de forma e%plicita en la ins
truccion,
. /odo de direccionamiento indirecto& en este modo, la direccion de memoria
en la ue se encuentra el dato viene especificado en uno de los registros FSRO,
FSRI Y FSR2.
8.2.9Interrupciones
Se dispone de dos niveles de prioridad&
. 'ivel alto vectorizado en la direccion ---0(.
. 'ivel ba1o, vectorizado en la direcci2n 0013(.
*odas las interrupciones pueden ser programadas con cualuiera de las dos priori
dades, salvo la interrupcion e%terna 0 4ue siempre tiene alta prioridad5. 0e puede
forzar el modo compatible 6solo alta priori dad6, mediante el bit lPeN= -.
7IE/7IE( PE*E/7IE! controlan los respectivos perrnisos globales. Cuando se
sirve una interrupci2n, automaticamente se uita su correspondientc permiso glo
bal. El servicio de interrupci2n de alta prioridad impide el scrvicio de ba1a priori
dad. Cuando se e1ecuta RETrJE se pone el perrniso correspondiente al nivel ue se
esta sirviendo.
2 2 0
8. Gama Alta _ PIC18
Todas las interrupciones disponen de 3 bits de configura cion (excepto la interrup
cion extema 0 que tiene dos):
Bit de hahllitacion de Interrupcion: permite habilitar a nivel individual la
interrupcion
!lag de interrupcion: se pone a "#" cuando se produce la condici$n de inte
rrupcion independientemente de si la interrupcion esta habilitada 0 no %ste
flag debe ponerse '0' par soft&are cuando se process la interrupcion
Bit de prioridad de interrupci$n: establece ' # la interrupcion es de alta 0 de
ba(a prioridad (este bit no esta disponible para la interrupcion externa 0)
%l )I*#+!,-.0 dispone de .0 mentes de interrupciones ' e distinguen dos grupos
de interrupciones:
/rupo general de interrupciones:
Interrupc0in de Temporl1adur 0
Interruption externa I
Interrunclon externa .
Interruption )2I" cambio en )23TB
4nterru)ci5in exrerna 0
/rupe de interrupciones de perifencos:
Interrupelen del ' ' ) loterrupcion del fallo del oscllador
lnterrupclen del 6I7 tnterrupeten del comparador
lnterrunclen de recenclon de III %8' 63T Interrunclon del CCP2
Interruption de trsnsmision de la 98' 63T tnterrupcien de escrttura en :asb;%%)32l<#
tnrerrunclen del ==' ) tnterruncten de collsion de bus (=' ' ))
Interrupcion del **)l Interruption de detecclen de anomallas en <;>7?
Interrupci$n del Temporl1ader I tnterrupclen del Temporl1ador .
Interrupclen del Temnori1ador 3
%n el compilador * se modifica la directive ItI@T?AAAAde ta; forma que se pue
den incluir las palabras clave :I/: y !6' T
8na priori dad :I/: puede interrumpir a otra interrupci$n 8na prioridad !6' T
se reali1a sin salvar 0 restaurar registros (ver el siguiente apartado)
6siB en los )I*l+ se pueden dar las siguientes interrupciones en *:
CI@T?xxxx )rioridad normal (ba(a) de interrupcion %l compilador guarda y
restaura los regisiros clave %sta interrupcion no interrurnpe a
otras en progreso
i: CI@T?xxxx !6' T Interruption de alta prioridad. %n compilador @2 guarda y
rcstaura los registros clave %sta inrerrupcion pucde interrurnpir a
[ : ;
otras en p>:Bogreso' $#0 se pcrmiie una en eler.4ramtl
rl
C;"@T?xxxxHrGII lntcrrupclen de alta prioridad EI eompilador guarda y rcstaura
los registros clave %sta interrupcion puede intcrrumpir 0 oiras en
progreso
2 2 1
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
HINT_xxxx: Priori dad normal (baja) de interrupcion, El compilador guarda y
restaura los registros clave Esta interrupcion no interrumpe a otras en pro!
greso
ItlNT_xxxx "#$T: Interrupcion de alta prloridad En compilador N% guarda
y restaura los registros clave Esta interrupcion puede interrumpir a otras en
progreso 5610 se permite una en el programa
ItINT_xxxx HI&H: Interrupcion de alta prioridad El compilador guarda y
restaura los registros clave Esta interrupci'n puede interrumpir a otras en
progreso
illPI()*"+,,- tiene las .uentes de interrupcion mostradas en la .igura '
rTimer I) .,.,..flow f .....,., srtename)
rTIIIlI/,I)%0ed1o2.u3lngTI4 E5%n/.me)
rTime, ) ovedlow
rTime, 6 c2erlIo2
rT line, 3 O'Mfflow
rExlemal i1Ie!f!!
rEIite"M 78779p/#l
rEl$IetMirlar%r!l11&
r'od ( all8 c:ange on )*.fl+
r!!I, $,; Portdata
r- na!oo to dgt)convemon . / . xr'et0
r5$m,_ved<a aia#Ie
r5$6=6tr1 #ffer ern!t,
r2'I 0I1&3 ae)1> it?
r(ept -) 3an!are on 44 )
r(@ 1Pi9.e -) 3om!are on 1- '11&
rsu: eoIIi5 r6 n
rA o2 voIlo7 e det?
r,alOI 1 detect
r8,o ee!Tom 9 rite 3:lI!1Ilir.Ite
I 431;l444,/ ,;
Fi gu r a 6. Fu e n t e s d e i n t e r l 'u p c i 6n d e l P I C 18F!"# d e s d e e l $i %a r d d e l C C S
8.".&.1 R e gi s t r o s d e s a l 'a gu a r d a
A as interrupdones se disparan durante la ejecucion de codigo del program a prin!
cipal - de otra interrupcion Esto :ace Bue durante la ejecud'n de la rutina de tra!
tamiento de Ia intermpci'n se pueda modi.icar el valor de los registros Bue estan
siendo utiliCados por otras partes del codigo
Para evitar Bue estas modi.icaciones alteren elcorrecto .uncionamiento del sistema
conviene almacenar los valores de estos registros al inicio de la interrupdon para
recuperarlos al final
$e puede salvar y restaurar el contenido de las variables deentomo (WREG, STA
TUS y BSR) en sus respectivos registros sombra, 10 Bue eBuivale a una pila de un
solo nivel
2 2 2
8. 6ama Alta - PIC18
8.2.10 Registro W
EI registro WREG pasa a ser un registro direcdonable (OxFES),por 10 que se puede
utilizar de forma explicita.
8.2.11 Oscilador
El I!1"F#$%0 permite multiples configuraciones&
LP !ristal 'aia(otencla ))ima*(.%00+,z)
XT !rtstal(-esenador (max. #.,z)
HS !ristal(-esonador /lta(0e1ocidad 2)mn. #0.,z)l
,S33 !rlstal(-esonador /lta(0elecidad coo 4abilitation de 331..max. lOl56(,z)
RC Enema -(! con FOS!l# salida eo -/7 (max. #15.I,z)
-OO Externa-(! con 1/0 en-/7 (max. #.,8)
f9:IOI Oscilador Interne FOS!;# salida en -/7 e flO en -/<2)=01$00 +,z. J/4/8 .,z)
I9:I0% Oscilador Interne con 1/0 en RA6 > -/<
E! -clo2 Extcrno con FOS!;# de salida (max. #0.,z).
E!)O -elo1 Externo con I;O en -/7 (max. #0.,z).
3a disponibilidad de oscilador intemo pennite multiples configuraciones (figura <).
- ",I
=1.%$1(.?,()cIocl@A???Bf,6,8r
3 1~hr (~_ de?,?? ???6 """"' 0 _
8.2.12 Unidades Funcionales
EI I!1"F#$%0 dispone de una serie de Unidades Funcionales que Ie permiten&
C -ealizar tareas especificas especializadas (con>ersion /ID, transmision;reE
cepcion de datos, generacion de seiiales digitales con temporizadones proE
gramables, etc).
1%$+,8
" 3 11-.llZ
Figura <. !onfiguracl7n del oscilador interno
2 2 3
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U Sp a r a M i c r o c o n t r o l a d o r e s P I C
Optimizar el rendimiento del PIC, ya que estas unidades trabajan en paraIelo
a la CPU permitiendo que esta se centre en otras tareas como el procesado de
datos, calculos, movimiento de datos, etc.
Las ilnidades Funcionales mas importantes del PIC18F!"# son$
Puerto de %I& 'oidad de Comparacion(Captura(P)* meiorada +,CCP-
.emporizador # Canal de cemunicacten serle ,'&/0.
.emporizador 1 Canal de comuoicaci1n serie *&&P
.emnorizador " *Odulo 8nslol2ico de comnaraclon
.emporlzador 3 Canal de transmislon de datos en paralelo +&PP-
Convertidor AID /cceso a memoria c4rerna +,*/-
I 'nidad de Comp5lrllci1n(CapluralP67861 +CCP-
8.".1".1 Puertos de entrada(salida
,l PIC18F!"# dispone de ! puertos de ,(& que incluyen un total de 31 lineas di9i:
tales de ,(&$
P',0.O. LL;&<,,=.0/<=&/'</
Po.0./ 8 Ll=,/& <, ,=.0/<17&/L5</
t ;
Po.0.> 8 LI=,/& <, ,=.0/</(&/'</
PO0.C 1Ll=,/&<, ,=.0/<=&/LI</ +"LI=,/& <, ,?6i0/</
Po.0.O 8 L1=,/& <, ,=.0/<=&/LI</
8I8
P O R T E 3 LL;/& <, ,=.0/</(&/LI</ +5 LI=,/ <, ,=.0/</ : ' i
.odas las lineas di9itales de ,(& disponen, como minimo, de una @uncion aItema:
tiva asociada a al9una circuiteria especi@ica del p r c . Cuando una linea trabaja en el
modo alternative no puede ser utilizada como linea di9ital de ,j& estandar.
A
F0<$B $7.$$$.5 C C 8-C ... C C C C ,
Fi u r a !. E s "u e m ad e u n t e r m i n a #
2 2 4
8. G a m a A l t a - P I C 1 8
Cada puerto de E / S tiene asociado 3 registros:
Registro TRIS: mediante este registro se configuran cada una de las lineas de
E / S del puerto como ENTRADA (bit correspondiente a '1') 0como S ALLDA
(bit correspondiente a '0').
Rcgistro !RT: mediante este registro se puede leer el ni"el de pin de #$S %
se puede establecer cl "alor dellflfelt de salida.
Registro &'T: mediante este registro se puede leer 0 establecer el "alor del
latch de salida.
TEMPomZADOR 1:
Configurable como temporl(ador$contador de )* bits.
+ispone de un oscilador propio ,ue puede funcionar como:
Sefial de relo- del tempori(ador ).
Serial de relo. del IC en mod os de ba-o consume.
re/escalar de 3 bits programable.
lnterrupcion por desbordamiento.
8 .2.1 2.2 Tem poriza dores
T#0!Rl1'+!R 0:
Configurable como tempori(ador$contador de 8 bits$)* bits.
re/escalar de 8 bits programable.
lnlerrupcion por desbordamiento2
T#0!Rl1'+!R 3:
Tempori(ador de 8 bits (registro TMR2).
Registro de periodo P(Z2.
re/escalar de 3 bits programable ():)2 ):42 ):)*).
ost/escalar de 4 bits (J:1. .. l:)*).
Interrupcion por igualdad entre TMR2 y PR2.
Se puede utili(ar -unto con los modules CCP y CCp,
Se puede utilizarcomo selia I de relo- del modulo MS S P en modo S PI.
TEMPORIZADOR 3:
Con figurable como tempori(ador$contador de )* bits.
+ispone de "arias opciones de sefial de relo- en el modo tempori(ador:
!scilador principal con 0 sin pre/escalar.
!scilador del tempori(ador ) con 0 sin pre/escalar2
225
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Pre-escalar de 3 bits program able.
lnterrupdon por desbordarniento,
h...(filet,
I : " Nolused
g." .,u.,.,
I T T a",
I rte" " "
r s 2...
e> 4 ! o "
4 " ,
#$m.
a " ,
3%m.
" & " -I o #
#%...
nm.
',(I -
32" ,
#4 4 ...
)4 U1
lZ8",
2*$ ...
Ov",flow I l" " , 2+.) ...
5 7 & " "
+#2 " &
##+2" "
LA1..:_ll!f
~ ... A'c:c_8_B~
la n , '
i . : : t C I . . . .
,,.abI ed
-" " " " " ," Ow:rllow ~Emled
Ovedll!"O#lO#f
I ntemol
.2" "
#3.#" "
l'$%$u&'(
.)
,* .2" ,
E_ 4 ... /)2" "
2#4
B u t +2.& " "
$$ll
##" #." ,,,,,
I 0" ,
#)4 m. r.1
2w
,32" ,
#
r+
r& 2li T 3 . .
Fi gu r a 9. WDT YT M R O T M R ! YT M R "
r(3
Ol,aled
l...&ema$
El-ler(a$
4 l.#ef#lal%sone
2" ,
#3#ms
4 5 #6
2)2nu
$u, %2-m:
#)u: #74 m.
r,e8uene9 . OO' )))
Fi gu r a #$. T M R %
&.'.#'.% C o n (e r t i d o r )n a l o gi c o *Di gi t a l
#7 bits de resolucion,
#3 canales multiple:ados.
226
8. Gama Alta - PIC18
Sefial de reloj de conversion conigurable.
Tiernpo de adquisicion program able (Oa 20 TAD.
!osibilidad de es"ablecer el fango de "ensionesde conversion median"e "en#
siones de referencia e$"ernas .
n% llO& & % % % & f' % .%
((((((% rlg!% r(
None
ADAl A2A3AljEO E128283818480
, ADA' A2A3A5EOE.lE2828381 B~
AOA1.6.2A3A5EOCI 2929381
ADAl A2A3A\\EOEl 28293
, AOA1A2A3A5EOEl E2B2
AOA1A2A3A5 EOl E2
ADA% A2A3A5 ) O ) &
ADA' A2A3A5EO
ADAl p.2A* A+
A, iAl A2A3
AOA1A2
AOA%
AD
% i-.l% -..
.
.,
~
/--0 (% ..l2*
.(
if1
[
OOi1 2 30(
..
4 (-
Ac05ioon line . 2ua
6
:
i~:
1 1 .1
'
Figura 1,. Modulo AD
8.2.12.4 Canal de Comunlcaclon Serle (ESA!"#
, arac"erls"icas fundarnen"ales1
7odos de "rabajo1
7odo asincrono de 8 bi"s.
7odo asmcrono de 8 bi"s.
7odo sincrono Mnestro.
7odo sincrono Escitwo.
Au"o9ac"ivacion por de"ecci:n de da"o recibido.
De"eccion au"oma"ica de velocidad de comunicaci:n (b n N d rn te ),
Transrnision ! de"eeei:n de carac"er de BREAK (bus UN).
; S2* 2"l.
S0l"d 8:00
."e~ "l#$%l
<..9.
&'Io.lI#~
l) llor4
.0; =>& (l(
Ol". ( !
; oo-..( , ?
Figura 12.
Comunlcacl$n Serle
227
Com pilador C CCS y Sim ulador PROTEUSpara M icrocontroladores PIC
8.2.12.5 Modulo Master SSP(MSSPJ
El modulo MSSP es un interfaz serie capaz de cornunicarse con perifericos u otro
microcontrolador. Puede operar en dos modos:
Serial Peripheral Interface (SPl).
III ter-ln regrated Circuit (J20.
La interfaz 12C admite los siguientes mod os:
Master mode.
Multi-Master mode.
Slave mode .
.flll
HOIdw!. SPl"l
Mo!t.!
i: .
S# $..
l! % "
et.P.o C~(.()
&'P!O &(.E.l
&I)P.*&HoO
&'P.* &+ , .!

D IV tda -..

D IV Ide -. IS
.! / # .. # 0 *: . . . . " 1
1"t
D IV tda -. ! "
&*
S- s....
UreT#$ SO"
SC L
C% &'R#(#((
F~' ...
S"mpl. %# End
!*!.!2-":*:*-*---"
)i*ura +% . M odo SPI )i*ura +" . M odo +$C
8.2.12.6 Modulo de Compraclon/Captura/PWM ,CCP)
3ispone de tres modos de funcionarniento:
Modo de &aptura: so utiliza para rnedir eventos e4ternos como la duracion de
pu5sos digitales.
Modo de &omparaci6n: se utiliza para generar sefiales digitales con ternpori7
zaciones program a-ies. Este tipo de sefiales son mu. utiles para el control de
etapas de potencia 8convertidores DCIDC, 3&9:&! AC/DC, :&93&;.
Modo P<M: se utiliza para generar senates de modulacion de anc=o de pulso
(PWM).
>arn-ien e4iste un modulo de comparacion9capturalP<M me?orado 8E&&P;.
2 2 8
8. Gama Alta - PIC18
Dispone de cuatro modes de funcionamiento:
Modo de Captura: se utiliza para rnedir eventos extemos como la dnracion de
puls os digi tales.
Modo de Comparaci6n: se utiliza para generar sefiales digitales con tempori
zaciones programables. Este tipo de seiiales son muy utiles para el control de
etapas depotenda (convertidores DCIDC, DCI C! ACIDC, ACIDC).
Modo "#M: se utiliza para generar sefiales de modulacion de anc$o de pulso
(PWM).
Modo "#M me%orado: se utiliza para generar sefiales PWM complementa
rias para el control de semipuentes de transistores!
CCPX
.;p , e ' " '9
&od..
Of!
capMe
Compate
F ' W M
Pu ls e ! " dl# M odu lato$ O!.ilpIA I%! l
" .....I& ' p '(c:%) * g
Ou l' II Dr+ ,
F u II8'dge
F u ll ($ idge $ e)e$ ee
*e+ ($ idge
PltIt A e'd C ,# u ldo-',l.e
/$ I epint , nd C to -.- !
"ir+ ( and0 ,# u tdo-' ,tale
/$ i)e "ins ( ar/ d 0 0.-.-
1)gura -2. Modulos CC"3ECC"
C0pl4ln
1000.000 2# 3. Ou t%i4O0.5
1610.000 2# 3 D U l l " " O 105
7 16.11%0 2# 3. /u t8 4O fa 5
5 lf
C& .& palato! 1 OIApu l
i:omparl6iof 6 ou fW
Eil$et Compa$ .o$
A9O
A(OorCot)lparotl* ll
A(O01 Comp.oraior 7
A(Oor 9ll'e$ Co.a# :;!
85 9
El modulo ECCP no firnciona correctamente en * a :ltima version del Prote us.
Es de esperar ;ue <abCenter < o solueione en breve.
7 7 =
C o m p i l a d o r C C C S V S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
8.2.12.7 M o d u l o C o m p a r a d o r
El modulo de comparadores analogicos contiene dos comparadores que pueden ser
configurados de distintas formas. Las entradas pueden seleccionarse entre las entradas
analogicas de los pins RAO a RAS. Las salidas digitales (normal 0invertida) son aceesi
bles exteriormente y pueden ser leidas a traves de un registro de control
r~;;I"f
Gnd
VO
Goo
1.... 1
Gnd
t> o
I~
Gnd
Fi u r a 1!. M o d u l o C o m p a r a d o r
8.2.12.8 M o d u l o d e r e "e r e n c i a
EI modulo de referenda esta I ormado por una red de resistencias y pennite selec
cionar una tension de referenda.
te
Oft .!1 1.0"
~I'
1.# .$% 1.#
1 1
1."1 &.1&
.
1."'
1.#' &.!
1.(%
1% &.""
) 1.00
tt 1 0 0
*+ &.#$
.0!
.0& , - - 2.29
.1$ 021 .#0
.&" 0." .%1
.#0 0.63 2.92
.'' 0.83
+
&1&
OV re r ..>! . . . / 0omp +1 2rel
~I
Fi u r a 17. R e "e r e n c i a
8.2.12.# M o d u l o d e t e c t o r d e $l t o %&a 'o V o l t a 'e
Este modulo program able permite* a1usuario* definir un punto umbra3 de tension
y 1adireccion de cambio. (i el dispositive experimenta un cambio en "a tension 4en
1adirecci'n indicada sobre e "punto umbral se produce una inrerrupcion.
230
8. G a m a A l t a - P I C 1 8
II I(
Figura 1 8 . HLVDYLVD
Ejemplo 1: Diseiiar ' 1 1 1 Reloj en Tiempo Real (RTC) utilizando la interrupcion del TMRI
con oscilador exterior; urilizar para la visualizacion WJ display de 7 segmenfos (figura 19).
Catnponentes ISIS: lC1 !"#$%&' R(S' )S(*+,CD ! J *enerador ISlS: ulse-
Figura 1 9. EJem pl oI
EI roteus tiene un components )S(C+,CD que es un display 7 de segmentos con el
decodificador 7 S(C+,CD integrado, 10 que facilita la simulacion.
EJempleo del TIMERl con osciJador eterior permite tra!a"ar a dic#o TI.(Rl in$
duso cuando el %I& esta en modo sleep- EI roteus no simula el oscilador etemo
del TMR1 con crista' de cuar(o (figura )0), por 1 0 que #ay que sustituirlo p*+ un
231
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
generador de pulsos con la frecuencia adecuada e inrroducirlo por el pin RCO/TlO
SO (figura 21). Al editar las caracterlsticas del generador de pulso hay que cambiar
el Pulse (H igh) uoltn]: a 5 V Y La[ I ' eq lle7 lc y a 32.7! "#.
$ara conseguir una interrupcion cada 1 seg con dicha frecuencia hace falta precar%
gal& el TMRl a O'!(((segun los calculos de la siguiente ecuacin.
Fi gu r a 2(. T M R I c o n o s c l l a d o r d e c u a r zo e xt e r n o
U2(RCOI rlOSOITI 3CKII
Fi gu r a 21. T M R t c o n o s c l l a d o r e xt e r n o s l m u hd o c o n u n ge n e r a d o r
)&* P I " 11n+rl,-.1
~~I'"
r"'h'"~=l
)/))/
fit
Au0 1
23&$o)+&)
",*"'Wdtli1Ulj
<r'M
4 $3At&&&&odoi/f&33
&5 (
r/6 /////////
73)))3S////
S < Q o t d o - "_IH'~
8)&11()&&&
~I~~d
9 3o./
PtfIM~
i.!<"l#$%&%'(%
c........ s))).6
l: : )/.eelor.
()'...... ; d.. 6
~Ii.'*l'l_' ..6
Fi gu r a 22. C a r a c t e r s t l c a s d e ! ge n e r a d o r P u l s e
232
I.II-._-PIC1I
La interrupci6n del TMR1 debera ser de alta priondad. los datos en ...... ,~''"''
gundos, minutes y horas) se deben paS "'f a dol' digitos en BCD.
NOTA
S c han utiliado los puertosA, By ! "#a $ue el % es necesario parael oscilador). &n
el puerto A de los '(%l), la patilla *A+ #a NO es un Drenadot Abierfo pero el PRO
rEUS sigue tratandola como tal, por ,-$ue haec f alta una resistenda de pull-III' a
la salida. &n realidad esto noseria necesario. 'or otra parte, 1 3 sirnuladon no es cn
tiempo real par 1 0 $ue . c/egundo de simuladon puede tardar 0arios segundos de
procesador del ordenador1 se puede comprobar la reladon en la bema inf erior del
Proteus donde nos indica el tiernpo de procesado "f igura 23).
FIgura 23. Tlempo de procesado
tlnclude ,18F4520.h>
#de!"# high_intstrue /IPara manejar inter~upciones de alta prioridad
#I$.'e delay (clock-l0000000%
int:hores O,minl.lcos ..O,segutldos-O
int !"digito, #"d~$ito,%&'
#IN'l'_2'IMERl high &lI'"errup"!(' de alta pr1.or!d)d del *+,l
VOD !nt_t"t#l ((oid)
I
//&uenta los segundos
segundost.
*+ -se.u'dos#-(0/
(m.inutos, //&uenca los l-I.inutos
233
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
segundos"O; J
if (mlnutos.... 60)
(horas++;
minutos~O;J
if (horas-~24) horBs~O;
set_timerl(O!000);
"oid B#$aB%&(in' "alor) (
()digito-O;
if ("alor*-+0)(
dol
"alor-"alor-#O;
()digiro++;
,-hile ("alor*~lO);
J..)diglto-"alor;
()digito-(sdigito/40
B%&-()digito I 1)digito;
"oid main ()
(
##%uenta las 2oras
##3re'arga el 4$(5# anres de salir
##6uneion de 'on"ersion de Binario a B%&
##7nidades en B%&
##Oeeenas en B%& (se des8la9an a la 8ar%e
#la:a del int)
##O5 entre los dos numeros 8ara o2'ener un
#lentero ;ue se 8ueda sa'ar dire'tamente 8or
#lel 8uerto
se'u8_ad'_8orrs ($O_<$<1O=)#>))_>&&);
setu8_-dt(?O4_O66);
setu8_ timel._l(4l_@4@5$<1#4l_&4>_BA_lJ ; ##4(5# 'on os'ilador eBterno
#lmodo asin'rono y 8res'aler-l
setu8_'om8arator($%_$%_$%_$%);
setu8_"ref(6<1)@)0
seru8_os'illator(6alse) ;
ena2le_interru8es(#$4_4#(@5l);
ena2le_in'erru8e)(=1OB<1);
set_%imerl(O!000); ##4(5l-6))C6-(+#4O)%l)~6DDC6-C2E6!~C2E6!-0B!000
-hlle(rrue)
B#$aB%&(segundos); ##%om-ieree los segundos de 2inario a B%&_.
O74374_&(B%&); ###os sees 8or el 8uerto &.
B#$aB%&(minutos);
O74374_B (B%&);
B#$a!%& (noreF);
O74374_<(B%&) ;
)
234
Fi gu r a 24. P r o gr a m a d e l E je m p l o t
8. 6ama Alta - PIC18
Es necesario deshabilitar el watchdog en el PIC (figura 25).
PCBP..,J..
Prog... r..
I'rocottoI Clock F,_
M._"'__
N.
r_,_s....... ,
fi,th. o! PCII".....
EdIIPl#IJI$II ....... $
Figura 25. Deshabllltacion de. Watchdog
E%e! &lo 2' Elcuador de tells ion (llO/tajr-boost conterter) COil realimenmcion de control (6-
gura 26). Compouentes [SIS: PIC18F4520, RES, [RF130, TN!CT"R, 108#015 Y C$P.
Figura 2(. E'evador de tension
NOTA
En PR"Te!S, el ! (dulo co! &arador en el ! odelo del PICI) no funciona co*
rrecta! ente en la si! ulacion, asi ta! bien el ! odulo ECCP tiene algunos &ro*
ble! as. Es&ere! os +ue ,abCenter -.solucione en bre/e.
235
Compllador C CCS y Simulador PROTEUSpara Microcontroladores PIC
Se configura el modulo ecp para trabajar en modo PWM y el comparador para
que compare la sefial de salida (dividida por un coeficiente) y la tensi6n de refe
rencia interna (en este caso se fija a 3.59 Vaunque se puede modificar su valor por
programaci6n). En cl programa se modifica el modulo de referenda con 1 1 funcion
setup!vref"# pero el cornparador se modifica directamente en su registro $%$"&
'a que con la funcion serup!comparator" existe un incorrecta asignacion de valo
res en el fichero <18F!"#$h%$
(l modulo de referenda se configura para obtener un valor de 3.59 V mediante la
programaci6n del registro $V)$"&*"bll""ll1 1 # en compilador $ de $$S+ se
tup !vref(V)(, ..-1 .- 1 1 5/V)(, !,S).
(l modulo comparador se configura para introdueir la serial e0terna por RAO y
utill&ar 1 1 referenda interna (figura "'( mediante la programaci6n del registro
$%$"&* "b"""""ll"# en $ deberla ser setup!comparator(1"! V)!1l! V)) pero
se 2a detectado un error en la asignaci6n 3define del fic2ero de cabecera (se puede
modificar utili4er directamente c5 valor de $%$"&). 6a frecuencia de la sefial
PWM se 2a fijado en 7 8-4.
C"#UT
) CM"$ CMO * 11#
)1" 9 $/S+rr: ; !!
R)+,, ClOUT
- REF
Fi.ura "'$ Modo del comparador
(/ sistema funciona en un equilibrio dlnamico# mientras la tension de salida (divi
dida) sea rnenor que la V)lf la serial PWM acnia# si es ma'or la senal PWM es ".<e
esta forma se consigue una tension continua en la salida del convertidor. <e esta
forma se consigue una - /Il01"#2#$"' V.
(s importante iniciali4ar la salida (con un label /$*S sobre el cable) para evitar
errores de convergencia en la simu5aci6n.
lIinclude <18f4520.h>
Iffuses X2', NOWDT
#use delay(clock4000000!
("y#e $%$ONO&'84
II"y#eT(I)*O&'+2
2 3 6
8. Gama Alta _ PIC18
void main () (
.int16 dl,Jtcy;
TRISA- Obll1010ll;
CMCON- ObOOOOOllO;
setup_vlef IVRIU HIHI1!1 VR"#_#$);
setup_ cimel,_% (&%_'IV_()_ 4,62,1) ;
secup_ccpl (**+_+,-);
set_p.ml_ducy (714);
//setup_compa0ato0(12_t3_1I_VR);
//*VR*24526l1771111;
/ 14 K H z
//**+l en modo PWN
.8ile (1) (
I+(*I2U&J dutty9:1;/
.,1".. dot ty<=2;
set_p.ml_dl,Jey (duety) ;
)
//$3 Voutl*oef < I=R"#
11!1 V2IJt/*o>f > VR"#=
FIgura 28.Programa del ejemplo 2
Si se quiere utilizar una VREf distinta a la interna para austar !as fina!ente la ten"
sion de salida, se puede utilizar el !6dulo #o!parador se$un la fi$ura 2%, introdu"
#iendo la sefial por MD y una referenda e&te!a por RA3.
CM2 .. CMO =100
C20UT
Figura 29. Modo del Comparador
FIgura 30. Clrculto con referenda erterna
23!
C o m p l l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
linclude <18f4520.h>
Ifuses X-,NOWDT
iuse delay(clc!-4000000"
I#y$e %&%ON-O'()4
N#y$e T*I+,-O'(-2
.id main () (
inc16 du$$y/
T*I+,- O#lllOlOll/
%&%ON- O#OOOOOlOO/
setup_tlmer_2(T2_DIV_BY_4,62,1);
se$u01cc0l(%%212W&"/
sec1034l1du$y (714);
3hile(l" (
I((%IO5T" du$$y-614,7
else ducty-O;
set_pwml_duty(ducty) ;

Fi gu r a J1. P r o gr a m a p a r a referenda edema


2 3 8
9. R e a l T i m e O p e r a t i n g S y s t e m - R T D S
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Capitulo 9
R T O S - R e a l T i m e
O p e r a t i n g S y s t e m
9.1 Introduce;on
El Sistema Operatioo en Tiempo Real simplifica el desarrollo de una aplicacion y,
mediante e1 uso de tareas, reduce los errores de programacion. En general, se pue
de definir un RTOS como un program a que trabaja en segundo plano, controla la
ejecucion de varias tareas y facilita Lacomunicaci6n entre el1as. En el caso de que se
este ejecutando mas de una tarea al mismo tiempo, el sistema se denomina multi
tarea; cada tarea tiene asignado un tiempo de procesador.
El RTOS no es exactamente !l "# $sistema operative% a pesar de que los dos se
basan en un nucleo (kernel) que se encarga de controlar la de ejecucion de las tareas,
La diferencia estriba en la carga inicial, si es solo el nucleo (RTOS) 0si ademas se
cargan otros procesos (SO). El RTOS esta pensado para trabajar con los micro con
troladores. &uede utili'arse en los &() de gama media pero donde mayor rendi
miento se obtiene es en los &() de gama alta.
E1RTOS que utili'a CCS permite eJ &() ejecute regularmente las tareas program a
das sin necesidad de interrupciones. Este se logra a traves de la funcion *+#",
*-# que actua como planificador de tareas (dispatcher).La funcion del planifica
dor consiste en dar el control del procesador ala tarea que debe ejecutarse en un
memento dado.
)uando la tarea .a terminado de ejecutarse /ya no necesita del procesador, el
control de dic.o procesador es devuelto al planificador el cual dara el control del
procesador a la sigu!ente tarea que este (ista para ejecutarse en ese momento. Este
proceso se conoce como cooperative multitarea (cooperativemulti-tnsking)
n buen ejemplo de la optimi'acion del uso del &() con el RTOS es el PiD utili'ado
en el tema sobre el modulo CCPpara regular la temperatura de un .omo $ejemplo
239
Com pilador C CCS y Sim ulador PRO TEUS para M icrocontroladDres PIC
5). Estudiando el program a realizado en esa ocasi6n se observa como el PIC esta
totalmente ocupado en realizar el proceso Pill; si se necesitase utilizar dicho m i
crocontrolador para realizar mas funciones se deberia realizar una programaci6n
bastante compleja, intentando siempre respetar el tiempo de muestreo del PID.
tilizando el!I"# en dicho ejemplo, no solo se simplifica el programa sino $ue
adernas se consigue rnejorar la respuesta en el sistema %a $ue se optimizan los re&
cursos del micro.
De '(5dos casos estudiados )tiempos de muestreo de '(( ms y ' ms), en e'primer
caso se reduce el sobreimpulso y las oscilaciones y en el segundo caso se alcanza
antes la temperatura fijada )*igura ').
Pero ademas, la utilizacion de RTOS va ha permitir afiadir facilmente mas tareas a'
PI+ como veremos en los pro,imos ejemplos.
- . / 0 . 1 . 1 . 0 1 1 0 2 1 0 1 ..0 1 c0 1 c0 - . .0 1 . .0 1 3 0 1 1 r- 0 1 0 1 0 1 0 .j.*1 1 / 1 . . ... 1 . . ... 1 0 1 0 r0 1 0 1 'I f - : : : : _ : - I! ! : " ! " " f t- I 1 4 1 - 1 1 - 1 fl1 't1 - 1 1 1 3 1 3 1 3 1 .';1 ' - - # I$
. 1 I1 1 3 1 t- ..- % - - - % - r_ - # - ! - ! f - - - - $ - - t- & & : & : & - - - % - - - : I I- ! - : & - - - r- y! - ' - I% - ' ! I" r"(Tl
'~~/~~~--~~~TO~S~~----~~II.~~/I_==~_7-_c~omn~kr~~~~rf _ )_ ! I
* ! IO +! & & & & ' 1 I m s
~~~ __,___ Wum" '+-~-T--r--~~----T-~r
oI1 I1 1 51 1 I1 1 t1 1 1 1 I1 1 t1 1 1 51 1 ;I661 / % - t1 $ - - & &1 1 51 1 1 1 1 '1 1
I
: ! _ _ _ % - - - l- - - - % - - ! - ! f _ _ I, : ! I & & - - - -
. .. 1 1 .,..,.. .7 1 .1 1 . 1 .l.....,.. .8 9.1 3 .... 9 ..1 .9- ..- 1
*igura '. !espuesta del PIDcon y sin programacion !:"#
9.2 RYOSen C
7 as funciones $ue incorpora CCSpara 'agestion del RTOS son las $ue aparecen en
'asiguiente tabla.
2 4 0
9. R e a l T i m e O p e r a t i n g S y s t e m _ R T O S
rtos_runO lnicia la operaei6n del RTOS. Todas las iareas sc ejecutan
r--- --
a traves de esta funcion.
rtos_ terrninateO Finalize In operaci6n del RTOS y dcvuclve el control al
program a principal. a la linea siguicnte de la funcion
rtos runt), E ! > como una funcion RETURN.
Itos_cnablctas!" Habilita una de las tareas RTOS. #na $%& la tarca os
'abilitada( In funcion rlos_run() llamara a esta tarea
cuando Ie to)ue por tiempo. *I parametro de esta funcion
es 0 1 nornbre de la tarea.
-
+es'abilita una de las tareas RTOS. #na vez la tarea es rtos _disnblctas!"
dcs'abilitada. In funci6n rtos runt] no llamara a esta tarea
'asta )ue vuclva a scr 'abilitada medianrc la funcion
rtos _mab/eO.EI parametro de esta funcion es el nombre
.II, la tarea.
rtos_msg_poIlO +evuelve un TRUE si 'ay un dato en la cola de mensajes
de tareas.
rtos_msg_rcadO +evuelve el siguientc byte del dato contenido en la cola de
mensajes de iareas.
I-to._/lsg_lIendtas!(byte" *nvla un byte de datos para una tares concrete. *I daio cs
situado en la cola de mcns0s j~ tareas(
rtos __yieldO .c llama desde una de las tareas y devuelve el control del
prograrna a la funei6n rtosjunt), Todas las tareas dcben
0s sigllalscrn"
tenor una lIamada a esta funcion al final de su c6digo.
Incrementa un .*12FO/O )ue se utiliza para difundir la
r-rtos_3aitscm"
disponibilidad de un recurso lirmtado.
---
*spera a )ue el rceurso asociado con el semaforo este
disponible y entonces decrementa el scmaforo para
0, I_a3aite4prc"
-
reclarnar el recurso.
5spera a )ue la *67/*.IO8 sea TRUE antes de permitir
-
)ue la tare a continue.
rtos_overruntns!" /ctorna un TRUE si la tarca 'a sobrepasado el ticmpo
permitido de ejecuci6n.
---
rtos _stafstas!(stat" /etorna una *.T 2+I.TI%2 de una tarea concrcta. 5a
cstadistica incluye cl tiempo minimo y ma4imo de
ejecuci6n de la tarea y el tiempo total )ue la tarea 'a
sobrepasado su eiccucion.
5as directives asociadas son dos9
:use rtos options"
5as options pueden ser las siguientes separadas pOl- comas"9
timer;69 donde 6 < a =" indica el TIMER )ue se utilizara para la ejecucion de
las tareas. E I TIMER seleccionado debe utilizarse para el RTOS.
minor_cycle;time9 donde TIME es un numero seguido de >( ms( ps < ns( Indi?
ca el tiempo )ue debera tardar en ejecutarse una tarea( 5os riempos de ejecu-
241
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
cion de cada tarea deben ser multiples de esta cantidad. Si no se especifica, el
cornpilador se encargara de calcularlo.
statistics: indica el tiempo minimo, maximo y el total utilizado por cada tarea.
#task (options): Esta directiva indica al compilador que la funcion que e !"#
gue es una tarea de RTOS.
$as options pueden ser las siguientes (separadas por comas):
rate%time: donde TIME es un numero seguido de !, ms, ps, & ns. Especifica
"a frecuencia con se e'ecutara la tarea. (ebe ser igual 0multiple del valor mi
nor_cycle.
max%time: donde TIME es un numero seguido de s, ms, )#lS,& ns. Especifica
el tiempo de e'ecucion de la tarea. Este tiempo debe ser menor &igua* que el
valor millar_cycle. E compilador no puede +acer cumplir este tiempo por 1 0
que el programador debe tener cuidado en asignar el tiempo de e'ecuci,n.
-demas, este tiempo activa la funcion rfos_overnm(fask).
queue%bytes: especifica cuantos bytes son colocados en la cola de mensa'es.
El valor por defecto es ..
/omo primer e'emplo se puede utillzar el controlador PID (e'emplo !) del lema
sobre el m,dulo CCP. /omparando el programa escrito en aque0a ocaston y el que
se presenta e+ora con RTOS (figura 1), se observa que el bloque del PID que estaba
en el programa principal es a+ora una tarea. E tiempo de mueslreo estaba especi2
ficado con un delaY_lIIs() y a+ora se utiliza el tiempo de e'ecuci,n de la tarea como
tiempo de muestreo. 3al como se +a comentado en el punto anterior, se +a obtenido
una rne'ora en el funcionamiento del sistema (4igura ).
#INCLUDE <16F877.h>
[device adc-l0
fuse delaycl!c"-#000000$
Ifuses %&'N()D&
I*yee &+I,C - (-87
luse ./!s/i0e.1('0i2!.3cycle4l0s$ IIDi.ec/iva del +&(,
i2/16 val!.5
i2/16 c!2/.!l5
tloet: a-0.16#75
fl!ac 81(.000065
Iloet: c966.1:1#5
fl!a/ /e0;3110i/-:D(.(5
fl!a/ .&'e&';&'<&'y&'u&5
fl!a/ ;&3l-(. 0;
fl!at e&3l-(. 05
Illec/u.a de /e0;e.a/u.a
Ilval!. del PW M
Ilc!2s/a2ces del ;.D ;a.a l((0s
Ilc;0;e.acu.a a alca2=a.
Ilva.ia8les de ecuaci!2es
242
9. R e a l T i m e O p e r a t i n g S y s t e m _ R T O S
floatmax=lOOO.O;
float min-O.O;
//limites maximo y minimo de control
Ntask(rate-lms, max#lmsj
void pid ( );
I/Indica !e la si"!iente f!ncion es !na #area
Il!e se ejec!tara cada lOOms.
void ma$n() (
#%I&'-O;
set!p(timer()(t)(div(*y(+,)+,,-);
set!p ccpl (ccp(p.m);
set!p($dc(portsrall(analo);
$etLlp_adc(JlDC_CLOCK_INTERNAL) ;
set(sdc(c/annclrO);
//0eriodo de la se$al 012 a -ms
I/2od!lo CCP a modo P W M
I/0!erto A analc"ico
//reloj eonvertidor 34 interne
I/5ect!ra por e1 canal 6
rtos(r!n ( ); I/Inicia la operaclon de %#O&
voi.d pJ.d ( //#are7 0I4
output_bi r ( PIN_CO !);
valor=read adell;
y#-v4lor8&OOO.O/-6)+.6;
r#atemp(limlt;
e#-r#-y9-9;
p#-o:lre#;p#(l,-
q2'-c(<#-e#(-);
!#=p#;a9 e#;#;
i" (u#$#%""la&) '
!#-max; I
else (
() (!#=min)I
!#=min;>
control-!#;
set(p.ml(d!ty(control>;
p#( I-p#;
e#(lre#;
Fi g ur a 2. Pr og r a m a de l PIO con R T O S
En el ejernplo se puedc afiadir una tarea que permita visualizar en un display LCD
la temperatura que tiene en homo (figura 3). A rnanejar varias tareas es convenien!
te utilizar la funci"n rtos_yieldO para devolver el control a# planificador de tareas
2 4 3
Ccap||a1cr C CCS Y S|au|a1cr PR0TLuS para H|crcccr|rc|a1cres PlC
y coord inal" las tareas mediante las funciones rtos_waitO y rtos_signaJO; para utili
zar estas dos funciones se debe utilizer un "sernaforo", el cual permite a una tarea
utilizar til, recurso compartido Oesperar en eJ casu de que este en uso.
!ll|.e
- - -
. 211!!!!""r!"!!!,1!!#!!!#!!!$
% .e &
v
l T"""'" 35.64 l
~~~~t~ 85Sa~SgQ
- |J ," '#$#$ffrr!
- BAr'
( 1. l,
F|gura 3. Dcs |areas: PlDy DlSPLAY
)n este e*emplo no se utlliza r|rgur recurso compartido, p0|' 1Oque no se utilizan
las $unciones rtos_waitO + rtos_signa$O.
UNCLUDE <l6F877.h>
#device adc-10
#use delay(clock-4000000)
#fuses .'(2',NOWDT
#include <lcd.c>
duse x cos {| if||ei=0, mi;I)cr_ cycle-lms)
,+ te TRISC - Ox87
Jnc16 ve Lo r, !"t.r!l#
float 0-0.1243
floa t !=t), 00006
2--
float c-62.1S14;
float temp_llmit-SOO.O;
itoat: rT,oT,pT, qT,yT, UTi
llost pT_l-O.O;
floltt (':7_1-0. 0;
ilo~t m~x-lOOO.OI
float min-O.O;
float tempera;
tCaSk(rate-lmo,maxElms)
void pid ( ),.
voui dl:oplay( );
vai d nIlI i n(I (
Ic::d jnlt ();
TRISC-O;
seWp_ciml'1l_2It2_dl v_by_ 4,249,l),.
SEltUP. cCl'l (ccp p'm);
sotp_dc_po!ts(all_d"alo#l;
....tp_itdc ($%C'_CU)(&'_I()*+($,- &.
set_3d !annel (");
":os_!" ( );
void p.1d ( I
{
#alor-read_ad(l;
yT"valol $SOOO. 01024.0;
!).cemp_llml tl
eT-rT-%T;
p).b/e)0p)_-;
qT-c! t"r-"r 1);
)1p)0.a'e)02);
~3' (2'4ma5)
&T-max; I
else (
if ()6mi"l(
).mll1; -
cont.roi#ur,
9. R e a l T i m e O p e r a t i n g S y s t e m _ R T O S
Tar"a a"l $%&
I7)d!ed d~l 'IS()*+
,,Tarea del (I'
245
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d D r e s P I C
set_Plvml_duty (control);
pT_l=pT;
eT_l=eT;
rtos_yie1d ();
)
liSe devuelve e1 c~ntrol al planiilcador
void display () IITarea del DISPLAY
1cd_ oto!y (1"1) ;
tempera=yTII#;
prin tf(lcd_putc" $Temp=%&$" tempera) ;
rtos_yie1d() ; liSe devuelve e1 control al p1aniticador
FI gu r a 4. e l p r o gr a m a
Las variables se pueden definir de forma global a particular como en cualquier
funcion, En el caso de variables globales, todas las tareas pueden utilizarlas, perc
en el caso de funciones particulates se pueden utilizar Jas funciones de correo:
rtos_msg_pollO, rtos_msg_readO y rtos jnsgsendltask.byte para transferir in!
formacion. En el ejemplo anterior la variable utilizada es global, por 10 que puede
ser utilizada por las dos tareas, pero en el caso de ser local se podrian ulilizar las
funciones de correo "aunque la variable sea global tambien se pueden utilizar.
En el caso de variables globales puede ser interesante el usa de estas funciones en
aquellos cases en los que una de las tareas este esperando que la variable modifi!
que su valor a traves de otra tarea.
#ara utilizar estas funciones en el ejemplo se modifica la llamada a la tarea DiS
PLAY $se anade una variable para el correo "figura %.
INT16 valor_l;
'tas((rate=l#ms"ma!=lms")ueue=*)
void display+ );
II,-1a de 2bytes.
Fi gu r a 5. M o d i i c a c i o n e s d e l p r o gr a m a II,
&e realiza el envio de la variable valor desde la tarea PID y se recibe en la tarea
DISPLAY para su posterior uso "figura '. El resultado es similar al del ejemplo
anterior.
void pid ( )
valor=read_adc();
yT=valor*5000.011024.0;
rT=temp_limit;
!4"
9. Real Tim e Operating System _ RTOS
rtos_msg_send(display,valor);
rtos_yield ();
IIEl resto de codigo como siempre
IIEnvia los 2 bytes de valor a DISPLAY
void display t )
valor l~rtos msg_read(); IIecibe los 2 bytes de !alor
tempera"valor_l#Soo$%&&%'($ %;
lcd_goto)yll,l);
printf(lcd_putc, "Temp='l.F", tempera);
rtos_yield () ;
Figura 6. Modiflcaciones del program a (If)
Para term inar con este ejemplo se ha aiiadido una tercera tarea que permita modi
ficar Ja temperatura limiteen cualquier momenta mediante un boron en la patilla
REO. Para esta tercera opcion se ha cambiado a un PIC18F42!. Como "a se ha
comentado# el RTOS adquiere toda su eficiencia enlos PIC de $ama alta %Ii$ura &'.
Figura 7. Tres tareas( PI! ISP"#$ $ T%&"#
247
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Dado que en este caso se modifica una variable en dos de las tareas es conveniente
utilizar las fundones rtos_wait() y rtos_signalO (i.gura8).
#INCLUDE <18F4520.h>
#device adc=10
luse delay(clc!=4000000"
II#uses$%&N'(D)I)
li*clude <lcd.e>
luse +,s(,i-e+='&-i*+.ycle=l-s"
luse s,a*da+d.i(/"
0use s,a*da+d.i(e"
#deE*e /' 1IN./'
i*,12 val+3
i*,12 c*,+l3
#la,a=0.1243;
#la,4='.000025
#la,c=22.15143
#la, ,e-6.li-i,=50D.03
#la,+)I)&e%&6%&7%&y%&u)I)3
88lec,u+a de ,e-6e+a,u+a
88val+ del 1(9
88c*s,a*,es del 1ID
88,e-6e+a,u+a a alca*:a+
uos t 6%.l='. 05
110at e%.l='.'3
#la,-a;=1000.03
#la,-i*='.'3
#la, ,e-6e+a3
i*,12 ,.l3
i*e8 sem;
88va+ia4les de ecuaci*es
881i-i,es -a;i- y -i*i- de e*c+l.
881a+a visuali:a+ 1a ,e-6e+a,u+a del h+*.
/ /Para visuali:a+ la tempera ,u+a li-i ,e.
88<a+ia4le de se-a#+.
#,as!(+a,e=i-s&-a;=l-s"
vid 6id ( "3
I,as!(+a,e=l'-s&-a;=l-s&=ueue=2"
vid dis6lay( "3
#,as!(+a,e=10-s&-a;=l-s"
vid ,eclad ( "3
vid -ai*e" I
lcd.i*ic ("3
248
9. Real Tim e O perating System _ RTO S
setup_tcer_2{t2_cv_oy_~,2~,iJ; Iperccc ce 1a se:ai Ptti~ aics
setup_ccpi {ccp_p:c;; I Mccuic P a modo Pt-iM
2 4 9
ser.up_acc_pcrts{aii_a:a1cj;; //Puerto A a:a1jcc
setup_ac{AD_~LO~iNTERNALJ; //reicj cc:verc~ccr AD :cer:c
set_acc_c:a::ei (0) ;
sec..l;
rtcs_ru: { ;;
vcc pc { ;
(
;rtos_l~<Jjt {sec;;
vaicr-reac_acc{;;
yT~vaicr5000.0/102~.0;
rT-tecp ict;
//Lectura c~ ia tecperatura
/ /convers ion a mV (0. 25V a 250mV)
eT-rT-yT;
pT"V'eT+pT_i;
qT"c' (eT-eT_1),.
uT-pT+a 'eT+gi';
//aicuic errcr
//Jicuic cei terc:c :tejrai
//1cuic cei terc:c cervatvc
,
//aicuic ce 1a saica PID
if (uT>mllx)
uT~cax;,
eise I
if {uT<c:;
ur-min; }
//S11ca prD s1 es caycr gue e1 MA X
//Saica prD s es ce:cr gue e1 MIN
cc:trci-uT,. //Tra:stere:c2a ce saica prD 8 se~ai P.M
set_p:ci cuty{cc:trci;;
pT_i-pT;
eT_1-eT;
/ /cueraer va:aoies
rrcs_sj:ai{sec;;
rtcs_yieic{;;
vcc cspiay {;
recs_:at;sem) ;
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
tempe==yT/IO;
lcd_gotoxy(l,l);
printf(lcd_putc, Temp=%F\n, tempera);
t_l=temp_limitllO;
printE(lco_putc, "Limite= %u", t_l);
rtos_signal(sem);
rtos_yield();
void tecladoI)
reos_a!ttsem);
if (input(PIN_C4)==O)temp_limit=t~o_limit+lOO;
if (temp_limit > "###$#) temp_limi!="###;
rtos_signal(sem);
rtos_yield() ,%
J
Fi gu r a S . P r o gr a m a c o n P I C ! S F45!
250

1 0 . U S B - U n i v e r s a l S e r i a l B u s
Ca pi tu l o 1 0
U S B - U n i v e r s a l S e r i a l B u s
NOTA DEL AUTOR
Cuando este libro estaba practicamente en imprenta, LabCenter .realizo una
actualizacion de la version 7 con unnuevo (y esperado) modelo: e] USB(USB
CONN). CCS Cya proponia ejemplos y suministraba librerias para utilizar USB
ue no se podlan simular en !S!S. Con este nuevo modele se puede abandoner
ya "asimulacion por puerto serie #S$%&% (la mayoria de los 'C ya no disponen
de este puerto) y a(rontar el USB.)l estar el !ibro en imprenta, solo *e podido
mcluir al+o de teoria basica de USByalgun ejemplo sencillo sobre emulacion
#S$%&% can USB, espero ue si *ay mas ediciones de este libro pueda completar
y aumentar este capitulo.
10.1 Introduccio"
E1 Bus Serie Universal (ue creado en los aries 90 por una asociacion de empresas con
laidea, entre otras, de mejorar las tecnicas plug-and-p7ay, es decir, permitir a los dis-
positives conectarse y desconectarse sin necesidad de reiniciacion, con(i+urandose
automaticamente al ser conectados, ademas se le doto de transmision de ener+ia
electrica para los dispositivos conectados.
.ste bus tiene una estructura de arbol y se pueden it conectado dispositivos en
cadena, pudiendose conectar *asta "%7 dispositivos permitiendo !a trans(erencia
sincrona y asincrona.
Se puede clasi(icar se+un su velocidad de trans(erencia de datos (desde /ilobits
basta me+abits): Baja 0elocidad (".1) utilizado para los Dispositivos de !nter.(az
2umana (HID) como ratones, etc., 0elocidad Completa (1.1) y )lta 0elocidad (%.1)
para cone3iones a !nternet, etc.
251
C o m p l l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Flsfcarnente, los datos del USB se transmiten por un par trenzado (D+y 0-) adernas
de la rnasa y alimentaci6n (+5V). Los conectores estan sujetos al estandar (tipo A,
tipo B).
USB es un bus punro a punto, con inlcio en e HOST y destino en un dispositi!o
o en un HUB; s6"0 puede e#istir un unico HOST en la ar$uitectura USB. HOST se
define como el dispositi!e maestro $ue inicializa a comunicacion y HUB es el dis%
positi!o $ue contiene uno 0 mas conectores 0 cone#iones &acia otros dispositi!os
USB; cada conector es un puerto USB. '( protocolo de cornunicacion se basa en el
paso de testi)o (tokel1), donde el HOST proporciona ellesti)o al dispositi!o selec%
cionado y este (e de!uel!e el testi)o como respuesta.
10.1.1 M i gr a c l 6n d e R S 232 a U S
La (nterfaz serie *+-,-,esta desapareciendo practicamente de los ordenadores per%
sonales y esto supone un problema, .a $ue muc& as de las aplicaciones con micro%
controladores utilizan este bus para su comunicacion con el /0. La soluci6n ideal
es mi)rar a una interfaz 1+B. e#isten distintas forrnas de &acerlo. 'l metodo mas
sencilo es ernular *+-,-, con el 1+B, con la !entaja de $ue el /0 !era la cone#ion
1+Bcomo una cone#i6n 023 *+-,-,4no re$uerira cambios en el soft5are e#is%
tente. 2tra !entaja es $ue se urilizan drivers suministrados por Windows, por "0$ue
no es necesario desarrollar uno ad hoc; estos drivers son el usbser.s.s . el ccport.
s.s. Ademas, puesto $ue el protocolo 1+B maneja comunicaciones de bajo ni!el,
los conceptos bnud rate, bit de paridad . control de flujo para el *+-,-,.a no im%
portan.
'0.1.1.1 USB CDC ,CommunIcatIon Device Class'
1na clase 1+B es una a)rupecion de dispositi!os de caracteristicas comunes, es
decir, utilizan una misrna forma de comunicarse con el entomo. La dase de dis%
posltl!o permite conocer la forma en $ue la interfaz se cornunica con el sistema, el
cual puede localizar el driver $ue puede controlar la conecti!idad entre la intcrfaz
y el sistema.
USB solo permite a driller comunicarse con el periferico a tra!es de las tuberias
(pipes) establecidas entre el sistema USB y los endpoints del periferico. Los tipos de
transferencia a tra!es de las pipes dependen del endpoint y pueden ser6 Bulk, Control,
lnierrupt e Isochronous. 1na tuberia es un enlace !irtual entre el HaSTy el dispositi%
!o USB, donde se confi)ura e anc&o de banda, e tipo de transferencia, (a direccion
del flujo de datos . el tamafio del pa$uete de datos.
'stos enlaces se definen y crean durante la inicializacion del USB. 1n endpoint es
un buffer dentro del dispositi!o 0periferico donde sc almacenan pa$uetes de infor%
macion7 todos los dispositi!os deben admitir el endpoint 0, el cual recibe el control .
as petidones de estado durante la enumeracion del dispositi!e. 0uando se conecta
un dispositi!e al HOSTse produce la enurneracion en la cual el HOST interro)a al
2 5 2
10. USB - Universal Serial Bus
dispositive sobre sus caracteristicas principales, asignandole una direccion yper
mitiendo la transferencia de datos.
La especificacion Clase de Dispositivo de Comunicacion (CDq define algunos rna
delos de comunicacion, incluyendo la comunicacion serle. Windows suministra el
driver usber.sys para esta especificaci6n. Para la especificacion CDCse necesitan
dos interfaces USB, primero Ia interfaz C071Lmunicai ion Class usando un Iinterrupt
endpoint de interrupcion yel segundo es lainte.faz Data Class usando un !"# bulk
endpoint y un I bulk endpoint. $sta interfaz es utilizada para transferir los datos
que normalmente deberian ser transferidos a traves de la interfaz %&'()(.
Desde el punto de vista de sistema "&*, el dispositive puede tener distintas con
figuraciones, para cada una de las cuales puede funcionar de forma distinta. Los
dispositivos suministran +a informacion necesaria al sistema "&* a traves de los
descriptores, estes contienen unos campos que permiten al sistema clasificar al dis
positive Y asignarle un driver. La primera informacion que necesita es +adel fabri
cante yproducto USB vendor ill - !"# -el #roduct "D $ #"D%. $l .IP es un numero
de +6 bits asignado por el USB implementers &orum USB$"&% ydebe ser obtenido por
el fabricante del dispositive "&*, cada !'D puede contener 6/./)6 PID diferentes
al ser rambien un ruimero de +6 bits. 0icroc1ip suministra su .IP ylos PID para
cada familia de PIC con "&*.
(icroso)t Windows ((222 23P4 no tiene un fic1ero "Inf estandar para e+ driver CDC,
asi que es necesario suministrar este fic1ero cuando Be conecta un dispositive "&*
p!I primer a vez al sistema. 0icroc1ip suministra e+ fic1ero mc1pcdc.inf necesario
para sus dispositivos PIC.
10.2 USB con ISIS y CCS C
10.2.1 USB en ISIS
LabCenter 1a incorporado, en su version 5, dos 1erramientas para Ia simulacion de
circuitos con "&*6 el conector "&* Ilamado "&*C! (figura +4, el cual permite
conectar y desconectar e+ bus y el visualizador de "&* Ilamado 7nalizador de #ran
siciones "&* (figura (4, este ultimo se debe adquirir como un modulo aparte.
Figura 1. USBCONN
7demas, elsoft8are de L7*C$#$%incorpora los drivers necesarios para la simu
lacion con "&*. Para instalarlos hayque ita +aopcion INIGO> PROGRAMAS>
253
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
PROTEUS 7 PROFESS10NAL> VIRTUAL USB> INSTALL USB DRIVERS. Tras este
proceso ya se puede trabajar con el USBCONN.
Fi gu r a 2. An a Ji a d o r d e T r a n s l c l o n e s U S !
10.2.2 USB en CCS C
CCS suministra Iibrerias para comunicar PIC con el PC utilizando el bus USB, me
diante periericos Internes !amilia PIC"#$%&&' ' el PIC"(C7(&) 'mediante dispo
siti*os e+ternos al PIC !del tipo USBN,('-).
.as librerias suministradas son/
0 pic1usb.2/ driver de capa 2ard3are de Ia amilia PIC"(C7(&.
0 pic1"#usb.2/ driver de capa 2ard3are de "aamilia PIC"#$%&&'.
0 usbn,('+.2/ dtioer de capa 2ard3are para el dispositi*e e+temo USBN,('-4
USBN,('%. 5e esta orma, se puede utiliza el bus USBen cual6uier PIC.
o usb.2/ deiniciones y prototipos utilizados en el driver USB.
0 usb.e 7l USBstack, 6ue maneja las interrupciones USBy el USB Set! Re"ests
en E#d!oi#t O.
0 usb1cdc.2/ driver 6ue permite utilizar una clase de dispositi*o CDC USB, emu
lando un dispositi*e 8S9-9 :"'muestra como un puerto COM en Windows.
.as unciones mas .importantes, entre otras rnuc2as, son/
o usb1initO/ Inicializa el 2ard3are USB. 7spera en un bucle ininito 2asta 6ue
el perierico USB es conectado al bus !aun6ue eso no si;niica 6ue 2a sido
enumerado por el PC). <abilita y utiliza la interrupcion USB.
0 usb1tas=O/ Si se utiliza una deteccion de cone+ion para la inicializacion, en
tonces se debe llamar periodicamente a esta uncion para controlar el pin de
detecci(n de cone+ion, Cuando el PIC es conectado ' desconectado del bus,
esta uncion inicializa el perierico USB 'resetea el USB stack y el perierico.
2"#
10. USB _ Universal Serial Bus
usb_enumeratedO: Devuelve un TRUE si el dispositivo ha sido enurnerado
pOJ; el PC y, en este caso, el dispositive entra en modo de operacion normal y
puede enviar y recibir paquetes de datos.
Eisten !unciones esped!icas para CDC, entre elias:
usb_cdc_putc"c#: Es identica a putic) y envia un caracter. Coloca un caracter
en el bllffer de transrnision: en el caso de que este lleno esperara hasta que
pueda enviarlo.
usb_cdc_$etc"c#: Es identica a gel(c) y lee un caracter. %edbe un caracter del
bllffer de transmisicn: en el caso de estar vacio esperara hasta que se reciba.
CC& aporta varlos e'emplos de aplicacion de (&) se$un las clases de dispositi*
vas, par e'cmplo para el CDC encontramos el E+_(&)_&E%,-l.C y el E+_(&)_
&E%,-./.C.
E'emplo 0: Euuiar los datos de 000001 conversion AD nl puerto USB como Virtllal COIIIIll.
Contpoucnies ISIS: PICIBF4550, USBCONN, POTlN, CE, RES ! ED"BUE#
El e'emplo se basa en la aplicacion para CDC, E+_(&)_&E%,-./.C, donde el (&)
emula un puerto serie CO2. De todas las posibles clases de dispositivos, la CDC
es 18 mas sencilla de aplicar y entender "dada su sirnilitud con el !undonamiento
de un puerto serie#. E, e'emplo E+_(&)_&E%,-./.C perrnite la visuali3acion de
una parte de la memoria EEPRO$ del P,C. .a estructura de librerias de CC& se
muestra en la !i$ura 4.
EX_USB_SER1AL2.C J
#Include <18 !""0.#$
#include <us%_cdc.#$
I
IIlnclude <us%.#$
I USB_C&C.' I
#Include <(ic18 _us%#$
#Include <us%_desc_cdc.#$ )
#include *use.c$
+
USBe,-
#.nclude <us%.#$
i5 :,
iii
IUSB_&ESC_C&C ' / 1
6i$ura 4. (brerlas en E+,_CDC_&E%,-./.C
&e va ha modi!icar este e'emplo para adaptarlo a 078ejemplos del tema 1 sobre los
puertos sene. -dernas de modi!icar el pro$rama principal, hay que reali3ar una
modi!icacion importante en la ,ibrerla de descriptores (&)_DE&C_CDC.9, donde
se indica, al !inal de la libreria, cl !abricante y el producto ":lP;P,D#; en este caso
aparece:
2 5 5
C o m p i l a d o r C C C S Y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
Ox61,Ox04, //vendor id (Ox04D8isMicrochip, or is it Ox0461??) =8,9
Ox33,OxOO, //product id 10,11
Para trabajar con Microchip hay que indicar en el identiIicador de Iabricante el
VENDOR TOOx04D8 yen el identiIicador de productor elPRODUCT lD OxOA para
laIamilia de los PICI8. Es decir, esas dos lineas deben de quedar asI (es aconsejable
hacer una copia de la Iibreria original antes de proceder al cambio):
OxD8,Ox04, //vendorid =8,9
OxOA,OXOO, //product id 10,11
Estes dos identiIicadores permiten la conexion con el driver de Windows; al iniciarse
1a conexion, Windows recibe los dos identiIicadores y localiza el driver necesario
para Ia conexion. En el caso de no localizarlo, permite 1aInstalacion de los recursos
necesarios para Ia conexion: en este caso a traves del Iichero mchpcdc.inI suminis-
trado por Microchip.
Por otra parte, alIinal de la libreria se encuentra la descripcion textual del disposi-
tivo que sera detectado por WiI,dowSi para ello utiliza USBSTRIN!DESC" Se pue-
de modiIicar a gusto del usuario, teniendo cuidado con la deIinicion de Ia posicion
de s t:'in g s # sus tamaIios.
char USBSTRlNGDESCOFFSETOO,4,12I;
char const USBSTRINGDESCO
//stringO
4, //length oI string index
USBDESCSTRlNGTYPE, //descriptor type Ox03(STRING)
Ox09,Ox04, //MicrosoIt DeIined Ior US-English
J/string 1
8, /Jlength oI string index
USBDESCSTRINGTYPE, //descriptor type Ox03(STRING)
'C',O,
'C',O,
'5',0,
//string 2
$0, Illength oI string index
USBDESCSTRINGTYPE, //deseriptor type Ox03(STRING)
'C',O,
'C',O,
256
10. USB - Universal Serial Bus
El ejemplo (figura 4) realiza la lectura de una sefial analogica por el canal ANa y
envia el dato por el USB emulando RS-232, de forma similar a] ejemplo 2 del tema
7 el dato se enviara solo en el caso de !ue vade la tension"
#$#,%,
r #,%,
#R#,&,
#$#,%,
#2#,%,
#3#,%,
#2#,%,
, #,%,
#%#,%,
'e',O,
'm',O,
#%#,%
I i
,""-----, R'l
BAn
(
R2
(
(
" ' "
R1
D1
LEQ.81i
CcmElClOlUSB """
)igura 4" Ejemplo ,
*ligual !ueen el tema 7 sepuede utilizar elHyperterminal de Windows (% cual!uier
otro visor del puerto serie) para visualizar los datos" En este caso, +ay !ue esperar
a conectar el ,S- para !ue aparezca el puerto en las posi.les cone/iones del 0y1
perterminal.
!"#
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
t!"".f:tr~
D~ )30613
Volt age" 1.BOV
Vo 1t 69""1. 4 9 V
Vol tlllle-2.49V
Vollagea2.99V
Volldll~~3.49V
Vollage=2 9 9 V
Voltage=tl n ov
Fi gu r a 5. Hyp e r t e r m i n a l c o n e c t a d o a l p u e r t o Vi r t u a l
#include <18F4550.b>
Ifdevice adc=10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIVl,VREGEN
luse de1!"#l$#%&48000000'
(de)*+eOSB,CON,SENSE,PIN PIN,B-
#include <uso_cdc.h>
.$*d maln () (
B/TE *, j, dd0e11, value;
int16q,ql;
float p;
21&03
setup_ddcyorcs (ANOI!!_""#;
1e456,d#"7DC,CLOC8,INTERN7L'3
set adc channel (0# ;
us$_cdc_init(# ;
us$_inic (% &.
do
us.lr_tas' (# ;
(if 951$,e+5:e04ed"''
2 = 0ed ade(#;
if t)l=)l # I
p = 5.0 ; g <10-4.03
60*+4)"51b,#d#,654#, "\n \r olta*e =iOl.+f,& p#;
258
I
ql=q;
delay_ms (SaO);
) while (TRUE);
10. U S B _ U n i v e r s a l S e r i a l B u s
Fi gu r a 6. Pr ogr a ma de l e je mpl o 1
La configuracion dePIC18F4550 es la habitual, tan 5610 debeos tener en cuenta
!ue la frecuencia debe ser de 48 "#$ %ero !ue utili$ando el bit de configuraci6n
PLLS se %uede e%lear un cristal de cuar$o e&terior de '0 "#$. (s i%ortante
configurar el %indedeteccion del sentido detransision (USB_CON_SENSE_PfN)
%ara %oder controlar la cone&i6n 0descone&ion delPIC al)*+,la cone&ion fisica se
uestra en la figura 4. -ntes de utili$ar el %uerto en el %rograa hay !ue iniciali
$arlo (usb_cdc_initO y usb_initO) ., /u. i%ortante/, co%robar !ueha sido erru0
erado %or el HOST (usb_enumea!te"d(#$Con e1 fin de iniciali$ar 0 resetear La co0
ne&ion con el )*+sedebe reali$er una llaada %eri6dica ala funcion usb_tas%O$
&l inieiar la siul ad on con e1PL&' del I*I*, el sistea %eranecera inactivo hasta
!ueseconecte el )*+C233 4con las flechas ro5as corres%ondientes). 6ras conec0
tar, %or %riera 7e$ el )*+, (ind)*s solicita la instalacion del di+e 4sedebe indi
car el directorio donde seguarde el fichero ch%cdc.inf) 4figura 8 y figura 8).
1"c9..: ob.,,;;
"- ......... ~-llI>.< _~~ ..
.:.-~~k.Mt,_...~.a... .. ".... ~ _____
Fi gu r a 7. Pa s os e n l a i n s ta l a ci on de l dr i v e r
2 5 9
Com pilador C CCS Y Sim ulador PROTEUS para M icrocontroladores PIC
Tras esta instalacion y cada vez que se conecte el USBCONN aparecera el puerto
COM virtual en eJ adrninistrador de dispositivos de F|ocors (Figura 9). Tarnien
desaparecera el COM virtual cada vez que se desconecte.
!.".
flndfl:UII:iM l dol AiI""onr. pall!
#$%&ttN!'."()UM(* .. ntO+l# ... .uo
.... " ................ # .$ % .#
Figura ,. -asos en la )nstalacl.n +contJnuacl.nJ
# .:&# ""...
.... niIJlIotHotI,i
(((/))0.dc"(((.1.""
2/(/.C)./3./(4.1S)i
':()*irf." AlAf+"
5/6 /o$./ ...... /'
5 c6 5 5 6 /..'...
, #
, ......
' l(")t.!(rc5 t))!/0!7/
......#
1 !(0."!(//'/! 2
. . J I , i 5 i;; i
"")4.tpt6 8....' ))I"
JI" " ~ " (11'U5 l!
, )"%
Figura 9. -uerto COMvirtual en el ad9inlstrador de disp!!sitivos
:n este instante el -)C queda conectado al -C y se puede arir un visor del puerto
serie para co9proar la transrnision (+igura ;).
:n los e<e9plos de CCS ta9ien se pueden encontrar aplicaciones para Vcss S|orc-
e lev|ce C|css (MSO) y uooco lo|er/cce lev|ce C|oss (=J>).
:<e9plo ?5 loo|cr |os co|os ce o||c coovers|oo il c| oer|o lS8 C0ll10 |r|oc| Cooo
crc ce|eoo|ocr |c reoo|es|c e|| |c:o cc|er|o ce """" |ooo (+igura "@). Cooooeo|es lSlS.
llCIl1::o lS8C0!! Clll klS lll-8lll SF-Sll1 ! 0l!
:) e<e9plo es si9ilar aJ anterior' en este caso se utiliza lCll con |soc| 8cs|c de
tal +or9a que se pueden guardar los datos de tie9po y te9peratura en una #o<a de
calculo y representarlos gra+ica9ente.
2 6 0
10. USB _ Universal Serial Bus
FIgura 10. EjompIo 2
Para utIIIzar oI IIchoro on Excel, HORNO.XLS, so dobo conIIgurar oJ puorto sorIo
vIrtuaI: on oI IIchoro osta doIInIdo como oI puorto 9 y adomas habIIItar Ias macros
on oI caso do tonor ExcoI protogIdo (Herrtnnientns > Macro> Seguridad >Medin/Bnja).
Para carnbIarIo a Ia rnodIda doI usuarIo hay quo abrIr oI odItor do Visual Basic (He
rramienios > Macro> Editor de Yisua! Basic), buscar Commort - 9 YsustItuIrIo por oI
nurnoro adocuado do puorto sorIo vIrtuaI (IIgura 11).
Pt ,voto ~u.b (cmncuadIhIttont CIJCk()
(OtmJaudDIIttOnI. .t~kCoIt1I.. PIIJ' 'OI 255, 0)
CO~\It.to:.I..ckC010I" - PCl'l'~OO, !""# '/OO)
VQl~h,.~t,("n.I.I") .(oJ1Jl'llI\a~"''') .II\Jt'trII'rrOt."'VIat .. "0.000"
Xork.b~.t.("HOIst). (01w rrn.e ,lfr", .JJV1ll:+trP'OLIIIIIIt .. 0. (lo"
lt PUOC'to 0 TboII puerto 1
Xnb ItSCOImlI
.Sott1no~ - "'COO,tl,S, l""
.COb:IIJ'Iort - 9 !!"
.AThro.boIa - 1
-lnput ItotOto.. c:cbCIInpcu:I'locIothnar.,
.lnpuc"t..n - 0
.PortOpon .. Truo
#n$ 1%1tl&
% 0
#nOl Su'
rrIX~to SuI:) CC'M'l'loItCISur.r:on2: CI,oIcL
(oII~nd,D\IttonI. ookCoIQr - ~C' ,$, ISS, 0)
C011ItIandDuL.On2.ht:kCoIor - PC;' 1200, 200, ::00)
Flgura 1l. ModIIIcacI6n doI puorto sorto
#include <l8F45S0.h>
#device eac l"
#fuses HSPLL,NOWDT,NOPR!"#T,NOL$P,NOD"%&', &S%D($, PLLS,#P&D($ l,$R"'"N
)use del*+,clc-.48000000/
#define &S%0#ON0S"NS"0P(N P(N0%1
2 6 1
C o m p i l a d o r C C C S y S i m u l a d o r P R O T E U S p a r a M i c r o c o n t r o l a d o r e s P I C
#1nclude <usb_cdc.h>
void main() (
1nc16 g,n:
float p;
int qL;
tnt qH;
inc nL,nH:
setup_adc_pots(!"#);
setup_adc(!$%_%L#%&_'"()*"!L);
n+#;
u,b_cdc_init (),o
usb inic ();
dela-_ms(.///),o'0*etado paa pode abi e1 puerto con e1 )1cel
do (
usb_ tas2 ();
if (usb_enumeated())
set_adc_channel(#);
dela-_u,(l#);
q - ead_adc();
p - 5.0 q I 1/34./;
nL5ma2e6 tn, 0) ;
nH7ma2e8(n,1);
it (usb_cdc_putead-() usb_cdc_putc(nL),o
if (usb_cdc_putead-()) usb_cdc_putc (nH),o
qLcma2e8 (q, 0) ;
qH9ma2e6(q,l);
if (usb_cdc pucead-()) usb_cdc_put%(qL);
if (usb_cdc_putead-()) usb_cdc_pucc(qH);
dela-_ms(,##); liSe envi,~ni:latos ced 0.5 !J
n::;
) ;hile ((*<));
Figura' 2. Programa del ejemplo 2
Para la simulacicn se debe abrir el fichero de Excel (figura ]3); en este fichero exis
ten dos botones para abrir el puerto y cerrarlo (tambien hay un boron para borrar
los datos adquiridos). Antes de abrir el puerto se debe arrancar el II e iniciar la
simulaci!n del programa, a continuacion se puede conectar el USBCONN ", una
262
10. USB - Universal Serial Bus
vez conectado, se puede abrir el puerto con el boton de Excel para iniciar 1aad qui
sidon.
1\tI,(/j _p ':-""1..- f ill" " ' . oP~ ~ ~ :
.!III -1(\ .... ' ilJn(1jcpc:,
l
a-
...
;
"

~
D
b

..
"
:;
~
1:-' lot \#ulo'ti!oln$% r).tn!l-"
&. /a1t'r&(
" ' "
##
.. ."
") &---
*i+ura 1,. *ic-ero de ./cel
0ara ver la curva de calenta1 iento se puede cerrar el interruptor de2 -o1o de tal
!or1a que co1ience a calentarse (!i+ura 13 c2.
#

e
"
"
.
1
l1l$' "tl:t&(!"'1
.. !.."
4
" " "
..
"..,
!.
!" !" "
"
.t.!l.:
..,..
U
" ' "
!.
" ~i
' f
.~%##f
"! .!..
..
v._
"
,an"
..
" " "
..
"',..
' f i1~&-
o. .....
## ...
... .5ll1.'5
U ....
..
' ' ' ' ' ' .. ....
.. .....
"
....
.-
.....
..
&!.
&'"
-...
.'
."..
.. 3 ",r6r "
'
..
"
..
D
%
,7
"
"
..
~
.-, , ~\_tl'_J'<uU1
.' "
...
_ -
~~- - _ 7~ /- - - - - - - -
*i+ura 13 . 'atos adquiridos (su represe:ntacion
%8,
ESIa edicion se rerminc de imprimir en junio de 2008. Publicada
por ALFAOMEGA GRUPO EDITO! SA de ".#. Apanado Pos$al
%&'2(%!0&&))! Me*Ico! D.F. La impresion + encuademaci(n se reali,aron
en F-E.TES TMPESOES! SA! "en$eno .o. )0/! "ol. Granjas Esmeralda.
I,$apalapa. 0/8)0! Me*ico! D.F.
Los mierocontroladores PICmicro de Microchip han experimentado un importante
aumento de presencia en el sector industrial esto se debe. entre otros muchos fac
tores, a la politica de ape.rtura que tiene Microchip, ya que facilita y potencia el de
sarrollo de herramientas por parte de otras compaiiias.
En lenguajes de programacion destacan los compiladores C para PIC de companies
como CC Inc. EI desarrollo de nn lenguaje C especifico para un microcontrolador
pennite obtener el maximo rendimiento del micro.
Los programas de simulacion permiten depurar hasta casi la perfecci!n el disefio
antes de e"montado en una pla ea. #o hace falta explicar el ahorro de tiempo y
coste que ello supone. "al $e% uno de los mejores simuladores para microcontro
ladores es el rI de P&'"E(.
En el capitulo ) de este libro se bace nna bre$e, pero intensa, descripcion del II
de P&'"E(, de forma que elleetor pueda afrontar la simulacion de disefios sin
ningun problema. En el capitulo * tambien se reali%a un.repaso del compilador C
para PIC de CCS; ob$iamente no puede explicarse este lenguaje en un solo capi
tulo, pero tras su lectura eualquier lector podra afrontar los pequefios programas de
disefio que se exponen en los siguientes capitulos.
+el capitule , al - se desarrollan los distintos m!dulos que integran, un PIC (ADC,
USART,CCP, etc.. a ni$eLhard/are, enla%andolos con las correspondientes direc
ti$as y funciones del C. En cada capitulo se plantean y desarrollan sencillos ejem
plos de aplicacion que el lecter podra estudiar y, como no, modificar para eompletar
sus conocimientos.
Enel capitulo 0 se expone la gama alta (pTe)0. yen el capitulo 1 una aplicacien
mas compleja, elRTOS (Real Time Operating System). "ambien en estos capitulos
se incorporan distintos ejemplos de aplicacion. Por ultimo, en el capitulo )2 se
desarrolla el USB de reciente incorporaci!n aLII.
Este libro esta enfocado a todos aquellos lectores mo$idos p'"el interes acerca de
los microcontroladores PIC sin necesidad de tener conocimientos muy profundos
en la materia. Los ejemplos desarrollados no tienen una excesi$a complejidad, son
bre$es y permiten ir afian%ando Losconocimientos capitulo a capitulo.

Você também pode gostar