Sei sulla pagina 1di 38

!

" # $

&!" % ' "


( )
$ *

+ "
' ' $
,- . / 0
$
,- . / 0 (
1 "2 " ' ,3 3 3
4
$ "
! ,5 '
(
6 -0 "
%
,

% '
7 8 9!
0 '$ ) 3 '$ :
6
% %

' 7
* $
+ " "

% * 7
; "
( ( "< ; 7"
9
$ " ' "
( '
%
% ' !
" "
"
7 '
$ "
' 7 "
,- . / 0 $

" '
' (
! "=
% % >?

9
@
+
' "
7
*
$ 4
" (

6
@ ' '
7 A 7 B
( ' ( $
A
' " $

6 $
" 7
B ! ' "
$

! "

( '
B' 7 '
: 7
' ' ( ( '
%

'
9
# $ "
>
6 =
A . " " " "# = !
( = A"
" =

'
$ 4
( "
' $

C A" "+ ; +

& ( A
" %
4 D
+
8D ' %
'

8E + 7 =
'

6' '
% = A" . "+ ;
6 %
' = A" . "
@ " &

6' A '
% ' % "
$ C = A"
" " '
= 6 +

' & 8D 8
4
!' 6

"
" %
+ 8 "
6 = ?@ & @ @ 8 "
( !
,- %/ 0
( ( %

! D" %
6 F
% 0 '$
'

@ >

G $ @
7 "
. "8 " '
%

= 7 " "
% 4 B' 7

$ ' '

$
HI J
%
&! " $
8 " %( "
" "

H! J+
% : ?
"

$ "
" %

6'

%
" (
%
' $ >

&!
&@ K,- . / 0
$
35'
3-'
/-'
3 2
5
$
% 3
' "
3 '
3 '
) 3 '
5 3 %'
0 ,3 '
; 33'
!

% " %
% "
@
% "
% " %

,3 3 @
; L,3 3 L . G
;% )
% ,

, @
; L,3 3 L
% $ )
% ,
9 >+

MBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
MB B
MBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

% " 3
% ")
% " 3

% ")
,3 3 @
% ")

@
.

+ 7
7 ' "

>

35'
3-'
/-'
3 2

$
"
@
35' $ 35
' 7 " 4
"
35 C
(

% 3 5 '"5
% 3 5 '"
% "5

7 > = % 777"

"= @ .
, 777
"
C " ( $ "
% "
% ' 5

, 5
35'
7
' 7 '

H! J

4 (
' 8 $
$
'

%
' "
A %
% " % %

I
9 )
= &! ' '
>

&@ K,- . / 0

8D
$ ! $ ,- . / 0
>

&@ K,- . / 0

% 5 "2
% / 2 ")
% 5 "2
% 2 ")

% ' $

C % % %

. A =
C 7% A

4
'

= % 5 /2
@ N N N 6N
'
% 9 3
2 "
9
"
% ? 9 ) = ) "
6'
6
% 2
9 3 6'

9 % &! ?
9 9 "
" @
A "
'

"% "
+
% 35 /2
6

>

&@ K,- . / 0

@ 35'
9 3 2
6 /2'
6 32'

%@ "9 3
% 6 ")
%@ "9 3
% 6 ")

+ ( G
"
"
>

&@ K,- . / 0

B : B

@ 35'
9 3 2
6 /2'
6 32'

B B

%@ "9 3
% 6 ")
%@ "9 3
% 6 ")

M %

.(

' 7 N %N" N %N"


N 6 N" N 6 N N@ N

@ "! "
7

I
&!
# ' %
" '
A "
" (
"
@ "
' "

% '
@ $ @ "! "
= 9 ,,5 " + 7
% @ ' D
4 = 9 "

(
< A

:
>+ %
6
"

"
'
= 9

:
$ ' >?

# $ A
" = 9 $

= ' "< ; "@ . 9


< ; "
$ '
( %
( '
$

$
= : "
< ; "@ ; ' >

= : "
" % "
&!"
" @
' ' (
: % %
%
=
: "4 4 "

9 6 @ "
9 9 "6
' : ":
"

= D@ "
# '
= D
'
$ ' '
" (
)23 @

' =

( =
(

>
6 @
' = : "
4 "@ 9
' >
! "@ % 2
% "
'$ ( , @
6 % " % 6
)
' % 3
3 $
(
6
3 " 2 @ 3
:
< ;"
! 6 , )
3
+ ( "
0 @
C
(
= '
%

" " ; '

% $
# $ "
' 4 ?@ @ ?6 '
@ ,)
' "
>

6 >
> % !

; ? ' '> ( @
( "
>!

6' '
+ (

Luces Chispeantes
Introducción

Este es una Idea que nos trajo Raul Betancur acerca de un juego de luces que
realiza convinaciones según como lo configuremos. El Proyecto es muy
interesante para aquellos que estan siguiendo el curso, porque dan buena
práctica para manejo de los micros. Está sobretodo interesante pues maneja
algo que aun no hemos visto aqui: El uso de botones y del temporizador. Para
los mas adelantados, podrán además hacer uso de interrupciones y de la
memoria EEProm, ya que esta en nosotros cuan completo será el proyecto.
Invito a todos a compartir esta idea y ponernos en práctica con este proyecto
ya que es la única manera con la que se presentarán las dudas. También
quiero darles la posibilidad de que compartan sus ideas enviandome su
solución al problema a andres@moraldo.com.ar. Ademas a todos aquellos que
esten interesados se publicará la respuesta del mismo en los proximos días,
para que todos puedan compartir e intercabiar opiniones. Si asi lo deseas y
crees que tu proyecto vale, enviamelo a andres@moraldo.com.ar de la misma
manera que lo hizo Raul y será publicado en esta pagina web para que todos lo
aprendamos. Demosle las gracias Raul Bentacur (raulbeta@hotmail.com), y a
todas aquellas personas que mandan a diario sus proyectos (entre ellas estoy
yo: andres@moraldo.com.ar)

Luces Chispeantes
Idea: Raul Betancur

El controlador tendrá dos entradas (E1, E2) y ocho salidas. Las ocho salidas
estarán conectadas a 8 LED. De esta manera, controlando las ocho salidas, se
puede elegir cuáles LED están encendidos y cuáles no.
Note que el estado de los ocho LED se puede describir usando un byte. En
consecuencia, una secuencia de estados se puede especificar usando un
arreglo de bytes. Para ejecutar una secuencia, basta con poner los bytes
respectivos en las salidas, uno tras otro, manteniéndolos un tiempo.
El controlador podrá mostrar cuatro secuencias diferentes las cuales estarán
representadas por cuatro arreglos de bytes. La secuencia que se mostrará se
selecciona por medio de las entradas, las cuales son controladas por dos
conmutadores.

DISEÑO DEL CONTROLADOR

El diseño del controlador de luces se describe a continuación :

Los pines 6, 7, 8, 9, 10, 11, 12, 13 corresponden a las salidas RB0/INT, RB1,
RB2, RB3, RB4, RB5, RB6 y RB7 (puerto B del PIC). Cada uno de estos pines
están conectados a un LED.

Los pines 1 y 2, que corresponden a las salidas RA2 y RA3 (puerto A del PIC),
están conectados a conmutadores. Estos conmutadores determinan cuál de las
4 programaciones predefinidas se desea ejecutar.
Cada patrón de programación de los LED se encuentra almacenado en un
arreglo en memoria de 8 bytes. Es decir, 8 datos de 1 byte cada uno, que
representan los 8 estados de una secuencia. Dos de los patrones deben ser los
siguientes:

Patrón 1 ("Auto fantástico")

00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
Patrón 2 ("White Christmas")

01010101
10101010
01010101
10101010
01010101
10101010

Los otros dos patrones quedan a inventiva del programador.

Cada byte de la secuencia indica cuáles LED deben encenderse en la salida

Algunas Soluciones

Solucion segun Raul Betancur: luchisra.zip (12Kb)

Ayuditas para la realización:

Para detectar los botones apretados se debe proseguir de la siguiente manera:

Se lee el puerto a, se le hace un andlw con el numero correspondiente a las


patas de entrada. Luego se carga el registro w con el valor a comparar y se le
sustrae el valor anterior. Si el resultado es 0 (es decir que ambos son iguales)
en el registro status existe un FLAG que nos lo indicará. (Es el bit Z que
corresponde al bit 2 del registro Status).

El uso del temporizador no es muy dificil ya que se accede de manera directa.


Eso si no olvidemos de ponerle el preescaler en un valor distinto de uno ya que
sino nos costara mucho leerlo.(a no ser de utilizar las interrupciones)

Bueno nada mas. Si algo no les sale, no se preocupen, esto es solo el


comienzo.

No se pierdan de armar el grabador de Pic


Instrucciones

Estas son las todas las instrucciones que hay para poder programar el Pic
16c5x, 16c64, 16c71, 16c74, 16c84 (tambien abarcara los flash respectivos, en
el caso que existan) . Las encontraremos en orden alfabetico.

En total son 37 y haciendo un clic sobre una de ellas podemos acceder a su


respectiva descripción:

ADDLW CALL
INCF NOP SLEEP
ADDWF CLRF
INCFSZ OPTION SUBLW
ANDLW CLRW
IORLW RETFIE SUBWF
ANDWF CLRWDT
IORWF RETLW SWAPF
BCF COMF
MOVF RETURN TRIS
BSF DECF
MOVLW RLF XORLW
BTFSC DECFSZ
MOVWF RRF XORWF
BTFSS GOTO

ADDLW ADD Literal to W ADDWF ADD W to F


Sintaxis ADDLW k Sintaxis ADDWF f, d
Codificación 11 111x kkkk kkkk 0001 11df ffff
Codificación
Palabras, 00 0111 dfff ffff
1, 1
Ciclos Palabras,
1, 1
Operación W + k -> W Ciclos
Bit de W + f -> f si d=1
C, DC, Z Operación
estado W + f -> W si d=0
Añade el contenido de W Bit de
C, DC, Z
al contenido de k, y estado
almacena el resultado en Añade el contenido de W
Descripción W al contenido de f, y
Atención: Esta Descripción
almacena el resultado en
instrucción no existe en W si d=0, y en f si d=1
los Pic 16c5X

Volver

ANDLW AND Literal and W ANDWF AND W with F


Sintaxis ANDLW k Sintaxis ANDWF f, d
1110 kkkk kkkk 0001 01df ffff
Codificación Codificación
11 1001 kkkk kkkk 00 0101 dfff ffff
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
Operación W AND k -> W W AND f -> f si d=1
Operación
Bit de W AND f -> W si d=0
Z
estado Bit de
Z
Efectúa un AND lógico estado
entre el contenido de W Efectúa un AND lógico
Descripción
y el literal k, y lo entre el contenido de W
almacena en W Descripción y el contenido de f, y
almacena el resultado en
W si d=0, y en f si d=1

Volver

BCF Bit Clear F BSF Bit Set F


Sintaxis BCF f, b Sintaxis BSF f, b
0100 bbbf ffff 0101 bbbf ffff
Codificación Codificación
01 00bb bfff ffff 01 01bb bfff ffff
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
Operación 0 -> b(f) Operación 1 -> b(f)
Bit de Bit de
Ninguno Ninguno
estado estado
Pone a cero el bit numero Pone a uno el bit numero
Descripción Descripción
b de f b de f

Volver

BTFSC Bit Test, Skip If Clear BTFSS Bit Test, Skip If Set

Sintaxis BTFSC f, b Sintaxis BTFSS f, b

Codificación 0110 bbbf ffff Codificación 0111 bbbf ffff


01 10bb bfff ffff 01 11bb bfff ffff
Palabras, 1, 1 o 2 Palabras, 1, 1 o 2
Ciclos Ciclos
Operación Salta si b(f)=0 Operación Salta si b(f)=1

Bit de Bit de
Ninguno Ninguno
estado estado
Bit de Bit de
Ninguno Ninguno
estado estado
Si el bit numero b de f es Si el bit numero b de f
nulo, la instrucción que esta en uno, la
sigue a esta se ignora y instrucción que sigue a
se trata como un NOP. esta se ignora y se trata
Descripción
En este caso, y solo en Descripción como un NOP. En este
este caso, la instrucción caso, y solo en este caso,
BTFSC precisa dos la instrucción BTFSC
ciclos para ejecutarse. precisa dos ciclos para
ejecutarse.

Volver

CALL Subrutina Call CLRF Clear F with F


Sintaxis CLRF f
0000 011f ffff
Sintaxis CALL k Codificación
00 0001 1fff ffff
Palabras,
1, 1
Codificación 1001 kkkk kkkk Ciclos
10 0kkk kkkk kkkk Operación 00 -> f
Bit de
Z
Palabras, 1, 2 estado
Ciclos Pone el contenido de f a
Descripción
cero y activa el bit Z.
Operación En el caso de los 16c5X:
PC + 1 -> Pila, k ->
PC(0-7), 0 -> PC(8), PA2
Bit de Ninguno
estado

Descripción Guarda la dirección de


vuelta en la pila y
despues llama a la
(en los demas PIC), antes
de ejecutar la instrucción
CALL

Volver

CLRW Clear W register CLRWDT Clear Watchdog Timer


Sintaxis CLRW Sintaxis CLRWDT
0000 0100 0000 0000 0000 0100
Codificación Codificación
00 0001 0xxx xxxx 00 0000 0110 0100
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
Operación 00 -> W 00 -> WDT y 0 ->
Bit de Operación predivisor del
Z temporizador
estado
Pone el registro W a cero Bit de
Descripción 1 -> TO y 1 -> PD
y activa el bit Z estado
Pone a cero el registro
contador del
Descripción
temporizador watchdog,
asi como el predivisor

Volver

COMF Complement F DECF Decrement F to F


Sintaxis COMF f, d Sintaxis DECF f, d
0010 01df ffff 0000 11df ffff
Codificación Codificación
00 1001 dfff ffff 00 0011 dfff ffff
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
~f -> f su d=1 f - 1 -> f si d=1
Operación Operación
~f -> W si d=0 f - 1 -> W si d=0
Bit de Bit de
Z Z
estado estado
Hace un complemento de Decrementa el contenido
f bit a bit. El resultado lo de f en una unidad. El
almacena de nuevo en f Descripción resultado se guarda en W
Descripción
si d=1 (borra el anterior), si d=0 (f no varia), y en f
o en W si d=0 (f no si d=1
varía)
Volver

Decrement F, Skip If Salto Incondicionalwith


DECFSZ GOTO
Zero F
Sintaxis DECFSZ f, d Sintaxis GOTO k
0010 11df ffff 101k kkkk kkkk
Codificación Codificación
00 1011 dfff ffff 10 1kkk kkkk kkkk
Palabras, Palabras,
1, 1(2) 1, 2
Ciclos Ciclos
f - 1 -> f si d=1 En el caso de los 16c5X:
Operación
f - 1 -> W si d=0 k -> PC(0-8), PA2 PA1,
Bit de PA0 -> PC(9-11)
Ninguno En el caso de los
estado Operación
16c64,71,74 y 84:
Decrementa el contenido k -> PC(0-10),
de f en una unidad. El PCLATH(3,4) ->
resultado se guarda en W PC(11,12)
si d=0 (f no varia), y en f
si d=1 Bit de
Descripción Ninguno
Si el reusltado es nulo, se estado
ignora la siguiente LLama a la subrutina
instrucción y en este caso situada en la dirección
la instrucción dura dos cargada en el PC
ciclos. Atención: El modo de
cálculo de la dirección
difiere según la familia
de PIC utilizada.
Descripción
También hay que
posicionar correctamente
PA2, PA1, PA0 (16c5X)
o el registro PCLATH
(en los demas PIC) antes
de ejecutar la instrucción
GOTO

Volver

INCF Increment F Increment F, Skip if


INCFSZ
Sintaxis INCF f, d Zero
Sintaxis INCFSZ f, d
0010 10df ffff
Codificación 0011 11df ffff
00 1010 dfff ffff Codificación
00 1111 dfff ffff
Palabras,
1, 1
Ciclos Palabras,
1, 1(2)
f + 1 -> f si d=1 Ciclos
Operación
f + 1 -> W si d=0 f + 1 -> f si d=1
Bit de f + 1 -> W si d=0
Z Operación
estado En ambos casos: Salto si
f+1=0
Incrementa el contenido
de f en una unidad. El Bit de
Ninguno
resultado se almacena de estado
Descripción
nuebo en f si d=1 y en W Incrementa el contenido
si d=0(en este caso f no de f en una unidad. El
varía) resultado se guarda de
nuevo en f si d=1 y en w
si d=0 (en este caso f no
Descripción varia). Si el resultado es
nulo, se ignora la
siguiente instrucción y en
este caso, esta
instrucción dura dos
ciclos

Volver

Inclusive OR Literal IORWF Inclusive OR W With f


IORLW
With W Sintaxis IORWF f, d
Sintaxis IORLW k
0001 00df ffff
1101 kkkk kkkk Codificación
Codificación 11 0100 dfff ffff
11 1000 kkkk kkkk
Palabras,
1, 1
Palabras, Ciclos
1, 1
Ciclos W OR f -> f si d=1
Operación
Operación W OR k -> W W OR f -> W si d=0
Bit de Bit de
Z Z
estado estado
Efectúa un OR lógico Efectúa un OR lógico
inclusivo entre el inclusivo entre el
Descripción contenido de W y el contenido de W y el
Descripción
literal K, y almacena el contenido de f, y
resultado en W almacena el resultado en
f si d=1 o en W si d=0

Volver

MOVF Move F MOVLW Move Literal to W with


Sintaxis MOVF f, d
Sintaxis MOVF f, d F
0010 00df ffff Sintaxis MOVLW k
Codificación
00 1000 dfff ffff 1100 kkkk kkkk
Codificación
Palabras, 11 00xx kkkk kkkk
1, 1
Ciclos Palabras,
1, 1
f -> f si d=1 Ciclos
Operación
f -> W si d=0 Operación k -> W
Bit de Bit de
Z Ninguno
estado estado
Pone el contenido de f en Descripción Carga W con el literal k
f si d=1 o f en W si d=0
Atención: El
desplazamiento de f en f
que pareceria inutil,
Descripción
permite comprobar el
contenido de f con
respecto a cero ya que
esta instucción actúa
sobre el bit Z

Volver

MOVWF Move W to F NOP No Operation


Sintaxis MOVWF f Sintaxis NOP
0000 001f ffff 0000 0000 0000
Codificación Codificación
00 0000 1fff ffff 00 0xx0 0000
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
Operación W -> f Operación Ninguna
Bit de Bit de
Ninguno Ninguna
estado estado
Carga f con el contenido Consume tiempo de la
Descripción
de W maquina y ocupa un
Descripción
lugar en la memoria de
programa.

Volver

RETFIE Return From Interrupt


OPTION Load Option Register
Sintaxis RETFIE

Codificación 00 0000 0000 1001


0000 0000 0010 Codificación 00 0000 0000 1001
Codificación
00 0000 0110 0010 Palabras,
1, 2
Palabras, Ciclos
1, 1
Ciclos Operación Pila -> PC, 1 -> GIE
Operación W -> OPTION Bit de
Ninguno
Bit de estado
Ninguno
estado Carga el PC con el valor
Carga el registro que se encuentra en la
OPTION con el parte superior de la pila,
contenido de W asegurando asi la vuelta
Atención: Esta de la interrupción. Pone a
instrucción no debe 1 el bit GIE, con el fin de
utilizarse en otros autorizar de nuevo que se
Descripción
circuitos que no sean los tengan en cuenta las
Descripción interrupciones
PIC 16c5x. Sin embargo,
es correctamente Atención: Esta
interpretada por los interrupción dura dos
circuitos 16c64, 71, 74, ciclos
84 con el fin de asegurar Esta instrucción no existe
una compatibilidad para los PIC 16c5X
ascendente

Volver

RETLW Return Literal to W RETURN Return from


Sintaxis RETLW k Subroutinewith F
Sintaxis RETURN
1000 kkkk kkkk
Codificación
11 01xx kkkk kkkk
Codificación 00 0000 0000 0000
Palabras,
1, 2
Ciclos
Palabras, 1, 2
Operación k -> W, Pila -> PC Ciclos
Bit de
Ninguno Operación Pila -> PC
estado
Carga W con el literal k,
y después carga el PC Bit de Ninguno
con el valor que se estado
encuentra en la parte Descripción Carga el PC con el valor
superior de la pila, que se encuentra en la
Descripción
efectuando asi un retorno
de subrutina
Atención: Esta
instrucción dura dos
ciclos
Esta instrucción no existe
en los PIC 16c5X

Volver

Rotate Left F through Rotate Right F through


RLF RRF
Carry Carry
Sintaxis RLF f,d Sintaxis RRF f, d
0011 01df ffff 0011 00df ffff
Codificación Codificación
00 1101 dfff ffff 00 1100 dfff ffff
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
Operación ver descr. Operación Ver descr.
Bit de Bit de
C C
estado estado
Rotación de un bit a la Rotación de un bit a la
izquierda del contenido derecha del contenido de
de f, pasando por el bit f, pasando por el bit de
Descripción de acarreo C. Si d=1 el Descripción acarreo C. Si d=1 el
resultado se almacena en resultado se introduce en
f si d=0 el resultado se f, si d=0 el resultado se
almancena en W amacena en W

Volver

SLEEP Sleep SUBLW Substract W from


Literal

Sintaxis SUBLW k

Sintaxis SLEEP
Codificación 11 110x kkkk kkkk

Palabras, 1, 1
Codificación 0000 0000 0011
Ciclos
00 0000 0110 0011
Operación k - W -> W

Palabras, 1, 1
Ciclos Bit de C, DC, Z
estado

Descripción Sustrae el contenido de


Operación 0 -> PD, 1 -> TO, 00 -> W del literal k, y
WDT, 0 -> Predivisor del almacena el resultado en
instrucción con mucho Atención: Esta
cuidado, pues puede instrucción no existe en
provocar que el micro no los Pic 16c5X
despierte si no se ha
seteado correctamente.

Volver

SUBWF Substract W from F SWAPF Swap F to F


Sintaxis SUBWF f, d Sintaxis SWAPF f, d
0000 10df ffff 0011 11df ffff
Codificación Codificación
00 0010 dfff ffff 00 1110 dfff ffff
Palabras, Palabras,
1, 1 1, 1
Ciclos Ciclos
f - W -> f si d=1 f(0-3) -> f(4-7) y f(4-7) -
Operación
f - W -> W si d=0 > f(0-3)
Operación
Bit de Resultado -> f si d=1
C, DC, Z Resultado -> W si d=0
estado
Sustrae el contenido de Bit de
Ninguno
W del contenido de f, y estado
almacena el resultado en Intercambia los cuatro bit
Descripción
W si d=0 y en f si d=1. de mayor peso por los
La sustracción se realiza cuatro de menor peso de
Descripción
en complemento a dos f, y almacena el resultado
en W si d=0, y en f si
d=1

Volver

TRIS Load TRIS Register

XORLW Exclusive OR Literal


With W

Sintaxis XORLW k

Sintaxis TRIS f

Codificación 1111 kkkk kkkk


11 1010 kkkk kkkk
en el registro TRIS del Efectúa un OR lógico
puerto f. exclusivo entre el
Atención: Esta contenido de W y el
Descripción
instrucción no debe contenido del Literal K y
utilizarse en otros almacena el resultado en
circuitos que no sean los W
Pic 16c5X. No obstante,
es correctamente
interpretada por los
circuitos 16c64, 71, 74,
84, con el fin de asegurar
una compatibilidad
ascendente

Volver

XORWF Exclusive Or W with F


Sintaxis XORWF f,d
0001 10df ffff
Codificación
00 0110 dfff ffff
Palabras,
1, 1
Ciclos
W OR (Exclusivo) f -> f
si d=1
Operación
W OR (Exclusivo) f ->
W si d=0
Bit de
Z
estado
Efectúa un Or lógico
exclusivo entre el
contenido de W y el
Descripción
contenido de f y
almacena el resultado en
f si d=1 o en W si d=0

+ ' "

% 4

$
$

7 ,5 O " $

"

% * 5

@ " ,2
,-

"

)3 . 0 ,0 2

5C 2 2C !

"

"

,2 )3 6 &

Potrebbero piacerti anche