List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
temp equ 0x28
cuenta equ 0x29
cuenta1 equ 0x30
cuenta1min equ 0x31
B1 equ 0x32
B2 equ 0x33
B3 equ 0x34
B4 equ 0x35
B5 equ 0x36
B6 equ 0x37
B7 equ 0x38
B8 equ 0x39
B9 equ 0x40
B10 equ 0x41
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
org 0x00 ;Vector de RESET
goto Inicio
org 0x04
Inicio
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000000'
movwf TRISC ;Puerta C se configura como salida, RC6/Tx comunicacion a PC
movlw b'10010011'
movwf TRISB
movlw b'10000111'
movwf OPTION_REG ;Preescaler de 256 para el TMR0
bcf STATUS,RP0 ;Selecciona banco 0
clrf PORTA
clrf PORTB
clrf PORTC
movlw b'00000000' ;Sacamos por los pines correspondientes las señales
movwf PORTB
movlw b'00000000' ;Sacamos por los pines correspondientes las señales
movwf PORTC ; RB6: de 0v->5v, RB5: de 5v->0v
movlw 0x01
movwf B1
movlw 0x01
movwf B2
movlw 0x01
movwf B3
movlw 0x01
movwf B4
movlw 0x01
movwf B5
movlw 0x01
movwf B6
movlw 0x01
movwf B7
movlw 0x01
movwf B8
movlw 0x01
movwf B9
movlw 0x01
movwf B10
esperandoalto
inicio1
bcf PORTB,2
btfss PORTB,1 ;armado
goto inicio1
bsf PORTB,2
btfss PORTB,0 ;pulso en entrada 0
goto puerta4
call secuenciadorde6
goto inicio1
puerta4 btfss PORTB,4 ;pulso en entrada 4
goto inicio1
call secuenciadorde4
secuenciadorde6
btfsc B1,0
call disparar1
btfsc B2,0
call disparar2
btfsc B3,0
call disparar3
btfsc B4,0
call disparar4
btfsc B5,0
call disparar5
btfsc B6,0
call disparar6
cambiopulso
bcf PORTB,2
btfss PORTB,1 ;armado
goto cambiopulso
bsf PORTB,2
btfsc PORTB,0
goto cambiopulso
goto esperandoalto
secuenciadorde4
btfsc B7,0
call disparar7
btfsc B8,0
call disparar8
btfsc B9,0
call disparar9
btfsc B10,0
call disparar10
cambiopulso2
bcf PORTB,2
btfss PORTB,1 ;armado
goto cambiopulso2
bsf PORTB,2
btfsc PORTB,4
goto cambiopulso2
goto esperandoalto ;cambiaresperandobajo
disparar1
bsf PORTC,0
call unsegundo
bcf PORTC,0
movlw 0x00
movwf B1
return
disparar2
bsf PORTC,1
call unsegundo
bcf PORTC,1
movlw 0x00
movwf B2
return
disparar3
bsf PORTC,2
call unsegundo
bcf PORTC,2
movlw 0x00
movwf B3
return
disparar4
bsf PORTC,3
call unsegundo
bcf PORTC,3
movlw 0x00
movwf B4
return
disparar5
bsf PORTC,4
call unsegundo
bcf PORTC,4
movlw 0x00
movwf B5
return
disparar6
bsf PORTC,5
call unsegundo
bcf PORTC,5
movlw 0x01
movwf B1
movlw 0x01
movwf B2
movlw 0x01
movwf B3
movlw 0x01
movwf B4
movlw 0x01
movwf B5
return
disparar7
bsf PORTC,6
call unsegundo
bcf PORTC,6
movlw 0x00
movwf B7
return
disparar8
bsf PORTC,7
call unsegundo
bcf PORTC,7
movlw 0x00
movwf B8
return
;poner otra puerta
disparar9
bsf PORTB,6
call unsegundo
bcf PORTB,6
movlw 0x00
movwf B9
return
disparar10
bsf PORTB,5
call unsegundo
bcf PORTB,5
movlw 0x01
movwf B7
movlw 0x01
movwf B8
movlw 0x01
movwf B9
return
unsegundo
movlw 0xF
movwf cuenta
temp1s
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
clrf TMR0
sge btfss INTCON,T0IF ;Rebasamiento del TMR0 ??
goto sge ;Todavía no
decfsz cuenta
goto temp1s
return
end ;Fin del programa fuente
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
temp equ 0x28
cuenta equ 0x29
cuenta1 equ 0x30
cuenta1min equ 0x31
B1 equ 0x32
B2 equ 0x33
B3 equ 0x34
B4 equ 0x35
B5 equ 0x36
B6 equ 0x37
B7 equ 0x38
B8 equ 0x39
B9 equ 0x40
B10 equ 0x41
;#### TRAMA DE SINCRONISMO A TRANSMITIR ######
; 0x01 0x84 0x7A 0x61 0xC5 0xA4 0x84 0x03
;Ajusta los valores de la palabra de configuración durante el ensamblaje:
;protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
org 0x00 ;Vector de RESET
goto Inicio
org 0x04
; goto interrupcion
; org 0x05
;include "LCD_cxx.inc" ;Incluye las rutinas de manejo del LCD
Inicio
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000000'
movwf TRISC ;Puerta C se configura como salida, RC6/Tx comunicacion a PC
movlw b'10010011'
movwf TRISB
movlw b'10000111'
movwf OPTION_REG ;Preescaler de 256 para el TMR0
;movlw b'01100100'
;movwf TXSTA ;TX en On, modo asíncrono con 8 bits, alta velocidad y activamos noveno bit para paridad
;movlw b'00100100'
;movwf TXSTA ;TX en On, modo asíncrono con 8 bits, alta velocidad y desactivamos noveno bit para paridad
;movlw .12
;movwf SPBRG ;19200 baudios con Fosc=4MHz
bcf STATUS,RP0 ;Selecciona banco 0
;movlw b'10000000' ;Activamos la comunicacion serie(PORTB<7> Rx y PORTB<6> Tx
;movwf RCSTA
clrf PORTA
clrf PORTB
clrf PORTC
movlw b'00000000' ;Sacamos por los pines correspondientes las señales
movwf PORTB
movlw b'00000000' ;Sacamos por los pines correspondientes las señales
movwf PORTC ; RB6: de 0v->5v, RB5: de 5v->0v
movlw 0x01
movwf B1
movlw 0x01
movwf B2
movlw 0x01
movwf B3
movlw 0x01
movwf B4
movlw 0x01
movwf B5
movlw 0x01
movwf B6
movlw 0x01
movwf B7
movlw 0x01
movwf B8
esperandoalto
inicio1
bcf PORTB,2
btfss PORTB,1 ;armado
goto inicio1
bsf PORTB,2
btfss PORTB,0 ;pulso en entrada 0
goto inicio1
call secuenciadorde6
goto inicio1
secuenciadorde6
BCF STATUS,Z
movlw 0x01
subwf B1,0
btfsc STATUS,Z
call disparar1
BCF STATUS,Z
movlw 0x01
subwf B2,0
btfsc STATUS,Z
call disparar2
BCF STATUS,Z
movlw 0x01
subwf B3,0
btfsc STATUS,Z
call disparar3
BCF STATUS,Z
movlw 0x01
subwf B4,0
btfsc STATUS,Z
call disparar4
BCF STATUS,Z
movlw 0x01
subwf B5,0
btfsc STATUS,Z
call disparar5
BCF STATUS,Z
movlw 0x01
subwf B6,0
btfsc STATUS,Z
call disparar6
cambiopulso
bcf PORTB,2
btfss PORTB,1 ;armado
goto cambiopulso
bsf PORTB,2
btfsc PORTB,0
goto cambiopulso
goto esperandoalto
disparar1
bsf PORTC,0
call unsegundo
bcf PORTC,0
movlw 0x00
movwf B1
return
disparar2
bsf PORTC,1
call unsegundo
bcf PORTC,1
movlw 0x00
movwf B2
return
disparar3
bsf PORTC,2
call unsegundo
bcf PORTC,2
movlw 0x00
movwf B3
return
disparar4
bsf PORTC,3
call unsegundo
bcf PORTC,3
movlw 0x00
movwf B4
return
disparar5
bsf PORTC,4
call unsegundo
bcf PORTC,4
movlw 0x00
movwf B5
return
disparar6
bsf PORTC,5
call unsegundo
bcf PORTC,5
movlw 0x00
movwf B6
return
disparar7
bsf PORTC,6
call unsegundo
bcf PORTC,6
movlw 0x00
movwf B7
return
disparar8
bsf PORTC,7
call unsegundo
bcf PORTC,7
movlw 0x01
movwf B1
movlw 0x01
movwf B2
movlw 0x01
movwf B3
movlw 0x01
movwf B4
movlw 0x01
movwf B5
movlw 0x01
movwf B6
movlw 0x01
movwf B7
movlw 0x01
movwf B8
return
;poner otra puerta
unsegundo
movlw 0xF
movwf cuenta
temp1s
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
clrf TMR0
sge btfss INTCON,T0IF ;Rebasamiento del TMR0 ??
goto sge ;Todavía no
decfsz cuenta
goto temp1s
return
end ;Fin del programa fuente