;------------------------------------------------------------

;------------------------------------------------------------

; 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

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

   ;escribir en el puerto b

   movlw d'0'

   movwf portb

   call usr_stop

   btfss porta,ra0

   goto paso5             ;     cierra el ciclo

   movlw b'00000011'      ;sal.linea_estrella

   movwf puertab

   ;escribir en el puerto b

   movf puertab,w

   movwf portb

   movlw d'70'

   movwf contasegundo10

paso14

   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 paso23

   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

paso21

   nop

   btfsc porta,ra1

   goto paso21            ;     cierra el ciclo

   goto paso5             ;     cierra el ciclo

paso23

   btfss porta,ra1

   goto paso24

   bsf intcon,gie         ;activar habilitador general de interrupciones.

   bcf intcon,t0ie        ;desactivar interrupción por tmr0.

   goto paso14            ;     cierra el ciclo

paso24

   bcf intcon,gie         ;desactivar habilitador general de interrupciones.

   bcf intcon,t0ie        ;desactivar interrupción por tmr0.

   goto paso5             ;     cierra el ciclo

 

 

;------------------------------------------------------------

;                  Declaración de Subrutinas

;------------------------------------------------------------

 

usr_stop

usr_stop2

   nop

   bcf status,rp0         ;cambiar a pagina 0

   btfss porta,ra1

   goto usr_stop4

   ;escribir en el puerto b

   movlw b'00000000'

   movwf portb

   movf puertab,w

   goto usr_stop_salir

   goto usr_stop_salir

usr_stop4

   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