Sie sind auf Seite 1von 56

Instituto Tecnolgico de Matamoros

Microprocesadores


PRACTICA #1 CONFIGURACIN DE LAS LINEAS DEL PUERTO C

OBJETIVO
Al realizar esta prctica se podr configurar el puerto C como entrada o como
salida segn sea lo deseado. En esta prctica los configuramos como salida.

REFERENCIA TEORICA

El puerto C es un puerto bidireccional de 8 bits. La configuracin esta controlado
por el registro TRISC, en el que un bit a 0 configura la lnea correspondiente
como salida, y un bit a 1 como entrada.

El registro TRISC, controla al puerto C pin a pin, si en el TRISC alguno de los bit es
0 la configuracin de el bit del puerto C se configura como salida y si es 1 la
configuracin de los bit del puerto C se configura como entrada. Por ejemplo
b01010101 esto cargamos en TRISC y lo configuramos de la siguiente forma
RC4=entrada, RC5= salida, RC6= entrada, RC7= salida.
El registro ANSELH y ANSEL se utilizan para configurar las entradas anlogas.
En este caso se requiere desabilitar esta configuracin y establecerlo para
operaciones digitales de Entrada/Salida. La configuracin de los pines colocando
cero en los registros.

Para inicializar el puerto C se utilizan las siguientes instrucciones:

BCF STATUS,RP0 ;Acceso al banco 0
BCF STATUS,RP1
CLRF PORTC ;Limiar Puerto C
BSF STATUS,RP0 ;Acceso al banco 1
MOVLW FFh ;Cargar el dato en el registro W
MOVWF TRISC ;Lo que hay en el registro W cargarlo en el TRISC
BCF STATUS,RP0 ;Acceso al banco 0

MATERIAL/EQUIPO
1 Pic16f690
1 Led
1 Fuente de 5 volts
1 Resistencias de 330 ohms

CIRCUITO:
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
R1
330

Instituto Tecnolgico de Matamoros
Microprocesadores
























Para simular el programa en el simulador (ISIS PROTEUS) debemos cargar el
programa en el PIC de la siguiente manera. Damos un doble click en el centro de
la figura del PIC



Despus aparecer el recuadro para seleccionar el punto hex a cargar.




;*******************************************************************************
; Programa que enciende un led

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)


; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
bcf STATUS,RP0
bcf STATUS,RP1 ;Acceso al banco 0
clrf PORTC
bsf STATUS,RP1 ;Acceso al banco 2
clrf ANSEL ;Seleccion de 1/0 digitales
bsf STATUS,RP0
bcf STATUS,RP1 ;Acceso al banco 1
movlw 00h ;Carga W con el valor FFh
movwf TRISC ;Configura las RC<3:0>del puerto C como entrada
bcf STATUS,RP0

Principal bsf PORTC,0 ;Pone uno en el bit 0 del puerto C
goto Principal

END

Instituto Tecnolgico de Matamoros
Microprocesadores
















Presionamos OK y listo ahora damos play y a funcionar.
Simulacin en proteus.













Instituto Tecnolgico de Matamoros
Microprocesadores
El segundo programa es:

Circuito para el programa


RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
R1
330
R2
330
R3
330
R4
330





; Por los LEDs conectados al Puerto B visualiza el valor de una constante, por ejemplo
; nmero binario b'01010101'.


; ZONA DE DATOS **********************************************************************

__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)
; Configuracin para el
; grabador.
LIST P=16F690 ; Procesador utilizado.
INCLUDE <P16F690.INC>; En este fichero se definen las etiquetas del PIC.

; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0 de la
Inicio
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTB ; memoria de programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
movlw 0XFF
clrf TRISB ; Las lneas del Puerto B configuradas como salida.
bcf STATUS,RP0 ; Pone a 0 el bit 5 del STATUS. Acceso al Banco 0
clrf ANSEL
CLRF ANSELH
movlw b`01010101 ; Carga el registro de trabajo W .
Principal
movwf PORTB ; El contenido de W se deposita en el puerto de salida.
goto Principal ; Crea un bucle cerrado e infinito
end ; fin del programa

Instituto Tecnolgico de Matamoros
Microprocesadores



















El circuito se puede editar, ensmblar y simular en MPLAB o en Proteus 7.2 en
este software ya viene incluido el pic16f690. Aqu no se muestra la alimentacin del
pic pero esta en el pin 20 tierra y en el pin 1 voltaje en este software se puede
simular mas realmente con el circuito final ya con todos los componentes y aparte
es de mayor ventaja ya que si tienes algn error no habr consecuencias fatales y
el simulador te dira el error. Mas informacin sobre el puerto B en el apartado
puerto B, en este apartado se explica detalladamente como se utiliza.

OBSERVACIONES Y CONCLUSIONES

Al concluir esta practica sabremos como configurar el puerto B y C como salida. Por
lo general el puerto A solo puede utilizar algunas de sus lneas como salidas ya que
RA3 solo se puede utilizar como entrada especficamente.




















Instituto Tecnolgico de Matamoros
Microprocesadores

PRACTICA# 2 GENERADOR DE ONDA CUADRADA

Objetivo: se puede generar una onda cuadrada con solo dos instrucciones de bit

TEORIA
Este programa configuramos el puerto C como salida, el puerto C es un puerto
bidireccional de 8 bits, controlado mediante el registro TRISC en el que un bit a
`0`configura la linea correspondiente como salida, y un bit a 1 como entrada. El
registro TRISC controla los pines de salida del puerto C, cuando se comuienza a
usar usan entradas analogas, al usar el puerto C debe asegurarse que el registro
TRISC sea mantenido en uno para usar entradas analogas. La configuracin de los
pines de Entrada/salida en analoga si el si en la entrada siempre lee un cero.

NOTA: El registro ANSEL y ANSELH , sera inutilizado al configurar un canal analogo
cmo entraa digital, la configuracin en los pines de entrada sera analogo si en la
entrada se lee un 0.

Para inicializar el puerto C se usan las siguientes instrucciones
BCF STATUS,RP0 ;Acceso al banco 0
BCF STATUS,RP1
CLRF PORTC ;inicia PORTC
BSF STATUS,RP1 ;Acceso al banco 2
CLRF ANSEL ;Entradas /Salidas digitales
BSF STATUS,RP1
MOVLW 0XFF ;Se configura como salida el Puerto C.
MOVWF TRISC ;si se desea configurar como entradas en TRISC se
carga
; 0x00
BCF STATUS,RP0 ;Acceso al banco cero






















MATERIAL / EQUIPO
1 Osciloscopio Digital
1 Pic16f690
1 Fuente de 5 volts
Cables para conexin en protoboard
; El programa genera una onda cuadrada en el pin 0 y una onda inversa en el pin 1

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)

ORG 0
BSF STATUS,RP0 ;Acceso al banco 0
BCF STATUS,RP1
CLRF TRISC ;Limpiar registro TRISC
BCF STATUS,RP0 ;Acceso al banco 1
BSF STATUS,RP1
BSF PORTC,0 ;Poner un uno en el bit cero del puerto C
BCF PORTC,1 ;Poner un cero en el bit 1 del puerto C
BCF STATUS,RP0 ;Acceso al banco 0
BSF STATUS,RP1
CLRF ANSEL ;configurar entradas/salidas digitales
BCF STATUS,RP0 ;Acceso al banco 1
BCF STATUS,RP1
REP BSF PORTC,0 ;Poner un uno en el bit cero del puertoC
BCF PORTC,1 ;poner un cero en el bit 1 del puerto C
CALL RETARDO ;Llama un retardo
BCF PORTC,0 ;Poner un cero en el bit cero del puerto C
BSF PORTC,1 ;Poner un 1 en el bit 1 del puerto C
CALL RETARDO ;Llama a subrutina de retardo

GOTO REP ;Se crea un bucle cerrado
RETARDO MOVLW 150
MOVWF 0C
DECFSZ 0C
GOTO $-1
RETURN
END ;fin del programa

Instituto Tecnolgico de Matamoros
Microprocesadores
1 Protoboard

Para la elaboracin del programa se utilizo el software de MPLAB IDE v7.2 y para
grabarlo se utiliza el grabador o programador del del PIC-KIT 2 de microchip y
para su simulacin utilizamos Proteus 7.2 profesional.


RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
A
B
C
D


A continuacin se muestra la grafica resultante de salida la onda cuadrada amarilla
es la resultante al conectar el osciloscopio al pin 0 del puerto C y la onda cuadrada
azul es la resultante al conectar el osciloscopio al pin 1 del puerto C.













Concluimos que es facil generar una onda cuadrada .




















Instituto Tecnolgico de Matamoros
Microprocesadores

En el segundo programa encendemos y apagamos leds al mismo tiempo tambien
utilizamos un retardo generado por un pequeo programa que se llama PICDEL.EXE
que tambien lo dejare en el disco para que se pueda facilitar la generacion de
codigos para los retardos, claro que mas adelante tambien trataremos el tema para
saber como hacer retardos en forma sencilla.

Encender los 4 leds de nible bajo y despus apagarlos

















































#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF &
_CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)


PDel0 EQU 0X20
PDel1 EQU 0X21
PDel2 EQU 0X22


ORG 0
INICIO
bcf STATUS,RP0 ;Banco 0
bcf STATUS,RP1 ;
bsf STATUS,RP0 ;Banco 1
movlw B'00000000' ;Configura como salidas
movwf TRISC ;
bcf STATUS,RP0 ;Banco 2
bsf STATUS,RP1 ;
clrf ANSEL
clrf ANSELH
bcf STATUS,RP1 ;Banco 0
clrf PORTC
PRINCIPAL

movlw b'00001111'
movwf PORTC
call retardo
movlw b'00000000'
movwf PORTC
call retardo
goto PRINCIPAL

retardo
;-------------------------------------------------------------
PDelay movlw .197 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .253 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 +(1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 +(1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2
return ; 2+2 Done
;-------------------------------------------------------------
END


Instituto Tecnolgico de Matamoros
Microprocesadores

Diagrama del circuito utilizado
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U2
PIC16F690
R1
330
R2
330
R3
330
R4
330
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW


Para simularlo utilizamos proteus y el resultado es. Los cuatro encendidos y
despus muestra los 4 leds apagados.









































Instituto Tecnolgico de Matamoros
Microprocesadores

Conclusiones:

Ya aprendimos como generar una onda cuadrada y como encender y apagar leds el
llamado blink, como luces preventivas. Recordemos que al escribir el programa
debemos guardarlo en C y como .asm. para no tener problemas













































Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA 3 ROTAR UN LED

OBJETIVO: El objetivo es mostrar como podemos utilizar las instrucciones rlf y rrf. Y
como con otro programa sumamente sencillo y elemental se puede lograr lo mismo,
claro que con la desventaja que se utiliza un poco de mas espacio en la memoria.

TEORIA: Para rotacion de leds podemos usar diferentes tecnicas tales como
declaracion de cambios en las salidas paso por paso o utilizando la instruccin de rlf o
rrf, que significa rotar a la izquierada con el carry y rotar a la derecha con el carry. Lo
que haremos ahora ser un programa que encienda 8 LED's en forma secuencial, y para
ello recurriremos a la rutina de retardo. Las rutinas de retardo la podemos generar con
un simple programita que se encarga de hacer los calculos necesarios para generar el
codigo de el retardo o hacerlo con un simple juego de instrucciones como se vio en la
practica anterior.

Material:
8 Leds
6 Resistencias de 10k
6 Push Botton
1 PIC16F690
1 Fuente de voltaje.
8 Resistencias de 330 ohms.
1 Protoboard
Cable para las conexiones.
Los software que se mencionan en la practica 1

El circuito ser el siguiente, para los 2 primeros programas

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4
10k
R10
10k
R11
10k
R12
10k
R13
10k
R14
10k


Recordemos que la alimentacin a voltaje se conecta al pin 20 y la tierra al pin 1 del
PIC.



El circuto para el tercer programa es el siguiente.
Instituto Tecnolgico de Matamoros
Microprocesadores
1
2
3
4
5
6
7
8
20
19
18
17
16
15
14
13
9 12
10 11
U1
LED-BARGRAPH-RED
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U2
PIC16F690
R9
330R


Recordemos que la alimentacin a voltaje se conecta al pin 20 y la tierra al pin 1 del
PIC.
Y el cdigo que realiza la secuencia para el primer programa es el que viene a
continuacin.






























En el encabezado de cada uno de los programas debemos declarar el pic que se
desea utilizar asi como la configuracin utilizada. Posteriormente el mapa de la
memoria es decir las constantes utilizadas a las cuales se les asigna un lugar en la
memoria utilizado cblock o la instruccin EQU.

Continuamos con la declaracion de los puertos utilizados:
;*****************************************************************************************
; Por el Puerto C obtiene el dato del Puerto A desplazando un bit hacia la izquierda, por la
; derecha entrar un "1". Por ejemplo, si por el Puerto A se introduce "---11001", por el
; Puerto B aparecer "xx110011" (no importa el estado de los dos bits superiores del Puerto C).
;
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)

; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111';LAS 6 LINEAS PORTA COMO ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1
Principal
bsf STATUS,C ; Este es el "1" que entrar por la derecha.
rlf PORTA,W ; Rota los bits una posicin a la izquierda y lo
movwf PORTC ; lleva al Puerto B para que se visualice.
goto Principal ; Se crea un bucle cerrado e infinito.

END ; Fin del programa.

Instituto Tecnolgico de Matamoros
Microprocesadores
Al configurar los puertos debers tener en cuenta que:

Si asignas un CERO (0) a un pin, ste quedar como salida y...
Si le asignas un UNO (1), quedar como entrada

Esta asignacin se hace en:

TRISA para los pines del PUERTO A (6 bits)
TRISC para los pines del PUERTO C (8 bits)
Por Ejemplo:
Si TRISA es igual a 11110 todos sus pines sern entradas salvo RA0 que esta
como salida

Si TRISB es igual a 00000001 todos sus pines sern salidas salvo RB0 que esta
como entrada


Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB estn en
el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a travs
del Registro STATUS

STATUS es un Registro de 8 bits u 8 casillas, en el cual la N 5 (RP0) define la
posicin del banco en donde nos encontramos

Si pones un CERO (0) a RP0 y RP1 estaremos en el BANCO 0
Si le pones un UNO (1) a RP0 y 0 a RP1 estaremos en el BANCO 1
REGISTRO STATUS
7 6 5 4 3 2 1 0
IRP RP1 RP0 TO PD Z DC C

Todo lo que escribas luego de un ";" (punto y coma) ser ignorado por el
ensamblador, estos son los famosos comentarios, y sirve para saber que hace cada
lnea de cdigo. Estos comentarios son de gran ayuda ya que es una guia paso a
paso de lo que el programa esta haciendo.

La directiva org indica el sitio de la memoria en donde se escribe una parte del
programa. En este caso el contador de programa apuntar a la direccin 0x00
(reset) entonces ejecutar la instruccin que sigue a continuacin, (saltar a la
etiqueta inicio) y nuestro cdigo de programa comienza en la direccin de memoria
0x05 (aqu salto por encima de la interrupcin 0x04)

En caso de no entender algunas de las instrucciones utilizadas al final del manual
se da un set de instrucciones que nos explican su funcionamiento.









Instituto Tecnolgico de Matamoros
Microprocesadores
Simulando en proteus tenemos

















































Instituto Tecnolgico de Matamoros
Microprocesadores

Este es el segundo programa en este utilizamos la instruccin rrf.
La configuracin inicial asi como la declaracion de los puertos es bsicamente la
misma a la del primer programa de esta practiaca.
































Simuldo en proteus tenemos














; Por el Puerto C se obtiene el dato del Puerto A desplazando un bit hacia la derecha, por
; la izquierda entrar un "0". Por ejemplo, si por el Puerto A se introduce "---11001",
; por el Puerto B aparecer "0xxx1100".

; ZONA DE DATOS *********************************************************************
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)


; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111';LAS 6 LINEAS PORTA COMO ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1
Principal
bcf STATUS,C ; Este "0" es el que entrar por la izquierda.
rrf PORTA,W ; Rota los bits una posicin a la derecha y lo
movwf PORTC ; lleva al Puerto C para que se visualice.
goto Principal ; Se crea un bucle cerrado e infinito.

END ; Fin del programa.

Instituto Tecnolgico de Matamoros
Microprocesadores
En el ultimo programa de la practica solo cargaremos un valor en la salida para que
se ve el cambio de led encendido. Con una pequea rutina de retardo.
















































Simulado en proteus
; El programa muestra como se puede hacer rotar un led de la forma mas sencilla y simple.

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)



ORG 0
INICIO
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1 ;BANCO 0
PRINCIPAL
clrf PORTC
movlw b'00000000'
movwf PORTC
call retardo
movlw b'00000001'
movwf PORTC
call retardo
movlw b'00000010'
movwf PORTC
call retardo
movlw b'00000100'
movwf PORTC
call retardo
movlw b'00001000'
movwf PORTC
call retardo
movlw b'00010000'
movwf PORTC
call retardo
movlw b'00100000'
movwf PORTC
call retardo
movlw b'01000000'
movwf PORTC
call retardo
movlw b'10000000'
movwf PORTC
call retardo
goto PRINCIPAL

retardo
MOVLW 100
MOVWF 0C
DECFSZ 0C
GOTO $-1
RETURN
END


Instituto Tecnolgico de Matamoros
Microprocesadores






























Conclusin:
Se puede generar un codigo para cada necesidad desde el mas basico
hasta uno mas complejo segn sea lo que se necesite realizar.
















Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA 4 PULSADOR

OBJETIVO: Saber como utilizar un pulsador, hay varias formas de hacerlo, y ms
adelante utilizaremos el mtodo de INTERRUPCIONES.

TEORIA: Para el primer programa de la practica se configura el pin 0 del puerto A
como entrada y el pin 0 del Puerto C como salida, cabe mencionar que este
programa solo cuenta el primer pulso y enciende la salida. Como ya se menciono
anteriormente esto solo cuestion de seleccin ya que se pudo haber seleccionado
cualquier otro pin de proposito general para configurarlo ya sea como entrada o
como salida. Para el segundo programa de la practica ya esta mas elaborado
porque en este utilizamos un dispay para visualizar la salida y solamente cuenta 9
pulsos, el programa puede ser modificado para contar de cero a 15 segn se desee.

Material utilizado para ambas practicas
2 Resistencias de 10k
2 Push button
1 Display catodo comun
1 Resistencia de 330 ohms
2 Led
1 Pic 16F690


El circuito para el primer programa es el siguiente:

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
R1
330
R13
10k



















Instituto Tecnolgico de Matamoros
Microprocesadores
El primer programa es
























Con BTFSC estoy probando el bit (Bit 0) del puerto A. Si este bit esta a cero es por
que nadie lo presion, entonces salto una lnea, y me encuentro con GOTO test,
as que aqu estar dando vueltas un buen rato, hasta que a alguien se le ocurra
presionar el dichoso pulsador...

parece ser que alguien lo presion. Bueno, esta vez no ir a GOTO, sino a CALL
led, esto es una llamada a la subrutina led, all vamos...
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF
& _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

cont EQU 0x20

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111';LAS 6 LINEAS PORTA COMO
ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1

inicio
CLRF PORTC ; limpio el puerto B
CLRF cont ; limpio el contador
BSF cont,0 ; pongo el contador a 1

;------------------------------------------

test BTFSC PORTA,0 ; si alguien presiona
CALL led ; voy a la etiqueta "led"
GOTO test ; sino me quedo esperando

led BTFSC cont,0 ; si el contador est a 1
GOTO on_led ; lo atiendo en "on_led"
BCF PORTB,0 ; sino, apago el LED
BSF cont,0 ; pongo el contador a 1
GOTO libre ; y espero que suelten el pulsador

on_led
BSF PORTC,0 ; enciendo el LED
CLRF cont ; pongo el contador a 0
libre BTFSC PORTA,0 ; si no sueltan el pulsador
GOTO libre ; me quedar a esperar

RETURN ; si lo sueltan regreso
; a testear nuevamente

;------------------------------------------
END
Instituto Tecnolgico de Matamoros
Microprocesadores
Antes de hacer algo debo saber si el LED est encendido o apagado. Recuerda que
si est apagado cont=0000001, de lo contrario cont=00000000

Pregunta...(BTFSC cont,0 ?) - el primer bit del registro cont es igual a uno?...

Si es as el LED est apagado as que lo atender en "on_led" ah pondr a uno el
primer bit del puerto B (encender el led), luego har cont=0000000 para saber
que desde este momento el LED est encendido.

El tema es que nunca falta aquellos que presionan un pulsador y luego no lo
quieren soltar, as que le daremos para que tengan..., y nos quedaremos en la
subrrutina "libre" hasta que lo suelten, y cuando lo liberen, saltaremos una lnea
hasta la instruccin RETURN.

As es que caeremos en (GOTO test) y esperamos a que opriman nuevamente el
pulsador. y si quieres saber si esto funciona ponle el dedito, y caers otra vez en la
subrrutina "led"

Pregunta...(BTFSC cont,0 ?) - el primer bit del registro cont es 1?...

No.. Eso significa que el LED esta encendido, entonces lo apagar (BCF
PORTB,0), har cont=00000001 (de ahora en ms LED apagado) y me quedar
en "libre" esperando a que sueltes el pulsador.

Simulando en proteus tenemos que al presionar el pulsador conectadp a RA0
encendera el led conectado a la salida RC0, al momento en que se deja de pulsar,
el led se mantiene encendido hasta que se presiona el pulsador nuevamente se
apaga y no enciende hasta que se pulse nuevamente.

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
R1
330
R13
10k



RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
R1
330
R13
10k


Instituto Tecnolgico de Matamoros
Microprocesadores
El siguiente circuto se utiliza en el segundo programa

R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k


Cada vez que se presiona el pulsador conectado al pin RA4 incremanenta un
contador visualizado en el display. La logica del funcionamiento es similar al
programa anterior solo que en este caso se visualiza con l display la cuenta. Utiliza
instrucciones similares con la diferencia que en este caso agregamos la subrutina
del display a 7 segmentos, para poder visualizar los numeros.

Simulacin en proteus tenemos al presionar el pulsador por primera vez. Si al
armar el circuito y se conecta por primera vez se deja el pulsador oprimido el
microcontrolador lo tomara como si se hubiese oprimido por primera vez.

R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

Al oprimir el pulsador 4 veces tenemos

R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

Instituto Tecnolgico de Matamoros
Microprocesadores
Este es el segundo progama de la pratica
























































; Cada vez que presione el pulsador conectado al pin RA4 incrementa un contador visualizado
; en el display.
;
; ZONA DE DATOS **********************************************************************

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF
& _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

; ZONA DE CDIGOS ********************************************************************
CBLOCK 0x20
Display7s_Dato
Contador
PDel0
PDel1 ; El contador a visualizar.
ENDC

#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Display PORTC ; El display est conectado al Puerto B.

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;Banco 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;Banco 1
MOVLW B'00111111' ;Las seis lineas del puerto A como entrada(0-5)
MOVWF PORTA ;
MOVLW B'00000000' ;Como salidas
MOVWF PORTC ;
BCF STATUS,RP0 ;Banco 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1

Principal
btfsc Pulsador ; Pulsador presionado?, (Pulsador)=0?
goto Fin ; No. Vuelve a leerlo.
call Retardo_20ms ; Espera que se estabilicen los niveles de tensin.
btfsc Pulsador ; Comprueba si es un rebote.
goto Fin ; Era un rebote y sale fuera.
call IncrementaVisualiza ; Incrementa el contador y lo visualiza.
EsperaDejePulsar
btfss Pulsador ; Dej de pulsar?. (Pulsador)=1?
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
Fin goto Principal

; Subrutina "IncrementaVisualiza" ---------------------------------------------------------

IncrementaVisualiza
incf Contador,F ; Incrementa el contador y comprueba si ha
movlw d'10' ; llegado a su valor mximo mediante una
subwf Contador,W ; resta. (W)=(Contador)-10.
btfsc STATUS,C ; C=0?, (W) negativo?, (Contador)<10?
InicializaContador
clrf Contador ; No, era igual o mayor. Por tanto, resetea.
Visualiza
movf Contador,W
call Numero_a_7Segmentos ; Lo pasa a siete segmento para poder ser
movwf Display ; visualizado en el display.
return
Instituto Tecnolgico de Matamoros
Microprocesadores

























































Numero_a_7Segmentos
andlw b'00001111' ; Se queda con el nibble bajo.
addlw '0' ; Se pasa a ASCII sumndole el valor ASCII
; del "0" y ejecuta "ASCII_7_Segmentos".
ASCII_a_7Segmentos
movwf Display7s_Dato ; Guarda el valor del carcter.
sublw ' ' ; Comprueba si es " " (espacio).
btfsc STATUS,Z ; Es distinta de " " (espacio)?, Z=0?
retlw 00h ; Es " ". Devuelve el cdigo 7-Segmentos del " ".
movf Display7s_Dato,W ; Recupera el valor del dato de entrada.
sublw '' ; Comprueba si es "".
btfsc STATUS,Z ; Es distinta de ""?, Z=0?
retlw 55h ; Es "". Devuelve el cdigo 7-Segmentos de "".
movf Display7s_Dato,W ; Recupera el valor del dato de entrada.
sublw '' ; Comprueba si es "".
btfsc STATUS,Z ; Es distinta de ""?, Z=0?
retlw 63h ; Es "". Devuelve el cdigo 7-Segmentos de "".
;
movf Display7s_Dato,W ; Comprueba si el cdigo ASCII es mayor que la "Z".
sublw 'Z' ; (W)='Z'-(Display7s_Dato)
btfss STATUS,C ; C=1?, (W) positivo?, 'Z'>=(Display7s_Dato)?
retlw b'10000000' ; Si el cdigo ASCII es mayor que 'Z' es un error.
movlw '+' ; Averigua en qu orden est el carcter ledo
subwf Display7s_Dato,W ; dentro de la tabla de conversin, respecto del
btfss STATUS,C ; primero que es '+'.
retlw b'10000000' ; Si el cdigo ASCII es menor que '+' es un error.
;
addwf PCL,F ; Obtiene el cdigo 7 segmentos.
InicioTablaASCII
DT 46h, 04h, 40h, 80h, 00h, 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh ; Signos y
DT 7Dh, 07h, 7Fh, 67h, 41h, 88h, 00h, 48h, 00h, 00h, 00h ; nmeros.
DT 77h, 7Ch, 39h, 5Eh, 79h, 71h, 6Fh, 76h, 19h, 1Eh, 7Ah, 38h, 37h ; Letras.
DT 54h, 3Fh, 73h, 67h, 50h, 6Dh, 78h, 1Ch, 3Eh, 1Dh, 70h, 6Eh, 49h
FinTablaASCII
;
; Esta es la tabla para la visualizacin en display de siete segmentos

IF (FinTablaASCII >0xFF)
ERROR "CUIDADO!: La tabla ha superado el tamao de la pgina de los"
MESSG "primeros 256 bytes de memoria ROM. NO funcionar correctamente."
ENDIF


Retardo_20ms
PDelay movlw .156 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .213 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2
decfsz PDel1, 1 ; 1 +(1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 +(1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL3 goto PDelL4 ; 2 cycles delay
PDelL4 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------

end
Instituto Tecnolgico de Matamoros
Microprocesadores

Conclusiones : como ya se menciono al principio pueden generarse pulsos por
medio del timer0 provocando interrupciones por desbordamiento o hacerlo mas facil
y sencillo como en este caso. Mas adelante veremos como se utiliza yconfigura el
timer 0.














































Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA 5 USOS DE LOS DISPLAY

OBJETIVO
Mostrar las diferentes formas en que se puede usar un display de 7 segmentos
no solo para observar numeros si no tambien letras.

TEORIA: El display de siete segmentos es un periferico digital de salida que se
utiliza para representar valores numericos (figura 7). Cada display consta de 7
segmentos y un punto decimal, todos ellos son diodos LEDs. estos diodos se
pueden conectar en dos configuraciones posibles, segn los pines que tengan
unidos: anodo comun o catodo comun. Los segmentos de los displays en el caso del
pic16f690 se controlan directamente mediante el puerto C y segn el tipo de
display la conexin al microcontrolador varia segn indica la figura 7.

El principal problema de los displays de 7 segmgentos es que requiere de
muchas lineas para su control.
R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690

conexin de un display de catodo comun

R14
330R
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
5v
D1
LED-GREEN
5v

Conexin de un display de anodo comun





Instituto Tecnolgico de Matamoros
Microprocesadores
Material utilizado
1 PIC16F690
8 Resistencias de 330 ohms
4 Resistencias de 10K
8 Pulsadores
1 Protoboard
1 Fuente de voltaje
1 Display de catodo comun.

Circuito utilizado.
R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k


Programa































;*******************************************************************************************
; En un display de 7 segmentos conectado al Puerto C se visualiza la cantidad leda por
; el Puerto A. As por ejemplo si por la entrada lee "---0101" en el display visualiza "5".
;
; ZONA DE DATOS **********************************************************************


list P=16f690
#include <p16F690.inc>

__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF & _BOR_OFF &
_IESO_OFF & _FCMEN_OFF)

org 0

BCF STATUS,RP0 ;Banco 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;Banco 1
MOVLW B'00111111';las 6 lineas del puerto A como entradas
MOVWF PORTA ;
MOVLW B'00000000' ;Configura puerto C como salida
MOVWF PORTC ;
BCF STATUS,RP0 ;Banco 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1 ;Banco 0
Principal

movf PORTA,W ; Lee la entrada
andlw b'00001111' ; Mscara para quedarse con el valor de las

Instituto Tecnolgico de Matamoros
Microprocesadores























Para simular el circuto se da un clic en el centro de el pic, despus aparecera una
ventana


















En este recuadro damos un clic en la carpeta del recuadro program file
y hay apareceran todos los archivos .HEX generados. Seleccionamos el programa
que queremos simular y le damos OK o enter para cargarlo en el pic.










; entradas correspondientes al nibble bajo.
call Binario_a_7Segmentos ; Convierte cdigo binario a 7 segmentos del display.
movwf PORTC ; Resultado se visualiza por el puerto de salida.
goto Principal

; Subrutina "Binario_7Segmentos" --------------------------------------------------------
;
Binario_a_7Segmentos ; Tabla para display de 7 segmentos.
addwf PCL,F
Tabla retlw 3Fh ; El cdigo 7 segmentos para el "0".
retlw 06h ; El cdigo 7 segmentos para el "1".
retlw 5Bh ; El cdigo 7 segmentos para el "2".
retlw 4Fh ; El cdigo 7 segmentos para el "3".
retlw 66h ; El cdigo 7 segmentos para el "4".
retlw 6Dh ; El cdigo 7 segmentos para el "5".
retlw 7Dh ; El cdigo 7 segmentos para el "6".
retlw 07h ; El cdigo 7 segmentos para el "7".
retlw 7Fh ; El cdigo 7 segmentos para el "8".
retlw 67h ; El cdigo 7 segmentos para el "9".
retlw 77h ; El cdigo 7 segmentos para el "A".
retlw 7Ch ; El cdigo 7 segmentos para el "B".
retlw 39h ; El cdigo 7 segmentos para el "C".
retlw 5Eh ; El cdigo 7 segmentos para el "D".
retlw 79h ; El cdigo 7 segmentos para el "E".
retlw 71h ; El cdigo 7 segmentos para el "F".

END ; Fin del programa.


Instituto Tecnolgico de Matamoros
Microprocesadores
Despus damos un click en el icono de play y aparecera en el display un cero ya
que es el numero que se esta introduciendo por el puerto A.


























Aqu podemos introducir el valor del numero que deceemos observar en
hexadecimal en este caso sera el cinco, lo seleccionamos en la enntrada como 0101
y aparecera en el display el valor en decimal.


























Instituto Tecnolgico de Matamoros
Microprocesadores
Ahoar introduzcamos el 1010 en binario que en decimal es 10 y en hexadecimal es
A y tenemos en el display el resutado.























































Instituto Tecnolgico de Matamoros
Microprocesadores

El siguiente circuto se utiliza en el segundo programa

R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k


Cada vez que se presiona el pulsador conectado al pin RA4 incrementa un contador
visualizado en el display. La logica del funcionamiento es similar al programa
anterior solo que en este caso se visualiza con l display la cuenta. Utiliza
instrucciones similares con la diferencia que en este caso agregamos la subrutina
del display a 7 segmentos, para poder visualizar los numeros.

Podeos simular las letras A con un cero en la entrada (Puerto A)
R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

La letra b con uno en la entrada.


R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k



Instituto Tecnolgico de Matamoros
Microprocesadores
La letra c con dos en la entrada.
R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

La letra d con 3 en la entrada.
R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

La letra e con 4 en la entrada.

R14
330R
D2
dp
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
R1
10k

Y asi sucesivamente hasta llegar a la letra z. que seria el numero 25 (11001)




Instituto Tecnolgico de Matamoros
Microprocesadores
El segundo programa es:
























































; Por el display de 7 segmentos conectado al Puerto B se visualiza una de las 26 letras
; del alfabeto internacional: de la "A" a la "Z". La letra a visualizar lo determina el
; orden ledo por el Puerto A. As por ejemplo:
; - Si por el Puerto A se lee "---0000" (cero) la letra visualizada ser la "A"
; que es la que est en el orden cero.
; - Si por el Puerto A se lee "---1101" (veinticinco) la letra visualizada ser la "Z"
; que es la que est en el orden veinticinco.
;
; Por ahora no se contempla la posibilidad que el nmero de entrada sea mayor de 25.
;
; ZONA DE DATOS ***********************************
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)



org 0

BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111';LAS 6 LINEAS PORTA COMO
ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1 ;BANCO 0

Principal
movf PORTA,W ; Lee la entrada.
call Letra_a_7Segmentos ; Convierte a 7 Segmentos.
movwf PORTC ; Resultado se visualiza por el puerto de salida.
goto Principal

; Subrutina "Letra_a_7Segmentos" --------------------------------------------------------
;
Letra_a_7Segmentos
addwf PCL,F
InicioTabla
DT 77h,7Ch, 39h, 5Eh, 79h, 71h, 6Fh, 76h, 19h, 1Eh, 7Ah, 38h, 37h
DT 54h, 3Fh, 73h, 67h, 50h, 6Dh, 78h, 1Ch, 3Eh, 1Dh, 70h, 6Eh, 49h
FinTabla
END
Instituto Tecnolgico de Matamoros
Microprocesadores




Conclusiones

La seleccin del display a utilizar es a critrio de quien lo va a usar cabe aclarar que
la conexin del display de anodo comun y la del display de catodo comun no es la
misma para esto deberemos de checar en la hoja de datos de cada uno de los
displays.









































Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA 7 INSTRUCCIONES DE SUMA

OBJETIVO
Mostrar un ejemplo sencillo de cmo se pueden utilizar las instrucciones de
suma las cuales son addwf y addwl.

TEORIA
La suma se realiza en aritmetica binaria pura sin signo y afcta a los flags del
registro STATUS de la siguiente forma:

Al flag Z (Zero). El bit Z se pone en 1 si el resultado de la accion es cero
(b00000000) y se pone Z en 0 si el resultado tiene otro valor.
Al flag C (Carry).si hay un acarreo del bit 7, es decir, si el resultado es
mayor que b1111111(255 en decimal) el bit C (Carry) se activa y se pone a
1, en caso contrario resulta C = 0.
Al flag DC (Digital Carry). Si hay un acarreo del bit 3 al 4, es decir que la
suma de las dos mitades (nibbles) menos significativos (bit de 0 a 3) resulta
mayor que 15, el bit DC se pone a 1, en caso contrario se pone a 0.


Por ejemplo 1
165 (decimal) 10100011(binario) 43 (hex)
+79 (decimal) + 01001111(binario) +4F (hex) C DC Z
242 (decimal) 11110010(binario) F2 (hex) 0 1 0


Por ejemplo 2
209 (decimal) 11010001(binario) D1 (hex)
+56 (decimal) + 00111000(binario) +38 (hex) C DC Z
265 (decimal) 00001001(binario) 09 (hex) 1 0 0

En este ultimo ejemplo se ha superado el valor maximo de 255 (decimal) y por
tanto el carry se activa a 1, en este caso el resultado obtenido es b00001001 (
9 en decimal) no corresponde con el valor decimal correcto que es de 265, si se
aade al flag carry al resultado obtenido, se obtiene b100001001 que si
corresponde con el valor correcto de 265
10
. Como conclusin, se puede afirmar que
el flag Carry es el noveno bit del registro de trabajo y por lo tanto del rtesultado.

Desarrollo
El ejercicio se realiza en el entorno MPLAB, simulandose posteriormente en
PROTEUS. La resolucion se hara utilizando un unico ejemplo llamado.
INSTRUCCINADDLW.asm e INSTRUCCIONADDWF.asm. La edicion de el programa
se realiza en el editor de MPLAB.

El ciruito utilizado para el primer programa es:

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4 10k R10
10k
R11
10k
R12
10k
R13
10k

Simularon en proteus
Instituto Tecnolgico de Matamoros
Microprocesadores
Se puede observar como al valor introducido por el puerto A se le suma el valor de
la constante K que en este caso su eleccion fue en forma aleatoria ya que podra
haber elegido algun otro valor para asignar a la literal o constante k.

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4 10k R10
10k
R11
10k
R12
10k
R13
10k


Edicin del programa































; programa para mostrar el funcionamiento de la instruccion ADDLW esta instruccin ;suma el contenido
del registro W con el liteeral o constante k. almacena el resultado ;en W.
;
;
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF &
_CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)


; ZONA DE CDIGOS
********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;Banco 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;Banco 1
MOVLW B'00111111' ;Las lineas se configuran como entrada
MOVWF PORTA
MOVLW B'00000000' ;las lineas del puerto C se configuran como
MOVWF PORTC ;salida
BCF STATUS,RP0 ;Banco 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1

Principal
MOVF PORTA,W ;Lee el puerto A
ADDLW 0X03 ;Suma el contenido del registro W con la literal o constante
MOVWF PORTC ;El resultado lo muestra en el puerto C
GOTO Principal


END

Instituto Tecnolgico de Matamoros
Microprocesadores
El circuito para el segundo programa de la practica es:

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4
10k
R10
10k
R11
10k
R12
10k
R13
10k
R14
10k
R15
10k
R16
10k


Simulado en proteus obtenemos la suma de los valores de las etradas de los dos
puertos

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4
10k
R10
10k
R11
10k
R12
10k
R13
10k
R14
10k
R15
10k
R16
10k











Instituto Tecnolgico de Matamoros
Microprocesadores
Edicin del segundo programa de la practica






































Conclusiones
Por medio de los dos programas te podemos dar una idea de cmo emplear las
istrucciones de suma.









;***************************************************************************************
;Programa para mostrar como se puede utilizar la instruccion de suma
;en este caso suma lo del puerto A mas lo que hay en el puerto B y lo muestraa en el
;puerto C.


#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)

CBLOCK 0X20
CONSTANTE
ENDC
; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00001111';LAS 6 LINEAS PORTA COMO
ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH

BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTB
BSF STATUS,RP0
MOVLW 0XF8
MOVWF TRISB
BCF STATUS,RP0
Principal
MOVF PORTA,W
ANDLW b'00001111'


ADDWF PORTB,w
MOVWF PORTC
GOTO Principal
END

Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA #8 CONVIERTE UN NUMERO DECIMAL A BINARIO

OBJETIVO.
Mostrar un ejemplo claro de la conversin de un numero binario natural a BDC.

TEORIA
La conversin de un numero expresado en binario natural a formato BCD es una
de las operaciones mas utilizadas en los programas con microcontrolador y que
merece ser analizada a detalle. Por ejemplo el valor 124 expresado en binario
natural seria 01111100, para expresarlo en BCD hay que separarlo en centenas,
decenas y unidades quedando.000100100100. La figura 1 explica el diagrama de
flujo para resolver esta conversin. Un programa que es un claro ejemplo es el
siguiente.
































Figura 1. Diagrama de flujo de para la conversin de un numero binario natural a
BCD




Unidades =Numero a convertir
Decenas =0
Centeneas =0
(Unidades) 10 W
(W)>=10?
Resultado se almacena en:
unidades, decenas y centenas
(Decenas)>=10?

End
Bin_a_BCD
Decenas =0
Incremento (Centenas)
(W) (Decenas)
Incrementa (Decenas)
Instituto Tecnolgico de Matamoros
Microprocesadores
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330






































;********************************************************************
; Un nmero binario de 8 bits es convertido a BCD. El resultado se guarda en tres posiciones
; de memorias llamadas Centenas, Decenas y Unidades. Adems al final las unidades estarn en el
; nibble bajo del registro W y las decenas en el nibble alto. En los diodos LEDs conectados al
; puerto de salida se visualizarn las decenas y las unidades.
;
; El mximo nmero a convertir ser el 255 que es el mximo valor que puede adquirir el
; nmero binario de entrada de 8 bits.
;
; El procedimiento utilizado es mediante restas de 10 tal como se explica en el siguiente
; ejemplo que trata de la conversin del nmero 124 a BCD:
;
; (Centenas) (Decenas) (Unidades) (Unidades)<10? (Decenas)=10?
; ---------- --------- ---------- -------------- -------------------------
;
; 0 0 124 NO, resta 10 Incrementa (Decenas).
; 0 1 114 NO, resta 10 NO. Incrementa (Decenas).
; 0 2 104 NO, resta 10 NO. Incrementa (Decenas).
; 0 3 94 NO, resta 10 NO. Incrementa (Decenas).
; 0 4 84 NO, resta 10 NO. Incrementa (Decenas).
; 0 5 74 NO, resta 10 NO. Incrementa (Decenas).
; 0 6 64 NO, resta 10 NO. Incrementa (Decenas).
; 0 7 54 NO, resta 10 NO. Incrementa (Decenas).
; 0 8 44 NO, resta 10 NO. Incrementa (Decenas).
; 0 9 34 NO, resta 10 NO. Incrementa (Decenas).
; 1 0 24 NO, resta 10 S. (Decenas)=0, y adems
; incrementa (Centenas)
; 1 1 14 NO, resta 10 NO. Incrementa (Decenas)
; 1 2 4 S, se acab.
;
; El nmero a convertir ser la constante "Numero".
;
; ZONA DE DATOS *******************************************
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)


CBLOCK 0x0C ; La zona de memoria de usuario comienza en esta
Centenas ; direccin de memoria RAM de datos.
Decenas ; Posicin 0x0D de RAM.
Unidades ; Posicin 0x0E de RAM.
ENDC

Numero EQU .124 ; Por ejemplo.


; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.

Instituto Tecnolgico de Matamoros
Microprocesadores

































Ahora lo simulamos en PROTEUS


RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330

Inicio
bcf STATUS,RP0
bcf STATUS,RP1 ;Acceso al banco 0
clrf PORTC
bsf STATUS,RP1 ;Acceso al banco 2
clrf ANSEL ;Seleccion de 1/0 digitales
bsf STATUS,RP0
bcf STATUS,RP1 ;Acceso al banco 1
movlw 00h ;Carga W con el valor FFh
movwf TRISC ;Configura las RC<6:0>del puerto C como entrada
bcf STATUS,RP0



Principal
clrf Centenas ; Carga los registros con el resultado inicial.
clrf Decenas ; En principio (Centenas)=0 y (Decenas)=0.
movlw Numero
movwf Unidades ; Se carga el nmero binario a convertir.
BCD_Resta10
movlw .10 ; A las unidades se les va restando 10 en cada
subwf Unidades,W ; pasada. (W)=(Unidades)-10.
btfss STATUS,C ; (C)=1?, (W) positivo?, (Unidades)>=10?.
goto BIN_BCD_Fin ; No, es menor de 10. Se acab.
BCD_IncrementaDecenas
movwf Unidades ; Recupera lo que queda por restar.
incf Decenas,F ; Incrementa las decenas y comprueba si llega a
movlw .10 ; 10. Lo hace mediante una resta.

btfss STATUS,C ; (C)=1?, (W) positivo?, (Decenas)>=10?.
goto BCD_Resta10 ; No. Vuelve a dar otra pasada, restndole 10.
BCD_IncrementaCentenas
clrf Decenas ; Pone a cero las decenas
incf Centenas,F ; e incrementa las centenas.
goto BCD_Resta10 ; Otra pasada, resta 10 al nmero a convertir.
BIN_BCD_Fin
swapf Decenas,W ; En el nibble alto de W tambin las decenas.
addwf Unidades,W ; En el nibble bajo de W las unidades.
movwf PORTC ; Se visualiza por el puerto de salida.
sleep ; Se queda permanentemente en reposo.

END ; Fin del programa.


Instituto Tecnolgico de Matamoros
Microprocesadores



Conclusiones
La elaboracin de el programa fue sencilla ya que solo se utiliza la logica de las
matematicas, sumar y restar en si es algo sencillo. Ademas en cada paso se
agrega un comentario para poder facilitar el buen entendimiento del proceso del
programa. Para modificar el valor del numero binario a convertir se logra
modificando la constante Numero.










































Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA # 9 SALTO INDEXADO

OBJETIVO
Aprender a utilizar las tablas ya que para la mayoria de los requerimentos del algun
problema podemos utuilizarla y es una forma mucho mas facil para horrarnos
espacio en el programa por ejemplo en la elaboracin de un display de 7
segmentos, en un programa que simule el funcionamiento de un semforo, de un
deposito de liquidos etc.

TEORIA
El salto indexado es una tecnica que permite resolver problemas ue pueden ser
representado mediante una tabla de verdad. En el PIC16F690 se basa en la
utilizacin de la instruccin addwf PCL,F, de este modo la direccion se consigue
sumando al contador del programa (PCL) un valor de desplazamiento almacenado
en el registro de trabajo,W.
En el salto indexado, la direccion del salto se consigue sumando a un registro
base
( el PCL) un valor de desplazamiento almacenado en un registro indice que es el
registro de trabajo W. A este valor de desplazamiento se le denomina tambien
offset. Al ejecutar la instruccin addwf PCL,F el registro base (PCL) debe estar
cargado con la primera direccion de la tabla, apuntado de esta manera en el origen
de esta.

El registro PCL , guarda los 8 bits de de menor peso ( 7:0 ) del PC. Al
tratarse de un registro localizado dentro del REGISTRO DE FUNCIONES
ESPECIALES (SFR) se puede escribir y leer.
Los bits (12:8) del PC se alojan en el registro PCH, que es un registro que
no se puede leer ni escribir directamente. Para acceder a estos bits se utiliza
el registro PCLATH.



La instruccin retlw (Return with Literal in W), funciona de forma similar que el
return, produce el retorno de una subrutina pero con un valor en el registro W.
Dicha caracteristica es de suma importancia cuando se desea acceder atablas de
datos en la memoria del programa.

El formato de esta instruccin es:

Retlw k

Donde k es el valor que carga en el registro de trabajo.

Instituto Tecnolgico de Matamoros
Microprocesadores

Una de las mayores aplicaciones en el manejo de la tabla de datos es la
resolucion de tablas de verdad grabadas en ROM. A continuacin se muestra un
claro ejemplo. En el programa se aprecia como la tabla esta formada por una tabla
de datos ordenados secuencialmente, de tal forma que para leer uno de ellos se
suma el registro W al contador del programa mediante el programa de salto
indexado addwf PCL,F, posicionandolo en el valor requerido y extrayendo el dato
de la tabla con la instruccin retlw. Los valores de las constantes estan grabadas y
no se puede alterar. La unica manera de alterar una tabla ROM es volver a grabar
en el microcontrolador.

No se debe confundir las tablas en ROM con las tablas de datos en la memoria
RAM, que contienen varibles almacenadas en la memoria de datos y que pueden
alterase. Para facilitar el uso de las instrucciones retlw el ensamblador MPASM
facilita la directiva DT ( Define Tabla) que sustituye el empleo repetitivo de muchas
instrucciones retlw su sintaxis es :

DT < expr> [ ,<expr>,..,<exp>]

Esta directiva genera durante la fase de ensamblado instrucciones retlw, una
instruccin por cada <exp.>. cada carcter de una cadena es almacenado en su
propia instruccin retlw

MATERIAL
1 Fuente de 5 volts
1 PIC16f690
5 Resistencias de 10K
8 Leds
8 Resistencias de 330 ohms
5 Push botton

Circuito a utilizar para el primer programa.

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4 10k R10
10k
R11
10k
R12
10k
R13
10k










Instituto Tecnolgico de Matamoros
Microprocesadores

















































Este es el primer programa de la practica. Si lo simulamos en proteus obtenemos lo
siguiente, como ya mencionamos la entrada ( Puerto A) controlo el numero de leds
que se encienden en la salida ( Puerto C). primero encenderemos tres y despus los
7 leds.




;*********************************************************************
; Lee las tres lneas ms bajas del puerto A, que fijan la cantidad del nmero de LEDs a
; iluminar. Por ejemplo, si (PORTA)=b'---00101' (cinco) se encendern cinco diodos LEDs
; (D4, D3, D2, D1 y D0). Se resolver utilizando tablas mediante la instruccin "retlw".
;
; ZONA DE DATOS **********************************************************************

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF
& _BOR_OFF & _IESO_OFF & _FCMEN_OFF)



ORG 0
INICIO
BCF STATUS,RP0 ;Banco 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111' ;Las 6 lineas del puerto como entrada(0-5)
MOVWF PORTA
MOVLW B'00000000' ;Como salida
MOVWF PORTC ;
BCF STATUS,RP0 ; Banco 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1 ;Banco 0
Principal
movf PORTA,W ; Lee la entrada.
andlw b'00000111' ; Se queda con los tres bits ms bajos de la entrada.
call IluminarLEDs ; Obtiene el cdigo deseado.
movwf PORTC ; El resultado se visualiza por la salida.
goto Principal

; Subrutina "IluminarLEDs" --------------------------------------------------------------
;
IluminarLEDs
addwf PCL,FTabla retlw b'00000000' ; Todos los LEDs apagados.
retlw b'00000001' ; Se enciende D0.
retlw b'00000011' ; Se enciende D1 y D0.
retlw b'00000111' ; Etc.
retlw b'00001111'
retlw b'00011111'
retlw b'00111111'
retlw b'01111111'

END ; Fin del programa.

;**********************************************************************
Instituto Tecnolgico de Matamoros
Microprocesadores




















































Para el siguiente programa el circuto a utilizar es el siguiente.

Instituto Tecnolgico de Matamoros
Microprocesadores
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D5
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R10
10k
R11
10k
R12
10k
R13
10k


Para la primera configuracin simulado en proteus tenemos.









































Instituto Tecnolgico de Matamoros
Microprocesadores

























































;*****************************************************************************************

; Implmentar una tabla de la verdad mediante el manejo de tablas grabadas en ROM.
; Por ejemplo, la tabla ser de 3 entradas y 6 salidas tal como la siguiente:
;
; C B A | S5 S4 S3 S2 S1 S0
; -----------|---------------------------
; 0 0 0 | 0 0 1 0 1 0 ; (Configuracin 0).
; 0 0 1 | 0 0 1 0 0 1 ; (Configuracin 1).
; 0 1 0 | 1 0 0 0 1 1 ; (Configuracin 2).
; 0 1 1 | 0 0 1 1 1 1 ; (Configuracin 3).
; 1 0 0 | 1 0 0 0 0 0 ; (Configuracin 4).
; 1 0 1 | 0 0 0 1 1 1 ; (Configuracin 5).
; 1 1 0 | 0 1 0 1 1 1 ; (Configuracin 6).
; 1 1 1 | 1 1 1 1 1 1 ; (Configuracin 7).
;
; Las entradas C, B, A se conectarn a las lneas del puerto A: RA2 (C), RA1 (B) y RA0 (A).
; Las salidas se obtienen en el puerto C:
; RC5 (S5), RC4 (S4), RC3 (S3), RC2 (S2), RC1 (S1) y RC0 (S0).
;
; ZONA DE DATOS **********************************************************************

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)
CBLOCK
PDel0
PDel1
ENDC
; ZONA DE CDIGOS ********************************************************************

ORG 0 ; El programa comienza en la direccin 0.
Inicio
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00111111' ;LAS 6 LINEAS PORTA COMO ENTRADAS(0-5)
MOVWF PORTA ;SELECCIONADAS COMO ENTRADAS
MOVLW B'00000000' ;COMO SALIDAS
MOVWF PORTC ;
BCF STATUS,RP0 ;BANCO 2
BSF STATUS,RP1 ;
CLRF ANSEL
CLRF ANSELH
BCF STATUS,RP1

Principal
movf PORTA,W ; Lee el valor de las variables de entrada.
andlw b'00000111' ; Se queda con los tres bits de entrada.
addwf PCL,F ; Salta a la configuracin adecuada.
Tabla
goto Configuracion0
goto Configuracion1
goto Configuracion2
goto Configuracion3
goto Configuracion4
goto Configuracion5
goto Configuracion6
goto Configuracion7
Configuracion0
movlw b'00001010' ; (Configuracin 0).
goto ActivaSalida
Configuracion1
movlw b'00001001' ; (Configuracin 1).
goto ActivaSalida
Configuracion2
movlw b'00100011' ; (Configuracin 2).
goto ActivaSalida
Configuracion3
movlw b'00001111' ; (Configuracin 3).
goto ActivaSalida
Configuracion4
movlw b'00100000' ; (Configuracin 4).
goto ActivaSalida


Instituto Tecnolgico de Matamoros
Microprocesadores

































Para el tercer programa de la practica tenemos el siguiente circuito.

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
D1
LED
D2
LED
D3
LED
D4
LED
D6
LED
D7
LED
D8
LED
R1
330
R2
330
R5
330 R6
330 R7
330 R8
330 R9
330
R3
330
R4 10k R10
10k
R11
10k
R12
10k
R13
10k
INDICADOR DE VACIO
INDICADOR DE LLENANDOSE
INDICADOR DE LLENO
INDICADOR DE REBOSE
ALARMA
BOMBA1
BOMBA2
D5
LED-RED










Configuracion5
movlw b'00000111' ; (Configuracin 5).
goto ActivaSalida
Configuracion6
movlw b'00010111' ; (Configuracin 6).
goto ActivaSalida
Configuracion7
movlw b'00111111' ; (Configuracin 7).
ActivaSalida
movwf PORTC ; Visualiza por el puerto de salida.
call retardo
goto Principal

retardo
;-------------------------------------------------------------
PDelay movlw .155 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .161 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 goto PDelL3 ; 2 cycles delay
PDelL3 goto PDelL4 ; 2 cycles delay
PDelL4 goto PDelL5 ; 2 cycles delay
PDelL5 goto PDelL6 ; 2 cycles delay
PDelL6
decfsz PDel1, 1 ; 1 +(1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 +(1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL7 goto PDelL8 ; 2 cycles delay
PDelL8 goto PDelL9 ; 2 cycles delay
PDelL9 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
END
Instituto Tecnolgico de Matamoros
Microprocesadores
Programa

























































; Controla el nivel de un depsito de lquido. Utiliza (entre parntesis las lneas del
; microcontrolador a la que se han conectado):
; - Tres sondas detectoras: SV, Sonda de Vaco (RA0); SLL, Sonda de LLenado (RA1);
; SR, Sonda de Rebose (RA2).
; - Dos bombas de agua: B1 (RC5), B2 (RC6).
; - Cinco indicadores: Vacio (RC0), Llenandose (RC1), Lleno (RC2), Rebose (RC3),
; Alarma (RC4).
;
; Su funcionamiento:
; - Cuando ninguna de las sondas est mojada se entiende que el depsito est vaco y
; se accionarn las dos bombas. El indicador "Vacio" se iluminar .
; - Cuando el nivel del lquido toque la sonda de vaco "SV" seguir llenndose el
; depsito con las dos bombas. El indicador "Llenandose" se ilumina.
; - Cuando el nivel del lquido toca la sonda de llenado "SLL", para la bomba B2, quedando
; B1 activada en modo mantenimiento. El indicador "Lleno" se ilumina.
; - Si el nivel del lquido moja la sonda de rebose "SR" se apaga tambin la bomba B1,
; quedando las dos bombas fuera de servicio. El indicador "Rebose" se enciende.
; - Cuando se produce un fallo o mal funcionamiento en las sondas de entrada (por
; ejemplo que se active la sonda de rebose y no active la de vaco) se paran
; las dos bombas. El indicador "Alarma" se ilumina.
;
; Segn el enunciado del problema, teniendo en cuenta las conexiones citadas y poniendo la
; salida no utilizada (RC7) siempre a cero, la tabla de verdad resultante es:
;
; RA2.. RA0 | RC7 ... ... RC0
; ------------|--------------------------------
; 0 0 0 | 0 1 1 0 0 0 0 1 (Configuracin 0. Estado "Vacio").
; 0 0 1 | 0 1 1 0 0 0 1 0 (Configuracin 1. Estado "Llenandose").
; 0 1 0 | 0 0 0 1 0 0 0 0 (Configuracin 2. Estado "Alarma").
; 0 1 1 | 0 0 1 0 0 1 0 0 (Configuracin 3. Estado "Lleno").
; 1 0 0 | 0 0 0 1 0 0 0 0 (Configuracin 4. Estado "Alarma").
; 1 0 1 | 0 0 0 1 0 0 0 0 (Configuracin 5. Estado "Alarma").
; 1 1 0 | 0 0 0 1 0 0 0 0 (Configuracin 6. Estado "Alarma").
; 1 1 1 | 0 0 0 0 1 0 0 0 (Configuracin 7. Estado "Rebose").
;
; ZONA DE DATOS ***********************************************************

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _

Instituto Tecnolgico de Matamoros
Microprocesadores


























































org 0
bcf STATUS,RP0 ;BANCO 0
bcf STATUS,RP1 ;
bsf STATUS,RP0 ;BANCO 1
movlw B'00111111' ;Las 6 lineas porta comoentradas(0-5)
movwf PORTA ;seleccionadas como entradas
movlw b'00000000' ;como salidas
movwf PORTC ;
bcf STATUS,RP0 ;BANCO 2
bsf STATUS,RP1 ;
bsf STATUS,RP1 ;
clrf ANSEL
clrf ANSELH
bcf STATUS,RP1 ;BANCO 0
inicio

movf PORTA,W ; Lee los sensores.
andlw b'00000111' ; Mscara para quedarse con el valor de los sensores.
addwf PCL,F ; Salta a la configuracin adecuada.
goto Configuracion0
goto Configuracion1
goto Configuracion2
goto Configuracion3
goto Configuracion4
goto Configuracion5
goto Configuracion6
goto Configuracion7




Configuracion0
movlw b'01100001' ; Estado "Vacio" (configuracin 0).
goto ActivaSalida
Configuracion1
movlw b'01100010' ; Estado "Llenndose" (configuracin 1).
goto ActivaSalida
Configuracion2
movlw b'00010000' ; Estado "Alarma" (configuracin 2).
goto ActivaSalida
Configuracion3
movlw b'00100100' ; Estado "Lleno" (configuracin 3).
goto ActivaSalida
Configuracion4
movlw b'00010000' ; Estado "Alarma" (configuracin 4).
goto ActivaSalida
Configuracion5
movlw b'00010000' ; Estado "Alarma" (configuracin 5).
goto ActivaSalida
Configuracion6
movlw b'00010000' ; Estado "Alarma" (configuracin 6).
goto ActivaSalida
Configuracion7
movlw b'00001000' ; Estado "Rebose" (configuracin 7).
ActivaSalida
movwf PORTC ; Visualiza por el puerto de salida.
goto inicio

END


Instituto Tecnolgico de Matamoros
Microprocesadores
Vamos a ver simulada la primera instruccin de vacio.






















Si por ejemplo se ejecuta una instruccin no admitida para el buen funcionamiento
de el deposito de liquidos. Se encendera una alarma. Esto es si alguno de los
sensores no detecta los limites adecuados que le corresponde detectar.



















CONCLUSIONES
La utilizacin de tablas nos permite resolver diferentes tipos de problemas en
forma mas sencilla y rapida.








Instituto Tecnolgico de Matamoros
Microprocesadores
PRACTICA #10 TIMER 0

OBJETIVO

TEORIA EL TIMER 0 (TMR0)

Un timer se implementa por medio de un contador que determine un tiempo
presiso entre el momento en que el valor es cargado y el instante en que se
produce su desbordamiento. Un timer tipico se describe de forma simplificada en la
figura sig. Consiste en un contador ascendente, (tambien podria ser descendente)
que, una vez inicializado con un valor, su contenido se incrementa con cada pulso
de entrada hasta llegar a su valor maximo b`11111111`, desbordado, y volviendo
a empezar desde cero.

Carga inicial del contador


Impulsos de Fin del contaje
Entrada


El timer 0 es un contador ascendente de 8 bits. El TMR0 se inicializa con un valor,
que se incrementa con cada impulso de entrada hasta su valor maximo
b`11111111`; con el siguiente ipulso de entrada el contador se desborda pasando
a volver a B`00000000`, circunstancia que se advierte mediante la activacion del
flan de fin de contaje TOIF localizado en el registro INTCON, los impulsos aplicados
al TMR0 pueden provenir de los pulsos aplicados al pin TOCK1 o de la seal de reloj
interna (fosc/4), lo que le perite actuar de dos formas diferentes

Contador de los impulsos que le llegan por el pin RA2/TOC1
Como temporizador de tiempos

El actuador depende de una u otra forma del bit TOCS del registro OPTION:

Si TOCS = 1, el TMR0 actua como contador.
Si TOCS = 0, el TMR0 actua como temporizador

TMR0 COMO CONTADOR

Cuando el TMR0 trabaja como contador se le introducen los impulsos desde el
exterior por el pin RA2/TOC1 (TMR0 External Clock Input). Su mision es contar el
numero de acontecimientos externos representados por los impulsos que se le
aplican al pin TOCK1 .

El tipo de flanco activado se elige mediante el bit TOSE del registro OPTION:
Si TOSE = 1, el flanco activo es descendente.
Si TOSE = 0, el flanco activo es ascendente.

TMR0 COMO TEMPORIZADOR

Cuando el TMR0 trabaja como temporizador cuenta los impulsos de Focs/4. se
usa para determinar intervalos de tiempo concretos. Estos impulsos tienen una
duracion conocida de un ciclo maquina que es cuatro veces el periodo de la seal
de reloj. Por ejemplo para una frecuencia de reloj de 4Mhz el TMR0 se incrementa
cada 1 microsegundo.
Contador Ascendente
Instituto Tecnolgico de Matamoros
Microprocesadores
Como se trata de un contador ascendente el TMR0 debera cargarse con los
impulsos que se desea contar restados de 256 que es el valor se desbordamiento.
Por ejemplo para contar cuatro impulsos se carga al TMR0 con 256-4 = 252:

Numero de pulsos a contar: 4
10
= b11111100
Numero a cargar: 256
10
-4
10
= b11111100.
Incremento a cada ciclo de instruccin: b11111100,b11111101,
b11111110,b11111111,aqu se desborda pasando a b00000000 y
activando al flag TOIF.

De esta manera, on la llegada de cuatro impulsos, el timer se ha desbordado
alcanzndo el valor 00000000que determina el tiempo de temporizacion, en este
caso 4 microsegundos si los impulsos se hubieran aplicado cada microsegundo.

EL TMR0 ES UN REGISTRO DEL SFR

El TMR0 es un registro de proposito especial ubicado en la posicin 1 del area
SFR de la RAM de datos puede ser leido y escrito al estar onectado directamente al
bus de datos. La siguiente figura ofrece el esquema de funcionamiento del TMR0.
Se puede leer en cualquier momento para conocer el estado de la cuenta. Cuando
se escribe un nuevo valor sobre el TMR0 para comenzar una nueva temporizacion,
el siguientte incremento del mismo se retrasa durante los dos ciclos de reloj
posteriores.

Diagrama a bloques del TMR0/WDT prescaler



DIVISOR DE FRECUENCIA (PRESCALER)

A veces es necesario controlar tiempos largos y aumentar la duracion de los
impulsos que incrementan al TMR0. para cubrir esta necesidad se dispone de un
circuito programable llamado Divisor de Frecuencia o Prescaler. Que divide la
frecuencia utilizada por diversos rangos para poder conseguir temporizaciones mas
largas.
Instituto Tecnolgico de Matamoros
Microprocesadores

Para esto el PIC16F690 dispone de dos temporizadores:

El TMR0, que actua como temporizador principal.
El Watchdog (Perro guardian), que vigila que el programa no se cuelgue.
Para ello, cada cierto tiempo comprueba que el programa esta ejecutandose
normalmente y, si no es asi, reinicia todo el sistema.

El prescaler puede aplicarse a uno de los dos temporizadores.

BITS DE CONFIGURACIN DEL TMR0

Para controlar el comportamiento del TMR0 se utiliza algunos bits de los
registros OPTION e INTCON.

Del registro INTCON.

El registro INTCO es un registro localizado en la direccion 0Bh del banco 0, y
duplicado en las direcciones 8Bh del banco 1,10Bh del banco 2 y 18Bh del banco 3.
Contiene los 8 bits que se muestran en la sig tabla los cuales se utilizaran por ahora
unicamente el TOIF.

GIE EEIE T0IE INTE RBIE T0IF INTF RBIE
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

TOIF (TMR0 Overflow Interrup Flag bit). Flag de interrupcion del TMR0,
indica que que se ha producido un desbordamiento del TMR0 que ha pasado
de b11111111 a b00000000
*T0IF = 0. El TMR0 no se ha desbordado
* T0IF = 1. El TMR0 se ha desbordado.



Del registro OPTION

La mision principal del registro OPTION es gobernar el comportamiento del
TMR0. Algunos microcontroladores PIC tienen una instruccin denominada OPTION.
Los bit utilizados se muestran en la sig. Tabla.

/RABPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


PS2:PS. ( Prescaler Rate Select bit ). Bits para seleccionar los valores del
Prescaler o rango en el que actua el divisor de frecuencia segn la tabla 3.
PSA (Prescaler Assignment bit ). Asignacin del divisor de frecuencia. PSA =
0 el divisor de frecuencia se asigna al TMR0. PSA = 1 el divisor de
frecuencia se asigna al watchdog.
TOSE ( TMR0 Sourse Edge Select bit ) selecciona flanco de la seal de
entrada del TMR0.
TOSE = 0 TMR0 se incrementa en cada flanco ascendente de la seal
aplicada al pin RA2/ T0CK1
TOSE = 1 TMR0 se incrementa en cada flanco descendente de la sel
aplicada a RA2/T0CK1.
T0CS ( TMR0 Clock Sourse Select bit ). Selecciona la fuente de seal del
TMR0.
T0CS = 0 pulsos de reloj interno Fosc/4(TMR0 como temporizador)
Instituto Tecnolgico de Matamoros
Microprocesadores
TOCS = 1. pulsos introducidos a travez del pin RA2/T0CK1 (TMR0
como contador)

PS1 PS2 PS0 Divisor del TMR0 Divisor del WDT
0 0 0 1:2 1:2
0 0 1 1:4 1:4
0 1 0 1:8 1:8
0 1 1 1:16 1:16
1 0 0 1:32 1:32
1 0 1 1:64 1:64
1 1 0 1:128 1:128
1 1 1 1:256 1:256

El circuito para el programa es

RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
LS1
SPEAKER
Q1
BD137
R1
10k


Simulando en proteus tenemos
RA0/AN0/C1IN+/ICSPDAT/ULPWU
19
RB7/TX/CK
10
RC0/AN4/C2IN+
16
RC1/AN5/C12IN1-
15
RC2/AN6/C12IN2-/P1D
14
RC3/AN7/C12IN3-/P1C
7
RC4/C2OUT/P1B
6
RC5/CCP1/P1A
5
RC6/AN8/SS
8
RA4/AN3/T1G/OSC2/CLKOUT
3
RA5/T1CKI/OSC1/CLKIN
2
RB4/AN10/SDI/SDA
13
RB5/AN11/RX/DT
12
RB6/SCK/SCL
11
RA1/AN1/C12IN0-/VREF/ICSPCLK
18
RA3/MCLR/VPP
4
RA2/AN2/T0CKI/INT/C1OUT
17
RC7/AN9/SDO
9
U1
PIC16F690
LS1
SPEAKER
Q1
BD137
R1
10k

Instituto Tecnolgico de Matamoros
Microprocesadores
























































; Por la lnea 2 del puerto C se genera una onda cuadrada de 1 kHz, por tanto, cada
; semiperiodo dura 500 s. Los tiempos de temporizacin se consiguen mediante la
; utilizacin del Timer 0 del PIC.
;
; A la lnea de salida se puede conectar un altavoz, tal como se indica en el esquema
; correspondiente, con lo que se escuchar un pitido.

; El clculo de la carga del TMR0 se har de forma simple despreciando el tiempo que
; tardan en ejecutarse las instrucciones.

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _CP_OFF &
_BOR_OFF & _IESO_OFF & _FCMEN_OFF)


; ZONA DE CDIGOS ********************************************************************
org 0
inicio

bcf STATUS,RP0 ;Acceso al banco 0
bcf STATUS,RP1 ;
clrf PORTC ;inicia puerto C
bsf STATUS,RP1 ;acceso al banco 2
clrf ANSEL ;Entradas/salidas digitales
bsf STATUS,RP0 ;Acceso al banco 1
bcf STATUS,RP1
movlw b'11111011' ;El bit 2 del puerto C se configura como salida
movwf TRISC
movlw b'00000000' ;Prescaler de 2 asignado al TMR0
movwf OPTION_REG
bcf STATUS,RP0 ; Acceso al banco 0

Principal

movlw b'00000100' ;El bit 2 del puerto C se pone a 1
movwf PORTC ;la salida pasa a nivel alto
call Timer0_500us ;durante este tiempo
bcf PORTC,2 ;la salida pasa a nivel bajo
call Timer0_500us ;durante este tiempo
goto Principal

; Subrutina "Timer0_500us" -------------------------------------------------------
;
; Como el PIC trabaja a una frecuencia de 4 MHz, el TMR0 evoluciona cada microsegundo.
; Para conseguir un retardo de 500 s con un prescaler de 256 el TMR0 debe contar 250
; impulsos. Efectivamente: 1 s x 250 x 2 =500 s.
;

TMR0_Carga500us EQU d'256'-d'250'

Timer0_500us
movlw TMR0_Carga500us ; Carga el Timer 0.
movwf TMR0
bcf INTCON,T0IF ; Resetea el flag de desbordamiento del TMR0.
Timer0_Rebosamiento
btfss INTCON,T0IF ; Se ha producido desbordamiento?
goto Timer0_Rebosamiento ; Todava no. Repite.
return

; Comprobando con la ventana Stopwatch del simulador se obtienen unos tiempos para la onda
; cuadrada de 511 s para el nivel alto y 513 s para el bajo.

END

Das könnte Ihnen auch gefallen