Documentos de Académico
Documentos de Profesional
Documentos de Cultura
; __config 0xC9E4
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF &
_PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF
& _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
; CONFIG2
; __config 0xDCFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF
& _BORV_LO & _LVP_OFF
CBLOCK 0X20
AD_H ; AD H
AD_L ; AD L
VAR_TEMP
COUNT
; VARIABLES FOR MULTIPLICACION
P3B ; PRUDUCT MSB
P2B
P1B
M2B ; MULTIPLICADOR MSB
M1B
M_DR ; MULTIPICADOR
M_COUNTER; CONTADOR
ORG 0
GOTO MAIN ; INCIO DEL PROGRAMA
MAIN
BANKSEL OSCCON
MOVLW 0X70 ;OSC DE 8MHZ
MOVWF OSCCON
BANKSEL PORTA
CLRF PORTA ;LIMPIAMOS LATCH
BANKSEL LATA
CLRF LATA
CLRF ANSELA ;TODO DE DIGITAL
BSF ANSELA,ANSA4 ;RA4 COMO ANALOG
;**********************ENTRAS Y SALIDAS**************
BANKSEL TRISA
MOVLW B'00111010'
MOVWF TRISA
BANKSEL ADCON1
MOVLW B'10010000' ;VREF, JUSTF DERECHA
MOVWF ADCON1
MOVLW B'00001101' ;CHANNEL 3
MOVWF ADCON0
BANKSEL SPBRGH ;
;* 9600 BAUD, SYNC =0 BRGH = 0 BRG16=0 RST*****
MOVLW .12 ; BR = FOSC7[64(N+1)] n = 12
MOVWF SPBRGL
BSF RCSTA,SPEN ;el bit SPEN del registro RCSTA
BSF TXSTA,TXEN ; ENABLE TX pag 295
BSF RCSTA,CREN ; ENABLE RX pag 294
BANKSEL CCP1CON
MOVLW B'00001100' ; INICIA PWM
MOVWF CCP1CON
MOVLW B'00110010' ; INICIA DUTY MOVWF
CCPR1L
BANKSEL T2CON
BSF T2CON,TMR2ON ;INICIA EL TIMER 2
LEER_AD
BANKSEL ADCON0
BSF ADCON0,GO ;INICIA A/D
NOP
NOP
ESPERA BTFSCADCON0,GO ;ESPERA TERMINAR LA CONVERSION
GOTO ESPERA
MOVF ADRESH,W ; REGISTRO H AL ACUMULADOR
BANKSEL PORTA
MOVWF AD_H ;A LA DIRECCION AD_H
BANKSEL ADCON0
MOVF ADRESL,W ; REGISTRO L A W
BANKSEL PORTA
MOVWF AD_L ; GUARDADO EN AD_L
;*****************PARA VALORES HEX******************
BANKSEL CCP1CON
MOVLW B'11001111';
ANDWF CCP1CON,F
;
BANKSEL 0
LSRF DUTY_H,F
RRF DUTY_L,F
BTFSS STATUS,C
GOTO D1
BANKSEL CCP1CON
BSF CCP1CON,4
D1
BANKSEL 0
LSRF DUTY_H,F
RRF DUTY_L,F
BTFSS STATUS,C
GOTO D2
BANKSEL CCP1CON
BSF CCP1CON,5
D2
BANKSEL 0
MOVF DUTY_L,W
BANKSEL CCPR1L
MOVWF CCPR1L
BANKSEL 0
RETURN
BANKSEL 0
CLRF P3B ; CLEAR PRODUCT
CLRF P2B
CLRF P1B
MOVLW .8
MOVWF M_COUNTER
LUM_01 ASRF M_DR ; b0 AL ACARRERO
BTFSS STATUS,C
GOTO SHIF_PRODUCT ; CARRY = 0
MOVF M1B,W ; P1B = P1B + M1_B
ADDWF P2B,F
MOVF M2B,W
ADDWFC P3B,F
SHIF_PRODUCT ; DESPLAZA PARA ESCRIBIR
LSRF P3B,F ; 0 > P3B > C
RRF P2B,F
RRF P1B,F
DECFSZ M_COUNTER,F ; TODO BIEN
GOTO LUM_01
RETURN
END
#include "p12f1822.inc"
; CONFIG1
; __config 0xFE4
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF
& _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
; CONFIG2
; __config 0x3EFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_ON
;**************SUBRUTINA DE INTERRUPCIÓN***********************************
VERIFICA
LED_ON
LED_OFF
;*************RUTINA DE INICIO*********************************************
INICIO
LOOP
NOP ;No opera
DELAY
RETURN
END
list p= 12f1822
#include "p12f1822.inc"
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON &
_CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
CBLOCK 0X20
M1A
M1B
M2A
M2B
M3A
M3B
S3
DUTY_1
DUTY_2
HEX1
HEX2
HEX3
AUX_S3 ;VARIABLE TEMPORAL DE S3 PARA TX
ENDC
;inicializamos el registro de origen
ORG 0
; AN4, PIN-3 IS ANALOG INPUTS, ALL OTHER PINS ARE DIGITAL I/O
BANKSEL ANSELA
CLRF ANSELA ; ANSELA = 00
BSF ANSELA,ANSA4 ; PIN_3 AN3 IS ANALOG INPUT V_POT
BANKSEL TRISA
MOVLW B'00111010'
MOVWF TRISA
;ENABLE INTERNAL PUL_UP FOR RA5 PIN_5 TO READ SWITH
BANKSEL WPUA
CLRF WPUA ; NO PULL UPP
BSF WPUA,WPUA5 ; SET PULL_UP FOR RA4-PIN2
BANKSEL OPTION_REG ; ENBLE PULL-UPS
BCF OPTION_REG,NOT_WPUEN
BANKSEL CCP1CON
MOVLW B'00001100' ; SET PWM WHIT P1 OUT
MOVWF CCP1CON
MOVLW B'00000010' ; SET DUTY TO .200 1100 1000 C8h > 50%
MOVWF CCPR1L
BANKSEL T2CON
BSF T2CON,TMR2ON ; HABILITAMOS timer 2
BANKSEL 0
CLRF M1A
CLRF M1B
CLRF M2A
CLRF M2B
CLRF M3A
CLRF M3B
CLRF S3
BCF STATUS,C
;-----------------------------------------------------------------------
REPETIR
CALL ADC_LECTURA
CALL ADC_MULT
CALL PWM_OUT
MOVLW 'N'
CALL TX_ENVIAR
MOVLW '='
CALL TX_ENVIAR
CALL TX_ADC_OUT ;ENVIO HEX ADC
MOVLW ''
CALL TX_ENVIAR
MOVLW 'D'
CALL TX_ENVIAR
MOVLW '='
CALL TX_ENVIAR
CALL TX_DUTY_OUT ;ENVIO HEX DUTY
CALL TX_SALTO_LINEA
GOTO REPETIR
RETURN
MOVF M2B,0
ADDWFC M3B,1 ;RESULTADO EN M3B
MOVLW .0
ADDWFC S3,1 ;AQUI SUMAMOS EL ULTIMO DIGITO CON EL CARRIE
;AHORA SUMAMOS EL RESULTADO CON EL M1
BCF STATUS,C
MOVF M1A,0
ADDWF M3A,1 ;RESULTADO FINAL DEL PRIMER BYTE (SE DESCARTA)
MOVF M1B,0
ADDWFC M3B,1 ;RESULTADO FINAL SEGUNDO BYTE EN M3B
MOVLW .0
ADDWFC S3,1 ;RESULTADO FINAL TERCER BYTE S3
;RESULTADO ES( S3(2BITS) M3B(8BITS)) = (MSB LSB)
MOVF S3,0
MOVWF AUX_S3 ;GUARDAMOS VARIABLE TEMPORAL PARA TX
RETURN
PWM_OUT
BANKSEL 0
MOVF M3B,0 ;LLEVO EL PRIMER BYTE AL ACUMULADOR
MOVWF DUTY_2 ; asignamos el ancho depulso
BCF STATUS,C
RRF S3,1
RRF DUTY_2,1
BCF STATUS,C
;PASAMOS LOS LSB DE M3B A EL REG CCP1CON
BANKSEL 0
BTFSS M3B,0
GOTO NEX1
BANKSEL CCP1CON
BSF CCP1CON,4
GOTO NEX2
NEX1
BANKSEL CCP1CON
BCF CCP1CON,4
NEX2 ;PASAMOS EL OTRO BIT AL REGISTRO MENOS SIGNIFICATIVO
BANKSEL 0
BTFSS M3B,1
GOTO NEX11
BANKSEL CCP1CON
BSF CCP1CON,5
GOTO NEX22
NEX11
BANKSEL CCP1CON
BCF CCP1CON,5
NEX22
;TERMINAMOS DE COLOCAR TODO EL REGISTRO DUTY
;HABILITAMOS LA BANDERA DE ENVIO
BANKSEL 0
MOVF DUTY_2,0
BANKSEL CCPR1L
MOVWF CCPR1L ;CARGO DUTY MAS SIGNIFICATIVO
RETURN
TX_ADC_OUT
CALL TX_SEPARADOR_ADC
CALL TX_CONVERSOR_HEX
RETURN
TX_DUTY_OUT
CALL TX_SEPARADOR_DUTY
CALL TX_CONVERSOR_HEX
RETURN
TX_SEPARADOR_ADC
BANKSEL ADRESH
MOVF ADRESH,0
BANKSEL 0
MOVWF HEX3
BANKSEL ADRESL
MOVF ADRESL,0
BANKSEL 0
MOVWF HEX1
MOVLW B'00001111'
ANDWFHEX1,1
BANKSEL ADRESL
MOVF ADRESL,0
BANKSEL 0
MOVWF HEX2
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
;TERMINAMOS DE UBICAR EN ORDEN LOS REGISTROS EN BCD PARA LA CONVERSION
; HEX3 HEX2 HEX1 AHORA CONVERTIR CADA UNO
RETURN
TX_SEPARADOR_DUTY
BANKSEL 0
MOVF AUX_S3,0
MOVWF HEX3
MOVF M3B,0
MOVWF HEX1
MOVLW B'00001111'
ANDWFHEX1,1
MOVF M3B,0
MOVWF HEX2
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
BCF STATUS,C
RRF HEX2,1
; HEX3 HEX2 HEX1 AHORA CONVERTIR CADA UNO
RETURN
TX_CONVERSOR_HEX
;MOVLW .5 ;PRUEBA DE ENVIO BORRAR
;MOVWF HEX3
BANKSEL 0
BCF STATUS,C
MOVLW .246
ADDWF HEX3,0 ;SUMAMOS Y AHORA COMPROBAMOS EL DESBORDEDEL CARRIE
BTFSS STATUS,C
GOTO SUMA48
GOTO SUMA55
SUMA48
MOVLW .48
ADDWF HEX3,0 ;SUMAMOS 48 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
GOTO SALIR1
SUMA55
MOVLW .55
ADDWF HEX3,0 ;SUMAMOS 48 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
SALIR1
;SACAMOS EL SEGUNDO DIGITO
BANKSEL 0
BCF STATUS,C
MOVLW .246
ADDWF HEX2,0 ;SUMAMOS Y AHORA COMPROBAMOS EL DESBORDEDEL CARRIE
BTFSS STATUS,C
GOTO SUMA48A
GOTO SUMA55A
SUMA48A
MOVLW .48
ADDWF HEX2,0 ;SUMAMOS 48 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
GOTO SALIR2
SUMA55A
MOVLW .55
ADDWF HEX2,0 ;SUMAMOS 55 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
SALIR2
;SACAMOS EL TERCER DIGITO
BANKSEL 0
BCF STATUS,C
MOVLW .246
ADDWF HEX1,0 ;SUMAMOS Y AHORA COMPROBAMOS EL DESBORDEDEL CARRIE
BTFSS STATUS,C
GOTO SUMA48B
GOTO SUMA55B
SUMA48B
MOVLW .48
ADDWF HEX1,0 ;SUMAMOS 48 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
GOTO SALIR3
SUMA55B
MOVLW .55
ADDWF HEX1,0 ;SUMAMOS 55 + HEX3 Y LO LO GUARDAMOS EN ACUMULADOR
CALL TX_ENVIAR ;ENVIA EL ACUMULADOR CARGADO ANTERIORMENTE
SALIR3
RETURN
END