Sei sulla pagina 1di 7

Elektrogerate

list P=16F877A #INCLUDE <P16F877A.INC> CBLOCK 0X20 ADC_ASCCI_L ADC_ASCCI_H REGISTER DATO_A DATO_B BIN_L BIN_H BCDL BCDH BCD_UP BCD_TEMP CUENTA DIGITO VECES MULTIPLICADOR MULTIPLICANDO RESUL_L RESUL_H ;;; tecla dato2 dato3 cont retardo contador CNT1 CNT2 CNT3 CNT4 PRI SEC ENTRADA TEMP val MD MR MD_H PR_H PR_L CNT BASE VENTILADOR FOCO PRI_T SEC_T BASE_TEMP ENDC ORG GOTO ORG 0X00 INICIO 0X04 CLRF CLRF CLRF CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL PORTB PORTC PORTD START_LCD 'P' LCD_DATOS 'R' LCD_DATOS 'O' LCD_DATOS 'Y' LCD_DATOS 'E' LCD_DATOS 'C' LCD_DATOS 'T' LCD_DATOS 'O' LCD_DATOS '' LCD_DATOS 'F' LCD_DATOS 'I' LCD_DATOS 'N' LCD_DATOS 'A' LCD_DATOS 'L' LCD_DATOS 0XC0 LCD_REG 'L' LCD_DATOS

ISR INICIO

BSF STATUS,RP0 MOVLW 0XFF MOVWF TRISA MOVLW B'00000111' MOVWF TRISE MOVLW B'10000001'; RA3 COMO REF+ Y JUSTIFICADO A LA IZQUIERDA MOVWF ADCON1 CLRF TRISB MOVLW 0X00 MOVWF TRISD movlw b'11110000' movwf TRISC ; SALIDA DEL TECLADO BCF STATUS,RP0 CLRF PORTA

MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL CALL

'A' LCD_DATOS 'B' LCD_DATOS '.' LCD_DATOS '' LCD_DATOS 'M' LCD_DATOS 'I' LCD_DATOS 'C' LCD_DATOS 'R' LCD_DATOS 'O' LCD_DATOS '.' LCD_DATOS UNO_SEG

;INTRODUCIMOS TEMPERATURA A ALCANZAR XDX CALL LETRERO CALL TECLADO_MATRICIAL MOVWF PRI CLRF dato2 CALL TEM_DES MOVF PRI,W ANDLW 0X0F ADDLW 0X30 CALL LCD_DATOS CALL UNO_SEG CALL TECLADO_MATRICIAL MOVWF SEC MOVF SEC,W ANDLW 0X0F ADDLW 0X30 CALL LCD_DATOS MOVLW '.' CALL LCD_DATOS MOVLW 'C' CALL LCD_DATOS ;INICIAMOS AJUSTE DE TEMPERATURA

SENSOR_T CALLDELAY MOVLW B'01111001';ESCOGE CANAL 7 MOVWF ADCON0 CALLDELAY BSF ADCON0,2; INICIO CONVERSION CALLDELAY ESPERA_T BTFSC ADCON0,2 GOTO ESPERA_T CALLPROCEDIMIENTO MOVLW 0XC0;SEGUNDA LINEA DEL LCD CALL LCD_REG MOVLW 'T' CALL LCD_DATOS MOVLW '.' CALL LCD_DATOS MOVLW 'A' CALL LCD_DATOS MOVLW 'C' CALL LCD_DATOS MOVLW 'T' CALL LCD_DATOS MOVLW 'U' CALL LCD_DATOS MOVLW 'A' CALL LCD_DATOS MOVLW 'L' CALL LCD_DATOS MOVLW '=' CALL LCD_DATOS SWAPF BCDH,W ANDLW 0X0F ADDLW 0X30 CALL LCD_DATOS MOVLW 0X0F ANDWF BCDH,W ADDLW 0X30 CALL LCD_DATOS SWAPF BCDL,W ANDLW 0X0F ADDLW 0X30 CALL LCD_DATOS MOVLW '.' CALL LCD_DATOS MOVLW 'C' CALL LCD_DATOS

;RUTINA PARA ENCENDER UN FOCO SI LA TEMPERATURA ES BAJA O ENCENDER UN VENTILADOR PARA DISMINUIRLA MOVF PRI,W CALL MUL MOVF PR_L,W ADDWF SEC,W MOVWF BASE ;TEMPERATURA INGRESADA CONVERTIDA A BINARIO INCF BASE,W MOVWF VENTILADOR ;TEMPERATURA PARA ENCENDER VENTILADOR BASE+1 DECF BASE,W MOVWF FOCO ;TEMPERATURA PARA ENCENDER FOCO BASE-1 MOVLW 0X0F ANDWF BCDH,W MOVWF PRI_T MOVF PRI_T,W CALL MUL SWAPF BCDL,F MOVLW 0X0F ANDWF BCDL,W MOVWF MOVF ADDWF MOVWF SENSOR MOVF VENTILADOR,W SUBWF BASE_TEMP,W ;VENTILADORBASE_TEMP MAYOR A 0 C=1 BTFSS STATUS,C GOTO CHECK_FOCO GOTO ON_VENT CHECK_FOCO MOVF SUBWF FOCO MAYOR A 0 C=1 BTFSS GOTO GOTO ON_VENT BSF BCF GOTO SENSOR_T SEC_T PR_L,W SEC_T,W BASE_TEMP ;TEMPERATURA DEL

BASE,W BASE_TEMP,W ;BASE_TEMPSTATUS,C ON_FOCO OFF PORTD,6 PORTD,7

OFF BCF PORTD,7 BCF PORTD,6 GOTO SENSOR_T ON_FOCO BSF PORTD,7 BCF PORTD,6 GOTO SENSOR_T BIN_BCD CLRF BCDH CLRF BCDL CLRF BCD_UP MOVLW 0X10 MOVWF CUENTA CONVERSION1 BCF STATUS,C RLF BIN_L,F;ADRESL*5 RLF BIN_H,F;ADRESH*5 RLF BCDL,F RLF BCDH,F RLF BCD_UP,F DECFSZ CUENTA,F GOTO WWWW GOTO TERMINA_CONVERSION WWWW MOVLW B'00001111' ANDWF BCDL,W MOVWF BCD_TEMP MOVLW 0X05 SUBWF BCD_TEMP,W BTFSC STATUS,C CALL SUMA0X03_L MOVLW B'11110000' ANDWF BCDL,W MOVWF BCD_TEMP MOVLW 0X50 SUBWF BCD_TEMP,W BTFSC STATUS,C CALL SUMA0X30_L MOVLW B'00001111' ANDWF BCDH,W MOVWF BCD_TEMP MOVLW 0X05 SUBWF BCD_TEMP,W

BTFSC STATUS,C CALL SUMA0X03_H MOVLW B'11110000' ANDWF BCDH,W MOVWF BCD_TEMP MOVLW 0X50 SUBWF BCD_TEMP,W BTFSC STATUS,C CALL SUMA0X30_H GOTO CONVERSION1 TERMINA_CONVERSION RETURN ;******************************* ;SUBRUTINA QUE SE ENCARGA DE ;SUMAR 3 AL NIBBLE BAJO DE BCDL ;******************************* SUMA0X03_L MOVLW 0X03 ADDWF BCDL,F BTFSS STATUS,C RETURN MOVLW 0X01 ADDWF BCDH,F RETURN ;******************************* ;SUBRUTINA QUE SE ENCARGA DE ;SUMAR 3 AL NIBBLE ALTO DE BCDL ;******************************* SUMA0X30_L MOVLW 0X30 ADDWF BCDL,F BTFSS STATUS,C RETURN MOVLW 0X01 ADDWF BCDH,F RETURN

MOVLW 0X01 ADDWF BCD_UP,F RETURN ;******************************* ;SUBRUTINA QUE SE ENCARGA DE ;SUMAR 3 AL NIBBLE ALTO DE BCDH ;******************************* SUMA0X30_H MOVLW 0X30 ADDWF BCDH,F BTFSS STATUS,C RETURN MOVLW 0X01 ADDWF BCD_UP,F RETURN ;////MODULO LCD ;UTILIZAR ESTAS VARIABLES ;REGISTER ;DATO_A ;DATO_B ;LCE_E GENERA UN PULSO EN LA SEAL E DE 1 US DE DURACIN. ESTO ES POSIBLE ;GRACIAS A LA NOP Y A QUE EL PIC TRABAJA A 4MHZ. PARA VELOCIDADES SUPERIORES ;HABR QUE INSERTAR ALGUNA NOP ADICIONAL PARA NO REBASAR LA DURACIN MNIMA ;DEL LCD LCD_BUSY CALL DELAY_5MS RETURN LCD_E BSF PORTD,2 ;ACTIVA E NOP ;PAUSA NOP BCF PORTD,2 ;DESACTIVA E RETURN ;LCD_DATO DEPOSITA EL CDIGO ASCII PRESENTE EN W, SOBRE PORTB. ESPERA QUE EL ;LCD EJECUTE LA LTIMA OPERACIN Y GENERA EL PULSO E. LCD_DATOS BCF PORTD,0 ;DESACTIVA RS (MODO COMANDO) MOVWF REGISTER MOVLW 0XF0 ANDWF PORTB,1 SWAPF REGISTER,0 ANDLW 0X0F

;******************************* ;SUBRUTINA QUE SE ENCARGA DE ;SUMAR 3 AL NIBBLE BAJO DE BCDH ;******************************* SUMA0X03_H MOVLW 0X03 ADDWF BCDH,F BTFSS STATUS,C RETURN

IORWF CALL BSF CALL BCF COMANDO) MOVLW ANDWF MOVF ANDLW IORWF CALL BSF CALL RETURN

PORTB,1 LCD_BUSY ;ESPERA QUE SE LIBERE EL LCD PORTD,0 ;ACTIVA RS (MODO DATO) LCD_E PORTD,0 ;DESACTIVA RS (MODO 0XF0 PORTB,1 REGISTER,0 0X0F PORTB,1 LCD_BUSY ;ESPERA QUE SE LIBERE EL LCD PORTD,0 ;ACTIVA RS (MODO DATO) LCD_E ;GENERA PULSO EN SEAL E

DEL_1 LCD_INI MOVLW CALL CALL CALL MOVLW CALL CALL CALL B'00110011' LCD_REG DELAY_5MS DELAY_5MS B'00110010' LCD_REG DELAY_5MS DELAY_5MS

CALL GOTO

DELAY_5MS SSSS_N

MOVLW B'00101000' CALL LCD_REG CALL DELAY_5MS RETURN ;DELAY_5MS GENERA UNA TEMPORIZACIN DE 5MS NECESARIO PARA LA SECUENCIA DE ;INICIO DEL LCD DELAY_5MS MOVLW MOVWF CLRF DELAY_1 DECFSZ GOTO DECFSZ GOTO RETURN

;LCD_REG DEPOSITA EL CDIGO DEL COMANDO PRESENTE EN W, SOBRE PORTB. ESPERA QUE ;EL LCD EJECUTE LA LTIMA OPERACIN Y GENERA EL PULSO E. LCD_REG BCF COMANDO) MOVWF MOVLW ANDWF SWAPF ANDLW IORWF CALL CALL BCF COMANDO) MOVLW ANDWF MOVF ANDLW IORWF CALL CALL RETURN PORTD,0 ;DESACTIVA RS (MODO

REGISTER 0XF0 PORTB,1 REGISTER,0 0X0F PORTB,1 LCD_BUSY ;ESPERA QUE SE LIBERE EL LCD LCD_E ;GENERA PULSO EN SEAL E PORTD,0 ;DESACTIVA RS (MODO 0XF0 PORTB,1 REGISTER,0 0X0F PORTB,1 LCD_BUSY ;ESPERA QUE SE LIBERE EL LCD LCD_E ;GENERA PULSO EN SEAL E

0X1A DATO_B DATO_A DATO_A,1 DELAY_1 DATO_B,1 DELAY_1

MUL_8X8 CLRF RESUL_H ; LIMPIAMOS LA PARTE ALTA DEL RESULTADO RRF MULTIPLICADOR,0 ; STATUS(C)=1er BIT DE OPERACIN MOVWF RESUL_L ; PARA SIGUIENTES OPERACIONES BSF VECES,3 ; NMERO DE ITERACIONES=8 MOVF MULTIPLICANDO,0 ; W SIEMPRE TENDR EL MISMO VALOR W_MUL BTFSC STATUS,C ; VERIFICA BIT DE OPERACIN ADDWF RESUL_H,1 ; SOLO SI ES UNO, SUMA EL DATO RRF RESUL_H,1 ; ROTA RESULTADO DE LA SUMA RRF RESUL_L,1 ; CARGA EL BIT DE OPERACIN A "C" DECFSZ VECES,1 ; ESPERA A QUE TERMINE LA OPERACIN GOTO W_MUL ; CONTINUA CON EL SGTE BIT DE OPERACIN RETURN PROCEDIMIENTO MOVLW MOVWF BSF MOVF BCF MOVWF CALL MOVF MOVWF MOVF MOVWF MOVF MOVWF CALL MOVF ADDWF 0X05 MULTIPLICADOR STATUS,RP0 ADRESL,0 STATUS,RP0 MULTIPLICANDO MUL_8X8 RESUL_L,0 ADC_ASCCI_L RESUL_H,0 ADC_ASCCI_H ADRESH,0 MULTIPLICANDO MUL_8X8 RESUL_L,0 ADC_ASCCI_H,F

START_LCD CALL LCD_INI ;INICIALIZA MOVLW B'00000001' ;CLEAR LCD CALL LCD_REG MOVLW B'00000110' ;MODO DE ENTRADA CALL LCD_REG MOVLW B'00001100' ;ACTIVAR LCD CALL LCD_REG RETURN UNO_SEG SSSS_N MOVLW MOVWF DECFSZ GOTO RETURN 0X20 DIGITO DIGITO,F DEL_1

;LCD_INI REALIZA LA INICIALIZACIN DEL LCD SEGN LOS TIEMPOS MARCADOS POR EL ;FABRICANTE. SE INICIA CON UN INTERFACE DE 8 BITS, 2 LNEAS DE VISUALIZACIN, ;Y CARACTERES DE 5 * 7. SE TEMPORIZA 15 MS.

movwf MOVF MOVWF MOVF MOVWF ADC_ASCCI_L,0 BIN_L ADC_ASCCI_H,0 BIN_H test_columnas movf movwf btfsc goto btfsc goto btfsc goto lab_11 SWAPF ANDLW ADDLW CALL MOVLW ANDWF ADDLW CALL SWAPF ANDLW ADDLW CALL MOVLW ANDWF ADDLW CALL RETURN MOVLW MOVWF DECFSZ GOTO RETURN BCDH,W 0X0F 0X30 LCD_DATOS 0X0F BCDH,W 0X30 LCD_DATOS BCDL,W 0X0F 0X30 LCD_DATOS 0X0F BCDL,W 0X30 LCD_DATOS 0X15 DIGITO DIGITO CUENTA_1 rlf goto col_01 movlw movwf goto col_02 movlw movwf goto col_03 movlw movwf goto tecla,0 goto btfsc goto btfsc goto btfsc goto goto 0X03 addwf goto 0X06 addwf goto 0X09 addwf goto

tecla tecla,0 PORTC PORTC,4 col_01 PORTC,5 col_02 PORTC,6 col_03 tecla,1 test_columnas 0X01 dato2 fila 0X02 dato2 fila 0X03 dato2 fila fin tecla,1 fil_02 tecla,2 fil_03 tecla,3 fil_04 TECLADO_MATRICIAL dato2,1 fin dato2,1 fin

movlw .12 movwf cont movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf dato2,0 ;tecla numeral cont,0 STATUS,Z NUMERAL cont,1 cont,0 ;tecla numero 0 dato2,0 STATUS,Z TEC_0 cont,1 cont,0 ;tecla asterisco dato2,0 STATUS,Z ASTERISCO cont,1 cont,0 ;tecla numero 9 dato2,0 STATUS,Z TEC_9 cont,1 cont,0 ;tecla numero 8 dato2,0 STATUS,Z TEC_8 cont,1 cont,0 ;tecla numero 7 dato2,0 STATUS,Z TEC_7 cont,1 cont,0 ;tecla numero 6 dato2,0 STATUS,Z TEC_6 cont,1

CALL BIN_BCD RETURN

EXPLAYADO

fila

btfsc

DELAY CUENTA_1

fil_02

movlw

fil_03

movlw

;RUTINA DEL TECLADO MATRICIAL

fil_04 movlw dato2,1 fin

TECLADO_MATRICIAL movlw

fin b'00000001'

movf cont,0 ;tecla numero 5 xorwf dato2,0

btfsc STATUS,Z goto TEC_5 decf cont,1 movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto decf movf xorwf btfsc goto goto cont,0 ;tecla numero 4 dato2,0 STATUS,Z TEC_4 cont,1 cont,0 ;tecla numero 3 dato2,0 STATUS,Z TEC_3 cont,1 cont,0 ;tecla numero 2 dato2,0 STATUS,Z TEC_2 cont,1 cont,0 ;tecla numero 1 dato2,0 STATUS,Z TEC_1 test_columnas

TEC_8 MOVLW .8 RETURN TEC_7 MOVLW .7 RETURN TEC_6 MOVLW .6 RETURN TEC_5 MOVLW .5 RETURN TEC_4 MOVLW .4 RETURN TEC_3 MOVLW .3 RETURN TEC_2 MOVLW .2 RETURN TEC_1 MOVLW .1 RETURN

CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL RETURN LETRERO MOVLW 0X01 CALL MOVLW 0X80 CALL MOVLW 'I' CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW

LCD_DATOS 'A' LCD_DATOS 'D' LCD_DATOS 'A' LCD_DATOS '=' LCD_DATOS

LCD_REG LCD_REG LCD_DATOS 'N' LCD_DATOS 'T' LCD_DATOS 'R' LCD_DATOS 'O' LCD_DATOS 'D' LCD_DATOS 'U' LCD_DATOS 'Z' LCD_DATOS 'C' LCD_DATOS 'A' LCD_DATOS 0XC0 LCD_REG 'T' LCD_DATOS 'E' LCD_DATOS 'M' LCD_DATOS 'P' LCD_DATOS 'E'

NUMERAL goto XDX

TEC_0 MOVLW .0 RETURN

ASTERISCO goto test_columnas TEC_9 MOVLW .9 RETURN

;RUTINA PARA TEMPERATURA DESEADA TEM_DES MOVLW 0X01 CALL LCD_REG MOVLW 0X80 CALL LCD_REG MOVLW 'T' CALL LCD_DATOS MOVLW '.' CALL LCD_DATOS MOVLW 'D' CALL LCD_DATOS MOVLW 'E' CALL LCD_DATOS MOVLW 'S' CALL LCD_DATOS MOVLW 'E'

CALL LCD_DATOS MOVLW 'R' CALL LCD_DATOS MOVLW 'A' CALL LCD_DATOS MOVLW 'T' CALL LCD_DATOS MOVLW 'U' CALL LCD_DATOS MOVLW 'R' CALL LCD_DATOS MOVLW 'A' CALL LCD_DATOS MOVLW ':' CALL LCD_DATOS RETURN ;RUTIBA DE MULTIPLICACION MUL movwf movlw movwf movlw movwf movwf movwf movlw movwf bit rrf btfsc call call decfsz goto RETURN suma16 movf addwf btfsc incf movf addwf return desplaza16 bcf STATUS,0 MD,w PR_L STATUS,0 PR_H,f MD_H,w PR_H,f MR STATUS,0 suma16 desplaza16 CNT,1 bit MD d'10' MR 0X00 PR_H PR_L MD_H 0X08 CNT

rlf rlf return END

MD MD_H

Potrebbero piacerti anche