Temporizador Programable de 0 a 99.9 segundos, en pasos de 0.1

Anuncio
Temporizador Programable de 0 a 99.9 segundos, en pasos de 0.1 segundo.
Circuito de Simulación en ISIS
U1
RESET
9
10
1
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
2
3
4
5
6
7
INICIO
DECENAS
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
UNIDADES
DECIMAS
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
PIC16F873
GUARDAR
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
R1
100
D1
LED-RED
R2
10k
R3
10k
R4
10k
R5
10k
R6
10k
R7
10k
R8
10k
FOSC = 4 MHz
En este circuito no se muestra la interfase que permite detectar una orden de inicio desde otra fuente que no sea
el botón INICIO, como desde el arrancador de un motor. Tampoco se muestra la interfase para controlar una
carga como la bobina de un contactor.
Una variación a este proyecto es disponer de más de un temporizador en el mismo microcontrolador para que sea
usado en un arrancador a pasos de tiempo definido, por ejemplo. Se tendrían que usar más terminales que
detecten cuando debe iniciar cada temporizador, así como más salidas para el control de las bobinas de los
contactores del arrancador. Existe la opción de un microcontrolador de 40 terminales, como los PIC16F874/877.
Se puede desarrollar también un reloj que dé la hora con el formato HH:MM donde HH son las horas y MM los
minutos. Se requiere para esto de 16 terminales o dos puertos de 8 bits como el puerto B y el C del PIC16F874.
Debe ser posible ponerlo a la hora en cualquier momento, así como disponer de una alarma programable, a la que
se accede con un interruptor de modo TIEMPO/ALARMA para poderla programar. Este reloj puede ser útil en el
control de procesos que requieren que ciertas tareas se lleven a cabo a ciertas horas durante un cierto tiempo,
como en invernaderos, en sistemas de calefacción, en alumbrado público, etc.
Estas son algunas propuestas para empezar a definir que proyecto van a desarrollar durante el curso. Recuerden
que deben estar ya trabajando en ello. No esperen a que el semestre esté por terminar.
Enseguida se incluye el diagrama de flujo del programa y el código fuente en ensamblador del temporizador
diseñado, que les servirá como referencia para sus propios proyectos.
DIAGRAMA DE FLUJO DEL PROGRAMA DEL MICROCONTROLADOR
;tempo.ASM
;Programa de un temporizador programable
;de 0 a 99.9 segundos, en pasos de 0.1 segundo
;Por: Gustavo Velazquez G. Septiembre,2005
list
p=16f873
include "p16f873.inc"
goto
btfss
goto
btfss
goto
goto
;................................
DECENAS equ
UNIDADES equ
DECIMAS equ
CONTA equ
TEMP
equ
CONTB equ
0x20
0x21
0x22
0x23
0x24
0x25
INI
DECE
UNI
DECI
GUAR
0x00
0x01
0x02
0x03
0x04
equ
equ
equ
equ
equ
Temporizado
movf
btfss
goto
movf
btfss
goto
movf
btfss
goto
ActivarCarga
bsf
goto
AjusteUnidades
PORTA,DECI
;No
;Esta sin oprimir
;el boton DECI ?
AjusteDecimas
;No
PORTA,GUAR
;Esta sin oprimir
;el boton GUAR ?
GuardarAjuste
;No
RevisionDeBotones ;Si, volver a
;revisar botones
DECENAS,F
STATUS,Z
DescontarTiempo
UNIDADES,F
STATUS,Z
DescontarTiempo
DECIMAS,F
STATUS,Z
DescontarTiempo
PORTC,7
$
;..............................
org
goto
0x00
Inicio
org
0x05
clrf
clrf
clrf
bsf
movlw
PORTA
PORTB
PORTC
STATUS,RP0
B'00000110'
movwf
movlw
movwf
movlw
movwf
movwf
movlw
ADCON1
B'111111'
TRISA
B'00000000'
TRISB
TRISC
B'11010100'
movwf
bcf
OPTION_REG
STATUS,RP0
movlw
movwf
movlw
movwf
DECENAS-1
FSR
0xFF
CONTA
incf
incf
movf
call
movwf
sublw
btfss
clrf
movlw
xorwf
btfss
goto
call
FSR,F
CONTA,F
CONTA,W
LeerEEPROM
INDF
9
;W=9-W
STATUS,C
;Es W <= 9 ?
INDF
;No, limpiar INDF
DECENAS+2
FSR,W
STATUS,Z
DirLeer
VisualizarTIEMPO
Inicio
;Banco 1
;RA5:RA0 = E/S
;digitales
;RA5:RA0 = entradas
;RB7:RB0 = salidas
;RC7:RC0 = salidas
;El TMR0 se
;incrementa con el
;reloj interno/32
;Banco 0
DirLeer
RevisionDeBotones
btfss PORTA,INI
goto
btfss
goto
btfss
;Esta sin oprimir el
;boton INI ?
Temporizado
;No
PORTA,DECE
;Esta sin oprimir el
;boton DECE ?
AjusteDecenas ;No
PORTA,UNI
;Esta sin oprimir
el
;boton UNI ?
DescontarTiempo
movf
TMR0,W
movwf TEMP
DecimaDeSegundo
movlw D'25'
movwf CONTB
CuatroMS
movlw D'125'
addwf TEMP,F
movf
TMR0,W
xorwf TEMP,W
btfss STATUS,Z
goto
$-3
decfsz CONTB,F
goto
CuatroMS
movlw 1
subwf DECIMAS,F
;DECIMAS=DECIMAS - 1
btfsc STATUS,C
;DECIMAS < 0 ?
goto
Display
movlw 9
movwf DECIMAS
movlw 1
subwf UNIDADES,F
btfsc STATUS,C
goto
Display
movlw 9
movwf UNIDADES
movlw 1
subwf DECENAS,F
btfss STATUS,C
goto
ActivarCarga
Display
call
VisualizarTIEMPO
goto
DecimaDeSegundo
AjusteDecenas
call
incf
movf
sublw
btfss
clrf
call
goto
AjusteUnidades
call
incf
movf
sublw
btfss
clrf
call
goto
Rebote
DECENAS,F
DECENAS,W
9
;W = 9 - W
STATUS,C
;Es DECENAS <= 9 ?
DECENAS
;No
VisualizarTiempo
RevisionDeBotones
Rebote
UNIDADES,F
UNIDADES,W
9
;W = 9 - W
STATUS,C
;Es UNIDADES <= 9 ?
UNIDADES
;No
VisualizarTIEMPO
RevisionDeBotones
AjusteDecimas
call
Rebote
incf
DECIMAS,F
movf
DECIMAS,W
sublw 9
;W = 9 - W
btfss STATUS,C
;Es DECIMAS <= 9 ?
clrf
DECIMAS
;No
call
VisualizarTIEMPO
goto
RevisionDeBotones
GuardarAjuste
call
Rebote
movlw DECENAS-1
movwf FSR
movlw 0xFF
movwf CONTA
DirEscribir
incf
FSR,F
incf
CONTA,F
movf
CONTA,W
call
EscribirEEPROM
movlw DECENAS+2
xorwf FSR,W
btfss STATUS,Z
goto
DirEscribir
goto
RevisionDeBotones
;...................................
LeerEEPROM
bsf
STATUS,RP1
;Banco 2
movwf EEADR
bsf
STATUS,RP0
;Banco 3
bcf
EECON1,EEPGD
bsf
EECON1,RD
bcf
STATUS,RP0
;Banco 2
movf
EEDATA,W
bcf
STATUS,RP1
;Banco 0
return
;....................................
EscribirEEPROM
bsf
STATUS,RP1
;Banco 2
movwf EEADR
movf
INDF,W
movwf EEDATA
bsf
STATUS,RP0
;Banco 3
bcf
EECON1,EEPGD
;Se apunta a la
;EEPROM
bsf
EECON1,WREN
;Se habilita la
escritura
movlw 0x55
movwf EECON2
movlw
movwf
bsf
btfsc
goto
bcf
escritura
bcf
bcf
retlw
0xAA
EECON2
EECON1,WR
EECON1,WR
$-1
EECON1,WREN
STATUS,RP0
STATUS,RP1
0
;Inicia la escritura
;Espera a que termine
;la escritura
;Se deshabilita la
;Banco 2
;Banco 0
;....................................
VisualizarTIEMPO
swapf UNIDADES,W
addwf DECENAS,W
movwf PORTB
movlw 0xF0
andwf PORTC,W
addwf DECIMAS,W
movwf PORTC
retlw 0
;....................................
Rebote
call
cienMS
movf
PORTA,W
xorlw B'00111111'
btfsc STATUS,Z
;Termino el rebote
;del boton oprimido?
goto
Rebote
;No
movf
PORTA,W
;Si
xorlw B'00111111'
btfss STATUS,Z
;Se solto el boton ?
goto
$-3
;No
call
cienMS
;Si
retlw 0
;.....................................
cienMS
movlw D'12'
movwf CONTA
clrf
TMR0
bcf
INTCON,T0IF
btfss INTCON,T0IF
goto
$-1
decfsz CONTA,F
goto
$-4
retlw 0
;.....................................
end
Descargar