Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
31/08/2009 #1


algo hice mal pero no se que...
Estimados amigos, por google he llegado a este formo y encontre mucha ayuda, estoy cambiando de una programa que tenia en el 16F84 y para programarlo al 16F88, este progrmada es un secuencial para vehiculos de emergencia el cual lo puedo seleccionar los efectos con un switch seleccionador,he armado este programa con una base que saque de este foro pero al momento de simularlo en el proteus solo funciona el efecto1 y colocando la llave en 0x00. si me pueden ayudar estaria muy agradecido.

Código:
este es el programa 

title	"secuencial LED usando xtal interno"
	#define _version "0.01"

	list p=16f88, r=dec		;especificaciones del micro
#include <p16f88.inc>		; inclusion de archivos y registros

	__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _MCLR_ON & _LVP_ON & _INTRC_IO
	__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

	CBLOCK	H'20' ;se puede escribir en octal O'23' en binario B'101' y en ASCII 'a'
	d1
	d2
	d3
	i, j, k
	llave				;creo que aqui deberian guardarse los efectos seleccionados
	ENDC


	;*** VARIABLES PARA TODOS LOS BANCOS ***	
	; son 16 bytes en Bank0/1/2/3
	;*******************************************	
	CBLOCK	H'70'	;van desde H'70' hasta H'7F'
	;son Variables usadas en la subrutina INTERRUPCION
	RET		
	RET1	
	RET2	
	PDel0   
	PDel1	
	
	ENDC

	
	CBLOCK	H'A0' 	
	
	ENDC

	CBLOCK	H'110' 	
	ENDC
	
	;BANCO 3 son 80 BYTES, desde H'190' hasta H'1EF' 
	;y luego vienen 16 Bytes compartidos desde H'1F0' hasta H'1FF'
	CBLOCK	H'190' 	
	ENDC
	ORG 2100H	;posicion de memoria de la EEPROM
	DE "AAhola mundoAA"
	DE	"BB AA BB"


estado	equ	0x03	; Haciendo asignaciones
trisa	equ	0x05
trisb	equ	0x06	      
porta	equ	0x05
portb	equ	0x06
BANK0	MACRO
		BCF		STATUS,RP0		
		BCF		STATUS,RP1	
		BCF		STATUS,IRP		;Limpia el Bit de direccionamiento indirecto	
		ENDM


BANK1	MACRO
		BSF		STATUS,RP0		
		BCF		STATUS,RP1	
		BCF		STATUS,IRP		;Limpia el Bit de direccionamiento indirecto	
		ENDM 
BANK2	MACRO
		BCF		STATUS,RP0		
		BSF		STATUS,RP1
		BSF		STATUS,IRP		;Pone a 1 el Bit de direccionamiento indirecto		
		ENDM 

BANK3	MACRO
		BSF		STATUS,RP0		
		BSF		STATUS,RP1		
		BSF		STATUS,IRP		;Pone a 1 el Bit de direccionamiento indirecto
		ENDM 
PAGE0	MACRO
		BCF	PCLATH,3
		BCF	PCLATH,4
		ENDM 
	
PAGE1	MACRO
		BSF	PCLATH,3
		BCF	PCLATH,4
		ENDM	 


;********************************************
;**  PROGRAMA PRINCIPAL
;**  PAGE 0: 0x0000
;**
;**********************************************

reset	ORG		00
		CLRF	STATUS		;se asegura que este en el BANK0	
		CLRF    PCLATH    	;Se asegura que este en el PAGE0
		GOTO	inicio


		ORG	04	;Debera saltar a la subrutina de INTERRUPCION
PUSH	;Guarda los registros
		CALL	        INTERRUPCION
PULL  	;restaura los registros
		RETFIE  ;retorna de la interrupcion


;	PARTE PRINCIPAL DEL PROGRAMA

inicio	CALL 	config_xtal_interno
		CALL 	config_puertos		;configura los puertos


;	PARTE PRINCIPAL DEL PROGRAMA

swich   MOVF	porta,0		; carga w con el puerto A
        ANDLW   b'00001111' 	; retiene los 4 bits de interes (las llaves)
		MOVWF   llave	; y los guarda en llaves
        XORLW   0x01		; verifica si es el primer efecto
        BTFSC   estado,2	; si es así
        CALL    efect1		; lo llama y lo ejecuta
        MOVF    llave,0		; sino, carga llaves en w
        XORLW   0x02		; y verifica si es el segundo efecto
        BTFSC   llave,2		; si es así
        CALL    efect2		; lo llama y lo ejecuta
        MOVF    llave,0		; y así con los demás
        XORLW   0x04		; ya me aburrí
        BTFSC   estado,2	; como verás el resto es lo mismo
        CALL    efect3
        MOVF    llave,0
		XORLW	0x08
		BTFSC	estado,2
		CALL	efect4
		MOVF	llave,0
		GOTO    swich		; Comienza a revisar de nuevo

;======================== Efectos =========================

efect1	MOVLW b'10000000'
		MOVWF PORTB
		CALL clokon
		MOVLW b'11000000'
		MOVWF PORTB
		CALL clokon
		MOVLW b'11100000'
		MOVWF PORTB
		CALL clokon
		MOVLW b'11110000'
		MOVWF PORTB	
		CALL clokon
		MOVLW b'11111000'
		MOVWF PORTB
		CALL clokon
		MOVLW b'11111100'
		MOVWF PORTB	
	    CALL clokon
		MOVLW b'11111110'
		MOVWF PORTB
		CALL clokon
		MOVLW b'11111111'
		MOVWF PORTB	
		CALL clokon
		MOVLW b'01111111'
		MOVWF PORTB
		CALL clokon
		MOVLW b'00111111'
		MOVWF PORTB
		CALL clokon
		MOVLW b'00011111'
		MOVWF PORTB
		CALL clokon
		MOVLW b'00001111'
		MOVWF PORTB	
		CALL clokon
		MOVLW b'00000111'
		MOVWF PORTB
		CALL clokon
		MOVLW b'00000011'
		MOVWF PORTB	
	    CALL clokon
		MOVLW b'00000001'
		MOVWF PORTB
		CALL clokon
		MOVLW b'00000000'
		MOVWF PORTB	
		CALL clokon
        

efect2  CLRF    portb		
        BSF     portb,0		; (00000001)
        CALL    clokon
        BSF     portb,1		; (00000011)
        CALL    clokon
        BSF     portb,2		; (00000111)
        CALL    clokon
        BSF     portb,3		; (00001111)
        CALL    clokon
        BSF     portb,4		; (00011111)
        CALL    clokon
        BSF     portb,5		; (00111111)
        CALL    clokon
        BSF     portb,6		; (01111111)
        CALL    clokon
        BSF     portb,7		; (11111111)
        CALL    clokon
        BCF     portb,0		; (11111110)
        CALL    clokon
        BCF     portb,1		; (11111100)
        CALL    clokon
        BCF     portb,2		; (11111000)
        CALL    clokon
        BCF     portb,3		; (11110000)
        CALL    clokon
        BCF     portb,4		; (11100000)
        CALL    clokon
        BCF     portb,5		; (11000000)
        CALL    clokon
        BCF     portb,6		; (10000000)
        CALL    clokon
        ;RETURN			    ; a revisar nuevamente las llaves

efect3   BCF     portb,7		; (01111111)
        BCF     portb,0		; (01111110)
        CALL    clokon
        BCF     portb,6		; (00111110)
        BCF     portb,1		; (00111100)
        CALL    clokon
        BCF     portb,5		; (00011100)
        BCF     portb,2		; (00011000)
        CALL    clokon
        BCF     portb,4		; (00001000)
        BCF     portb,3		; (00000000)
        CALL    clokon
        CALL    clokon
        BSF     portb,3		; (00001000)
        BSF     portb,4		; (00011000)
        CALL    clokon
        BSF     portb,5		; (00111000)
        BSF     portb,2		; (00111100)
        CALL    clokon
        BSF     portb,6		; (01111100)
        BSF     portb,1		; (01111110)
        CALL    clokon
        BSF     portb,7		; (11111110)
        BSF     portb,0		; (11111111)
        CALL    clokon
 		BCF     portb,3		; (11110111)
        BCF     portb,4		; (11100111)
        CALL    clokon
        BCF     portb,5		; (11000111)
        BCF     portb,2		; (11000011)
        CALL    clokon
        BCF     portb,6		; (10000011)
        BCF     portb,1		; (10000001)
        CALL    clokon
        BCF     portb,7		; (00000001)
        BCF     portb,0		; (00000000)
        CALL    clokon
        
 
efect4	MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA ;retardo de 500mS
        CLRF  PORTB
        CALL  DEMORA
	   	MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
		CALL  DEMORA
		MOVLW B'00001111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
		CALL  DEMORA
		   
		MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
		MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
		MOVLW B'11110000'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA

		MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
		MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
		MOVLW B'11111111'
        MOVWF PORTB
        CALL  DEMORA
        CLRF  PORTB
        CALL  DEMORA
		
				
        ;RETURN


;=========================================
;	MANEJO DE LAS INTERRUPCION
;=========================================
INTERRUPCION	
				
clokon			MOVLW H'2'
				MOVWF RET
LOOP2			MOVLW H'90'
				MOVWF RET1
LOOP1			MOVLW H'90'
				MOVWF RET2
LOOP			DECFSZ RET2,F
				GOTO LOOP
				DECFSZ RET1,F
				GOTO LOOP1
				DECFSZ RET,F
				GOTO LOOP2
				RETURN

DEMORA      movlw     .100     
            movwf     PDel0    
PLoop1      movlw     .100      
            movwf     PDel1    
PLoop2      clrwdt              
PDelL1      goto      PDelL2         
PDelL2      goto      PDelL3         
PDelL3      clrwdt              
            decfsz    PDel1,  1
            goto      PLoop2   
            decfsz    PDel0,  1 
            goto      PLoop1    
PDelL4      goto      PDelL5         
PDelL5      goto 	  PDelL6         
PDelL6      goto      PDelL7         
PDelL7      clrwdt              
            return    


DELAY		MOVLW h'2'
			MOVWF RET
LOOP21		MOVLW h'75'
			MOVWF RET1
LOOP12		MOVLW h'86'
			MOVWF RET2
BLOOP		DECFSZ RET2,f
			GOTO BLOOP
			DECFSZ RET1,f
			GOTO LOOP12
			DECFSZ RET,f
			GOTO LOOP21
			return


;		Configuracion del XTAL Interno

config_xtal_interno
		BANKSEL	OSCCON
		MOVLW 	b'110'			;Oscilador a 4 MHz interno mirar pag 40 y 41 del manual 30487c
		MOVWF 	OSCCON	^ 0x080	
xtal_estable
		BTFSS	OSCCON ^ 0x080,IOFS	;Preguntando si ya se estabilizo
		GOTO	xtal_estable		;el cristal interno a 4 MHz se estabilizo?
		RETURN


config_puertos
	BANKSEL	ANSEL			;se pasa al BANCO 1
	CLRF 	ANSEL
	
	MOVLW	0x1F 	;Configura puertA como entrada 
	MOVWF	trisa

	MOVLW   b'00000000'	
    MOVWF   trisb		; y Al puerto B como salida

	;pone en 0 los pines de salida del micro
	BANKSEL	PORTA
	CLRF 	PORTA
	CLRF 	PORTB
	
	;salta al banco 0
	BANK0							
	RETURN

      end
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.