TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: jluisruelas en 30 de Marzo de 2014, 04:33:52
-
amigos, soy nuevo en esto, tengo una duda que me esta volviendo loco y es que no se por que mi programa al ejecutar unas rutinas de tiempo este se reinicia, quiero hacer el debugg, pero no se como hacerlo la verdad y no se ingles, :oops: les pongo el codigo del porgrama
LIST P=16F877A
#INCLUDE <P16F877A.INC>
__CONFIG _CP_ALL & _CPD_ON & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
DATO EQU 0X21
VAR EQU 0X20
DATO1 EQU 0X22
DATO2 EQU 0X23
DATO3 EQU 0X24
DATO4 EQU 0X25
DATO5 EQU 0X26
DATO6 EQU 0X27
DATO7 EQU 0X28
DATO8 EQU 0X29
DATO9 EQU 0X2A
DATOA EQU 0X2B
DIR EQU 0X2C
C1 EQU 0X2D
ESTADO EQU 0X2E
INST EQU 0X2F
AUX EQU 0X30
AUX1 EQU 0X31
AUX2 EQU 0X32
AUX3 EQU 0X33
AUX4 EQU 0X34
BAND EQU 0X35
C2 EQU 0X36
PUERTO EQU 0X37
PIN EQU 0X38
ORG 0X00
GOTO MAIN
MAIN ORG 0X05
CLRF STATUS
CLRF PORTA
BCF STATUS,RP1 ;*******INICIA EN EL BANCO 1
BSF STATUS,RP0 ;***************************
MOVLW 0X06
MOVWF ADCON1
MOVLW B'11010000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'11011111'
MOVWF OPTION_REG
MOVLW B'10101111'
MOVWF TRISC
BCF TXSTA,BRGH ;pone bit BRGH=0 (velocidad baja)
MOVLW .19 ;valor para configurar 9600 Bauds
MOVWF SPBRG ;configura 9600 Bauds
BCF TXSTA,SYNC ;limpia bit SYNC (modo asíncrono)
BSF TXSTA,TXEN ;pone bit TXEN=1 (habilita transmisión)
BCF STATUS,RP0 ;*********REGRESA AL BANCO 0
CLRF PORTB
BSF RCSTA,SPEN ;pone bit SPEN=1 (habilita puerto serie)
BSF RCSTA,CREN ;Habilita recepción
CLRWDT
CLRF DIR
MOVLW 0X21
MOVWF FSR
MOVLW 0X02
MOVLW 0X20
MOVWF EEADR
CALL LEE
XORWF PORTB
CLRWDT
MOVLW 0X21
MOVWF EEADR
CALL LEE
ANDLW B'11001011'
XORWF PORTC
MOVLW 0X22
MOVWF EEADR
CALL LEE
ANDLW B'11000001'
XORWF PORTD
MOVLW 0X23
MOVWF EEADR
XORWF PORTE
BANKSEL PORTA
BSF PORTA,5
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
BCF PORTA,5
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
BSF PORTA,5
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
BCF PORTA,5
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
INICIO CALL RECIBE1
;*******************************************************
MOVLW "&"
SUBWF DATO,W
BTFSS STATUS,Z
GOTO INICIO
;*******COMPARA PARA FOCO1 DE COCINA*********************
CLRWDT
MOVF DATO1,W ;OBTIENE EL PUERTO
ANDLW 0X0F
MOVWF PUERTO
BTFSS DATO2,6 ;OBTIENE EL PIN
GOTO LED
MOVF DATO2,W
ANDLW 0X0F
MOVWF PIN
SWAPF PIN,F
GOTO LED1
LED MOVF DATO2,W
ANDLW 0X0F
MOVWF PIN ;**************
LED1 MOVLW "P" ;PREGUNTA SI ES UN PULSO
SUBWF DATO3,W
BTFSS STATUS,Z
GOTO FOCO
MOVF PUERTO,W ;SI ES PULSO, LO EJECUTA
MOVWF FSR
MOVF PIN,W
IORWF INDF
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
CALL TIEMPO
MOVF PIN,W
XORWF INDF
CLRWDT
GOTO INICIO
FOCO MOVLW "O" ;PREGUNTA SI SE DESEA ENCENDER
SUBWF DATO4,W
BTFSS STATUS,Z
GOTO FOCO1
MOVF PUERTO,W ;SI ES SI ENCIENDE EL APARATO
MOVWF FSR
MOVF PIN,W
IORWF INDF
CALL GUARDA1
GOTO INICIO
FOCO1 MOVF PUERTO,W
MOVWF FSR
MOVF PIN,W
XORLW 0XFF
ANDWF INDF
CALL GUARDA1
GOTO INICIO
;*******************************************************
;*******GUARDA CONTRASEÑA EN LA MEMORIA****
GUARDA
CLRWDT
MOVLW 0X22
MOVWF FSR
CLRF DIR
BCF STATUS,RP0 ;SE VA AL BANCO 2
BSF STATUS,RP1 ;****************
CLRF EEADR
CIC NOP
BCF STATUS,RP0 ;SE VA AL BANCO 2
BSF STATUS,RP1 ;****************
MOVF INDF,W
MOVWF EEDATA
CALL ESCRIBE
INCF EEADR,F
BCF STATUS,RP1
INCF FSR,F
INCF DIR,F
MOVLW 0X26
SUBWF FSR,W
BTFSS STATUS,Z
GOTO CIC
BSF PORTC,4
CALL TIEMPO
BCF PORTC,4
CALL TIEMPO
BSF PORTC,4
CALL TIEMPO
BCF PORTC,4
CALL TIEMPO
BSF PORTC,4
CALL TIEMPO
BCF PORTC,4
CALL TIEMPO
MOVLW "O"
MOVWF DATO
CALL ENVIA
RETURN
;**************************************
;******************************************
;*******ENVIA******************************
ENVIA
CLRWDT
BSF STATUS,RP0 ;banco 1
ESP BTFSS TXSTA,TRMT ;checa si el buffer de transmisión
GOTO ESP ;si está ocupado espera
BCF STATUS,RP0 ;regresa al banco 0
MOVF DATO,W ;rescata dato a enviar
MOVWF TXREG ;lo envía
RETURN
;******************************************
;******************************************
GUARDA1
CLRWDT
BCF STATUS,RP0 ;SE VA AL BANCO 2
BSF STATUS,RP1 ;****************
MOVLW 0X20
MOVWF EEADR
MOVF PORTB,W
MOVWF EEDATA
CALL ESCRIBE
MOVLW 0X21
MOVWF EEADR
BANKSEL PORTC
MOVF PORTC,W
BCF STATUS,RP0 ;SE VA AL BANCO 2
BSF STATUS,RP1 ;****************
MOVWF EEDATA
CALL ESCRIBE
MOVLW 0X22
MOVWF EEADR
BANKSEL PORTB
NOP
RETURN
;******************************************
;*******RUTINA DE COMPARACION**************
COMPARA
CLRWDT
CLRW
CALL LEE
MOVWF AUX
MOVLW 0X01
CALL LEE
MOVWF AUX1
MOVLW 0X02
CALL LEE
MOVWF AUX2
MOVLW 0X03
CALL LEE
MOVWF AUX3
MOVLW 0X04
CALL LEE
MOVWF AUX4
RETURN
;*************************************************
;*******LEE EN LA EEPROM***************************
LEE
CLRWDT
BSF STATUS,RP1 ;SE VA AL BANCO 2
BCF STATUS,RP0 ;***************
MOVWF EEADR
BSF STATUS,RP0 ;SE VA AL BANCO 3
BCF EECON1,EEPGD
BSF EECON1,RD
NOP
NOP
BCF STATUS,RP0 ;REGRESA AL BANCO 2
MOVF EEDATA,W
BCF STATUS,RP1 ;REGRESA AL BANCO 0
NOP
RETURN
;**************************************************
;*******ESCRIBE EN LA EEPROM***********************
ESCRIBE
CLRWDT
NOP
BSF STATUS,RP0 ; SE VA AL BANCO 3
BSF STATUS,RP1 ;*****************
BSF EECON1,WREN
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
EQ1 BTFSC EECON1,WR
GOTO EQ1
BCF EECON1,WR
BCF STATUS,RP0 ;REGRESA AL BANCO 2
NOP
RETURN
;**************************************************
TIEMPO
CLRF TMR0
CLRF C1
CLRF C2
Q1 BCF INTCON,T0IF
Q2 BTFSS INTCON,T0IF
GOTO Q2
INCF C1,F
CLRWDT
MOVLW .255
SUBWF C1,W
BTFSS STATUS,Z
GOTO Q1
CLRF C1
INCF C2,F
CLRWDT
MOVLW .16
SUBWF C2,W
BTFSS STATUS,Z
GOTO Q1
RETURN
;**************************************************
RECIBE1
RECIBE1
E4 CLRWDT
BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E4 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO ;lo almacena en dato
E5 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E5 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO1 ;lo almacena en dato
E6 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E6 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO2 ;lo almacena en dato
E7 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E7 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO3 ;lo almacena en dato
E8 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E8 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO4 ;lo almacena en dato
E9 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E9 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO5 ;lo almacena en dato
E10 BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO E10 ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF DATO6 ;lo almacena en dato
RETURN
END
-
alguna ayudita?