este programa hecho en ensamblador por Joaquín berrocal Piris lo uso para el manejo del puente levadizo de madera
Nota: ver Mis proyectos en.
https://www.youtube.com/user/joaquininbp
http://www.slideshare.net/joaquinin1/presentations
Documentos: aquí está el brazo robotico
http://www.slideshare.net/joaquinin1/documents
https://issuu.com/joaquinin
nota importante: desde la utilidad indicada más abajo; poniendo la dirección del archivo en issuu.net he indicando cuantas páginas quieres, puedes bajarte cualquier archivo sin tener que registrarte:
Publicado el 1 abr. 2015
Paginas para descargar:
http://utilidades.gatovolador.net/issuu/
1. 1
;**********PUENTE-GARAJE.ASM*******
;CONTROL DE LA PUERTA de un GARAJE o de un Puente levadizo
;. pag 283 y 284 del libro.ejercicio hecho por mi
;
;En reposo el sem{aforo rojo (SR)est{a encendido; Reposo RA0
;Al entrar un vehiculo se acciona la llave (AP) -RA3- y se activa un rele
;(MA) -RB6- , simulado mediante un led, que pone en marcha el motor de
;apertura de la puerta.
;de la puerta . Cuando se abre totalmente la puerta y se activa el
;sensor (PA) -RA2-,
;se desactiva (MA) -RB6-, se ilumina el semaforo Verde (SV) -RB2-, y se
;apaga el rojo (SR)-RB0-
;La situacion anterior se mantiene durante 5sgs.
;Tras ese tiempo, se apaga el semaforo verde y se enciende el rojo, al mismo
;tiempo que se activa el rele (MC)-RB7-, que pone en marcha el motor
;de cierre de la puerta hasta retornar a la situacion de reposo.
;Si en la fase de cierre hay algun vehículo en la entrada(sensor DP)-RA1-),
;se inicia una nueva secuencia de apertura.
;DIRECTIVAS DEL PROGRAMA
LIST P=16F84 ; Se emplea el PIC16F84
RADIX HEX ; Sistema de numeraci¢n hexadecimal
;ETIQUETAS DEL PROGRAMA
W EQU 0x00 ; Registro de destino W : d=0
2. 2
F EQU 0x01 ; Registro de destino F : d=1
Z EQU 0X02 ; Bit 2 del registro ESTADO
TMR0_OPT EQU 0x01 ; El registro TMR0 ocupa la direcci¢n 1
; del banco 0 y el OPTION la direcci¢n 1
; del banco 1
ESTADO EQU 0x03 ; El registro ESTADO ocupa la direcci¢n
; 3 de los dos bancos
INTCON EQU 0x0B ; El registro INTCON ocupa la direcci¢n
PUERTAA EQU 0x05 ; La PUERTA A ocupa la direcci¢n 5 del
; banco 0 y su registro de configuraci¢n
; la direcci¢n 5 del banco 1
PUERTAB EQU 0x06 ; La PUERTA B ocupa la direcci¢n 6 del
; banco 0 y su registro de configuraci¢n
; la direcci¢n 6 del banco 1
TEMPO1 EQU 0x0C ; Registro auxiliar para las rutinas de
; DELAY
;PROGRAMA PRINCIPAL
ORG 0 ; El programa comienza en la direcci¢n 0 y
goto INICIO ; salta a la direcci¢n 5 para sobrepasar el
ORG 5 ; vector de interrupci¢n
INICIO bsf ESTADO,5 ; Selecci¢n del banco 1
movlw b'00001111' ; Se configura la PUERTA A como Entrada
movwf PUERTAA ;
clrf PUERTAB ; Se configura la puerta B como salida
movlw b'00000111'
movwf TMR0_OPT ; Se asigna el preescaler al TMR0
bcf ESTADO,5 ; Selecci¢n del banco 0
clrf PUERTAA ; Se inicializan las dos puertas a
clrf PUERTAB ; ceros
3. 3
bsf PUERTAB,0 ;activa semaforo Rojo (SR)-RB0-
BUCLE0 btfsc PUERTAA,3 ;Comprueba si la llave de apertura (AP)-RA3-
goto BUCLE0 ;esta activada.
BUCLEIR nop ;instruccion no valida para ajustar reloj
bcf PUERTAB,7 ;desactiva el motor de cierre MC
;para cuando retorne del Bucle_IRF
bsf PUERTAB,6 ;Activa al T1 transistor de apertura
BUCLE1 btfsc PUERTAA,2 ;Comprueba final carrera de apertura-RA2-
goto BUCLE1
bcf PUERTAB,6 ;Apaga motor de apertura (MA)-RB6- T1
bsf PUERTAB,2 ;activa semaforo Verde (SV)-RB2-
bcf PUERTAB,0 ;Apaga semaforo rojo (SR)
call DELAY5S ;Espera 5segundos para cerrar la puerta
bcf PUERTAB,2 ;Apaga semaforo Verde (SV) RB0
bsf PUERTAB,0 ;Activa Semaforo Rojo (SR) -RB0-
bsf PUERTAB,7 ;Activa Motor cierre (MC)-RB7- activa T2
BUC_IRF btfsc PUERTAA,1 ;Verifica infrarrojos.
goto BUCLE2
goto BUCLEIR ;Si hay se¤al infrarrojos se va al bucleIR
;para realizar una secuencia de cierre.
BUCLE2 btfsc PUERTAA,0 ;verifica si se ha llegado a posicion de
;reposo.
goto BUC_IRF ;Vuelve al buc_IRF para continuar chequeando
;el infrarrojos.
bcf PUERTAB,7 ;desactiva Motor cierre(MC)-RB7-
goto BUCLE0 ;Vuelta al bucle0 para reiniciar todo el proceso
4. 4
;************RUTINA DE DELAY 5 SEGUNDOS Pasado este tiempo se cierra******
; RUTINA DE DELAY DE 1 SEGUNDO
DELAY5S movlw 0x64 ;100 decimal para el contaje de 1segundo
movwf TEMPO1 ; Carga la variable TEMPO1, que ser decrementada
call DELAY10 ; en la rutina a la que se llama
return
DELAY10 bcf INTCON,2 ; Borra el flag de estado del TMR0
movlw 0x3D ;3D=61decimal; 256-61=195
movwf TMR0_OPT ; Carga del TMR0 para que cuente 195
;T1=(256-N)RANGO ; T1=(256-61)256=49920usg
DELAY10_1 btfss INTCON,2 ; Espera el desbordamiento del TMR0
goto DELAY10_1
decfsz TEMPO1,F ;registro auxiliar para el contaje hasta 5sg
goto DELAY10 ;hace cien veces el decremento consiguiendo
return ;los 5sg. Exactamente: 4,942379sgs.
end
;***************************************************************************