;------------------------------------------------------------
; Código assembler generado por Niple.
; Nombre del Proyecto:
; Autor: Francisco Freire Blanco.
; Fecha: 22/02/2003
; PIC: 16F84
; Velocidad de reloj: 4 Mhz
; Funcion:
;------------------------------------------------------------
LIST P=PIC16F84
;------------------------------------------------------------
;
Declaración de Registros
;------------------------------------------------------------
w equ 00h
status equ 0x03
porta
equ 0x05
portb
equ 0x06
intcon
equ 0x0b
puertab
equ 0x0c
_np_tiempo
equ 0x0e
_np_tiempo1
equ 0x0f
_np_tiempo2
equ 0x10
contasegundo10
equ 0x12
puerta_a1
equ 0x14
puerta_a2
equ 0x15
opcion
equ 0x81
trisa
equ 0x85
trisb
equ 0x86
;------------------------------------------------------------
;
Declaración de Bits
;------------------------------------------------------------
c equ 0
;carry / borrow bit
gie
equ 7 ;habilitador general de interrupciones
ps0 equ 0
;prescaler rate select bit
ps1 equ 1
;prescaler rate select bit
ps2 equ 2
;prescaler rate select bit
psa
equ 3 ;prescaler assignment bit
ra0
equ 0 ;bit 0 del puerto a
ra1
equ 1 ;bit 1 del puerto a
rb1
equ 1 ;bit 1 del puerto b
rb2
equ 2 ;bit 2 delpuerto b
rp0 equ 5
;registrer banck select bit
t0cs equ
5 ;tmr0 clock source select bit
t0ie equ
5 ;habilitador de interrupción
por tmr0
t0if equ
2 ;tmr0 overflow interrrupt flag
bit
z
equ 2 ;bit cero
;------------------------------------------------------------
;
Inicio
;------------------------------------------------------------
reset org 0
goto paso2
org 4
btfsc intcon,t0if
goto interrupcion_tmr0
salir_interrupcion
bcf
status,rp0 ;cambiar a pagina 0
bsf intcon,gie
retfie
;------------------------------------------------------------
;
inicio de la interrupción por tmr0
;------------------------------------------------------------
interrupcion_tmr0_salir
bcf intcon,t0if
goto
salir_interrupcion
interrupcion_tmr0
bcf
status,rp0 ;cambiar a pagina 0
bcf
intcon,gie ;desactivar
habilitador general de interrupciones.
decf
contasegundo10,1
;temporizador
100 mse
movlw .10
call
tiempo_100_1000_ms
;fin del
temporizador 100 mse
goto
interrupcion_tmr0_salir
;------------------------------------------------------------
;
programa principal
;------------------------------------------------------------
paso2
movlw
b'00011111' ;configurar el puerto a
como xxxeeeee
bsf
status,rp0 ;cambiar a pagina 1
movwf trisa
movlw
b'00000000' ;configurar el puerto b
como ssssssss
bsf
status,rp0 ;cambiar a pagina 1
movwf trisb
;escribir en el
puerto a
movlw d'0'
bcf
status,rp0 ;cambiar a pagina 0
movwf porta
paso5
nop
paso6
;escribir en el
puerto b
movlw d'0'
movwf portb
call usr_stop
btfss porta,ra0
goto paso9
call
usr_pulso_puro
movlw
b'00000011' ;sal.linea_estrella
movwf puertab
;escribir en el
puerto b
movf puertab,w
movwf portb
movlw d'70'
movwf
contasegundo10
paso16
bsf
status,rp0 ;cambiar a pagina 1
bcf
opcion,psa ;asignacion del
preescalado al tmr0
bsf
opcion,ps0 ;configurar
preescalado a 256
bsf opcion,ps1
bsf opcion,ps2
bcf
opcion,t0cs ;origen de la señal de
reloj de tmr0 = reloj interno
bcf
status,rp0 ;cambiar a pagina 0
bsf
intcon,gie ;activar habilitador general de
interrupciones.
bsf
intcon,t0ie ;activar interrupción
por tmr0.
movf
contasegundo10,w ;si el reg
contasegundo10 = d'0'
xorlw d'0'
btfss status,z
goto paso27
bcf
portb,rb1 ;sal.estrella
bcf
intcon,gie ;desactivar
habilitador general de interrupciones.
bcf
intcon,t0ie ;desactivar
interrupción por tmr0.
;temporizador
100 mse
movlw .10
call
tiempo_100_1000_ms
;fin del
temporizador 100 mse
bsf portb,rb2 ;sal.triángulo
paso23
nop
call
usr_pulso_puro
btfsc porta,ra1
goto paso23 ; cierra el ciclo
call
usr_pulso_puro
goto paso5 ; cierra el ciclo
paso27
btfss porta,ra1
goto paso28
bsf
intcon,gie ;activar habilitador
general de interrupciones.
bcf
intcon,t0ie ;desactivar
interrupción por tmr0.
goto paso16 ; cierra el ciclo
paso28
bcf
intcon,gie ;desactivar
habilitador general de interrupciones.
bcf
intcon,t0ie ;desactivar
interrupción por tmr0.
goto paso5 ; cierra el ciclo
paso9
call
usr_pulso_puro
goto paso6 ; cierra el ciclo
;------------------------------------------------------------
;
Declaración de Subrutinas
;------------------------------------------------------------
usr_pulso_puro
usr_pulso_puro2
nop
movlw
b'00011111' ;configurar el puerto a
como xxxeeeee
bsf
status,rp0 ;cambiar a pagina 1
movwf trisa
;leer un dato
del puerto a
bcf
status,rp0 ;cambiar a pagina 0
movf porta,w
movwf puerta_a1
;temporizador 80
mse
movlw .8
call
tiempo_100_1000_ms
;fin del
temporizador 80 mse
;leer un dato
del puerto a
movf porta,w
movwf puerta_a2
movf
puerta_a2,w ;si el reg puerta_a2 =
puerta_a1
xorwf
puerta_a1,w ;si el reg puerta_a2 =
puerta_a1
btfss status,z
goto
usr_pulso_puro2 ;cierra el ciclo
usr_pulso_puro_salir
bcf status,rp0
return
usr_stop
usr_stop2
nop
bcf
status,rp0 ;cambiar a pagina 0
btfss porta,ra1
goto usr_stop4
call usr_pulso_puro
;escribir en el puerto b
movlw
b'00000000'
movwf portb
movf puertab,w
goto usr_stop_salir
goto usr_stop_salir
usr_stop4
call usr_pulso_puro
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf
status,rp0 ;cambiar a pagina 1
movwf trisb
;escribir en el
puerto b
movlw
b'00001000'
bcf
status,rp0 ;cambiar a pagina 0
movwf portb
;temporizador
300 mse
movlw .30
call
tiempo_100_1000_ms
;fin del
temporizador 300 mse
;escribir en el
puerto b
movlw
b'00000000'
movwf portb
;temporizador
200 mse
movlw .20
call
tiempo_100_1000_ms
;fin del
temporizador 200 mse
goto
usr_stop2 ;cierra el ciclo
usr_stop_salir
bcf status,rp0
return
tiempo_100_1000_ms
movwf _np_tiempo
goto tiempo_100_1000_ms_1
tiempo_100_1000_ms_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_100_1000_ms_1
movlw .22
movwf
_np_tiempo1
tiempo_100_1000_ms_bucle1
movlw .150
movwf
_np_tiempo2
tiempo_100_1000_ms_bucle
decfsz _np_tiempo2,1
goto
tiempo_100_1000_ms_bucle
decfsz
_np_tiempo1,1
goto
tiempo_100_1000_ms_bucle1
nop
decfsz
_np_tiempo,1
goto
tiempo_100_1000_ms_bucle2
return
End