PIC16F887

December 19, 2017 | Author: Ernesto Arzabala | Category: Microcontroller, Computer Engineering, Electronic Engineering, Computing, Technology
Share Embed Donate


Short Description

Descripción: Practicas PIC16F887...

Description

Manual de Practicas Microcontroladores para Instrumentación y Control Universidad Tecnológica de Chihuahua T.S.U. Mecatrónica

Elaborado por: Arzabala Contreras Ernesto Alonso Salazar Lopez Luis Ricardo Vallejo González Mario Alberto

Contenido Unidad I Arquitectura interna de los Microcontroladores.................................................................. 8 Practica 1.1 Conexiones basicas y encendido de leds ..................................................................... 8 Descripción P1.1: ......................................................................................................................... 8 Código P1.1: ................................................................................................................................ 8 Circuito P1.1: ............................................................................................................................... 9 Practica 1.2 Oscilador interno y ciclos de repetición ...................................................................... 9 Descripción P1.2: ......................................................................................................................... 9 Código P1.2: .............................................................................................................................. 10 Circuito P1.2: ............................................................................................................................. 12 Practica 1.3 Ciclos anidados .......................................................................................................... 13 Descripción P1.3: ....................................................................................................................... 13 Código P1.3: .............................................................................................................................. 13 Circuito P1.3: ............................................................................................................................. 15 Practica 1.4 Temporizador TMR0 e interrupciones ...................................................................... 15 Descripción P1.4: ....................................................................................................................... 15 Código P1.4: .............................................................................................................................. 16 Circuito P1.4: ............................................................................................................................. 19 Practica 1.5 Uso de botones y subrutinas ..................................................................................... 19 Descripción P1.5: ....................................................................................................................... 19 Código P1.5: .............................................................................................................................. 20 Circuito P1.5: ............................................................................................................................. 22 Practica 1.6 Temporizador TMR0 como contador, variables y relevadores ................................. 22 Descripción P1.6: ....................................................................................................................... 22 Código P1.6: .............................................................................................................................. 23 Circuito P1.6: ............................................................................................................................. 25 Practica 1.7 Macros y rutinas para evitar el rebote de botones ................................................... 25 Descripción P1.7: ....................................................................................................................... 25 Código P1.7: .............................................................................................................................. 25 Circuito P1.7: ............................................................................................................................. 31 Practica 1.8 Temporizador TMR1 e interrupciones ...................................................................... 31 Descripción P1.8: ....................................................................................................................... 31

Código P1.8: .............................................................................................................................. 31 Circuito P1.8: ............................................................................................................................. 34 Practica 1.9 Temporizador TMR2 y configuración del oscilador ................................................... 34 Descripción P1.9: ....................................................................................................................... 34 Código P1.9: .............................................................................................................................. 34 Circuito P1.9: ............................................................................................................................. 38 Practica 1.10 Modulo CCP 1 como generador de señales tipo PWM ........................................... 38 Descripción P1.10: ..................................................................................................................... 38 Código P1.10: ............................................................................................................................ 38 Circuito P1.10: ........................................................................................................................... 42 Practica 1.11 Utilización del convertidor analógico-digital (ADC)................................................ 42 Descripción P1.11: ..................................................................................................................... 42 Código P1.11: ............................................................................................................................ 43 Circuito P1.11: ........................................................................................................................... 44 Practica 1.12 Uso de la memoria EEPROM ................................................................................... 45 Descripción P1.12: ..................................................................................................................... 45 Código P1.12: ............................................................................................................................ 45 Circuito P1.12: ........................................................................................................................... 49 Practica 1.13 Contador de dos dígitos multiplexado .................................................................... 49 Descripción P1.13: ..................................................................................................................... 49 Código P1.13: ............................................................................................................................ 49 Circuito P1.13: ........................................................................................................................... 57 Practica 1.14 Generación de sonidos usando macros .................................................................. 57 Descripción P1.14: ..................................................................................................................... 57 Código P1.14: ............................................................................................................................ 57 Circuito P1.14: ........................................................................................................................... 62 Practica 1.15 Utilización del display de cristal líquido (LCD) ......................................................... 62 Descripción P1.15: ..................................................................................................................... 62 Código P1.15: ............................................................................................................................ 62 Circuito P1.15: ........................................................................................................................... 73 Practica 1.16 Comunicación serial RS232...................................................................................... 73 Descripción P1.16: ..................................................................................................................... 73

Código P1.16: ............................................................................................................................ 73 Circuito P1.16: ........................................................................................................................... 80 Unidad II Compilador “C” para Microcontroladores ......................................................................... 81 Practica 2.1 Encendido de leds y configuraciones basicas. ........................................................... 81 Descripción P2.1: ....................................................................................................................... 81 Circuito P2.1: ............................................................................................................................. 81 Código P2.1: .............................................................................................................................. 82 Practica 2.2 Oscilador interno y mezcla de lenguaje ensamblador y C........................................ 84 Descripción P2.2: ....................................................................................................................... 84 Circuito P2.2: ............................................................................................................................. 84 Código P2.2: .............................................................................................................................. 85 Practica 2.3 Temporizador TMR0 como contador, variables y relevadores ................................. 87 Descripción P2.3: ....................................................................................................................... 87 Circuito P2.3: ............................................................................................................................. 87 Código P2.3: .............................................................................................................................. 87 Practica 2.4 Temporizadores TMR0,TMR1 y TMR2 e interrupciones ........................................... 89 Descripción P2.4: ....................................................................................................................... 89 Circuito P2.4: ............................................................................................................................. 89 Código P2.4: .............................................................................................................................. 89 Practica 2.5 Uso de del “watchdog timer” .................................................................................... 94 Descripción P2.5: ....................................................................................................................... 94 Circuito P2.5: ............................................................................................................................. 94 Código P2.5: .............................................................................................................................. 94 Practica 2.6 Modulo CCP 1 como generador de señales tipo PWM ............................................. 95 Descripción P2.6: ....................................................................................................................... 95 Circuito P2.6: ............................................................................................................................. 95 Código P2.6: .............................................................................................................................. 96 Practica 2.7 Utilización del convertidor analógico-digital (ADC).................................................. 98 Descripción P2.7: ....................................................................................................................... 98 Circuito P2.7: ............................................................................................................................. 98 Código P2.7: .............................................................................................................................. 98 Practica 2.8 Uso de la memoria EEPROM ................................................................................... 100

Descripción P2.8: ..................................................................................................................... 100 Circuito P2.8: ........................................................................................................................... 100 Código P2.8: ............................................................................................................................ 101 Practica 2.9 Contador de dos dígitos multiplexado .................................................................... 102 Descripción P2.9: ..................................................................................................................... 102 Circuito P2.9: ........................................................................................................................... 102 Código P2.9: ............................................................................................................................ 103 Practica 2.10 Utilización del display de cristal líquido (LCD) ....................................................... 106 Descripción P2.10: ................................................................................................................... 106 Circuito P2.10: ......................................................................................................................... 106 Código P2.10: .......................................................................................................................... 106 Practica 2.11 Comunicación serial RS232.................................................................................... 109 Descripción P2.11: ................................................................................................................... 109 Circuito P2.11: ......................................................................................................................... 109 Código P2.11: .......................................................................................................................... 110 Practica 2.12 Generación de sonidos utilizando una librería ...................................................... 111 Descripción P2.12: ................................................................................................................... 111 Circuito P2.12: ......................................................................................................................... 111 Código P2.12: .......................................................................................................................... 112 Unidad III Aplicaciones para el control de procesos y comunicación ............................................. 115 Practica 3.1 Control de un motor de DC mediante un puente H ................................................ 115 Descripcion P3.1: ..................................................................................................................... 115 Circuito P3.1: ........................................................................................................................... 115 Código P3.1: ............................................................................................................................ 116 Practica 3.2 Control de un motor de pasos ................................................................................. 117 Descripcion P3.2: ..................................................................................................................... 117 Circuito P3.2: ........................................................................................................................... 118 Código P3.2: ............................................................................................................................ 119 Practicas 3.3 Control de un servo motor..................................................................................... 120 Desripcion P3.3: ...................................................................................................................... 120 Circuito P3.3: ........................................................................................................................... 121 Código P3.3: ............................................................................................................................ 121

Practica 3.4 Medición de temperatura con un sensor tipo IC y calibración de un termistor. .... 122 Descripcion P3.4: ..................................................................................................................... 122 Circuito P3.4: ........................................................................................................................... 122 Código P3.4: ............................................................................................................................ 122 Practica 3.5 Control de temperatura tipo ON/OFF ..................................................................... 123 Descripcion P3.5: ..................................................................................................................... 123 Circuito P3.5: ........................................................................................................................... 123 Código P3.5: ............................................................................................................................ 123 Practica 3.6 Modulo remoto de medición y control. 3 sensores, 2 actuadores, comunicación mediante RS232, modo de control remoto mediante PC, modo de control local mediante botones. ...................................................................................................................................... 123 Descripcion P3.6: ..................................................................................................................... 123 Circuito P3.6: ........................................................................................................................... 124 Código P3.6: ............................................................................................................................ 124 Proyecto final .............................................................................................................................. 124 Descripcion PF: ........................................................................................................................ 124 Circuito PF: .............................................................................................................................. 124 Código PF:................................................................................................................................ 124 Formato de reportes ................................................................................................................... 125 Criterios y ponderaciones de evaluación .................................................................................... 126 Unidad I ................................................................................................................................... 126 Unidad II .................................................................................................................................. 126 Unidad III ................................................................................................................................. 126 Links de ayuda ............................................................................................................................. 127

Unidad I Arquitectura interna de los Microcontroladores Practica 1.1 Conexiones basicas y encendido de leds Descripción P1.1: El único propósito de esta práctica es mostrar el circuito básico, también llamado sistema mínimo, y el proceso de programación de un microcontrolador (uC) PIC16F887. El PIC16F887 es el uC que se utilizara en todas las prácticas de este manual a menos que se indique lo contrario. Cabe resaltar que los Microcontroladores PIC16F877, PIC16F877A, PIC16F887 y PIC16F917 son compatibles. El PIC16F887 puede ser considerado como una nueva y mejor versión del PIC16F887, así mismo el PIC16F917 es similar al PIC16F877A pero además incorpora un módulo manejador de LCD. El circuito y el programa únicamente realizan la función de encender algunos “led” conectados al puerto B del microcontrolador (uC) PIC16F887. Código P1.1: ;************************************************ ;

Nombre

:

P1_1.asm

;

Fecha

:

Enero 10,2013

;

Alumno

:

Arzabala Contreras Ernesto

;

Grupo

:

MT00X

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

Descripcion

:

Prueba del microcontrolador

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

list p=16f887 #include

errorlevel -302

__CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG _CONFIG2, _BOR40V & _WRT_OFF

ORG

0x0000

Banksel

TRISB

clrf

TRISB

banksel

PORTB

movlw

B'01010101'

movwf

PORTB

end

Circuito P1.1:

Practica 1.2 Oscilador interno y ciclos de repetición Descripción P1.2: Esta práctica es una continuación de P1.1. En esta práctica se pretende hacer que los “leds” conectados al puerto B parpadeen (“blink”). El efecto de que los “leds” parecen parpadear es conseguido de la siguiente manera:

1. 2. 3. 4. 5.

En el puerto B se carga la combinación binaria 01010101 Permanecer en el ciclo1 durante un tiempo determinado Reemplazar la combinación binaria existente en el puerto B con la combinación 10101010 Permanecer en el ciclo1 durante un tiempo determinado Regresar al paso 1 y repetir todo el proceso de nuevo.

Para poder observar los cambios de combinación binaria en el puerto B, apreciar el efecto del parpadeo, el proceso mencionado anteriormente se necesita llevar a cabo de una manera lenta. Para lograr esto se utiliza el oscilador interno LFINTOSC del microcontrolador el cual tiene una frecuencia de 31 kHz mucho más lenta que la del oscilador externo el cual tiene conectado el cristal de 8 MHz. La fuente de la señal de reloj es cambiada durante la ejecución del programa, “on the fly”. Para verificar que esto realmente está sucediendo, antes de energizar el uC desconecta el cristal. ¿Qué paso? El uC no debe de hacer nada ya que la configuración de este requiere el uso del cristal al momento de iniciar a ejecutar el programa. Si el cristal se desconecta después de que el uC ya inicio la ejecución del programa esto no debe de afectar el funcionamiento del uC de ninguna manera. Código P1.2: ;************************************************ ;

Nombre :

P1_2.asm

;

Fecha

Enero 10,2013

;

Alumno :

Arzabala Contreras Ernesto

;

Grupo

MT00X

:

:

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

Descripcion

:

Parpadear leds Puerto B

;************************************************ list p=16f887 #include errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG

_CONFIG2, _BOR40V & _WRT_OFF

;************************************************************************ ;************* DEFINING VARIABLES ***************************************

cblock 0x20

; Bloque de variables inicia en dir. 20h

counter1

; La variable "counter1" en la dir. 20h

endc ;************************************************************************ org

0x0000

; Direccion de la primera instruccion

banksel OSCCON

; Selecciona el banco de memoria que

; contiene el registro OSCCON bcf

OSCCON,6

; Selecciona el oscilador interno LFINTOSC

bcf

OSCCON,5

; con la frequency de 31KHz

bcf

OSCCON,4

bsf

OSCCON,0

; uC usa el oscilador interno

banksel TRISB

; Selecciona el banco que contiene a TRISB

clrf TRISB

; Todos los pines del PORTB configurados ; como salidas

banksel PORTB

loop

; Selecciona el banco que contiene a PORTB

; etiqueta con el nombre de "loop"

movlw B'01010101' movwf PORTB movlw h'FF'

; Numero binario 01010101 se carga en W ; Numero binario se mueve al PORTB

; Numero hFF se carga en W

movwf counter1 loop1

; Numero se mueve a la variable "counter1" ; etiqueta con el nombre de "loop1"

decfsz counter1 goto loop1

; Variable "counter1" se decrementa en 1 ; Si "counter1" es 0, continuar.

; de lo contrario volver a "loop1"

movlw B'10101010' movwf PORTB movlw h'FF'

; Numero BIN 10101010 se carga en W ; Numero se mueve a PORTB

; Numero hFF se carga en W

movwf counter1 loop2

; Number se mueve a la variable "counter1" ; etiqueta con el nombre de "loop2"

decfsz counter1 goto loop2

; Variable "counter1" se decrementa en 1 ; Si "counter1" es 0, continuar.

; de lo contrario volver a "loop2" goto loop end

Circuito P1.2:

; Volver a la etiqueta "loop" ; Fin del Programa

Practica 1.3 Ciclos anidados Descripción P1.3: En la práctica anterior se pudo observar que el microcontrolador ejecuta las instrucciones muy rápido y en ocasiones es necesario hacerlo que vaya más lento. El uso del oscilador interno LF, como se hace en la práctica P1.2, debe de ser la última opción. Una mejor manera de realizarlo es utilizar ciclos anidados en el programa. En esta práctica, la variable “counter1” se decrementa una unidad 255 veces, es decir el programa contara de 255 a 0 antes de salir del ciclo interior “loop1”. El programa contara 255 veces de 255 a 0 en cada ciclo exterior “loop”. Lo anterior quiere decir que entre dos parpadeos consecutivos de “leds” hay 255 x 255 pulsos del cristal oscilador. De manera más precisa el número de pulsos entre dos parpadeos consecutivos es de aproximadamente de 196000, esto es debido a que la ejecución de las instrucciones de brinco (goto) y de decremento requieren de un cierto número de pulsos para ser ejecutadas. La instrucción de decremento DECFSZ se realiza en 1 o 2 ciclos. La instrucción de brinco GOTO se realiza en 2 ciclos también. Si suponemos que la instrucción DEC FSZ se realiza en un ciclo y la instrucción GOTO en 2 ciclos, eso son tres ciclos. Si estas dos instrucciones, que se realizan en 3 ciclos, se realizan 255*255 veces eso equivale : 255 * 255 * 3 = 195075, aproximadamente 196000 instrucciones como se había comentado antes. Código P1.3: ;************************************************ ;

Nombre :

P1_3.asm

;

Fecha

Enero 10,2013

;

Alumno :

Arzabala Contreras Ernesto

;

Grupo

MT00X

:

:

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

Descripcion

:

Parpadear leds Puerto B , Ciclos anidados

;************************************************ list p=16f887 #include errorlevel -302 __CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG

_CONFIG2, _BOR40V & _WRT_OFF

;************* DEFINING VARIABLES ***************************************** cblock

0x20

; Block of variables starts at address 20h

counter1

; Variable "counter1" at address 20h

counter2

; Variable "counter2" at address 21h

endc ;************************************************************************** org

banksel clrf

banksel

0x0000

; Address of the first program instruction

TRISB

; Selects bank containing register TRISB

TRISB

; Clears TRISB

PORTB

; Selects bank containing register PORTB

loop movlw

B'11110000' ; Binary number 11110000 is moved to W

movwf

PORTB

movlw

h'FF'

movwf

counter2

; Number is moved to PORTB ; Number hFF is moved to W ; Number is moved to variable "counter2"

loop2 movlw

h'FF'

; Number hFF is moved to W

movwf

counter1

; Number is moved to "counter1"

loop1 decfsz

counter1

goto

loop1

decfsz

counter2

goto

loop2

movlw

; Decrements "counter1" by 1. If result is 0 ; skip next instruction

; Decrements "counter2" by 1. If result is 0 ; skip next instruction

B'00001111' ; Binary number 00001111 is moved to W

movwf

PORTB

; Number is moved to PORTB

movlw

h'FF'

movwf

counter2

; Number hFF is moved to W ; Number is moved to variable "counter2"

loop4 movlw

h'FF'

; Number hFF is moved to W

movwf

counter1

; Number is moved to variable "counter1"

loop3 decfsz

counter1

; Decrements "counter1" by 1. If result is 0

; skip next instruction goto

loop3

decfsz

counter2

goto

loop4

; skip next instruction

goto

loop

; Jump to label loop

end

; Decrements "counter2" by 1. If result is 0

; End of program

Circuito P1.3: Igual al de la práctica P1.2

Practica 1.4 Temporizador TMR0 e interrupciones Descripción P1.4: En la práctica anterior se puede apreciar la desventaja de realizar retardos de tiempo (“delays”) utilizando ciclos. En casos como el de la practica anterior, el microcontrolador está captivo y no hace nada más que esperar a que pase el tiempo. Esa pérdida de tiempo es inaceptable y es necesario encontrar otro método para realizar retardos de tiempo. En este ejemplo se hace uso de los temporizadores (“timers”) y de interrupciones (“interrupts”) y se hace un vínculo entre ambos de manera práctica. Para este ejemplo es necesario realizar un retardo de tiempo lo suficientemente largo para apreciar el cambio en los leds del PORTB. En esta ocasión el temporizador TMR0, con un pre-escalador (“prescaler”), es utilizado para ese propósito. La interrupción ocurre cada vez que ocurre un sobre-flujo (“overflow”) el registro del temporizador. La interrupción incrementa el valor mostrado en el PORTB en uno. Todo el proceso es realizado detrás de cámaras (“behind the scenes”) , esto permite que el microcontrolador haga otras cosas mientras espera a que en el registro del temporizador se genere una interrupción por sobre-flujo y se interrumpa momentáneamente la ejecución del programa principal. En este ejemplo hay poner atención a ciertos detalles:







Aun y cuando no es necesario en este caso, los contenidos de los registros más importantes (W, STATUS and PCLATH) deben de guardarse al inicio de cada rutina de interrupción. La interrupción causa que la bandera apropiada se active (“set”), en este ejemplo la bandera que se activa es TMR0IF, y que el bit GIE se desactive (“clear”). Al finalizar la rutina de interrupción no hay que olvidar regresar el bit GIE y la bandera a los valores que tenían anteriormente. Finalmente es crucial que los registros importantes sean devueltos a los valores que tenían antes de entrar a la rutina de interrupción.

Código P1.4: ;************************************************ ;

Nombre :

P1_4.asm

;

Fecha

Enero 10,2013

;

Alumno :

Arzabala Contreras Ernesto

;

Grupo

MT00X

:

:

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

Descripcion

:

Temporizador TMR0 e interrupciones

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

list p=16f887 #include

errorlevel -302

__CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG

_CONFIG2, _BOR40V & _WRT_OFF

;**************** DEFINING VARIABLES ****************************************

cblock

0x20

; Block of variables starts at address 20h

w_temp

; Variable at address 20h

pclath_temp

; Variable at address 21h

status_temp

; Variable at address 22h

endc

;************************ START OF PROGRAM ********************************** org

0x0000

; Address of the first program instruction

goto

main

; Go to label "main"

;************************ INTERRUPT ROUTINE ********************************* org movwf movf movwf movf

0x0004

; Interrupt vector

w_temp STATUS

; Saves value in register W ; Saves value in register STATUS

status_temp PCLATH

; Saves value in register PCLATH

movwf

pclath_temp

banksel

PORTB

incf

banksel bcf

movf movwf movf

PORTB

INTCON

; Increments register PORTB by 1

; Selects bank containing INTCON

INTCON,TMR0IF ; Clears interrupt flag TMR0IF

pclath_temp,w ; PCLATH is given its original content PCLATH status_temp,w ; STATUS is given its original content

movwf

STATUS

swapf

w_temp,f

swapf

w_temp,w

bsf

; Selects bank containing PORTB

INTCON,GIE

; W is given its original content

; Global interrupt enabled

retfie

; Return from interrupt routine

;************************ MAIN PROGRAM ************************************** main

banksel

; Start of the main program

ANSEL

clrf

ANSEL

clrf

ANSELH

banksel clrf

banksel

; Bank containing register ANSEL ; Clears registers ANSEL and ANSELH ; All pins are digital

TRISB

; Selects bank containing register TRISB

TRISB

; All port B pins are configured as outputs

OPTION_REG

; Bank containing register OPTION_REG

bcf

OPTION_REG,T0CS ; TMR0 counts pulses from oscillator

bcf

OPTION_REG,PSA ; Prescaler is assign to timer TMR0

bsf

OPTION_REG,PS0 ; Prescaler rate is 1:256

bsf

OPTION_REG,PS1

bsf

OPTION_REG,PS2

banksel

INTCON

; Bank containing register INTCON

bsf

INTCON,TMR0IE ; TMR0 interrupt overflow enabled

bsf

INTCON,GIE

banksel clrf

PORTB

; Global interrupt enabled

; Bank containing register PORTB

PORTB

; Clears port B

loop

; Remain here

loop goto end

; End of program

Circuito P1.4:

Practica 1.5 Uso de botones y subrutinas Descripción P1.5: En los ejemplos anteriores el microcontrolador simplemente ejecuta el programa sin la posibilidad de poder interactuar de alguna manera con este. En la realidad dispositivos trabajando de esta manera son poco comunes. Para agregarle más funcionalidad al programa que ejecuta un microcontrolador es necesario utilizar las entradas con las que este cuenta. Este ejemplo es bastante sencillo en realidad. Al inicio del programa, justo después de definir las variables, los pines del microcontrolador son configurados utilizando los registros TRISA y TRISB. Los pines del PORTA son configurados como entrada utilizando el registro TRISA, aun y cuando esto no es necesario ya que la configuración inicial de los pines del PORTA es de ser entradas. El programa inicia activando un bit del PORTB y luego el contenido de este registro es constantemente desplazados un lugar hacia la izquierda (utilizando la instrucción RLF, “Rotate Left f through Carry”). Esto produce la impresión de que el diodo “led” encendido se mueve. Presionando el botón “STOP” detiene el movimiento y el programa se mantiene en el “loop3”. El retardo de tiempo en esta ocasión es realizado en una subrutina llamada “DELAY”.

Código P1.5: ;************************************************ ;

Nombre :

P1_5.asm

;

Fecha

Enero 10,2013

;

Alumno :

Arzabala Contreras Ernesto

;

Grupo

MT00X

:

:

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

Descripcion

:

Uso de botones y subrutinas

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

list p=16f887 #include

errorlevel -302

__CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG

_CONFIG2, _BOR40V & _WRT_OFF

;************* DEFINING VARIABLES *******************************************

cblock

0x20

; Block of variables starts at address 20h

counter1

; Variable "counter1" at address 20h

counter2

; Variable "counter2" at address 21h

endc

; Block of variables ends

;************************ MAIN PROGRAM **************************************

org banksel

0x0000 ANSEL

clrf

ANSEL

clrf

ANSELH

; Address of the first program instruction ; Selects bank containing register ANSEL ; Clears registers ANSEL and ANSELH to ; configure all inputs as digital

banksel clrf

TRISB

; Selects bank containing register TRISB

TRISB

; All port B pins are configured as outputs

movlw

B'00000010'

movwf

TRISA

; Pin RA1 is input

banksel

PORTB

; Selects bank containing register TRISB

movlw

B'00000001'

movwf

PORTB

; Writes 1 to register W ; Number is moved to PORTB

loop rlf

PORTB

; Port B bits rotates by one place left

call

DELAY

; Calls subroutine "DELAY"

loop3 btfss

PORTA,1

; Tests the first port A bit

goto

loop3

; "0" is applied to pin.Go to label "loop3"

goto

loop

; "1" is applied to pin.Go to label "loop"

;************************ SUBROUTINES *************************************** DELAY clrf

counter2

; Clears variable "counter2"

counter1

; Clears variable "counter1"

loop1 clrf loop2 decfsz

counter1

goto

loop2

decfsz

counter2

goto

loop1

return

end

; Decrements variable "counter1" by 1 ; Result is not 0. Go to label loop2 ; Decrements variable "counter2" by 1 ; Result is not 0. Go to lab loop1

; Return from subroutine "DELAY"

; End of program

Circuito P1.5:

Practica 1.6 Temporizador TMR0 como contador, variables y relevadores Descripción P1.6: En este ejemplo el temporizador TMR0 es usado como contador. La idea es conectar la entrada del contador a un botón de tal manera que se cuente un pulso cada vez que se presione el botón. Cuando el número de pulsos contados es igual al número en el registro “TEST”, un nivel lógico de 1 (5 V DC) aparece en el pin 3 del PORTD. Dado que este voltaje activa un relevador electromecánico, este bit es llamado “Relay”. En este ejemplo, el registro “TEST” contiene el número 5. En realidad, puede ser cualquier número. En lugar del relevador, el microcontrolador puede activar algún otro dispositivo y en lugar de botones se pueden usar sensores.

Código P1.6: ;************************************************ ;

Nombre :

P1_6.asm

;

Fecha

Enero 10,2013

;

Alumno :

Arzabala Contreras Ernesto

;

Grupo

MT00X

:

:

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

Descripcion

:

Temporizador TMR0 como contador, variables y relevadores

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

list p=16f887 #include

errorlevel -302

__CONFIG _CONFIG1, _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF

__CONFIG

_CONFIG2, _BOR40V & _WRT_OFF

;************* DEFINING VARIABLES *******************************************

TEST #define

equ B'00000101' ; Binary number 00000101 = TEST RELAY PORTD,3 ; Pin PORTD,3 = RELAY

;************************ MAIN PROGRAM ************************************** org

banksel

0x0000

; Address of the first program instruction

TRISB

; Selects bank containing register TRISB

clrf

TRISB

; All port B pins are configured as outputs

clrf

TRISD

; All port D pins are configured as outputs

movlw

B'00010000'

movwf

TRISA

; This number is written to W register

; Only the forth pin of port A is input

banksel

OPTION_REG

; Bank containing OPTION_REG register

bsf

OPTION_REG,T0CS ; Pin RA4 is supplied with pulses

bsf

OPTION_REG,PSA ; Prescaler rate is 1:1

banksel

PORTB

clrf

TMR0

bcf

PORTD,3

; Selects bank containing PORTB register

; Clears timer register ; Pin PORTD,3 = 0

loop movfw

TMR0

; Timer register is moved to W register

movwf

PORTB

; W register is moved to PORTB

xorlw

TEST

; Operation exclusive OR between ; W register and number TEST (00000101)

btfsc bsf goto

end

STATUS,Z PORTD,3 loop

; If numbers are equal, result is 0 and ; bit STATUS,Z = 1. Bit PORTD,3 is set ; and jump to label loop is executed

; End of program

Circuito P1.6:

Practica 1.7 Macros y rutinas para evitar el rebote de botones Descripción P1.7: [Escriba aquí una descripción del funcionamiento] Código P1.7: ;********************** Header ********************** ;************* DEFINING VARIABLES *************************

cblock

HIcnt

0x20

; Block of variables starts at address 20hex

LOcnt LOOPcnt cnt endc

; End of block of variables

;********************************************************************** ORG

0x000

; Reset vector

nop goto

main

; Go to program start (label "main")

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

include "pause.inc" include "button.inc"

;********************************************************************** main banksel

ANSEL

clrf

ANSEL

clrf

ANSELH

banksel

TRISB

bsf

TRISA, 0

bsf

TRISA, 1

clrf

TRISB

banksel clrf

PORTB cnt

; Selects bank containing ANSEL ; All pins are digital

Loop button

PORT,0,0,Increment

button

PORT,1,0,Decrement

goto

Loop

Increment incf movf movwf goto

cnt, f cnt, w PORTB Loop

Decrement decf movf movwf goto

cnt, f cnt, w PORTB Loop

end

; End of program

Macro pausems

ARCHIVO: pause.inc

; Todo este código va en un archivo llamado pause.inc ;********************************************************************** pausems MACRO arg1 local

Loop1

local

dechi

local

Delay1ms

local

Loop2

local

End

movlw

High(arg1)

; Higher byte of argument is moved

; to HIcnt movwf

HIcnt

movlw

Low(arg1)

; Lower byte of argument is moved

; to LOcnt movwf

LOcnt

Loop1 movf

LOcnt, f

btfsc

STATUS, Z

goto

dechi

call

Delay1ms

decf

LOcnt, f

goto

Loop1

; Decrements HIcnt and LOcnt while ; needed and calls subroutine Delay1ms

dechi movf

HIcnt, f

btfsc

STATUS, Z

goto

End

call

Delay1ms

decf

HIcnt, f

decf

LOcnt, f

goto

Loop1

Delay1ms:

; Delay1ms provides delay of

movlw

.100

movwf

LOOPcnt

; 100*10us=1ms ; LOOPcnt
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF