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
Última edición por un moderador: