Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduccin
Se realizo tres programas en MAPLAB. En donde el primero nosotros tuvimos el objetivo de
prender una lmpara incandescente en la salida del puerto C del microcontrolador, usando
control del ngulo de disparo por medio del triac T1 de la tarjeta de desarrollo. Despus en el
segundo programa nosotros controlamos la intensidad de la corriente que llegaba al foco por medio
de las teclas del S2,S3 para decrementar o incrementar la intensidad de luz del foco. En el tercer
programa nosotros hicimos que se agrandaran los rangos del incremento o decremento de la
intensidad o corriente del foco.
Objetivo
1. Prender una lmpara con un programa,
2. Incrementar la luminosidad con la tecla S3 y decrementarla con la tecla S2. Limitar el
encendido y apagado de la lmpara.
3. Que el prender o pagar la lmpara sea en ms intervalos.
PC.
MPLAB.
Tarjeta con.
Microchip MPLAB IDE.
Microcontrolador PIC16F877A (situado en la tarjeta).
Lmpara
Programa documentado
Programa encender la lmpara. Primer programa
list
p=16F877A
0x22
;**********************************************************************
ORG 0x00
; vector de reset
goto MAIN
; salta al inicio del programa
ORG 0x05
INICIALIA
bcf STATUS,RP0
bcf
STATUS,RP0 ;selacciona banco 0
bcf
STATUS,RP1
;Selecciona banco 0
clrf PORTA
;Limpia los latches de salida del puerto A
bsf STATUS,RP0
;Selecciona banco 1 purto A
movlw
0x06
;Configura todos los pines del puerto A
movwf
ADCON1
;como E/S digitales
movlw
movwf
bcf
0x23
TRISA
STATUS,RP0
movlw
0x0C
movwf
PORTA
;Saca 0x0C por puerto A
bcf
STATUS,RP1
;Selecciona banco 0
clrf PORTC
;Limpia los latches de salida del puerto C
bsf STATUS,RP0
;Selecciona banco 1 purto C
movlw
0x06
;Configura todos los pines del puerto C
movwf
ADCON1
;como E/S digitales
movlw
movwf
0x00
TRISC
bcf
STATUS,RP0
;Selecciona banco 0
movlw
0x0C
movwf
PORTC
;Saca 0x0C por puerto C
return
DELAY
DEL2
DEL1
movf DISP,w
movwf DELH
movlw 0xFF
movwf DELL
decfsz
goto DEL1
decfsz
goto DEL2
return
;Subrutina de retardo
DELL,f
DELH,f
SALTO btfsc
goto
PORTA,1
SALTO
movlw 0x0C
movwf PORTC
LEER btfss
goto
; Verificamos el estado del bit 1 del puerto A,se salta la siguiente instruccin si el bit 1 es 0
;Regresa ala instruccin con la etiqueta SALTO
call DELAY
movlw 0x02
movwf PORTC
;Verifica el estado del bit 1 del puerto A se el bit es uno salta la siguente instruccion
; Regresa ala instruccin con la etiqueta LEER
;Subrutina de retardo
;Mueve el valor literal 2 al registro de trabajo W
; Mueve el valor del registro de trabajo al puerto C prende el foco
goto SALTO
END
p=16F877A
EQU
0x22
;**********************************************************************
ORG 0x00
; vector de reset
goto MAIN
; salta al inicio del programa
ORG 0x05
INICIALIA
bcf STATUS,RP0
bcf
STATUS,RP0
bcf
STATUS,RP1
clrf
;selacciona banco 0
PORTA
bsf STATUS,RP0
movlw
movwf
movlw
movwf
;Selecciona banco 0
0x32
TRISA
bcf
STATUS,RP0
movlw
movwf
bcf
;Selecciona banco 0
0x0C
PORTA
STATUS,RP1
clrf
;Selecciona banco 0
PORTC
bsf STATUS,RP0
movlw
movwf
DEL2
DEL1
0x00
TRISC
STATUS,RP0
movlw
movwf
movlw 0x15
movwf DISP
return
DELAY
movlw
movwf
bcf
0x0C
PORTC
movf DISP,w
movwf DELH
movlw 0xFF
movwf DELL
decfsz
goto DEL1
decfsz
goto DEL2
return
;Subrutina de retardo
DELL,f
DELH,f
;Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es cero
;Regesa ala etiqueta LAZO
;apaga triac
LAZO1
btfss PORTA,1
goto LAZO1
;lee estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es uno
;Regesa ala etiqueta LAZO1
; leer el estado s2 con un salto condicional
btfsc PORTA,5 ;Verifica el estado del bit 5 del puerto A se salta la siguiente instruccin si el bit es cero
goto LAZO2
; verifica s2, Regesa ala etiqueta LAZO
; modificar el retardo
movf DISP,w
;Mueve DISP al registro de trabajo W
sublw 0x30
; Resta el valor de W con 30
btfss STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es uno
incf DISP,f
goto LAZO3
LAZO2
btfsc
PORTA,4
goto LAZO3
movf DISP,w
sublw 0x01
;mueve el valor literal 0x01 a registro de trabajo W
btfss STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es uno
decf DISP,f
;Decrementa un bit a DISP
p=16F877A
EQU
EQU 0x21
EQU
0x22
EQU
0x23
EQU
0x24
0x25
0X26
;RESULTADO
EQU
0x20
0x22
;**********************************************************************
ORG
0x00
; vector de reset
movlw
0x10
movwf
SEMI
goto MAIN
ORG
0x05
INICIALIA bcf
STATUS,RP0
bcf
STATUS,RP1
;Selecciona banco 0
clrf PORTA
bsf
STATUS,RP0
movlw
movwf
0x06
ADCON1
movlw 0x32
movwf
TRISA
bcf
STATUS,RP0
;Selecciona banco 0
movlw
movwf
0x0C
PORTA
bcf
STATUS,RP1
;Selecciona banco 0
clrf PORTC
bsf
STATUS,RP0
movlw
0x06
movwf
ADCON1
movlw 0x00
movwf
TRISC
bcf
;Selecciona banco 0
STATUS,RP0
movlw
0x0C
movwf
PORTC
movlw 0x29
movwf RETH
movlw
0x10
movwf
SEM_CONT
bcf
PORTC,1
return
DELAY
movf
DEL2
DEL1
MAIN
call
RETH,w
Subrutina de retardo
movwf
DELH
movlw
0xFF
movwf
DELL
decfsz DELL,f
goto
DEL1
decfsz DELH,f
goto DEL2
return
INICIALIA
LAZO
btfsc PORTA,1
goto
LAZO
bcf
PORTC,1
LAZO1
btfsc
PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es cero
goto
btfsc
goto
movf
sublw
btfsc
goto
LAZO1
;Regresa ala instruccin en donde este la etiquta LAZO1
PORTA,5 ; Verifica el estado del bit 5 del puerto A se salta la siguiente instruccin si el bit es cero
LAZO2
;Salta a la etiqueta LAZO2
RETH,w ;Mueve el valor RETH a W
0x30
;Resta W con 30
STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es cero
LAZO3 ;Slta a donde esta la etiqueta de LAZO3
decfsz
goto
incf
LAZO2
; Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es cero
;Regresa ala instruccin en donde este la etiquta LAZO
;apaga triac
movlw
movwf
0x10
SEMI
goto
RETH,w
0x01
STATUS,Z
LAZO3
decfsz
goto
SEMI,f
LAZO3
decf
movlw
movwf
RETH,f
0x10
SEMI
;Mueve RETH a w
;Resta W con 1
Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es cero
;Salta a la etiqueta LAZO 3
;Decrementa SEMI
;Salta a la etiqueta LAZO 3
;Decrementa RETH
;Mueve el valor literal a W
;Mueve el valor de w a SEMI
LAZO3
END
btfss
PORTA,1
; Verificamos el estado del bit 1 del puerto A,se salta la siguiente instruccin si el bit 1 es 1
goto
LAZO3
call
bsf
goto
DELAY
PORTC,1
LAZO
Desarrollo
El diagrama de Flujo
Figura 1.0
SALTO btfsc
PORTA,1
goto
SALTO
movlw 0x0C
movwf PORTC
LEER btfss PORTA,1
goto
LEER
call DELAY
movlw 0x02
movwf PORTC
goto SALTO
END
movlw
movwf
movlw
movwf
decfsz
goto DEL1
decfsz
goto
return
0xFF
DELH
0xFF
DELL
DELL,f
DELH,f
DEL2
FIGURA 1.1
Programa para limitar la lmpara.
Figura 1.0
;Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es cero
;Regresa ala etiqueta LAZO
;apaga triac, foco apagado
LAZO1
btfss PORTA,1
goto LAZO1
;lee estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es uno
;Regresa ala etiqueta LAZO1
; leer el estado s2 con un salto condicional
btfsc PORTA,5 ;Verifica el estado del bit 5 del puerto A se salta la siguiente instruccin si el bit es cero
goto LAZO2
; verifica s2, Regresa a la etiqueta LAZO
; modificar el retardo
movf DISP,w
;Mueve DISP al registro de trabajo W
sublw 0x30
; Resta el valor de W con 30,el valor de 30 es donde el foco esta apagado
btfss STATUS,Z ;Verifica la bandeja de estado cero, se salta la siguiente instruccin si el bit es uno
incf DISP,f
goto LAZO3
LAZO2
btfsc
PORTA,4
goto LAZO3
movf DISP,w
sublw 0x01
;mueve el valor literal 0x01 a registro de trabajo W,foco con la mayor corriente posible
btfss STATUS,Z ;Verifica la bandeja de estado cero, se salta la siguiente instruccin si el bit es uno
decf DISP,f
;Decrementa un bit a DISP
movf
DISP,w
movwf DELH
movlw 0xFF
movwf DELL
decfsz DELL,f
goto
DEL1
decfsz DELH,f
goto
DEL2
return
Una vez hecho correctamente el programa se ensambla, y si no hay ningn error de sintaxis.
Programamos el PIC
Una vez programado en la tarjeta podemos controlar la intensidad del foco por medio de
las teclas S2 Y S3,ademas de que estas estn limitadas, o sea al incrementar a un valor
mximo o mnimo estas ya no se incrementan o decrementan .
La tercera parte es igual que la segundo solo que ahora tenemos que agregar un contador para as
poder hacer que el encendido o apagado de la lmpara valla ms lento. Simplemente le agregamos
lo siguiente.
MAIN
call
INICIALIA
LAZO
btfsc PORTA,1
; Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es
cero
LAZO1
cero
goto
bcf
LAZO
PORTC,1
btfsc
PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instruccin si el bit es
goto
btfsc
LAZO1
;Regresa ala instruccin en donde este la etiquta LAZO1
PORTA,5 ; Verifica el estado del bit 5 del puerto A se salta la siguiente instruccin si el bit es
goto
movf
sublw
btfsc
LAZO2
;Salta a la etiqueta LAZO2
RETH,w ;Mueve el valor RETH a W
0x30
;Resta W con 30
STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es cero
goto
LAZO3
cero
decfsz
goto
incf
movlw
movwf
0x10
SEMI
goto
LAZO2
btfsc PORTA,4
cero
LAZO3
goto
LAZO3
movf
sublw
btfsc
RETH,w
0x01
STATUS,Z
;Mueve RETH a w
;Resta W con 1
Verifica la vandeja de estado cero, se salta la siguiente instruccin si el bit es cero
goto
LAZO3
decfsz
goto
SEMI,f
LAZO3
;Decrementa SEMI
;Salta a la etiqueta LAZO 3
decf
movlw
movwf
RETH,f
0x10
SEMI
;Decrementa RETH
;Mueve el valor literal a W
;Mueve el valor de w a SEMI
btfss PORTA,1
goto
LAZO3
call DELAY
bsf PORTC,1
goto
LAZO
;dispara triac
END
movf
DISP,w
movwf DELH
movlw 0xFF
movwf DELL
decfsz DELL,f
goto
DEL1
decfsz DELH,f
goto
DEL2
return
Una vez hecho correctamente el programa se ensambla, y si no hay ningn error de sintaxis.
Programamos el PIC
Ensamblamos el programa en el microcontrolador y con las teclas S2,S3 se pudo observar
que se alago el intervalo de incrementar la intensidad de corriente en el foco a su vez que el
decremento se observo que se haba largo el apagado segn como oprimamos la tecla de
apagado.
Conclusiones
Con esta prctica nosotros pudimos comprender el funcionamiento del dimer en la tarjeta de
desarrollo.
Se logro el objetivo deseado en la primera parte del programa que era lograr prender el foco y
observar que pasaba si modificbamos los valores del DIPS(disparo) en la subrutina DALAY.
En este caso se observaba que nosotros podamos controlar la corriente en el foco, y averiguar qu
valores eran los mnimos y mximos en el caso de 1 para completamente encendido o 30
completamente pagado.
En el segundo programa nosotros logramos el objetivo de limitar el encendido y el pagado para que
ya no hubiera un incremento ms a ya de 30 (apagado) o decremento en el caso de 1 (encendido).
En el tercer programa se logro alargar el intervalo de encendido o apagado del foco.