Está en la página 1de 7

SUMADOR-MULTIPLEXOR

LIST P=PIC16F690
#INCLUDE <P16F690.INC>
__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF &
_INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF

;BANCO 2 PARA DESABILITAR A/D
BANKSEL ANSEL
CLRF ANSEL
CLRF ANSELH
DATOA EQU 20H
DATOB EQU 21H
DATOS EQU 22H
BANKSEL PORTA

;BANCO 1 PARA PROGRAMAR LOS PUERTOS
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0XFF
MOVWF TRISC
MOVLW 0
MOVWF PORTB
MOVWF TRISA

;BANCO 0 PARA USAR LOS PUERTOS
BCF STATUS,RP0
BCF STATUS,RP1

;ELECCION DEL CIRCUITO A UTILIZAR
INICIO
BTFSS PORTA,1
GOTO MUX
GOTO SUMA

;SUMADOR
SUMA
MOVFW PORTC
MOVWF DATOS
ANDLW 0X0F
MOVWF DATOA
MOVFW DATOS
ANDLW 0XF0
MOVWF DATOB
SWAPF DATOB,F
MOVFW DATOA
ADDWF DATOB,W
MOVWF DATOS
SWAPF DATOS,F
MOVFW DATOS
MOVWF PORTB
MOVWF PORTA
GOTO INICIO

;MULTIPLEXOR
MUX
MOVFW PORTC
MOVWF DATOS
ANDLW 0X0F
MOVWF DATOA
SWAPF DATOA,F
MOVFW DATOS
ANDLW 0XF0
MOVWF DATOB
BTFSC PORTA,2 ;Brinca si es cero
CALL UNO
CALL CERO
CERO
MOVFW DATOA
MOVWF PORTB
GOTO INICIO
UNO
MOVFW DATOB
MOVWF PORTB
GOTO INICIO
END










CONVERTIDOR PARALELO-SERIE



LIST P=16F690
#INCLUDE <P16F690.INC>
__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF &
_INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _FCMEN_OFF & _IESO_OFF
;Deshabilitar Convertidos A/D
BANKSEL ANSELH
CLRF ANSEL
CLRF ANSELH
;CONFIGURAR PUERTOs
BANKSEL TRISC
MOVLW 0XFF
MOVWF TRISC
MOVLW 0X00
MOVWF TRISA
;------------------
BANKSEL PORTA
;------------------
;-----INICIO-------
;------------------
PARALELO EQU 0X20
N1 EQU 0X22
N2 EQU 0X23
N3 EQU 0X24

;inicio de programa

AGAIN
CLRF PORTA
BSF PORTA,4 ;---------------------- ; se esta mandando a 1 cuando deberia ser 0
BTFSC PORTA,3 ;-------------------------------------------- espera un 0-1-0
GOTO $-1 ;----------------------
BTFSS PORTA,3 ;---------------------- ;
GOTO $-1 ;---------SONDEO-------
BTFSC PORTA,3 ;-------DE INICIO------;
GOTO $-1 ;---------------------------------------------------- termina 0-1-0

MOVFW PORTC ;----------------------
MOVWF PARALELO;---------------------- ;0x20

MOVLW 0X08 ;---------------------- genera contador de 8 bits
MOVWF 0X21 ;---------------------- genera cotnador de 8 bits
BCF PORTA,4 ; mandamos a 0 el led de busy
REP
RRF PARALELO ;---------------------- 0x20
BTFSS STATUS,C;-----CONVERTIDOR------; comprueba el carry
GOTO CERO ;----------------------
GOTO UNO ;----------------------
CERO
BCF PORTA,1 ; ponemos en cero el led de data
CALL CLOCK ; llamamos a clock
GOTO SKIP
UNO
BSF PORTA,1 ; encendemos el led Data
CALL CLOCK ; llamamos al reloj
GOTO SKIP ; va a skip
SKIP
DECFSZ 0X21 ;decrementamos el contador de8 bits
GOTO REP
BSF PORTA,1 ; apagamos el led data
GOTO AGAIN
DLY
MOVLW 0x64 ;ASIGNAR VALOR A N1
MOVWF N1
MOVLW 0X2D ;ASIGNAR VALOR A N2
MOVWF N2
MOVLW 0X17 ;ASIGNAR VALOR A N3
MOVWF N3
DECFSZ N3,1
GOTO $-1
DECFSZ N2,1
GOTO $-5
DECFSZ N1,1
GOTO $-9
RETURN
CLOCK
BSF PORTA,0 ; encendemos el led de clk
CALL DLY ; llamamos al retrazo
BCF PORTA,0 ; apagamos el led de clk
CALL DLY ; llamamos al retrazo
RETURN
END

; 1.- (AGAIN)comprueba el boton conectado a RA3 cuando se presione y suelta se va a
2("AGAIN2")
; 2.- ("AGAIN2")se lee PORTC y el contenido se manda al registro llamado PARALELO se va a 3(REP)
y busy=1
; 3.- (REP)se rota a la derecha el registro PARALELO y se hace un BTFSS al registro "carry" se va 4
; 4.- ("REP2")si carry=1 brinca a 6(UNO) si carry=0 brinca a 5(CERO)
; 5.- (CERO) data=0, se llama a 7(CLOCK) cuando regresa llama a 9
; 6.- (UNO) data=1, se llama a 7(CLOCK) cuando regresa llama a 9
; 7.- (CLOCK)clk=1 llama a 8(DLY) cuando regresa clk=0 llama a 8(DLY) cuando regresa vuelve a
5(CERO) o 6(UNO)
; 8.- (DLY) genera un retardo de 1 seg vuelve a 7(CLOCK)
; 9.- (SKIP) decrementa contador de 8 y va a 10("SKIP2")
;10.- ("SKIP2" ) si contador se vuelve cero busy=0 y se va a 1(AGAIN)

También podría gustarte